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

解決済みの質問

変数の比較

<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と違う文字列が入っていることも確認しましたが、パスの一致が表示されます。

再度の質問ですが、かなり困っています。
御教授お願い致します。

投稿日時 - 2005-10-08 01:24:11

QNo.1699312

困ってます

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

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'
としたほうがスマートだと思います。

投稿日時 - 2005-10-08 10:16:55

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

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

回答(4)

ANo.4

こんにちは。

>レス有難うございます。
>取得するレコードは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を発行して、レコードの取得が出来たか判別する方が
一般的です。

投稿日時 - 2005-10-08 12:15:40

お礼

レス有難うございます。

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で戻ってはこないのですね。
これだと判別するのが面倒にはなりませんか?

投稿日時 - 2005-10-09 00:58:08

ANo.2

こんにちは。

まずは
if($pass == $col[2])
の直前で$passと$col[2]の内容を表示してみてください。

また、取得するレコードが1件と思われるので、
whileの部分を
$col = mysql_fetch_array($rst);
にして、処理してみて下さい。

投稿日時 - 2005-10-08 02:04:59

補足

レス有難うございます。
取得するレコードは3件で
0・・・Number
1・・・UserID
2・・・UserPass

になっていますので、whileで回さないと全部取得できないのです。

投稿日時 - 2005-10-08 09:26:33

ANo.1

if文自体に間違いはないと思うけどな…。

>if( $pass == $col[2] )
の直前で
echo($pass." == ".$col[2]."<br>\n");
を挿入してデバッグしてみてはどうでしょう?

両方の値が一緒でないのに通ってしまったら…「{」の対応関係とかかなぁ?

投稿日時 - 2005-10-08 01:37:55

あなたにオススメの質問