我在这里得到了一个代码,如果我刷新页面,它会自动保存data....can任何人帮助我,它将只保存时,提交按钮被点击。
当前代码:
<?php
ob_start();
?>
<html>
<head>
<title>test</title>
</head>
<body>
<?php
include('include/connect.php');
$query = mysql_query("SELECT DISTINCT count(batchcode) as batchcode1 FROM batchcodes");
while( $rows = mysql_fetch_array($query)) {
$code=$rows['batchcode1'];
}
if(isset($_POST['save'])){
$var = $code+1;
$sql = mysql_query("INSERT INTO batchcodes(batchcode) VALUES (". $var .")");
}
?>
<form method="post" action="index.php" >
<input type="text" value="batch<?php echo $var; ?>" />
<input type="submit" name="save">
</form>
</body>
</html>
发布于 2014-01-27 10:27:31
您显示的代码来自您的“处理”页面。该页面处理post,它检查是否有参数"save“,如果有,则保存。
如果用户刷新该页面,他将再次访问该页面,并再次发送一个"save“参数,因此插入操作将执行两次。
为了避免这种情况,您应该使用POST-REDIRECT-GET model,在这里处理页面获取数据,保存数据,然后将用户重定向到一个只显示数据的"GET“页面(没有post,没有insert)。如果用户点击刷新,他只会刷新"GET“页面。
当然,用户可以始终使用BACK按钮转到实际的插入页面。他的浏览器将警告他“您正在重新提交表单数据...”,但如果他选择这样做,他可以。如果您确实想处理这个问题,可以使用会话密钥:在表单上设置一个额外的字段"submitID“,在插入时,首先检查该ID是否已经”使用“。你需要一个额外的表/列"submitID“来确保一个表单只能提交一次。
发布于 2014-01-27 10:35:28
一旦表单在站点请求中获得$_POST-Array,就提交表单。当您在第一次提交后重新加载页面时,它将始终再次发送数据。
您有多种可能来解决此问题:
1)
在执行PHP代码后重新加载页面。为此,将PHP代码放在页面的顶部(在用HTML编写任何内容之前),并在执行查询后重新加载页面:
if(isset($_POST["save"])) {
/* MySQL Query */
$back = $_SERVER['HTTP_REFERER'] ; // the site who called this site
header("Location: $back") ; // Link back to this site
}
2)
就我个人而言,我更喜欢使用Ajax调用来执行我的PHP脚本,这在jQuery中如下所示。
function ajaxCall()
{
$.ajax({
type: "POST",
url: "handler.php",
data: {save: 1, textfield: $("#textfield").val()}
}) ;
}
不要忘记,表单操作不再是到另一个站点的重定向,而是对此函数ajaxCall的调用。如果您希望提交更多字段,请查看serialize-function。Handler.php文件只包含您的php代码:
<?php
ob_start();
include('include/connect.php');
$query = mysql_query("SELECT DISTINCT count(batchcode) as batchcode1 FROM batchcodes");
while( $rows = mysql_fetch_array($query)) {
$code=$rows['batchcode1'];
}
if(isset($_POST['save'])){
$var = $code+1;
$sql = mysql_query("INSERT INTO batchcodes(batchcode) VALUES (". $var .")");
}
exit(0) ;
?>
在ajax函数中,您还可以处理调用成功时发生的事情(例如重定向)。请看一下jQuery的$.ajax-reference。如果你愿意,你也可以使用不带jQuery的ajax。
3)
在第二种情况下,您还可以使您的页面在操作上类似于handler.php。
<form action="handler.php" method="POST"></form>
在这种情况下,您必须将退出语句替换为可能性1中的$back和header-call (类似于Konerak的响应)。
发布于 2014-01-27 10:39:48
问题是表单又被提交了,你可以让页眉重定向到同一页,
在更新您的数据库之后使用header("location: index.php)
,这将解决您的问题。
https://stackoverflow.com/questions/21378025
复制