我正在尝试创建一组if语句来检查某些条件并返回一个值。我遇到的问题是我一直在设计这个并在Firefox中运行它,但我已经在Chrome中尝试过它,并且我从语句中得到了不同的结果。
我试图用if语句做的是,用户在页面上填写表格,然后发送到另一个页面:
当我填写表格并进入此页面时,它会运行代码并显示“成功”。但是当我在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,我不知道如何工作我的方式通过找出它出错的地方。
答案 0 :(得分:3)
你的问题在这里:
isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
由于某种原因,Chrome会为您的脚本发送此HTTP_CACHE_CONTROL标头,如果是否添加了数据,您实际上不应该依赖此标头。这是错误的方式。要检查是否添加了数据,您可以
只检查数据库中是否存在,
或者您可以在发送表单后添加一些会话密钥,并检查会话中是否存在此密钥或
或者只是在将数据正确添加到数据库后重定向页面。
有很多方法可以做到这一点,只需使用谷歌。使用'HTTP_CACHE_CONTROL'只是一个大错误