2014-03-30 17 views
0

我有一個網頁上有一個按鈕。當點擊它的按鈕就可以了爲什麼我的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部分。我把另一個包括在內以防萬一它引起問題。

+0

它不能保持呼叫之間的值。但是這裏還有其他一些問題:(1)代碼容易受到SQL注入的影響; (2)使用explode來解析來自URL的參數,而不是'$ _GET' /'$ _POST'; (3)使用GET請求而不是POST請求在服務器上執行變更動作; (4)沒有防止CSRF令牌來防止形式欺騙; (5)存儲多個連接在單個數據庫字段(promoteBy)中的值不是最佳實踐; (6)在兩個單獨的請求中獲取&設置'likes'數量,以便在多個請求同時更新時會變得不正確 – Boann

回答

-1
unset($id); 

抱歉應該做更多的研究。

+1

這對任何事情都沒有影響。 – Boann

+0

它修復了我遇到的問題。這是因爲我的瀏覽器正在讀取id變量的早期版本。 – user2930376

+0

@ user2930376你的瀏覽器實際上對id變量沒有絲毫的想法。 –

相關問題