每次刷新页面时,我都会获得存储在post数组中的相同值。 我想要在提交之后执行echo语句,并且在刷新没有回声结果之后...
<?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>
答案 0 :(得分:2)
从表单中,无论使用GET还是POST方法,您都无法检查它是刷新还是第一次提交。
要确保单条消息,您需要:
一个。在处理完请求后,将用户重定向到其他位置。
if(isset($_POST['submit'])) {
// process data
header("Location: new-url");
}
并在另一个网址上显示该消息。
湾设置一个cookie / session变量,告诉你表单已经处理完毕。
if(isset($_POST['submit']) && !isset($_SESSION['form_processed'])) {
$_SESSION['form_processed'] = true;
}
第二种方法会在用户关闭浏览器之前终止您的表单,因此您应该执行更复杂的操作 - 例如在表单中存储另一个隐藏字段,并将其存储在会话中。
答案 1 :(得分:1)
如果您提交表单然后刷新生成的页面,浏览器将重新发布表单(通常首先提示)。这就是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();
}
答案 2 :(得分:0)
您需要维护一个状态,以确定是否已显示$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更改为一组nonce,并相应地更新它。答案 3 :(得分:-1)
如果您想在提交后使用刷新页面
<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>