我有一個網頁上有一個按鈕。當點擊它的按鈕就可以了爲什麼我的php/mysql更新不準確?
$userName = "tdscott";
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$divID = explode('?', $url);
$id = 0;
$id = explode('@',$divID[1])[1];
$func = $divID[2];
$find = mysqli_fetch_array(mysqli_query($con,"SELECT likes FROM status WHERE id='$id'"))['likes'];
if ($func == "addLike")
{
$promoted = $userName . "-";
mysqli_query($con, "UPDATE status SET promotedBy = CONCAT(promotedBy,'$promoted') WHERE id='$id'");
$find++;
mysqli_query($con,"UPDATE status SET likes = '$find' WHERE id='$id'");
echo $find;
}//end if addLike
elseif($func === "removeLike")
{
echo "ERROR";
}//end if removeLike
elseif ($func === "getLikes")
{
echo $find;
}//end if getLikes
mysqli_close($con);
發送請求一個頁面,這個代碼我離開的數據庫連接信息。但由於某種原因,當這稱爲它會產生不準確的結果。例如...有時它會將$promoted
的多個實例放入我表中的promoteBy字段中,有時它會更新表中的其他行,使其不等於當前的$id
。我想知道是否得到了$id
變量混淆從我以前提交一個不同的值時。每次調用變量前,是否有方法可以重置變量?
請注意:在if語句中,我們只查看addLike
部分。我把另一個包括在內以防萬一它引起問題。
它不能保持呼叫之間的值。但是這裏還有其他一些問題:(1)代碼容易受到SQL注入的影響; (2)使用explode來解析來自URL的參數,而不是'$ _GET' /'$ _POST'; (3)使用GET請求而不是POST請求在服務器上執行變更動作; (4)沒有防止CSRF令牌來防止形式欺騙; (5)存儲多個連接在單個數據庫字段(promoteBy)中的值不是最佳實踐; (6)在兩個單獨的請求中獲取&設置'likes'數量,以便在多個請求同時更新時會變得不正確 – Boann