PHP как сгенерировать уникальное имя для кнопки, создаваемой при l oop для каждой строки - PullRequest
0 голосов
/ 21 марта 2020

Я создал время l oop, которое будет вызывать данные из базы данных, и каждая строка будет снабжена кнопкой, однако, когда я нажимаю одну кнопку для обновления, она обновляет все строки. Я провел некоторое исследование, однако решение о приращении, похоже, не имеет никакого значения для моей цитаты.

<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>

1 Ответ

0 голосов
/ 21 марта 2020

Вы можете присвоить каждой кнопке значение. Я бы также предложил дать им другие имена и имена лучше, чем $i (это должно было быть PHP переменная?).

В качестве примечания:

  • Ваш код был уязвим для SQL инъекции. Мой пример использует подготовленные операторы с привязкой параметров.
  • Не смешивайте HTML и PHP. Я специально держал первый запрос отдельно. Вы должны выполнить код PHP, прежде чем начать вывод HTML.
  • Я переместился <form> iside <td>. Вы можете поставить <form> как ребенок <table>. Тем не менее, полное избавление от формы и использование ссылок может быть лучше в вашей ситуации, если вы не планируете использовать метод POST.
<?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 вы можете выполнить запрос ОБНОВИТЬ на основе полученного значения.

<?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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...