0

每当 verifyUser 返回 true 时,应该执行 if 语句,但由于某种原因而不是转到标题位置,页面只是刷新,这就是所发生的一切。我已检查以确保输入信息正确无误,并且当信息不正确时,else 语句执行得非常好。如果有人对为什么会发生这种情况有任何想法,请告诉我。谢谢你。

这是生成 header() 语句的段:

function validateUser($name, $pass)
{
    $check = verifyUser($name, md5($pass));

    if($check)
    {
        $_SESSION['status'] = 'authorized';


        header('location: index.php');


    } else{

        echo'Please enter a correct username and password <br />';
        echo "<a href='http://localhost/cms/admin/login.php'>Try Again?</a>";
        exit;
    }



 }

这是 verifyUser 函数,以防万一有人需要它。

   function verifyUser($name, $pass)
   {
// Escape strings
$username = mysql_real_escape_string($name);
 $password = mysql_real_escape_string($pass);

$result = mysql_query("select * from users where username='$username' and password='$password' limit 1");

if (mysql_num_rows($result)>0)
{
    return true;
} else{
    return false;
}

  }
4

5 回答 5

0

尝试使用“url”而不是“位置”:

header("refresh:1;url=index.php");
于 2012-08-13T06:45:09.263 回答
0

您可以将此行放在项目的第一行(实际上是在发送任何输出之前),否则header在发送任何输出(例如 html 代码或 echo print 等)后功能将永远无法工作;

ob_start();

或者,在发送新标头之前检查是否已发送标头;

if(!headers_send()){
   header("header params...");
} else {
   echo "<script>window.location.href="index.php"</script>";
}
于 2012-08-13T06:53:52.757 回答
0

检查以确保$_SESSION['status'] = 'authorized';已定义

于 2012-08-13T06:54:43.227 回答
0

header()不起作用的最常见原因是因为首先输出了其他内容。header()只能在其他任何东西将输出发送到浏览器之前调用。

header()如果是这种情况,PHP 将在调用时抛出错误。如果您没有在页面上显示错误,您可以检查错误日志以查看是否发生这种情况。

您还应该在调用之后立即(die()exit()之后尽快)调用或header()调用,以防止在重定向标头之后发生任何其他事情。header()即使在初始调用成功的情况下,程序中稍后的某些内容也可能导致重定向失败,这是不太可能但可能的。

于 2012-08-13T06:55:19.957 回答
-5

在 mysql 查询中,在变量名上使用引号,如下所示:

mysql_query("select * from users where username="'".$username."'" and password="'".$password."'" limit 1");

于 2012-08-13T06:42:44.367 回答