php 如何在页面刷新时不重复操作数据库?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 如何在页面刷新时不重复操作数据库?相关的知识,希望对你有一定的参考价值。
做了一个网站libertyreserve的接口。实现网站会员通过接口充值后,返回相关数据到网站,在数据库中更新该会员的账户余额。
现在的做法是:
1、在网站上放置充值表单,点击提交到libertyreserve的支付页面。
2、支付完成后,跳转到支付成功页面success.php。
3、success.php接受会员信息和充值信息,更新数据库。
(由于支付接口暂时不能用真实数据测试,我是直接将充值表单页面提交到success.php,在success.php中充值金额等信息直接用具体的值代入,来模拟接收到的数据)。
碰到的问题是:
1、如果按以上操作,到达success.php后,更新了数据库,但是每刷新一次页面,都会重复更新一次数据库。
2、使用页面重定向,支付成功后将success.php 重定向到suceess.html页面。
这是刷新页面不会碰到问题,但是如果直接在浏览器里输入success.php打开,每打开一次就又会出现重复更新数据库了。
这个该如何解决???
因为现在的测试都只是模拟的。不知道支付接口的网站是不是已经解决了这个问题,
在网上看到的方法是对表单页面处理,我想这个表单应该是对应支付页面的那个表单,他是属于libertyreserve接口网站的,我没法改?????
1.将success.php放到一个不能直接访问的web路径下,在apache中.htacess可以控制访问。
2.控制可以自己来实现,设定一个参数,如果没有该参数则表示不能访问。
不知道是不是你想要的。追问
正好是我刚刚想到的,禁止直接通过地址栏访问。 这个回答也正好提供了方案,是我想要的。
有一个疑惑就是,支付成功以后,需要跳到success.php这个页面,来接受数据和执行数据库操作。如果success.php 页面设置了不能直接访问,会不会使success.php的数据库操作就不能执行了????
php - 刷新页面后会话丢失[重复]
【中文标题】php - 刷新页面后会话丢失[重复]【英文标题】:php - session lost after refreshing page [duplicate] 【发布时间】:2014-08-16 04:31:47 【问题描述】:所以我正在为我的网站开发一个登录系统,我想在用户登录时更改导航栏,但我无法让它工作,因为在我刷新页面以更新导航栏。这是我在 login.php 脚本中得到的:
if ($loginNumRows == 1)
echo 'true';
session_start();
$_SESSION['username'] = $loginRow['name'];
当这回显“true”时,将加载以下 javascript:
if (html == 'true')
window.location.href = "index.php";
我尝试使用“location.reload(true);”它仍然是一样的。在导航栏所在的主页中,我进行了以下检查:
<?php if (isset($_SESSION))
...
但是,这总是返回 false。任何想法该怎么做?谢谢!
【问题讨论】:
你把session_start();
放了吗
session_start()
必须在每个访问的页面中,最好在脚本的开头。
@Lix 我在索引页上说的是
将 session_start() 放在页面顶部。
【参考方案1】:
首先,不需要 javascript 将您重定向到索引页面。你也可以用 PHP 来做:
header("Location: index.php");
所以 login.php 将如下所示:
if ($loginNumRows == 1)
session_start();
$_SESSION['username'] = $loginRow['name'];
header("Location: index.php");
请注意,我已更改顺序。与其他人一样,我强烈建议将 session start 置于所有代码之上。
最后确保你已经在 index.php 文件中启动了会话(这也应该放在你所有的代码之上):
session_start();
编辑:如果您想坚持使用您的 javascript 方法(我强烈不推荐),那么您的 login.php 代码应该如下所示:
if ($loginNumRows == 1)
session_start();
$_SESSION['username'] = $loginRow['name'];
echo 'true';
【讨论】:
【参考方案2】:如前所述,我首先将 session_start() 放在页面上的所有其他代码之上,而不是在条件语句中。
【讨论】:
【参考方案3】:确保所有脚本的顶部都有session_start();
。
【讨论】:
以上是关于php 如何在页面刷新时不重复操作数据库?的主要内容,如果未能解决你的问题,请参考以下文章
php 使用history.go();window.location.reload();返回页面刷新后会提示‘如图’不想再重复提交一次怎么办