首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chrome计算php语句的方法与Firefox不同

Chrome计算php语句的方法与Firefox不同
EN

Stack Overflow用户
提问于 2016-11-15 14:37:51
回答 1查看 202关注 0票数 1

我正在尝试创建一组if语句,这些语句检查某些条件并返回值。我遇到的问题是,我一直在设计它并在Firefox上运行它,但是我已经在Chrome上尝试过了,并且我得到了与声明不同的结果。

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

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

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

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

代码语言:javascript
复制
<?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中工作,我不知道如何通过我的方法来找出它的错误所在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 14:49:16

你的问题是:

代码语言:javascript
复制
isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';

出于某种原因,Chrome为您的脚本发送这个HTTP_CACHE_CONTROL头,如果添加了数据,您就不应该依赖它。这是不对的。若要检查是否添加了数据,可以

如果它们存在的话,先在数据库中检查一下,

或者,您可以在发送表单后向会话添加一些键,并检查此键是否已在会话中或

或者,在适当地将数据添加到数据库后,只需重定向页面。

有很多方法可以做到,只要使用谷歌就行了。使用'HTTP_CACHE_CONTROL‘只是一个大错误

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40612559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档