0

ユーザー資格情報を確認するためにデータベースからデータを取得しています。パスワードが一致しない場合、ユーザーをログイン ページにリダイレクトしたいと考えています。ただし、これは決して起こりません。代わりに、chat_main.php にリダイレクトされます。

他のすべてのケース (無効な電子メール、有効な電子メールとパスワードの組み合わせ) では正常に機能します。

これが私のコードです:

<?php
session_start();
require_once("config/db_connect.php");
$usr=$_POST['email'];
$pwd=$_POST['password'];
$q="SELECT * FROM userdata WHERE email=\"$usr\"";
$info=mysql_query($q, $conn);
if(mysql_num_rows($info)!=1){
    header("Location: login.php?err=1");
}
else{
    while($data=mysql_fetch_array($info)){
        if($pwd!=$data['pwd']){
            header("Location: login.php?err=1");
        }
        $usr=$_SESSION['username']=$data['fname'];
        header("Location: chat_main.php?username=$usr");
    }
}
?>

このように動作するのはなぜですか? また、これをどのように解決できますか?

4

2 に答える 2

3

出口を追加; 各ヘッダー行の後、スクリプトを終了させ、実際にヘッダー リダイレクトを処理します。それ以外の場合は、実行を継続し、次のヘッダー リダイレクトにヒットします。

于 2012-12-26T14:20:57.163 に答える
0
<?php
session_start();
require_once("config/db_connect.php");
$usr=$_POST['email'];
$pwd=$_POST['password'];
$q="SELECT * FROM userdata WHERE email=\"$usr\"";
$info=mysql_query($q, $conn);
if(mysql_num_rows($info)!=1){
header("Location: login.php?err=1");
exit;
}
else{
while($data=mysql_fetch_array($info)){
    if($pwd!=$data['pwd']){
        header("Location: login.php?err=1");
        exit;
    }
    $usr=$_SESSION['username']=$data['fname'];
    header("Location: chat_main.php?username=$usr");
    exit;
}
}
?>

ヘッダーを送信した後にスクリプトを終了する必要があるため、機能するはずです。

于 2012-12-26T14:22:05.840 に答える