我正在学习PHP和MySQL。 我决定玩一些,然后制作了一个动态的-ish页面,该页面由MySQL和if循环实现(我不在乎是否值得,只是为了好玩)。
代码如下例所示:
mysqli_query($conn,"UPDATE something SET something = something + 1 WHERE id = " . $_GET['id']
if(mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
echo table;
}
}
每当有人单击子页面上的链接时,它将$ _GET ['id']传递到上面的代码。一切正常,但是...但是刷新页面后,带有UPDATE语句的查询“正在重新执行”(我不知道它是否正确-英语不是我的母语)和标头('Location:')不起作用...显示的只是“找不到页面”。
有什么方法可以防止刷新后重新执行查询?
答案 0 :(得分:1)
您需要添加某种逻辑,以确保MySQL仅触发一次,并使此条件逻辑通过页面重载而持久。有很多方法可以做到这一点(例如使用cookie或$_SESSION
标志,但我个人建议对数据库进行查询。这种方法将确保无论哪个用户使用该代码,都只能运行一次)哪台机器正在尝试运行它。
下面的伪代码对此进行了说明:
mysqli_query($conn, "SELECT something WHERE id = " . $_GET['id']);
if(mysqli_num_rows($result) === 0) { /* Check that the code hasn't run yet */
mysqli_query($conn, "UPDATE something SET something = something + 1 WHERE id = " . $_GET['id'])
if(mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)){
echo table;
}
}
}
答案 1 :(得分:1)
<?php
session_start(); //you call this to use session variables
if(isset($_SESSION['details']) && $_SESSION['details']==true)
{ /*do nothing since query has ran once*/}
else
{
/*run query since query has not been run*/
mysqli_query($conn,"UPDATE something SET something = something + 1 WHERE id = " .$_GET['id'];
$_SESSION['details']=true; //you set a session variable to true when query runs the first time.
}
/*i am assuming there is a select statement here that retruns the **$result** */
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_assoc($result))
{
echo table;
}
}
?>
答案 2 :(得分:0)
防止页面刷新重复执行某个操作(数据库或其他操作)的一种常用方法是重定向到另一个页面以显示结果。
用户单击链接或提交表单等,该链接会转到执行该任务的页面。该页面完成后,会将重定向标头发送到将显示操作结果的页面。如果用户刷新,他们只会再次获得结果页面。
$ _ SESSION通常用于从操作页面到结果页面获取结果,或者结果页面可以运行它自己的“ SELECT”查询。
另一种常见方法是使用AJAX调用该页面以执行操作并返回结果。在这种情况下,当前页面保持不变,并且刷新不会导致执行该操作的页面再次运行。