[英]MySQL update in a PHP While loop
我幾乎完成了一個站點,該站點存儲並允許管理員操縱用戶信息。
我實現的最后一個功能是能夠修改排名:每個用戶都有一個排名,您可以使用菜單通過上下移動用戶來手動調整它。
它運行完美:我可以對其進行修改,數據庫可以正確存儲新排名; 我可以添加一個新用戶,它成為排名最低的用戶。 問題是當我嘗試刪除用戶時。
我寫了一個PHP腳本,應該執行以下操作:
WHERE
語句從兩個表中刪除用戶的數據 這是整個PHP:
<?php
// Connecting to the server.
$con=mysqli_connect("connection data");
$rangcounter = 1;
//deleting the user's data - works: the user's data is deleted from both tables
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$id = $_POST['playerid'];
mysqli_query($con,"DELETE FROM Player WHERE ID=$id");
mysqli_query($con,"DELETE FROM Troops WHERE ID=$id");
}
//deleting the user's image from the server - works: the user's file is deleted
$directory = 'uploads/';
unlink($directory . $id . "picture.jpg");
//updating the database - does not work: the other users' ranks stay the same as before
$result = mysqli_query($con,"SELECT * FROM Player ORDER BY rank ASC");
while($row = mysqli_fetch_array($result)) {
$updateid = $row['ID'];
mysqli_query($con,"UPDATE Player SET 'rank' = $rangcounter WHERE ID='$updateid'");
$rangcounter++; //this variable should always be correctly high rank for any given loop. This way I can remove the highest ranked user (1st), then set every other one's rank to one less: the previously 2nd becomes the new 1st (when `$rangcounter` is 1); the previous 3rd will be the new 2nd (when `$rangcounter` is 2), and so on for every row.
}
header("redirect to main page");
exit();
?>
我的想法是創建一個新變量,該變量從1開始,然后,每次UPDATE
我都會對其進行遞增。 因為$result
是按等級排序的,所以應該沒有問題,對吧? 但這是行不通的,我很確定這是出於簡單的原因,但我只是不能將其放在上面。
你們能幫忙嗎?
更新:TJ-解決了它: PHP While循環中的MySQL更新
改成
mysqli_query($con,"UPDATE Player SET rank = $rangcounter WHERE ID='$updateid'");
從
mysqli_query($con,"UPDATE Player SET 'rank' = $rangcounter WHERE ID='$updateid'");
根據您的解釋,我了解到您可以
userId | rank
1 1
2 2
3 5
4 6
5 3
6 4
在刪除ID = 3的用戶后,您希望擁有:
userId | rank
1 1
2 2
4 5
5 3
6 4
如果以上正確,那么您刪除用戶后就需要執行所有操作
UPDATE Player SET rank = rank-1 WHERE rank > $theDeletedsRank
在您的mysqli_query中在$rangcounter
周圍添加引號''
。
mysqli_query($con,"UPDATE Player SET 'rank' = '$rangcounter' WHERE ID='$updateid'");
希望這對您有幫助
列名不應使用單引號''
。 還要始終在查詢字符串之外使用php變量,如下所示。
請嘗試這個。
mysqli_query($con,"UPDATE Player SET rank=".$rangcounter." WHERE ID=".$updateid."");
希望這能正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.