2016-03-20 364 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