2016-03-20 408 views
0

我有一個窗體,刷新重新提交。我已經搜索過,並且沒有發現與我的具體問題有關的任何內容。我知道最好有一個單獨的PHP頁面,但對於這個特定的項目,它需要全部在一個PHP頁面上。當頁面刷新時,我需要POST重置,因此表單不會再自動發送。清除POST數據時刷新PHP

請注意,我無法將頁面重定向到其他地方,因此我無法使用Post/Redirect/Get。我想要得到的結果是:人首次訪問,輸入正確的代碼,腳本運行,然後下次訪問或刷新頁面等時,他們必須再次完成表單。任何建議將不勝感激。

$code = ''; 
$hide = "<script>$('form').fadeOut(500).remove(); 
$('.wrapper').addClass('form-success'); 
$('.container').delay(1800).fadeOut(500);</script>"; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $code = secure($_POST["code"]); 
} 

function secure($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

if (intval($code) == 1234) { 
echo $hide; 
$code = ''; 
} else { 
echo "Failed"; 
$code = ''; 
} 

回答

2

確定嗎?將用戶重定向到當前頁面是完美的,我很確定這是您的最佳選擇。所以在處理完代碼之後,將用戶重定向到到當前頁面,並且刷新將不再重新提交表單。只要確保使用HTTP響應代碼303重定向; [它會觸發一個GET請求] [1]:

This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.

您可以通過使用header爲此提交已被處理後(但任何HTML之前已經被髮送到用戶):

header('Location: '.$_SERVER["PHP_SELF"], true, 303); 
+0

謝謝,你有一個如何做到這一點的例子?我還沒有花時間學習正確的PHP,所以我有時會感到困惑。我會在表單中使用action =「index.php」嗎?或者我會在PHP腳本中使用header(Location :)它自己嗎? @Sjon – Verpz

+0

這是我目前的操作:action =「<?php echo htmlspecialchars($ _ SERVER [」PHP_SELF「]);?>」 – Verpz

+0

我已經添加了特定的代碼到我的答案 – Sjon