[英]how to prevent from re-executing a query php+mysql
我正在學習 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 語句的查詢是“重新執行”(我不知道它是否正確 - 英語不是我的母語)和標題('位置:')不起作用......它只顯示“找不到頁面”。
有什么辦法可以防止刷新后重新執行查詢?
您需要添加某種邏輯以確保 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;
}
}
}
<?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;
}
}
?>
防止頁面刷新重復操作(數據庫或其他)的常用方法是重定向到另一個頁面以顯示結果。
用戶單擊鏈接或提交表單等,然后轉到執行該工作的頁面。 該頁面完成后,將重定向標題發送到將顯示操作結果的頁面。 如果用戶刷新,他們只會再次獲得結果頁面。
$_SESSION 通常用於將結果從操作頁面獲取到結果頁面,或者結果頁面可能會運行它自己的“SELECT”查詢。
另一種常用的方法是使用 AJAX 調用頁面執行操作並返回結果。 在這種情況下,當前頁面保持不變,刷新不會導致執行該操作的頁面再次運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.