-3

データベースにこの情報があります...

ユーザー名 - kam、mav、shin

パスワード - kam、mav、shin

これは私のコードです...

<?php

$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);
$tbl2=mysql_query("SELECT * FROM tablename WHERE `username` =   
'".mysql_real_escape_string($_POST['username'])."' and `password` =   
'".mysql_real_escape_string($_POST['password'])."'");

while($row=mysql_fetch_array($tbl2))

    if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
        {   
            echo " ";
    }

    if (($row['username']!=$_POST['username'])&&($row['password']!=$_POST['password']))
        {
            header("location: /login.php?codeError=1");
            die;
        }
?>

問題は、ユーザー名「mav」とパスワード「kam」を入力しても、次のページに進むことです。私は何をすべきか?

4

4 に答える 4

2

クエリが次の行を返すかどうかを確認する必要がありますmysql_num_rows()

$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);

$tbl2 = mysql_query("SELECT `username`, `password`  FROM `tablename` WHERE 
                    `username` = '".mysql_real_escape_string($_POST['username'])."' AND 
                    `password` = '".mysql_real_escape_string($_POST['password'])."'
                   ");

$rows = mysql_num_rows($tbl2);

if($rows){
    // user and password exists in db
} else {
    // does not exist
    header("location: /login.php?codeError=1");
    die;
}

前の質問で言ったように、mysql_*関数から移動してみてください。

于 2012-10-01T10:07:17.563 に答える
0

試す

 if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
        {   
            echo " ";
    }

 else 
        {
            header("location: /login.php?codeError=1");
            die();
        }

とにかく、この種の問題に対処する良い方法は、一時的に変数を画面に表示することです (デバッグとして)。

echo $row['username']." ".$_POST['username']." ".$row['password']." ".$_POST['password']

DBクエリまたはデータを投稿するフォームに問題がある場合は、変数が実際に存在するかどうかを確認してください。

于 2012-10-01T10:08:20.147 に答える
0

単なる提案ですが、次の方法で試してみませんか。

if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
    {   
        echo " ";
    }else{
      header("location: /login.php?codeError=1");
      die;
    }

ここで 2 つの if ステートメントが必要な理由がわかりません。これは単なるブール値であり、結果は true または false になります。

お役に立てれば :)!

于 2012-10-01T10:05:34.033 に答える
0

クエリで既に検証をチェックしています。ユーザーがユーザー名とパスワードを正しく入力した場合にのみ、クエリはそのデータを含む行を返します。

したがって、クエリによって返された行をカウントするだけで済みます。1未満の場合、ユーザーは認証されていません

于 2012-10-01T10:07:41.190 に答える