Флажки внутри динамической таблицы в PHP - PullRequest
0 голосов
/ 30 сентября 2019

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

Вот мой код:

<tbody>
                <?php if (!empty($arr_devices)) { ?>
                    <?php foreach ($arr_devices as $devices) {
                            ?>
                        <tr>

                            <td>
                                <form action="" method="post">

                                    <input type="checkbox" name="devices[]" value="add_device">
                                    <input type="hidden" name="id" value="<?php echo $devices["id"]; ?>" />
                                </form>
                            </td>

                            <td>
                                <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["id"] . '</a>'; ?>
                            </td>

                            <td>
                                <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["serial_imei"] . '</a>'; ?>
                            </td>

                            <td>
                                <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["serial_no"] . '</a>'; ?>
                            </td>

                            <td>
                                <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["name"] . '</a>'; ?>
                            </td>

                            <td>
                                <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["manufacturer"] . '</a>'; ?>
                            </td>

                            <td>
                                <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["created_date"] . '</a>'; ?>
                            </td>

                        </tr>
                    <?php } ?>

                <?php } ?>

            </tbody>
        </table>
        </div>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.js"></script>
        <script>
            $(document).ready(function() {
                $('#usetTable').DataTable();
            });
        </script>

Как бы вы получили значение флажка в PHP?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Вы должны обернуть table в form

<form action="/" method="post">
  <table>
    <tbody> 
      <?php 
      if (!empty($arr_devices)) {
        foreach ($arr_devices as $devices) { ?>
        <tr>
          <td>
              <input type="checkbox" name="devices[]" value="<?php echo $devices["id"]; ?>">
          </td>
          <td>
            <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["id"] . '</a>'; ?>
          </td>
          <td>
            <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["serial_imei"] . '</a>'; ?>
          </td>
          <td>
            <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["serial_no"] . '</a>'; ?>
          </td>
          <td>
            <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["name"] . '</a>'; ?>
          </td>
          <td>
            <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["manufacturer"] . '</a>'; ?>
          </td>
          <td>
            <?php echo '<a href=selectedCustomer.php?device_id=' . urlencode($devices["id"]) . '>' . $devices["created_date"] . '</a>'; ?>
          </td>
        </tr>
      <?php 
        }
      } ?>
    </tbody>
  </table>
</form>

. В своем коде вы создаете новую форму для каждого устройства. Это не имеет смысла, если вы хотите отправить массив проверенных устройств. Все флажки должны быть внутри одного элемента формы.

1 голос
/ 30 сентября 2019

Вам необходимо поместить флажок в тег формы и отправить его с помощью кнопки. Похоже, что вы в данный момент просто нажимаете на ссылку, которая не будет отправлять ничего, кроме данных в ссылкеЯ специально упустил ссылки, чтобы все было просто. На что обратить внимание:

  • постоянно использует get (или post) как в форме, так и в сценарии обработки. Я использовал post здесь, но это должно работать в любом случае, пока вынепротиворечивый.
  • флажок использует синтаксис массива name="devices[]". Это позволяет PHP обращаться к нему как к обычному массиву.
  • Следующий пример кода предназначен для запуска в одном скрипте. Формаотправляет самому себе, когда атрибут action опущен. Вы можете легко разделить его на форму и скрипт обработки, добавив атрибут action к форме, который указывает на скрипт обработки. Наконец, вам придется вырезать / вставитькод PHP под формой в сценарий обработки.

Script:

<?php

// Not sure what your data source is, so I've just hardcoded an array for now. 
$devices = [
    ['id' => 1],
    ['id' => 2],
    ['id' => 3],
];
?>
<!-- I decided to use `post` here but `get` would work too as long as you're consistent. -->
<!-- Also, notice I didn't include an `action` here. If you don't, it will submit to itself; which I wanted to do in this case to keep it as simple as possible. -->
<form method="post">
    <?php foreach ($devices as $device): ?>

        <div>
            <label>
                <!-- Give it a name using the array syntax. -->
                <input type="checkbox" name="devices[]" value="<?php echo $device['id']; ?>">

                <!-- Output a label. -->
                <?php echo $device['id']; ?>
            </label>
        </div>

    <?php endforeach; ?>

    <input type="submit" name="submit" value="Submit Form">
</form>

<?php
// The form was submitted, so process it. 
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // At least 1 _checked_ checkbox was submitted.
    // If no checkboxes were checked, this array would not exist. That's why you should check for its existance before trying to access it.
    if (isset($_POST['devices']) && is_array($_POST['devices'])) {

        // Loop over the array to access each selected item.
        foreach ($_POST['devices'] as $deviceId) {
            var_dump($deviceId);
        }
    }
}
...