0

每次我刷新页面时,我都会得到存储在 post 数组中的相同值。我只想在提交后和刷新无回显结果后执行回显语句..

<?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>
4

4 回答 4

2

无论使用 GET 还是 POST 方法,您都无法仅从一个表单检查它是刷新还是首次提交。

为确保一条消息,您需要:

一个。处理请求后将用户重定向到其他地方。

if(isset($_POST['submit'])) {
  // process data
  header("Location: new-url");
}

并在另一个 URL 上显示消息。

湾。设置一个 cookie / session 变量,它告诉你表单已经被处理。

if(isset($_POST['submit']) && !isset($_SESSION['form_processed'])) {
  $_SESSION['form_processed'] = true;
}

第二种方法将杀死您的表单,直到用户关闭浏览器,因此您应该做一些更复杂的事情 - 比如在表单中存储另一个隐藏字段,并将其存储在会话中。

于 2013-01-10T08:03:25.830 回答
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();
}
于 2013-01-10T08:00:37.907 回答
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>

问题

  • 您正在用陈旧的变量污染用户“会话”。
  • 如果您的用户打开多个窗口(或选项卡)到同一页面,这将中断。要解决此问题,您必须将noncecookie 更改为 nonce 数组,并相应地更新它。
于 2013-01-10T08:10:24.030 回答
-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>
于 2013-01-10T07:57:39.197 回答