如何避免页面刷新导致数据重复写入数据库

当表单的数据是提交给本页面处理并写入数据库时,点提交后,刷新页面的话使数据重复写入数据库。解决方案有如下几种:

一、把一页面分开为两个,数据提交给另一个页面处理,之后再跳转到输入页面。

总的说来,这是一种不错的解决方案。但是要防止用户使用浏览器的返回按钮返回上一页,然后再刷新页面,重复插入数据。

if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
    // 处理数据,如插入数据后,立即转向到其他页面
    header('location:submits_success.php');     //效果与JSP里面的sendRedirect类似
}
二、在数据入库之前执行一次验证查询,看数据库里是否已经存在了相同的记录,由此来决定是否写入数据。
三、利用PHP的Session功能,也能避免重复提交表单。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交。例:

A页面的代码:

<?php
session_start();   //根据当前SESSION生成随机数
$code = mt_rand(0,1000000);
$_SESSION['code'] = $code;    //将此随机数暂存入到session
?>

<form id="form1" name="form1" method="post" action="t2.php">
    说明:
	<input type="text" name="titile" />
    <input type="hidden" name="originator" value="<?php echo $code;?>">
	<input type="submit" name="Submit" value="提交" />
</form>

B页面的代码:

<?php
session_start();
if(isset($_POST['originator'])) {
    if($_POST['originator'] == $_SESSION['code']){
        echo "ok";
        unset($_SESSION["code"]);   //将其清除掉此时再按F5则无效
    }else{
        echo "请不要刷新本页面或重复提交表单";
    }
}
?>

最近我有一个点击领红包的项目,第一页有一个【领红包】的按钮,它的url是:/index/add_hongbao/用户id,当我点击这个按钮后,它就会到控制器找到add_hongbao方法,这个方法会执行insert操作,往数据库中插入一条中奖纪录,然后再返回一个中奖的提示页面,可是在这个页面上就出问题了。因为这个提示页的url正是/index/add_hongbao/用户id,因此只要重复刷新页面,就能不断的向数据库中重复插入记录!因为一个用户可以领取多个红包,所以不能根据用户id判断是否允许再次插入数据。这个时候就只能用页面跳转这个方法了,当我执行了add_hongbao()这个方法插入记录后,使用head()方法跳转到/index/add_hongbao2,这个方法没有数据库操作,只返回中奖的提示页,这样就可以防止用户进行页面的重复刷新了。

转载于:https://www.cnblogs.com/moqiang02/p/4061161.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Python编写程序来爬取页面数据并将其写入数据库是可行的。您可以使用Python的爬虫框架,如Scrapy和BeautifulSoup,以及用于连接数据库的库,如SQLAlchemy或PyMySQL,来实现这一目的。 ### 回答2: 使用Python刷取页面数据写入数据库的程序可以通过以下步骤实现: 1. 导入所需的库:首先,我们需要导入Python中的一些库,例如requests用于发起网络请求,beautifulsoup用于解析HTML页面,以及pymysql库用于连接和操作数据库。 2. 发起网络请求:使用requests库可以轻松地发起GET或POST请求,获取要刷取数据页面的HTML内容。 3. 解析HTML页面:使用beautifulsoup库可以解析HTML页面,提取出页面中需要的数据。可以通过标签、类名、ID等方式定位和提取需要的数据。 4. 建立数据库连接:使用pymysql库,连接到数据库,并创建一个游标对象进行后续的数据库操作。 5. 创建数据表:如果数据库中还没有合适的数据表,可以使用SQL语句在数据库中创建一个新的数据表。 6. 将数据写入数据库:使用SQL INSERT语句将从页面中提取的数据插入到数据库数据表中。可以使用游标对象的execute方法执行SQL语句,将数据写入数据库。 7. 关闭数据库连接:完成数据插入后,关闭数据库连接,释放资源。 通过以上步骤,我们就可以使用Python刷取页面数据并将其写入数据库的程序。需要注意的是,具体的代码实现可能因为数据源的不同而有所差异,但是基本的程序框架和流程是类似的。 ### 回答3: 使用Python刷取页面数据写入数据库的程序可以通过以下步骤实现: 1. 导入所需的库:首先,我们需要导入Python的requests库来发送HTTP请求,以获取网页数据。另外,还需要使用BeautifulSoup库来解析HTML页面,以提取所需的数据。最后,我们还需要导入数据库相关的库,如MySQLdb或者SQLAlchemy。 2. 发送HTTP请求并获取页面数据:使用requests库发送HTTP请求,并将返回的页面内容保存到一个变量中。 3. 解析HTML页面:使用BeautifulSoup库对返回的页面进行解析,提取所需的数据。可以使用该库提供的各种方法和选择器来定位和提取特定的HTML元素。 4. 连接数据库:根据所选择的数据库类型,使用相应的库来连接数据库。例如,如果是MySQL数据库,可以使用MySQLdb库连接并操作数据库。 5. 创建数据库表:根据需要的数据结构,在数据库中创建相应的表格。可以使用SQL语句来执行这一步骤。 6. 数据写入数据库:将从网页中提取到的数据按照需要的格式进行处理,并将其写入相应的数据库表中。可以使用SQL语句来执行插入操作。 7. 关闭数据库连接:在数据写入完成后,关闭与数据库的连接,释放资源。 总结:通过以上步骤,我们可以使用Python编写一个程序来刷取页面数据并将其写入数据库。这个程序可以根据具体的需求进行调整和优化,以适应不同的网页结构和数据库类型。同时,还可以使用其他相关库和技术来增强程序的功能和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值