sof*_*ser 0 html javascript php
我有一个表单,page1.php其中指向page2.php从表单中的数据page1.php插入数据库的位置.成功插入后,page2.php显示一条消息并提供转到第三页的链接.
问题是当插入后的用户点击浏览器的后退按钮并单击表单提交按钮时,再次插入.
是否有任何方法可以在按下后退按钮一次插入后显示一条消息,表明不允许访问后退按钮?或者如果允许,点击表单提交按钮时不会插入?
编辑稍后添加此部分:
哦,让我详细说说.这是一个管理员后端.管理员为不同的产品提供描述文本输入.他给出了page1.php的输入,并且在page2.php上显示了消息,说明已经插入到db中.然后信息下方还有另一个表格.它只是询问管理员是否希望用描述文本做更多的事情.如果是的话,那么点击表单提交按钮,他就会被带到一个页面,从那里,他再次被带到page1.php(这次是另一个产品),从那里到page2.php等等.顺便说一句,我可以使用普通页面链接而不是page2.php上消息下面的表单按钮链接
问题是,当管理员在page2.php上并点击后退按钮时,他会回到page1.php,如果他点击表单提交按钮,那么数据将在新行中第二次插入.
你可能会建议在'INSERT'命令中使用'IGNORE',但是行中还有其他列可能与另一列的列不匹配,而描述列(admin插入此列的文本数据)可能会匹配.
1)在这种情况下是否适用?
2)如果网站数据库允许重复输入,应该是什么解决方案?
谢谢
希望它能让事情变得清晰.
而不是给第三页的链接,重定向到相同的URI,
这是一个非常方便的方法,称为POST/Redirect/GET:
这是一个简洁的例子:
<?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';
?>
Run Code Online (Sandbox Code Playgroud)
在这里你可以看到另一个例子,简洁而强大:
在PHP中正确分离逻辑/样式
它是显示,添加和编辑数据库内容的完整解决方案,完全用于管理目的.
| 归档时间: |
|
| 查看次数: |
1840 次 |
| 最近记录: |