我正在尝试创建一组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中工作,我不知道如何通过我的方法来找出它的错误所在。
发布于 2016-11-15 14:49:16
你的问题是:
isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';出于某种原因,Chrome为您的脚本发送这个HTTP_CACHE_CONTROL头,如果添加了数据,您就不应该依赖它。这是不对的。若要检查是否添加了数据,可以
如果它们存在的话,先在数据库中检查一下,
或者,您可以在发送表单后向会话添加一些键,并检查此键是否已在会话中或
或者,在适当地将数据添加到数据库后,只需重定向页面。
有很多方法可以做到,只要使用谷歌就行了。使用'HTTP_CACHE_CONTROL‘只是一个大错误
https://stackoverflow.com/questions/40612559
复制相似问题