【发布时间】:2020-03-21 21:49:04
【问题描述】:
我创建了一个 while 循环,它将调用数据库中的数据,并且每一行都会带有一个按钮,但是当我单击一个按钮进行更新时,它会更新所有行。我做了一些研究,但是增量解决方案似乎对我的报价没有任何影响。
<form action="registered.php" method="GET">
<?php
$sql = "SELECT id, First_name, Last_name, email, Country, paid FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$i = 0;
$id = $row['id'];
?>
<tr>
<td>
<a href="basic_table.html#"><?= $row['First_name'];?></a>
</td>
<td class="hidden-phone"><?= $row['Last_name'];?></td>
<td><?= $row['email'];?></td>
<td><?= $row['Country'];?></td>
<td><span class="label label-info label-mini"><?= $row['paid'];?></span></td>
<td>
<button class="btn btn-success btn-xs auth" name="$i"><i class="fa fa-check" title="Authorize Access"></i></button>
<button class="btn btn-primary btn-xs" name="$id"><i class="fa fa-times" title="Remove Access"></i></button>
<button class="btn btn-danger btn-xs" name="$id"><i class="fa fa-trash-o " title="Delete user"></i></button>
</td>
</tr>
<?php
if (isset($_POST['$i'])) {
$sql = "UPDATE users SET paid = 'ads' WHERE id = '$id'";
$update = $conn->query($sql);
}
$i++;
}
} else {
echo "0 results";
}
$conn->close();
?>
</form>
【问题讨论】:
-
首先将
name="$i"更改为` name="= $i ?>"` -
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
按钮也存在潜在问题,如果我正确理解您的代码,每个用户都有 3 个按钮,但它们在输出 HTML 中的名称都相同。跨度>
-
我知道 font-awesome 告诉你使用 i 标记他们的东西,但不要。它在语义上是不正确的 HTML,可能会欺骗某些屏幕阅读器。 span 是一个不太糟糕的选择。
-
这就是为什么我在执行 while 循环时使用 $i 为每个按钮创建不同的名称,但它没有