PHP SQL: обновить значение нескольких строк, если установлен флажок

Я пытаюсь обновить столбец статуса в каждой строке, где установлен флажок, от «Ikke Betalt» до «Betalt», одновременно используя кнопку отправки. По сути, это список участников мероприятия, и я хочу иметь возможность «отметить» их, как только они заплатят.

См. Таблицу:

PHP SQL: обновить значение нескольких строк, если установлен флажок

Мой код

<form method = "post">
<table>
    <thead>
        <tr>
            <td>Betalt?</td>
            <td>Id</td>
            <td>Navn</td>
            <td>Nummer</td>
            <td>Email</td>
            <td>Antal Gæster</td>
            <td>Dato</td>
            <td>Status</td>
        </tr>
    </thead>
    <tbody>
        <?php include 'deltagere.php'; ?>
    </tbody>
</table>
<p><button name = "submit" type = "submit" value = "submit">Opdater</button></p>
</form>

PHP

$sql = "SELECT * FROM t_launch ORDER BY launch_date ASC";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {

// Output data of each row
while($row = mysqli_fetch_assoc($result)) {
    
    echo '<tr>' . PHP_EOL;
    echo '<td><input type = "checkbox" name = "betaling[]" value = "' .$row["launch_id"]. '"></td>' . PHP_EOL;
    echo '<td>' . $row["launch_id"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_firstname"] . ' ' . $row["launch_lastname"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_number"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_email"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_guests"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_date"] . '</td>' . PHP_EOL;
    echo '<td>' . $row["launch_status"] . '</td>' . PHP_EOL;
    echo '</tr>' . PHP_EOL;
    }
}

else {
echo "0 results";
}

foreach ($_POST['betaling'] as $launch_id) {
mysql_query("UPDATE `t_launch` SET `launch_status` = 'Betalt' WHERE `launch_id` = '$betaling'");
}

В первом разделе php таблица отображается нормально, но после нескольких часов поиска аналогичного случая я не смог взломать вторую часть UPDATE.

Я протестировал вызов SQL UPDATE в своей базе данных с использованием статического идентификатора и подтвердил, что он работает, но в настоящее время страница просто обновляется, ничего не обновляя.


Решено

Поговорив с другом, имеющим некоторый опыт работы с php, мы нашли решение:

if (isset($_POST['checkednames'])) {
    $ids = join(', ', $_POST['checkednames']);
    mysqli_query($conn, "UPDATE `t_launch` SET `launch_status` = 'Betalt' WHERE `launch_id` IN ($ids)") or die(mysql_error());
    }

Нам пришлось переформатировать массив, чтобы он соответствовал требованиям sql.

NB - Мы также исправили некоторые синтаксические ошибки, касающиеся mysql и mysqli (я их перепутал)

Пожалуйста, переместите свое решение к собственному ответу, спасибо.

Cœur 01.07.2018 18:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
371
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Глядя на свой код, вы, похоже, использовали неправильное имя переменной в функции обновления. Вы используете $ betaling, когда вам следует использовать $ launch_id

Редактировать:

Просто хочу указать, что mysql_query устарел, поэтому вы можете посмотреть pdo или Mysqli.

Кроме того, вы можете редактировать все строки в одном запросе, используя «WHERE launch_id IN $ launch-ids». $ launchids должен быть разделенным запятыми списком идентификаторов в круглых скобках.

Спасибо за вашу помощь - ваша идея использовать WHERE IN действительно помогла, и мы с этим разобрались! Полное решение в верхней части моего поста.

MHSorensen 17.05.2018 15:38

Попробуйте разделить отображение формы и ее логический процесс.

Например: измените форму на <form method = "post" action = "another_file.php">.

Затем вырежьте сценарий, обрабатывающий глобальную переменную $_POST, в новый файл. Так должно быть:

<?php
if (isset($_POST) && isset($_POST['betaling']) && !empty($_POST['betaling']) {
  foreach ($_POST['betaling'] as $launch_id) {
    mysql_query("UPDATE `t_launch` SET `launch_status` = 'Betalt' WHERE `launch_id` = '$betaling'");
  }
}

Затем после отправки кнопки выполняется запрос sql.

Надеюсь на эту помощь.

ОБНОВЛЕНО:

Измените $betaling на $launch_id, у вас нет $betaling var.

Я попробовал - это просто возвращает ошибку HTTP 500. Я действительно пробовал это, но решил, что мой код просто подделали.

MHSorensen 17.05.2018 13:27
$result = mysqli_query($conn, $sql); Необходимо проверить mysql_query("UPDATE... и, конечно же, включить файл конфигурации db (который определяет $conn)
vietanhyt 17.05.2018 13:30
w3schools.com/php/func_mysqli_query.asp Скрипт обновления никогда не работает. Его синтаксис: mysqli_query($con,$query);
vietanhyt 17.05.2018 13:32

Другие вопросы по теме