如果页面刷新,如何取消保存

时间:2014-01-27 10:09:49

标签: php html mysql

我在这里得到一个代码,如果我刷新页面它会自动保存数据....任何人都可以帮助我,只有点击提交按钮才会保存。

当前代码:

<?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>

4 个答案:

答案 0 :(得分:1)

您显示的代码来自您的“处理”页面。该页面处理帖子,它检查是否有参数“save”,如果有,则保存。

如果用户刷新该页面,他会再次访问该页面,再次发送“save”参数,因此INSERT会完成两次。

为了避免这种情况,你应该使用POST-REDIRECT-GET model,你的处理页面获取数据,保存它,然后将用户重定向到一个“GET”页面(没有帖子,没有插入),只显示数据。如果用户然后点击刷新,他只刷新“GET”页面。

当然,用户可以随时使用BACK按钮转到实际的插入页面。他的浏览器会警告他“你要重新提交表格数据......”,但如果他选择,他可以。如果你真的想要处理这个问题,可以使用会话密钥:在表单上有额外字段“submitID”,在INSERT上,首先检查该ID是否已经“使用”。您需要在某处添加额外的表/列“submitID”,以确保表单只能提交一次。

答案 1 :(得分:0)

一旦表单在站点请求中获得$ _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 - 函数。 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。

3)

您还可以使您的页面在第二种可能性中与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

}
?>