こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

php ログインフォーム作成

サーバーはさくらインターネットのプレミアムプラン
phpのバージョンは 5.2.12
データベースのバージョンはMySQL 5.1
です。

<?php
//DB設定
$dbhost = 'mysql***.db.sakura.ne.jp';
$dbuser = 'test';
$dbpass = 'test';
$dbname = 'members';

$ok_flg = 0;
$msg = "";

//DB接続
$link = mysql_connect($dbhost,$dbuser,$dbpass);

//使用するDBを選択
$conn = mysql_select_db($dbname,$link);

if (!$conn) {
die('Connect Error (' . mysql_connect_errno() . ') ' . mysql_connect_error());
}

if (count($_POST) != 0) {
$sql = sprintf("SELECT * FROM member WHERE id=? AND password=?");
$result = mysql_query($sql);

---- この先がわかりません ----
*****************************************
*****************************************
*****************************************
---- ここまでがわかりません ----

if ($count == 1) {
$ok_flg = 1;
} else {
$msg = '<span style="color:#ff0000;">ユーザーIDまたはパスワードが違います。</span>';
}
}

if ($ok_flg == 0) {

echo <<< EOL
$msg
<form method="post" action="">
ユーザーID: <input name="id" />
パスワード: <input name="password" type="password" />
<input type="submit" value="ログイン" />
</form>
EOL;
} else {
session_start();

$_SESSION["login_flg"] = 1;
header ("location: ./");
}

// MySQLへの接続を閉じる
mysql_close($link);

?>

********の場所で困っています。
この先はどのように記述したらよろしいでしょうか?

お分かりの方がいらっしゃいましたらご教授いただければと思います。

投稿日時 - 2010-03-11 15:44:53

QNo.5743557

すぐに回答ほしいです

質問者が選んだベストアンサー

>ログインしたときにmember.phpに***さんこんにちはなどを表示させるようにするには
IDを表示するだけでいいなら、SESSIONに保存しておいて、後はそれを表示するだけですね。
以下のような感じ。
--login.php内--
session_start();
$_SESSION['ok_flg'] = 1;
$_SESSION['uid'] = $_POST['id'];※1
//メンバーページに画面遷移
header("Location: member.php");
-----
※1で$uidではなく、$_POST['id']を使っているのは、$uidはmysql_real_escape_stringを通って変換されてしまっている可能性があるため。

それで、member.php内で、session_start以降の場所で
echo $_SESSION['uid'];
とすれば、とりあえずIDが表示されます。

HTML内に埋め込むなら、以下のような感じです。
-----
<html>
<body>
ようこそ、<?PHP echo $_SESSION['uid']; ?>様<br />
</body>
</html>
-----
menber.phpのHTML出力に『echo <<< EOL』の方法を使用している場合は以下のような感じです。
-----
echo <<< EOL
<html>
<body>
ようこそ、{$_SESSION['uid']}様<br />
</body>
</html>
EOL;
-----

~~~~~
IDを表示させるだけではなく、データベース内から『ユーザー名』の項目を取得して出力したい、という事なら以下のようになります。
(id=abc/password=123/user_name=山田太郎 のようにデータベースが設計されている場合)

//セッションに接続
session_start();

//セッションに保存された変数を確認
if ($_SESSION['ok_flg']!=1){
//セッションに変数が保存されていないため、URLを直接打ち込んだと判断できる
//ログインページに画面遷移
header("Location: ./login.php");
//念のため終了
exit;
}

//セッションに"uid"がいるかどうか確認 uidが居るかどうかで判断できるので ok_flgの処理をなくしても良い
if (isset($_SESSION['uid'])){
//ログインページに画面遷移
header("Location: ./login.php"); //
//念のため終了
exit;
}

//DB接続
$link = mysql_connect($DB_HOST,$DB_USER,$DB_PASS);

if (!$link) {
die('Connect Error (' . mysql_connect_errno() . ') ' . mysql_connect_error());
exit;
}

//使用するDBを選択
mysql_select_db($DB_NAME,$link);

//*SQLインジェクション対策
$uid = mysql_real_escape_string($_SESSION['uid'], $link);

//SQL文を作成する
//*SQLインジェクション対策を施したユーザー入力を、SQL文章に埋め込む ※2
$query = sprintf("SELECT user_name FROM member WHERE id='%s' ",$uid);

// クエリの実行
$result = mysql_query($query, $link);

//エラーが発生していないか確認
if ($result) {
//行を取得
$row = mysql_fetch_assoc($result);

//行が取得できたか確認
if ($row){
//行が取得できた場合、ユーザー名を取得 ※2
$uname = $row['user_name'];
}
}
※2 データベース内の項目(フィールド名)が、『user_name』であると仮定しています。
実際の値に変更してください。(2カ所)

あとは、先の$_SESSION['uid']同様に出力するだけです
------
<body>
ようこそ、<?PHP echo $uname; ?>様<br />
</body>
------
echo <<< EOL
<body>
ようこそ、{$uname}様<br />
</body>
EOL;

投稿日時 - 2010-03-15 08:09:50

補足

ご回答有難う御座います。

こちらの環境に合わせて記述させていただいたのですが、なにも表示されませんでした。

また、DBでの登録は
first_name = 山田
last_name = 太郎
としております。

<?php
//セッションに接続
session_start();

if ($_SESSION['ok_flg']!=1) {
//ログインページに画面遷移
header("Location: ./login.php");
exit;
}
//セッションに保存された変数を確認
if (isset($_SESSION['uid'])) {
//ログインページに画面遷移
header("Location: ./login.php");
exit;
}

//DB設定



//DB接続
$link = mysql_connect($DB_HOST,$DB_USER,$DB_PASS);
if (!$link) {
die('Connect Error (' . mysql_connect_errno() . ') ' . mysql_connect_error());
exit;
}
//使用するDBを選択
mysql_select_db($DB_NAME,$link);

//*SQLインジェクション対策
$uid = mysql_real_escape_string($_SESSION['uid'], $link);
//SQL文を作成する
//*SQLインジェクション対策を施したユーザー入力を、SQL文章に埋め込む
$query = sprintf("SELECT first_name,last_name FROM member WHERE id='%s' ",$uid);
// クエリの実行
$result = mysql_query($query, $link);
//エラーが発生していないか確認
if ($result) {

//行を取得
$row = mysql_fetch_assoc($result);
//行が取得できたか確認
if ($row) {
//行が取得できた場合、ユーザー名を取得
$name = $row['first_name'];
}
// MySQLへの接続を閉じる
mysql_close($link);
}
?>

<html>
<body>
こんにちは<?php print $name; ?>さん
</body>
</html>

といたしました。

ただ
//行が取得できた場合、ユーザー名を取得
$name = $row['first_name'];
}
の部分にて['last_name']も表示させたいのですが、記述がわからなくて・・・

login.phpには何も記述しなくてもよろしいのでしょうか?

投稿日時 - 2010-03-15 23:38:06

お礼

すみません。
できました。

本当に有難う御座います。
大変お世話になりました。
また、何かあればぜひ宜しくお願いいたします。

本当に長い間有難う御座いました。

投稿日時 - 2010-03-16 00:48:26

ANo.11

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(11)

ANo.10

>8の補足にも表記いたしましたが、スペルが直しても「ユーザーIDまたはパスワードが違います。」が常に表示されてしまいます。
常にって、初回ページを開いたときでも表示されてるってのが問題なんですね。
※$uid、$upassに直したら、無事ログインはできるようになったという事ですね。

トップページなどにID、パスワード入力できる形のサイト構成だと思ってたので、補足等に書かれていた事を読み違えていました。
※そこで入力間違いをした際にのみ、再入力のフォームがでるパターンの設計かなと。

で、あればDB接続位置なども考慮して変更すると、以下のような感じです。

//POSTから取得したユーザー入力を受け取る
$uid = $_POST['id'];
$upass = $_POST['password'];

//ユーザー入力が空白かどうかを判断、両方共に空白の場合DBに接続しない(ユーザーの存在確認をしない)。
if ($uid != "" || $upass != "")
//DB接続
$link = mysql_connect($DB_HOST,$DB_USER,$DB_PASS);

if (!$link) {
die('Connect Error (' . mysql_connect_errno() . ') ' . mysql_connect_error());
exit;
}

//使用するDBを選択
mysql_select_db($DB_NAME,$link);

//*SQLインジェクション対策
$uid = mysql_real_escape_string($uid, $link);
$upass = mysql_real_escape_string($upass, $link);

//SQL文を作成する
//*SQLインジェクション対策を施したユーザー入力を、SQL文章に埋め込む
$query = sprintf("SELECT count(*) as cnt FROM member WHERE id='%s' AND password='%s'",$uid,$upass);

// クエリの実行
$result = mysql_query($query, $link);

//エラーが発生していないか確認
if (!$result) {
//行を取得
$row = mysql_fetch_assoc($result);

//行が取得できたか確認
if (!$row){

//行が取得出来ていた場合、ユーザー数を取得する
$count = $row['cnt'];

//ユーザー数を確認
if ($count == 1) {
//セッションに接続
session_start();

$_SESSION['ok_flg'] = 1;

//メンバーページに画面遷移
header("Location: member.php");
exit;

} else {
$msg = '<span style="color:#ff0000;">ユーザーIDまたはパスワードが違います。</span>';
}
} else {
$msg = '<span style="color:#ff0000;">データベースエラー、行が取得できません。</span>';
}

} else {
$msg = '<span style="color:#ff0000;">データベースエラー、SQLが失敗しました。</span>';
}
// MySQLへの接続を閉じる
mysql_close($link);
}

echo <<< EOL
$msg
<form method="post" action="login.php">
ユーザーID: <input name="id" type="text" />
パスワード: <input name="password" type="password" />
<input type="submit" value="ログイン" />
</form>
EOL;



※ユーザーIDとパスワードが共に空白の場合(初回表示時がそれに当たる)、メッセージは出しません
ただ、何も入力せずにログインボタンを押した際に、『未入力です』メッセージが出せません。
それを出すためには、もうちょっと工夫が必要です。
※ユーザーID、パスワードの一方を入力された場合も、『未入力です』は出ませんが、『ユーザーIDまたはパスワードが違います。』は表示されます。

投稿日時 - 2010-03-14 15:55:17

補足

最後にもうひとつご質問してもよろしいでしょうか?

ログインしたときにmember.phpに***さんこんにちはなどを表示させるようにするにはどうしたらよろしいのでしょうか?

本当に質問ばかりで申し訳ないのですが、できればご教授いただければと思います。

投稿日時 - 2010-03-14 17:06:33

お礼

ご回答有難う御座います。

お忙しい中、ご教授いただきまして本当に有難う御座います。
とても言葉にならないぐらい感謝しております。

これからはご指摘いただいたように掲示板やメールフォームなどを作れるように勉強していきます。

本当に有難う御座いました。

投稿日時 - 2010-03-14 16:34:00

ANo.9

>8
同じように、$uid,$idもスペルミスしてますね。

投稿日時 - 2010-03-14 13:01:35

補足

ご指摘有難う御座います。

>8の補足にも表記いたしましたが、スペルが直しても「ユーザーIDまたはパスワードが違います。」が常に表示されてしまいます。

投稿日時 - 2010-03-14 14:13:41

ANo.8

失礼
#7の補足を見ていて気がついた

//POSTから取得したユーザー入力を受け取る
$uid = $_POST['id'];
$upass = $_POST['password'];
~~~~~~~

//*SQLインジェクション対策
$uid = mysql_real_escape_string($id, $link);
$upass = mysql_real_escape_string($pass, $link);
                      ~~~~~~~

$upassと$pass、スペルミスをしているではないか。
そりゃ駄目だ。

投稿日時 - 2010-03-14 04:01:09

補足

ご回答有難う御座います。

スペルが違うというのは

//POSTから取得したユーザー入力を受け取る
$uid = $_POST['id'];
$upass = $_POST['password'];
~~~~~~~

//*SQLインジェクション対策
$uid = mysql_real_escape_string($id, $link);
$upass = mysql_real_escape_string($pass, $link);


上記を下記のように変更したのですが、


//POSTから取得したユーザー入力を受け取る
$uid = $_POST['id'];
$upass = $_POST['password'];

//*SQLインジェクション対策
$uid = mysql_real_escape_string($uid, $link);
$upass = mysql_real_escape_string($upass, $link);

//SQL文を作成する
$query = sprintf("SELECT count(*) as cnt FROM member WHERE id='%s' AND password='%s'",$uid,$upass);

でよろしいのでしょうか?

こちらを何度か変更(uを消してみたり)したのですが、何も変わらず常に「ユーザーIDまたはパスワードが違います。」
が表示されてしまします。

投稿日時 - 2010-03-14 14:09:19

ANo.7

いくつか原因は考えられます。
単純な事で言えば、DB内に入力したユーザーID、パスワードでデータが登録されていないという事が考えられます。
ユーザーID、パスワード共に、大文字/小文字が区別されます。また、全角/半角も当然区別されます。
DB内のデータが、入力したものと同一か否か、ユーザーID欄とパスワード欄をひっくり返して登録していないか、などを確認してください。

もしくは、ユーザーID、パスワードが共に一致するユーザーが複数登録されているのかも知れません。
if ($count == 1) {
として検査しているため、同じユーザーID、パスワードを持つユーザーデータが複数ある場合、登録されていないと判断されてしまいます。
if (0 < $count) {
と判定した場合、複数登録されていても問題はありません。
※後々仕様上の大問題が発生する可能性が残ってしまいますが。

上記で解決できなかった場合、
if ($row){
上記の直下に
var_dump($row);
として、どのような値が返っているかを確認してください。
※var_dumpとは、変数の中身を判り易く表示してくれる主にデバッグ用途で使われる関数です。

投稿日時 - 2010-03-14 00:51:44

補足

有難う御座います。

//POSTから取得したユーザー入力を受け取る
$uid = $_POST['id'];
$upass = $_POST['password'];

//*SQLインジェクション対策
$uid = mysql_real_escape_string($id, $link);
$upass = mysql_real_escape_string($pass, $link);

の部分を変えてみました。

その結果

ローカルでもサーバーでも共に
login.phpではフォームのところに「ユーザーIDまたはパスワードが違います。」とまだ表示されていました。
一応ログインはでき、member.phpが表示されるようになりました。

DB内のユーザーIDとパスワードにつきましては問題ないかと思います。
まだ、テスト的に1行しかいれておりません。

var_dump($row);
を使用してみたところ
array(1) { ["cnt"]=> string(1) "0" } のように表示されております。

投稿日時 - 2010-03-14 02:30:08

ANo.6

失礼しました、元の私が書いたコードの条件式が間違ってましたね。


//エラーが発生していないか確認
if (!$result) {

//行が取得できたか確認
if (!$row){


上記それぞれは、!(NOT)にしてはいけませんね。

↓ !を外す
//エラーが発生していないか確認
if ($result) {

//行が取得できたか確認
if ($row){

投稿日時 - 2010-03-13 20:07:45

補足

ご回答有難う御座います。

上記の内容のように「!」はずしたのですが、今度は「ユーザーIDまたはパスワードが違います。」とういのが常にフォームのところに表示されてしまいます。

投稿日時 - 2010-03-13 23:12:59

ANo.5

よく見ると
SELECT count(*) as 『count』 FROM member WHERE id='%s' AND password='%s'
上記の、2つ目のcount部分、countは予約語ではないか。
こりゃダメだ。

↓のように、ふたつ目のcountは別の名前に変更。
SELECT count(*) as cnt FROM member WHERE id='%s' AND password='%s'

それに合わせて、以下の個所を変更の必要がある
$count =row['count'];

$count =row['cnt'];

member.phpの処理等入れるために、結構大幅にさわってます。
~~~~~~
//エラーが発生していないか確認
if (!$result) {
//行を取得
$row = mysql_fetch_assoc($result);
//行が取得できたか確認
if (!row){
//行が取得出来ていた場合、ユーザー数を取得する
$count =row['cnt'];
//ユーザー数を確認
if ($count == 1) {
//セッションに接続 ※1
session_start();
//セッションにログイン済みを設定
$_SESSION['ok_flg']=1;
//メンバーページに画面遷移 ※2
header("Location: ./member.php");
//念のため終了しておく
exit;
} else {
$msg = '<span style="color:#ff0000;">ユーザーIDまたはパスワードが違います。</span>';
}
}else{
$msg = '<span style="color:#ff0000;">データベースエラー、行が取得できません。</span>';
}
}else{
$msg = '<span style="color:#ff0000;">データベースエラー、SQLが失敗しました。</span>';
}

//※ログイン処理が成功している場合、ここには来ません

echo <<< EOL
$msg
<form method="post" action="./login.php"> <!--自分自身にデータ送信 ※3-->
ユーザーID: <input name="id" />
パスワード: <input name="password" type="password" />
<input type="submit" value="ログイン" />
</form>
EOL;


-----------------
member.phpの冒頭に以下のコードが必要 ※4

//セッションに接続
session_start();

//セッションに保存された変数を確認
if ($_SESSION['ok_flg']!=1){
//セッションに変数が保存されていないため、URLを直接打ち込んだと判断できる
//ログインページに画面遷移
header("Location: ./login.php"); //※3
//念のため終了
exit;
}


※1 本当は、PHPコードが開始された直後に行う方が良い
※2 ユーザー入力が正しいと確認できた後で、メンバーページにアクセスできるようにする。
その為に、header Locationを送信して、リダイレクトさせるように作る
※3 ログイン画面(ユーザーID、パスワードを入力する画面)を、login.phpである場合
違う場合は適切な値に変更する(2カ所)
※4 ログイン画面でユーザー認証ができた事を保存しているため、その情報(認証済フラグ)を確認して、もし認証済でなかった場合にはログインページに飛ばす処理
だから、member.php以外にも、ログイン済みユーザーしかアクセスできないページではすべてのページで、この確認処理が必要になる。


さてさて、こういっちゃ悪いがやっぱりまだ技量不足のようですね。
誰しも最初は技量不足なのだから別に責めはしませんが、
PHPについて、DBについて、サイト設計について。セッション管理、リダイレクトなど。
一度に複数の事を理解しなければならず、パニックになっている気がします。

できれば、カウンターや掲示板、おみくじなどをPHP単体で作成することから始める事をお奨めします。
とりあえず、PHPについてパニくらない程度に覚えて、次にPHPとDBを使って、掲示板や日記帳、蔵書管理システムなどを作って。
その後で、今作っている会員サイトに戻った方がいいです

投稿日時 - 2010-03-13 09:22:58

補足

お忙しい中ご回答有難う御座います。
ご教授いただきました、コードを追記し、下記のようなコードにいたしました。

------------------------------------------------------------------------
//DB接続
$link = mysql_connect($DB_HOST,$DB_USER,$DB_PASS);

if (!$link) {
die('Connect Error (' . mysql_connect_errno() . ') ' . mysql_connect_error());
exit;
}

//使用するDBを選択
mysql_select_db($DB_NAME,$link);

//POSTから取得したユーザー入力を受け取る
$uid = $_POST['id'];
$upass = $_POST['password'];

//*SQLインジェクション対策
$uid = mysql_real_escape_string($id, $link);
$upass = mysql_real_escape_string($pass, $link);

//SQL文を作成する
//*SQLインジェクション対策を施したユーザー入力を、SQL文章に埋め込む
$query = sprintf("SELECT count(*) as cnt FROM member WHERE id='%s' AND password='%s'",$uid,$upass);

// クエリの実行
$result = mysql_query($query, $link);

//エラーが発生していないか確認
if (!$result) {
//行を取得
$row = mysql_fetch_assoc($result);

//行が取得できたか確認
if (!$row){

//行が取得出来ていた場合、ユーザー数を取得する
$count = $row['cnt'];

//ユーザー数を確認
if ($count == 1) {
//セッションに接続
session_start();

$_SESSION['ok_flg'] = 1;

//メンバーページに画面遷移
header("Location: member.php");
exit;

} else {
$msg = '<span style="color:#ff0000;">ユーザーIDまたはパスワードが違います。</span>';
}
} else {
$msg = '<span style="color:#ff0000;">データベースエラー、行が取得できません。</span>';
}

} else {
$msg = '<span style="color:#ff0000;">データベースエラー、SQLが失敗しました。</span>';
}

echo <<< EOL
$msg
<form method="post" action="login.php">
ユーザーID: <input name="id" type="text" />
パスワード: <input name="password" type="password" />
<input type="submit" value="ログイン" />
</form>
EOL;

// MySQLへの接続を閉じる
mysql_close($link);

------------------------------------------------------------------------

これで間違いはないでしょうか?

しかし、これで記述しローカルとサーバーにアップすると
「データベースエラー、SQLが失敗しました。」が常に表示されてしまい、ログインIDとパスワードを入力してもmember.phpに飛びません。

ご指摘有難う御座います。
自分でも感じているとおり技量不足なのもわかっていますし、知識不足なのもわかています。
ただこのページだけはご教授いただいておりますし、完成させたいと思っております。

誠に自分勝手ではございますが、このページの完成まではご教授いただければと思います。

投稿日時 - 2010-03-13 16:56:00

ANo.4

コードを直して、コメント等入れたんで読んでください。
元のコードを生かしてるんで、たぶん読めるでしょう

以下のオンラインマニュアルをブックマーク、または、ダウンロード版を取得しておく事を強く勧めます
http://www.php.net/manual/ja/
http://www.php.net/download-docs.php

以下は、少しでも判りやすいように冗長な書き方をしています

~~~~
DB接続等は省略
~~~~

//POSTから取得したユーザー入力を受け取る ※1
$uid = $_POST['id'];
$upass = $_POST['password'];

//ユーザー入力を、SQLとして安全な形に成形する
//*SQLインジェクション対策
$uid = mysql_real_escape_string($uid, $link);
$upass = mysql_real_escape_string($upass, $link);

//SQL文を作成する
//*SQLインジェクション対策を施したユーザー入力を、SQL文章に埋め込む ※2
$query = sprintf("SELECT count(*) as count FROM member WHERE id='%s' AND password='%s'",$uid,$upass);

// クエリの実行
$result = mysql_query($query, $link);

//エラーが発生していないか確認
if (!$result) {
//行を取得
$row = mysql_fetch_assoc($result);
//行が取得できたか確認
if (!row){
//行が取得出来ていた場合、ユーザー数を取得する
$count =row['count'];
}
}

//ユーザー数を確認
if ($count == 1) {
$msg = '認証OK';
$ok_flg = 1;
} else {
$msg = '<span style="color:#ff0000;">ユーザーIDまたはパスワードが違います。</span>';
}

※1 元のプログラムコードは、これを受け取っていないので意味をなさない
※2 mysql_queryを使用するならこのように書くべし、元質問内のクエリーで『?』になっているのは、おそらくPEARのMDB2(or DB)の、プレースホルダ機能を使用したサンプルで書かれていた内容が混じったものと推測されます。
元の質問のコードでsprintfを使っていたのは、別のサンプルコードではおそらく上記のように埋め込みをしていたはず。

投稿日時 - 2010-03-12 02:30:18

補足

お忙しい中ご回答有難うございます。

上記のコードを記入いたしましたが、
if ($ok_flg == 0) {
echo <<< EOL
$msg
<form method="post" action="./member.php">
ユーザーID: <input name="id" />
パスワード: <input name="password" type="password" />
<input type="submit" value="ログイン" />
</form>
EOL;
} else {
session_start();
$_SESSION["login_flg"] = 1;
header ("location: ./");
}
の部分にて記述がおかしいのかわかりませんが、フォームは一応表示されるのですが、常に「ユーザーIDまたはパスワードが違います。」と表示されています。

また、ログイン後のページをmember.phpとしているのですがフォームにてデータベースに登録していないid,passwordを入力してもmember.phpが表示されてしまいます。

もうひとつですが、member.phpに直接アクセスしてもフォームページが表示されるにはどうしたらよろしいのでしょうか?

参考サイトを拝見させていただいてもわけがわからず途方に暮れています。

度重なるご質問で申し訳ないのですが、ご教授いただければと思います。

投稿日時 - 2010-03-12 17:39:43

ANo.3

>$sql = sprintf("SELECT * FROM member WHERE id=? AND password=?");
>$result = mysql_query($sql);

SQLについて、よくわかられていないと見受けられます。
プレースホルダと、sprintfを使ってプレースホルダのように使うというあたりで、ゴチャゴチャになってしまっているようです。※上記引用部分。
複数の(サイトなどからの)サンプルを、よくわからずに混ぜてしまったのではないかという気がします。

リンク先は、SQLの説明としてかなり判り易く書かれていますのでお奨めします。

※できればSQLについて書かれた書籍などを読むことをお奨めします。

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3sql.htm

投稿日時 - 2010-03-11 21:20:10

補足

ご回答有難う御座います。
いくつかのサイトと参考サイトを拝見させていただきましたが、確かに混ぜて使用していたと思います。

多少コードを編集いたしました。
$link = mysql_connect($DB_HOST,$DB_USER,$DB_PASS);
mysql_select_db($DB_NAME,$link);
if (!$link) {
die('Connect Error (' . mysql_connect_errno() . ') ' . mysql_connect_error());
}
if (count($_POST) != 0) {
$result = mysql_query("SELECT count(*) as count FROM member WHERE id=? AND password=?", $link);
$count = mysql_num_rows($result);
echo "$count \n";
if ($count == 1) {
$msg = '認証OK';
$ok_flg = 1;
} else {
$msg = '<span style="color:#ff0000;">ユーザーIDまたはパスワードが違います。</span>';
}
}

ここまでは見よう見真似で書いたのですが、間違っているところもしくは足りないところがありましたらご教授いただけないでしょうか?

投稿日時 - 2010-03-11 23:13:18

ANo.2

こんばんは。
私もPHP勉強中の初心者故、自信は全くありませんが…
if ($count == 1) {
$ok_flg = 1;
}
の部分で$countが1の場合はログインフラグを立てるとされているので…
「入力されたIDとパスワードに一致する行が1ならばログインを許可する」
という意味かと思います。

なので
$result = mysql_query($sql);
の直後に
$count = mysql_num_rows();
と追記して、$countにSQLで取得した行数を代入してみてはいかがでしょうか?

投稿日時 - 2010-03-11 19:55:47

補足

ご回答有難う御座います。

追記させていただきました。
$result = mysql_query($sql);の後に
$count = mysql_num_rows($sql);を追記いたしました。

いくつかサイトを拝見させていただいたのですが、
$count = mysql_num_rows($sql);の後にはecho "$count \n";が記載されていました。

その後にif ($count == 1) {ときていますが何か足りないような気もするのですが・・・

参考サイトもしくは追記コード等が御座いましたら、ご教授いただけないでしょうか?

投稿日時 - 2010-03-11 22:45:17

ANo.1

>SELECT * FROM member WHERE id=? AND password=?

のところを

SELECT count(*) as count FROM member WHERE id=? AND password=?
とかにしてみては?

投稿日時 - 2010-03-11 16:23:57

お礼

ご回答有難うございます。

>SELECT count(*) as count FROM member WHERE id=? AND password=?
に記述を変更してみました。
何も変わらなかったのです。

*****の部分はクエリの部分だと思ったのですが、記述しなくてもよろしいのでしょうか?

初心者のため何も分からず申し訳ありませんが、宜しくお願い致します。

投稿日時 - 2010-03-11 17:06:11

あなたにオススメの質問