PHP如何为每一行的while循环上创建的按钮生成唯一名称
我已经创建了一个while循环,它将调用数据库中的数据,每一行都会有一个按钮,但是当我单击一个按钮进行更新时,它会更新所有行。我做了一些研究,但是增量解决方案似乎对我的报价没有任何影响PHP如何为每一行的while循环上创建的按钮生成唯一名称,php,html,forms,Php,Html,Forms,我已经创建了一个while循环,它将调用数据库中的数据,每一行都会有一个按钮,但是当我单击一个按钮进行更新时,它会更新所有行。我做了一些研究,但是增量解决方案似乎对我的报价没有任何影响 <form action="registered.php" method="GET"> <?php $sql = "SELECT id, First_name, Last_name, email, Country, paid FROM users"; $result
<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>
您可以为每个按钮指定一个值。我还建议给他们提供不同的名称和比$I
更好的名称(这是PHP变量吗?)
作为旁注:
- 您的代码易受SQL注入攻击。我的示例使用带有参数绑定的准备语句李>
- 不要混合使用HTML和PHP。我故意把第一个问题分开。您应该在开始输出HTML之前执行PHP代码
- 我移动了
iside
。您可以将
作为
的子项。然而,完全摆脱表单并使用链接在您的情况下可能会更好,除非您计划使用POST方法李>
首先,chnagename=“$i”
to`name=“”`警告:您完全可以使用参数化的准备语句,而不是手动生成查询。它们由或提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。按钮也有一个潜在的问题,如果我正确理解代码,每个用户有3个按钮,但它们在输出HTML中的名称都是相同的。我知道font awesome会告诉你在它们的内容中使用I标记,但不要这样做。这是语义不正确的HTML,可能会愚弄一些屏幕阅读器。span是一个不那么糟糕的选项。这就是为什么在执行while循环时,我使用$I为每个按钮创建不同的名称,但这并不是很抱歉,我需要使用post方法,因为按钮必须为每个行更新数据库。没有问题,只需更改method=“GET”
,并使用$\u post[]
而不是$\u GET[]
我刚刚做了,但是它没有更新到数据库,基本上什么都没有发生。您做了什么调试。您是否启用了mysqli错误报告?
<?php
$users = $conn->query('SELECT id, First_name, Last_name, email, Country, paid FROM users')->fetch_all(MYSQLI_ASSOC);
?>
<?php foreach ($users as $row): ?>
<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>
<form action="registered.php" method="GET">
<button class="btn btn-success btn-xs auth" name="myButton" value="<?= $row['id']; ?>"><span class="fa fa-check"
title="Authorize Access"></span></button>
<button class="btn btn-primary btn-xs" name="removeAccess"><span class="fa fa-times" title="Remove Access"></span></button>
<button class="btn btn-danger btn-xs" name="deleteUser"><span class="fa fa-trash-o " title="Delete user"></span></button>
</form>
</td>
</tr>
<?php endforeach; ?>
<?php
include 'mysqli.php';
if (isset($_GET['myButtton'])) {
$stmt = $conn->prepare("UPDATE users SET paid='ads' WHERE id=?");
$stmt->bind_param('s', $_GET['myButton']);
$stmt->execute();
}