- ベストアンサー
変数の比較
<FORM action="<?php echo $PHP_SELF; ?>" method="POST" enctype="application/x-www-form-urlencoded"> <INPUT TYPE="HIDDEN" NAME="action" VALUE="post"> ユーザーID<INPUT TYPE="TEXT" NAME="u_id" SIZE="12"> パスワード<INPUT TYPE=password NAME="passwd" SIZE="12"> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="認証スタート"> <?php $DBSERVER ="hogehoge"; $DBUSER ="hogehoge"; $DBNAME ="hogehoge"; $DBPASSWORD ="hogehoge"; $con = mysql_connect( $DBSERVER , $DBUSER, $DBPASSWORD ); $selectdb = mysql_select_db($DBNAME,$con); if( $_POST['action'] == "post" ) { $id = $_POST['u_id']; $pass = $_POST['passwd']; $rst = mysql_query( "select * from UserInfo where name = '$id'", $con); print "<BR>"; print $id."<BR>"; print $pass."<BR>"; while( $col = mysql_fetch_row($rst) ) { print "<BR>"; print $col[0]."<BR>"; print $col[1]."<BR>"; print $col[2]."<BR>"; } } if( $pass == $col[2] ) { print "<BR>"; print "パスの一致<BR>"; }else{ print "パスが違います<BR>"; } ?> </FORM> 未だに判りません。 if( $pass == $col[2] )で 値が一緒でも、そうじゃなくても "パスの一致"が表示されます。 $pass = $_POST['passwd']; ちゃんと↑ので値は取得出来ているのは確認できており print $col[2]."<BR>"; で$passと違う文字列が入っていることも確認しましたが、パスの一致が表示されます。 再度の質問ですが、かなり困っています。 御教授お願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
if( $pass == $col[2] ) の直前で print $pass ."==" .$col[2]; を出力してみてください。 何が表示されますか? >$pass = $_POST['passwd']; >ちゃんと↑ので値は取得出来ているのは確認できており >print $col[2]."<BR>"; >で$passと違う文字列が入っていることも確認しましたが、パスの一致が表示されます。 コレはどこで出力しましたか? if( $pass == $col[2] ) の直前ですか? あと、 while( $col = mysql_fetch_row($rst) ) で回すと最後の値だけ $col に入るのであんまり意味がないような・・・ だったら select * from UserInfo where name = '$id' and pass = '$pass' としたほうがスマートだと思います。
その他の回答 (3)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 >レス有難うございます。 >取得するレコードは3件で >0・・・Number >1・・・UserID >2・・・UserPass ということはUserInfoテーブルでnameをキーにして取得すると 3レコード取得でしょうか? または、Number,UserId,UserPassの3カラムが1レコード取得? テーブル構造がわからないのでなんとも言えないのですが、 mysql_fetch_arrayを使用すると1レコード分が配列として用意されます。 MEMBERテーブル構造が USERID(KEY),PASSWORD,ACCESSFLG,USERNAMEだとした場合 SELECT * FROM MEMBER FROM USERID='$id' で取得した場合、$rows=mysql_fetch_array(結果セット); を行うと、 $rows[0]はUSERID $rows[1]はPASSWORD $rows[2]はACCESSFLG $rows[3]はUSERNAME が入ります。 多分やりたいことはユーザ認証だと思うので SELECT * FROM USERINFO WHERE NAME='$id' AND PASSWD='$passwd' でSQLを発行して、レコードの取得が出来たか判別する方が 一般的です。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 まずは if($pass == $col[2]) の直前で$passと$col[2]の内容を表示してみてください。 また、取得するレコードが1件と思われるので、 whileの部分を $col = mysql_fetch_array($rst); にして、処理してみて下さい。
補足
レス有難うございます。 取得するレコードは3件で 0・・・Number 1・・・UserID 2・・・UserPass になっていますので、whileで回さないと全部取得できないのです。
- tecinfo
- ベストアンサー率52% (32/61)
if文自体に間違いはないと思うけどな…。 >if( $pass == $col[2] ) の直前で echo($pass." == ".$col[2]."<br>\n"); を挿入してデバッグしてみてはどうでしょう? 両方の値が一緒でないのに通ってしまったら…「{」の対応関係とかかなぁ?
お礼
レス有難うございます。 SELECT * FROM USERINFO WHERE NAME='$id' AND PASSWD='$passwd' と変えてみたところ、レコードの取得が良く判りません。。。 $rst = mysql_query( "select * from UserInfo where name = '$name' and pass ='pass'", $con); として print "$rst"としたところ 『Resource id #3』と表示されました。 TRUEかFALSEで戻ってはこないのですね。 これだと判別するのが面倒にはなりませんか?