我在这里得到一个代码,如果我刷新页面它会自动保存数据....任何人都可以帮助我,只有点击提交按钮才会保存。
当前代码:
<?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>
答案 0 :(得分:1)
您显示的代码来自您的“处理”页面。该页面处理帖子,它检查是否有参数“save”,如果有,则保存。
如果用户刷新该页面,他会再次访问该页面,再次发送“save”参数,因此INSERT会完成两次。
为了避免这种情况,你应该使用POST-REDIRECT-GET model,你的处理页面获取数据,保存它,然后将用户重定向到一个“GET”页面(没有帖子,没有插入),只显示数据。如果用户然后点击刷新,他只刷新“GET”页面。
当然,用户可以随时使用BACK按钮转到实际的插入页面。他的浏览器会警告他“你要重新提交表格数据......”,但如果他选择,他可以。如果你真的想要处理这个问题,可以使用会话密钥:在表单上有额外字段“submitID”,在INSERT上,首先检查该ID是否已经“使用”。您需要在某处添加额外的表/列“submitID”,以确保表单只能提交一次。
答案 1 :(得分:0)
一旦表单在站点请求中获得$ _POST-Array后立即提交。在第一次提交后重新加载页面时,它将始终再次发送数据。
您有多种方法可以解决此问题:
执行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
}
我个人更喜欢用Ajax调用来执行我的PHP脚本,在jQuery中看起来如下。
function ajaxCall()
{
$.ajax({
type: "POST",
url: "handler.php",
data: {save: 1, textfield: $("#textfield").val()}
}) ;
}
不要忘记,表单操作不再重定向到另一个站点,而是调用此函数ajaxCall。如果您想要提交更多字段,请查看serialize - 函数。 handler.php文件只包含你的php-Code:
<?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功能中,您还可以处理呼叫成功时发生的情况(例如重定向)。看看$.ajax - jQuery的参考。如果你想要你也可以使用没有jQuery的ajax。
您还可以使您的页面在第二种可能性中与handler.php类似。
<form action="handler.php" method="POST"></form>
在这种情况下,你必须在可能性1中用$ back和header-call替换exit-statement(类似于Konerak的响应)。
答案 2 :(得分:0)
问题是表单再次提交,您可以将标题重定向到同一页面,
更新数据库后 header("location: index.php)
这将解决您的问题。
答案 3 :(得分:0)
在html中创建一个按钮
<input type="submit" name="submit"/>
在PHP代码中,您可以像
一样编写<?php if(isset($_POST['submit'])) { //place your total code here } ?>