簡體   English   中英

PHP While循環中的MySQL更新

[英]MySQL update in a PHP While loop

我幾乎完成了一個站點,該站點存儲並允許管理員操縱用戶信息。

我實現的最后一個功能是能夠修改排名:每個用戶都有一個排名,您可以使用菜單通過上下移動用戶來手動調整它。

它運行完美:我可以對其進行修改,數據庫可以正確存儲新排名; 我可以添加一個新用戶,它成為排名最低的用戶。 問題是當我嘗試刪除用戶時。

我寫了一個PHP腳本,應該執行以下操作:

  • 接收用戶的ID
  • 使用WHERE語句從兩個表中刪除用戶的數據
  • 從服務器中刪除用戶上傳的文件
  • 更新其他用戶的排名,因此,如果我刪除了第3個用戶,以前的第4個將變為第3個,第5個將成為新的第4個,依此類推。 這最后一部分是我的代碼無法正常工作的地方。

這是整個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM