如何取消设置后阵列?(how to unset post array?)

2019-08-06 05:59发布

每一次我刷新页面,我得到的存储阵列后在相同的值。 我想回声语句的执行只能提交并刷新无回声后的结果以后。

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

Answer 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();
}


Answer 2:

从仅仅是一种形式,你将无法检查它是否是一个刷新,或先提交无论使用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;
}

直到用户关闭浏览器这第二种方法会杀了你的形式,所以你应该做更复杂的东西 - 像存储形式的另一种隐藏字段,并存储在会话中。



Answer 3:

你需要保持状态是否$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到随机数的数组,并相应地更新它。


Answer 4:

如果你想刷新页面提交后使用

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


文章来源: how to unset post array?