Как выбрать нескольких пользователей с использованием флажков (чекбоксов) и выполнить SQL-запрос для них?

  • 7 сентября 2023 г. 8:56
Ответы на вопрос 2
Для выбора нескольких пользователей с использованием флажков (чекбоксов) и выполнения SQL-запроса для них, вам потребуется следующий подход:

1. Создайте форму HTML с флажками для каждого пользователя:
```html
<form action="process.php" method="post">
    <input type="checkbox" name="users[]" value="1"> Пользователь 1<br>
    <input type="checkbox" name="users[]" value="2"> Пользователь 2<br>
    <input type="checkbox" name="users[]" value="3"> Пользователь 3<br>
    ...
    <input type="submit" value="Отправить">
</form>
```

2. В PHP-скрипте "process.php", получите значения выбранных пользователей и выполните SQL-запрос:
```php
if(isset($_POST['users'])) {
    // Получить значения выбранных пользователей
    $selectedUsers = $_POST['users'];
    
    // Подключение к базе данных
    $connection = mysqli_connect("hostname", "username", "password", "database");
    
    // Проверка подключения
    if(mysqli_connect_errno()) {
        die("Ошибка подключения к базе данных: " . mysqli_connect_error());
    }
    
    // Использование значений выбранных пользователей для выполнения SQL-запроса
    foreach($selectedUsers as $userId) {
        $query = "INSERT INTO `available_tests` (`user_id`, `test_id`) VALUES ('$userId', 'selected_test_id')";
        mysqli_query($connection, $query);
    }
    
    // Закрытие соединения с базой данных
    mysqli_close($connection);
}
```

В приведенном выше коде, вместо "hostname", "username", "password" и "database" в функции `mysqli_connect` укажите соответствующие значения для вашего сервера базы данных. Также замените `"selected_test_id"` в строке запроса на фактический идентификатор выбранного теста.

3. Обработка значений в JavaScript и отображение модального окна:
```javascript
// Получить выбранных пользователей
var selectedUsers = [];
var checkboxes = document.getElementsByName('users[]');
for (var i = 0; i < checkboxes.length; i++) {
  if (checkboxes[i].checked) {
    selectedUsers.push(checkboxes[i].value);
  }
}

// Отображение модального окна с выбранными пользователями
alert("Выбранные пользователи: " + selectedUsers.join(", "));
```

Обработка значений происходит в JavaScript, после чего вы можете отобразить их в модальном окне с помощью метода `alert()`. Вы можете применить этот подход к вашему существующему коду для отображения значений id пользователей.
Оборачиваем таблицу в форму, добавляем кнопку для отправки данных. Когда пользователь отметит нужные пункты, он может отправить форму. Указываем метод передачи данных (GET или POST) и адрес серверного скрипта для обработки формы. 

```html
<form action="адрес_скрипта.php" method="POST">
    <!-- ваша html-таблица -->
    <table>
        <!-- содержимое таблицы -->
    </table>

    <button type="submit">Отправить</button>
</form>
```

В скрипте PHP содержится следующий код:

```php
<?php
// Проверяем, что данные были отправлены
if(isset($_POST['submit'])) {
    $inserted_user_count = 0;

    // Проверяем наличие отмеченных пользователей
    if(isset($_POST['selected_users'])) {
        $pdo = new PDO("параметры_подключения_к_базе");

        // Обрабатываем каждого отмеченного пользователя
        foreach($_POST['selected_users'] as $selected_user_id) {
            $stmt = $pdo->prepare('INSERT INTO ваша_таблица (атрибуты_таблицы) VALUES (значения_атрибутов, кроме_user_id, :user_id)');
            $stmt->bindParam(':user_id', $selected_user_id, PDO::PARAM_INT);
            // Дополнительно привязываем другие параметры запроса, если есть
            $stmt->execute(); // Выполняем запрос
            $pdo->commit(); // Фиксируем изменения в базе данных (если требуется)
            $inserted_user_count++;
        }

        $pdo = null; // Закрываем соединение с базой данных
    }

    echo 'Обработано пользователей: '.$inserted_user_count;
}
?>
```

Похожие вопросы