-3

我有一个带有文本输入等的普通 html 表单。我有正常的功能来检查数据库中的用户名和密码以登录用户。

我的注册和登录页面在 Chrome 中一切正常,但等。它在除 chrome 之外的所有浏览器中刷新页面。

我已将该网站上传到免费的虚拟主机上,仅供您查看。 这里

这是 php 登录的样子:

    function login()
    {   
    if(isset($_POST["login"]))
    {
    connectDB();
    $username = mysql_real_escape_string($_POST["username"]);
    $password = mysql_real_escape_string($_POST["password"]);




    $result = mysql_query("SELECT username FROM users WHERE username = '$username' AND             password = '$password'"); 
    if(!$result)
    {
        die("query failed" . mysql_error());
    }
    else
    {
        $count = mysql_num_rows($result);
        if($count > 0)
        {
            $_SESSION['loggedIn'] = $username;
            echo "<script>window.location='http://vuilhonde.hostzi.com/';</script>";
            header("Location:http://vuilhonde.hostzi.com/");
        }   
        else
        {
            return "Login failed.</br>* invalid username or password.";
        }
    }
    mysql_free_result($result);
}
}
4

3 回答 3

2

在发送标头之前,您永远不应回显任何输出。浏览器如何处理这可能是您的问题的原因。

于 2013-06-06T10:07:04.223 回答
2

几个问题:

  1. 标题Location:在冒号后需要一个空格,所以应该是`Location: http://whatever
  2. 仅当Location:响应具有适当的状态代码(例如 HTTP 301、302 或 303)时,浏览器才会跟随标头。现在您正在发送 200,这意味着浏览器应该显示文档的内容。
  3. 只有在任何资源内容之前发送PHP 的header功能才能正常工作。你echo以前用过,所以它不能正常工作。在某些 PHP 配置中,这将导致显示错误。
  4. 但是<script>代码是无效的 HTML,浏览器可能不会执行它(您缺少必需的<html>元素及其必要的子元素。
  5. 您应该在数据库中散列密码,而不是将它们存储为纯文本。此外,您正在执行不区分大小写的谓词。
于 2013-06-06T10:07:08.450 回答
0

如果您在 head 部分中缺少文件,例如

<script language="javascript" src="javascript/javascript.js"></script>

如果这个文件不存在,它会导致一些浏览器做一个页面——刷新。我将尝试重现此错误(即将更新),或者您可以通过删除该行自行测试并告诉我们结果如何。(如果您这样做,请告诉我们您的浏览器版本)

如果那也

echo "<script>window.location='http://vuilhonde.hostzi.com/';</script>";

发生在外部<body>或内部<head>导致Firefox刷新。

于 2013-06-06T10:16:56.370 回答