【问题标题】:Chrome evaluates php if statement differently to FirefoxChrome 对 php if 语句的评估与 Firefox 不同
【发布时间】:2017-03-29 11:54:19
【问题描述】:

我正在尝试创建一组 if 语句来检查某些条件并返回一个值。我遇到的问题是我一直在设计它并在 Firefox 中运行它,但我在 Chrome 中尝试过它,但我得到的结果与陈述不同。

我试图用 if 语句做的是,用户在页面上填写表格,然后被发送到另一个页面,该页面将:

  1. 检查值的内容,如果为空,则生成一条消息“你不应该在这里”-(好像有人直接访问了该页面)
  2. 如果值不为空,请检查页面是否已刷新并产生消息“已输入数据库”-(因此不会重新输入)
  3. 如果值不为空(如 1)且页面未刷新(如 2),则将数据存储到数据库中并生成消息“成功”

当我填写表格并被带到此页面时,它会运行代码并按应有的方式显示“成功”。但是当我在 Chrome 中以完全相同的方式运行它时,我收到消息“这已经输入到数据库中” - 好像页面已被刷新。

我正在使用的代码(减去所有布局代码)是:

<?php session_start();

$seen = 0;
$pageWasRefreshed = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';

$message = $_SESSION['message'];
$code = $_SESSION['code'];

require 'inc/database.php';

if (!(isset($message) && ($message!==null))) {
    echo 'You should not be here!';
} else {

    $message = strip_tags(trim($_SESSION['message']));

    if ($pageWasRefreshed) {

        echo 'This has already been entered into the database';

    } else {

        $stmt = $conn->prepare('INSERT INTO data (code, message) VALUES (:code, :pmessage)');
        $stmt->execute(array(
            'pcode' => $code,
            'pmessage' => $message,
        ));

    $last_id = $conn->lastInsertId();

    echo $last_id . 'Success!';

    }
}

我(显然)边走边学,使用嵌套的 if 语句让我有点困惑,所以它可能很简单,但由于它适用于 Firefox 而不是 Chrome,我不知道如何按我的方式工作通过找出问题所在。

【问题讨论】:

  • chrome 和 firefox 无法以不同的方式评估 php-code,因为 php 完全是在 服务器端 执行的。 chrome 和 firefox 从未见过 一行 php,除了显示为文本外,不知道如何处理它。
  • 据我所知,php 不在浏览器上运行,它运行在为浏览器提供 html 页面的服务器上。所以,这意味着,在我看来,不同的是服务器,而不是浏览器
  • 显示您正在使用的 html 代码。正如 Franz 所说,浏览器没有看到任何 PHP,您的 html 中的某些内容显示不同。
  • Fox,发布&lt;form&gt;,以便我们测试您的代码。那些$_SESSION 变量是在哪里创建的(“消息”、“代码”)?

标签: php google-chrome firefox if-statement


【解决方案1】:

你的问题在这里:

isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';

由于某种原因,Chrome 会为您的脚本发送此 HTTP_CACHE_CONTROL 标头,如果添加或不添加数据,您真的不应该依赖它。这是错误的方式。要检查是否添加了数据,您可以

如果存在就先检查数据库,

或者您可以在发送表单后向会话添加一些密钥并检查该密钥是否已存在于会话中或

或者只是在将数据正确添加到数据库后重定向页面。

有很多方法可以做到这一点,只需使用 google。使用“HTTP_CACHE_CONTROL”只是一个大错误

【讨论】:

  • 感谢您的建议。通过您给我的内容以及来自@raina77ow 的相关链接,我可以看到我需要更改检查页面刷新的方式。该链接非常有用,我将使用那里的一些代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多