PHP如何为每一行的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

我已经创建了一个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>


您可以为每个按钮指定一个值。我还建议给他们提供不同的名称和比
$I
更好的名称(这是PHP变量吗?)

作为旁注:

  • 您的代码易受SQL注入攻击。我的示例使用带有参数绑定的准备语句
  • 不要混合使用HTML和PHP。我故意把第一个问题分开。您应该在开始输出HTML之前执行PHP代码
  • 我移动了
    iside
    。您可以将
    作为
    的子项。然而,完全摆脱表单并使用链接在您的情况下可能会更好,除非您计划使用POST方法


首先,chnage
name=“$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();
}