PHPについて質問です。

現在IDとPWを入力した後にボタンを押し会員かどうかという判定を行っています。

$sql=mysql_query("SELECT * FROM ID_PW WHERE ID='".$_SESSION["id"]."' and PW = '".$_SESSION["pw"]."'");

上のようにSESSIONを使用してデータの照合を行っています。
$sqlを条件分岐の判定に使用したいのですが

if($sql){header('Location:kounyuu_2.php');}else{header('Location:kounyuu_error.php');}

SELECT命令で値(行数)をきちんと抽出できた場合に条件分岐します。という風にするにはどのように上の命令文を変えればよろしいでしょうか?
大変お手数をおかけしますが分かるかたおりましたらご回答よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/04/07 11:33:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:snufkinski No.3

回答回数41ベストアンサー獲得回数11

ポイント30pt

mysql_num_rows関数で結果の行数を取得できます。

あえて一行で書くなら、

<?php
<略>
if(mysql_num_rows($sql)){header('Location:kounyuu_2.php');}else{header('Location:kounyuu_error.php');}
<略>
?>

結果における行の数を得る - PHPプロ!マニュアル

id:aiomock

ご回答ありがとうございます。

2010/04/07 11:25:26

その他の回答2件)

id:HALSPECIAL No.1

回答回数407ベストアンサー獲得回数86

ポイント30pt

こちらでいかがでしょうか?

$result=mysql_query("SELECT * FROM ID_PW WHERE ID='".$_SESSION["id"]."' and PW = '".$_SESSION["pw"]."'");

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

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

また、SQLインジェクション対策として、SQLにセットするパラメータは適宜

mysql_real_escape_string 等でサニタイズしてくださいね。

http://phpspot.net/php/man/php/function.mysql-real-escape-string...


それと、気になったのは、ログインの処理って、普通はリクエストのパラメータで判断するんじゃないんですか?

ログイン前に、ユーザIDのパスワードがセッション変数に入っちゃってるんでしょうか。

id:aiomock

ご回答ありがとうございます。

回答とても勉強になりました。今回の処理ではログイン前にユーザーIDのパスワードがセッションの変数に入ります。

2010/04/07 11:33:01
id:taramonera No.2

回答回数79ベストアンサー獲得回数5

ポイント27pt

mysql_num_rows()で、取得できた行数をチェックすればよいと思います。


if(mysql_num_rows($sql) > 0){

  header('Location:kounyuu_2.php');

}else{

  header('Location:kounyuu_error.php');

}

id:aiomock

ご回答ありがとうございます。

2010/04/07 11:25:21
id:snufkinski No.3

回答回数41ベストアンサー獲得回数11ここでベストアンサー

ポイント30pt

mysql_num_rows関数で結果の行数を取得できます。

あえて一行で書くなら、

<?php
<略>
if(mysql_num_rows($sql)){header('Location:kounyuu_2.php');}else{header('Location:kounyuu_error.php');}
<略>
?>

結果における行の数を得る - PHPプロ!マニュアル

id:aiomock

ご回答ありがとうございます。

2010/04/07 11:25:26
  • id:snitch
    そのコードでは
    pwに
    >>
    ' or '1' = '1
    <<
    が入力されると誰でも会員になりすませてしまうと思われます。
    SQL Injectionです。


    IPAからも「安全なSQLの呼び出し方」の資料を公開していますので参考にされたほうが
    よいかと思われます。
    http://www.ipa.go.jp/security/vuln/documents/website_security_sql.pdf

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません