【问题标题】:PHP Functions only working in Chrome [closed]PHP 函数仅适用于 Chrome [关闭]
【发布时间】:2013-06-02 06:59:34
【问题描述】:

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

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

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

这是 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);
}
}

【问题讨论】:

标签: ie firefox php internet-explorer function google-chrome browser


【解决方案1】:

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

【讨论】:

  • 好的,我解决了这个问题,但仍然在做同样的事情。不过感谢您的建议
  • 在上面的代码之前你有任何输出吗?你不能有 any 输出,即使是空格也会使 header 函数被忽略
  • 不仅仅是标题不起作用,我在一台甚至还没有数据库的新机器上运行这段代码,所以当我说登录时,它会回显所有 my_sql 错误,因为数据库不存在。在firefox和ie中,点击登录时仍然只是刷新页面。而不是回显错误/异常
【解决方案2】:

几个问题:

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

【讨论】:

  • 前两个问题在不同程度上是无效的。
  • 是的。第二个问题完全无效,因为标头的 PHP 和/或 Apache 后处理将根据添加的位置标头添加适当的 HTTP 状态。第一个问题是真实的,但可能会通过相同的后处理来解决。但是代码中的问题列表仍然很长。
  • @Sven 第一个也是假的。看看RFC 2616,第 4.2 节,第二段。
【解决方案3】:

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

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

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

如果那样的话

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

发生在&lt;body&gt; 之外,或在&lt;head&gt; 内部,它 导致Firefox 刷新。

【讨论】:

  • 我在标题中有该代码。该文件确实存在
猜你喜欢
  • 1970-01-01
  • 2011-01-12
  • 2013-11-29
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
相关资源
最近更新 更多