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 回答