簡體   English   中英

如何取消發布數組?

[英]how to unset post array?

每次我刷新頁面,我得到相同的值存儲在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>

從表單中,無論使用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;
}

第二種方法會在用戶關閉瀏覽器之前終止您的表單,因此您應該執行更復雜的操作 - 例如在表單中存儲另一個隱藏字段,並將其存儲在會話中。

如果您提交表單然后刷新生成的頁面,瀏覽器將重新發布表單(通常首先提示)。 這就是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();
}

您需要維護一個狀態,以確定是否已顯示$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數組,並相應地更新它。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM