为什么只有一个表行更新?

时间:2016-03-31 09:04:25

标签: php mysqli html-table

我正在尝试使用PHP更新MySQL中rank表中的users列,但是当我尝试更改值并按下update按钮时,实际上只更新了表行的最后一个。以下是PHP表在网页上的外观图像:

Here

以下是代码:

<?php
include '../db/connect.php';
$con = $MySQLi_CON;
if (!$con){
    die("Can not connect: " . mysql_error());
}

if(isset($_POST['update'])){
    $UpdateQuery = "UPDATE users SET rank='$_POST[rank]' WHERE user_id='$_POST[hidden]'";
    $con->query($UpdateQuery);
}
$result = $MySQLi_CON->query("SELECT * FROM users") 
    or die(mysql_error());  
echo "<table border=1>
<tr>
    <th>ID</th>
    <th>Username</th>
    <th>Email</th>
    <th>Rank</th>
</tr>";
echo "<form action='test3.php' method='post'";
while($record = $result->fetch_array()){

    echo '<tr>';
    echo '<td>' . $record['user_id'] . '</td>';
    echo '<td>' . $record['username'] . '</td>';
    echo '<td>' . $record['email'] . '</td>';
    echo '<td>' . '<input type="number" name="rank' . [$record['user_id']] . '" />';
    echo '<td>' . '<input type="hidden" name="hidden" value="' . $record['user_id'] . '"</td>';
    echo '<td>' . '<input type="submit" name="update" value="update"' . '</td></tr>';
}
echo "</table>";

for($_POST['rank'] as $user_id=>$rank){
$UpdateQuery = "UPDATE users SET rank='$rank' WHERE user_id='$user_id'";
$con->query($UpdateQuery);
}
$con->close();

1 个答案:

答案 0 :(得分:0)

问题是每一行的所有排名都使用相同的名称rank以及hidden,浏览器将使用最新元素覆盖所有排名和隐藏值。

<input type="number" name="rank" />更改为<input type="number" name="rank[$record['user_id']]" />

以数组格式接收带有$_POST['rank']的php并循环每个等级。

for($_POST['rank'] as $user_id=>$rank){
   $UpdateQuery = "UPDATE users SET rank='$rank' WHERE user_id='$user_id'";
    $con->query($UpdateQuery);
}