首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >阻止用户使用带有警告的后退按钮或禁用任何插入

阻止用户使用带有警告的后退按钮或禁用任何插入
EN

Stack Overflow用户
提问于 2011-03-03 19:31:01
回答 2查看 1.9K关注 0票数 0

我在page1.php中有一个表单,它指向page2.php,从那里将来自page1.php表单的数据插入到数据库中。成功插入后,page2.php会显示一条消息,并提供转到第三个页面的链接。

问题是,当用户在插入之后单击浏览器的后退按钮并单击表单提交按钮时,将再次进行插入。

有没有办法在一次插入后,按下back按钮时,会显示一条消息,显示不允许访问back按钮?或者在允许的情况下,不会在单击表单提交按钮时进行插入?

稍后编辑以添加此部件:

好的,让我来详细介绍一下。这是关于一个管理员后端。管理员为不同的产品提供描述文本输入。他给出了来自page1.php的输入,并在page2.php上显示了说明已插入到数据库中的消息。然后在消息下面有另一个表单。它只是询问管理员是否希望对描述文本执行更多操作。如果是,则单击表单提交按钮,他将被带到一个页面,在此页面中,他将再次被带到page1.php (这次是另一个产品),从那里被带到page2.php,依此类推。顺便说一句,我可以使用一个普通的页面链接,而不是page2.php消息下面的表单按钮链接

问题是,当管理员在page2.php上单击back按钮时,他会返回到page1.php,从那里如果他单击form submit按钮,数据将第二次插入到新行中。

U可能建议将'IGNORE‘与'INSERT’命令一起使用,但该行中的其他列可能与另一列的列不匹配,而描述列(admin插入此列的文本数据)可能会匹配。

1) ignore在这种情况下是否适用?

2)如果站点的数据库允许重复输入,该如何解决?

谢谢

希望这能把整件事说清楚。

EN

回答 2

Stack Overflow用户

发布于 2011-03-03 19:32:56

不是提供指向第三个页面的链接,而是重定向到完全相同的URI

这是一个非常方便的方法,称为POST/Redirect/GET

下面是一个简明的例子:

代码语言:javascript
运行
复制
<?php  
if ($_SERVER['REQUEST_METHOD']=='POST') {  

  $err = array();
  //performing all validations and raising corresponding errors
  if (empty($_POST['name'])) $err[] = "Username field is required";  
  if (empty($_POST['text'])) $err[] = "Comments field is required";  

  if (!$err) {  
    //if no errors - saving data and redirect
    header("Location: ".$_SERVER['PHP_SELF']);
    exit;
  }  else {
    // all field values should be escaped according to HTML standard
    foreach ($_POST as $key => $val) {
      $form[$key] = htmlspecialchars($val);
    }
  }
} else {
  $form['name'] = $form['comments'] = '';  
}
include 'form.tpl.php';
?>  

在这里,您可以看到另一个简单而强大的示例:Separating Logic/Style in PHP properly

这是一个完整的解决方案来显示,添加和编辑数据库内容,完全出于管理目的。

票数 5
EN

Stack Overflow用户

发布于 2011-03-03 19:33:45

您不应在page2.php上显示您的邮件。

而是:

保存数据后,

  • page2.php应处理data
  • page2.php应重定向到将显示该消息的唯一confirmation.php

有关更多信息,请查看模式。

在评论后编辑:但请注意,在任何情况下,您都无法阻止用户重新提交表单,如果他真的想...

惟一的解决方案是,在提交表单时,如果当前提交的数据已经存在,则检查数据库--如果已经存在,则拒绝再次插入。

当然,如果用户在他的输入中更改了一个字母,那么它将不再是相同的数据……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5180143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档