每一次我刷新页面,我得到的存储阵列后在相同的值。 我想回声语句的执行只能提交并刷新无回声后的结果以后。
<?php
if(isset($_POST['submit']))
{
$name = $_POST['name'];
echo "User name : <b> $name </b>";
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="name"><br>
<input type="submit" name="submit" value="Submit Form"><br>
</form>
如果你提交一个表单,然后刷新结果页面时,浏览器将重新发布的形式(通常是提示第一)。 这就是为什么POST数据始终存在。
一种选择是将存储会话变量,并将它的形式发送,然后检查它是否在表单处理代码匹配 - 以确定它是否是一个重职与否。
在表格:
<input type="hidden" name="time" value="<?php echo $time; ?>" />
在PHP:
session_start();
if(isset($_POST['submit']))
{
if(isset($_SESSION['time']) && $_SESSION['time'] == $_POST['time'])
{
echo "User name : <b> $name </b>";
}
}
$time = $_SESSION['time'] = time();
另一种选择是处理后的数据后重定向:
if(isset($_POST['submit']))
{
...
...
header('Location: ' . basename($_SERVER['PHP_SELF']));
exit();
}
从仅仅是一种形式,你将无法检查它是否是一个刷新,或先提交无论使用GET或POST方法。
为了确保单个消息,您需要:
一个。 将用户重定向到其他地方,你处理的请求后。
if(isset($_POST['submit'])) {
// process data
header("Location: new-url");
}
而在另一URL显示消息。
湾 设置cookie /会话变量,它告诉你的形式已经被处理。
if(isset($_POST['submit']) && !isset($_SESSION['form_processed'])) {
$_SESSION['form_processed'] = true;
}
直到用户关闭浏览器这第二种方法会杀了你的形式,所以你应该做更复杂的东西 - 像存储形式的另一种隐藏字段,并存储在会话中。
你需要保持状态是否$name
已经显示与否。 最简单的方法可能是维持一个的浏览器Cookie状态。
<?php
$nonce = $_COOKIE['nonce'];
$new_nonce = mt_rand();
setcookie('nonce', $new_nonce);
if(isset($_POST['submit']) && $_POST['nonce'] == $nonce)
{
$name = $_POST['name'];
echo "User name : <b> $name </b>";
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="nonce" value="<?php echo $new_nonce ?>">
<input type="text" name="name"><br>
<input type="submit" name="submit" value="Submit Form"><br>
</form>
问题
- 你污染了用户的“会话”与陈旧的变量。
- 如果用户打开多个窗口(或标签)到同一个页面,这将打破。 为了解决这个问题,你就必须改变
nonce
的cookie到随机数的数组,并相应地更新它。
如果你想刷新页面提交后使用
<form method="get"
确定您的形式还没有大量数据的同时还需要使用$ _GET代替$ _POST变量:)正确的方式给你,但这个逻辑并不好,需要重构这个脚本:
<?php
if(isset($_POST['submit']))
{
$name = $_POST['name'];
echo "User name : <b> $name </b>";
unset($_POST['submit']);
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="name"><br>
<input type="submit" name="submit" value="Submit Form"><br>
</form>