首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >页面刷新后如何取消保存

页面刷新后如何取消保存
EN

Stack Overflow用户
提问于 2014-01-27 18:09:49
回答 4查看 140关注 0票数 6

我在这里得到了一个代码,如果我刷新页面,它会自动保存data....can任何人帮助我,它将只保存时,提交按钮被点击。

当前代码:

代码语言:javascript
代码运行次数:0
运行
复制
<?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>
EN

回答 4

Stack Overflow用户

发布于 2014-01-27 18:27:31

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

如果用户刷新该页面,他将再次访问该页面,并再次发送一个"save“参数,因此插入操作将执行两次。

为了避免这种情况,您应该使用POST-REDIRECT-GET model,在这里处理页面获取数据,保存数据,然后将用户重定向到一个只显示数据的"GET“页面(没有post,没有insert)。如果用户点击刷新,他只会刷新"GET“页面。

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

票数 1
EN

Stack Overflow用户

发布于 2014-01-27 18:35:28

一旦表单在站点请求中获得$_POST-Array,就提交表单。当您在第一次提交后重新加载页面时,它将始终再次发送数据。

您有多种可能来解决此问题:

1)

在执行PHP代码后重新加载页面。为此,将PHP代码放在页面的顶部(在用HTML编写任何内容之前),并在执行查询后重新加载页面:

代码语言:javascript
代码运行次数:0
运行
复制
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中如下所示。

代码语言:javascript
代码运行次数:0
运行
复制
function ajaxCall()
{
    $.ajax({
         type: "POST",
         url: "handler.php",
         data: {save: 1, textfield: $("#textfield").val()}
    }) ;
}

不要忘记,表单操作不再是到另一个站点的重定向,而是对此函数ajaxCall的调用。如果您希望提交更多字段,请查看serialize-function。Handler.php文件只包含您的php代码:

代码语言:javascript
代码运行次数:0
运行
复制
<?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。

代码语言:javascript
代码运行次数:0
运行
复制
<form action="handler.php" method="POST"></form>

在这种情况下,您必须将退出语句替换为可能性1中的$back和header-call (类似于Konerak的响应)。

票数 0
EN

Stack Overflow用户

发布于 2014-01-27 18:39:48

问题是表单又被提交了,你可以让页眉重定向到同一页,

在更新您的数据库之后使用header("location: index.php),这将解决您的问题。

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

https://stackoverflow.com/questions/21378025

复制
相关文章

相似问题

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