Chrome评估php if语句与Firefox的不同

时间:2016-11-15 14:37:51

标签: php google-chrome firefox if-statement

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

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

  1. 检查值的内容,如果为空,则会生成一条消息“您不应该在这里” - (好像有人直接访问该页面)
  2. 如果值不为空,请检查页面是否已刷新并生成“已经输入数据库”的消息 - (因此不会重新输入)
  3. 如果值不为空(如1)并且页面尚未刷新(如2),则将数据存储到数据库中并生成消息“Success”
  4. 当我填写表格并进入此页面时,它会运行代码并显示“成功”。但是当我在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,我不知道如何工作我的方式通过找出它出错的地方。

1 个答案:

答案 0 :(得分:3)

你的问题在这里:

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

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

只检查数据库中是否存在,

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

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

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