我需要能够在提交页面中的数据后停止发布页面。例如,我可以使用这种形式:
<form action='#' method='post'>
<input type='text' name='name' />
<input type='submit' name='submit' />
</form>
然后像这样抓住帖子:
<?php
if (isset($_POST['submit'])) {
echo "Hello " . $_POST['name'];
}
?>
但是当页面刷新时,它将同时执行相同的操作,直到用户离开页面或在页面上进行完全刷新。这导致了一个巨大的问题,因为我必须能够在完成任务后停止发布。
我尝试使用元标记(<meta http-equiv="refresh" content="5">
)来刷新页面,但是这会导致一个问题,因为每隔几秒就会发生这种情况并且页面数据丢失了,我试图取消设置post变量(unset($_POST['submit']);
和unset($_POST);
),但这不起作用,我不能使用标题(&#34;位置:...&#34;),因为我使用的是WordPress,因此始终会发送标题由系统。
所以我问我们所拥有的社区:如何阻止帖子重新提交数据?
修改
我现在在做什么:
<?php
if (!isset($_SESSION)) {
session_start();
}
$token = rand();
if ($_POST) {
if (isset($_SERVER['token'])) {
if($_POST['token'] == $_SESSION['token']){
$continue = FALSE;
}
else {
$continue = TRUE;
}
}
else {
$_SERVER['token'] = $_POST['token'];
$continue = TRUE;
}
if ($continue === TRUE) {
if (isset($_POST['update'])) {
//Do update code
}
if (isset($_POST['win'])) {
//Do win code
}
if (isset($_POST['credit'])) {
//do credit code
}
}
}
形式:
<form method="post" action="#">
<select name="select">
<option value="false" <? if ($results->data[$i]['marked'] == "false") { echo "selected"; } ?>>No Attention</option>
<option value="true" <? if ($results->data[$i]['marked'] == "true") { echo "selected"; } ?>>Needs attention</option>
</select>
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="hidden" name="betid" value="<? echo $results->data[$i]['bet_id']; ?>" />
<input name="update" id="" class="btn btn-default" value="Update" type="submit">
</form>
答案 0 :(得分:2)
你可以这样做:
<?php
$token = rand(); //Or how ever you want to generate a random token
?>
<form action='#' method='post'>
<input type='text' name='name' />
<input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type='submit' name='submit' />
</form>
然后抓住帖子
<?php
if(isset($_POST['submit'])){
if (isset($_SESSION['token']) ) {
if($_POST['token'] == $_SESSION['token']){
$continue = FALSE;
}else{
$continue = TRUE;
}
}else{
$continue = TRUE;
}
if($continue === TRUE){
$_SESSION['token'] = $_POST['token'];
//DO SOMETHING
}
}
?>
它可以正确地做得更小/更紧凑但是你应该理解代码背后的想法,这样如果已经提交数据的用户可以提交新数据,如果他访问表单新的,但如果页面刷新数据不会再次处理
当然你必须确保SESSION是startet
答案 1 :(得分:1)
这是一个在Stackexchange上链接我最喜欢的答案的完美问题: https://softwareengineering.stackexchange.com/questions/46716/what-technical-details-should-a-programmer-of-a-web-application-consider-before
这个答案也说:
Redirect after a POST如果该POST成功,则阻止a 刷新再次提交。
我建议你点击链接。
所以基本上在提交帖子后重定向。您发布信息时,不会发布到现在转到的页面,而是发布重定向到您要转到的页面的重定向。这将确保当您刷新时,它不会再次发布信息。