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

Мой код
<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 (я их перепутал)






Глядя на свой код, вы, похоже, использовали неправильное имя переменной в функции обновления. Вы используете $ betaling, когда вам следует использовать $ launch_id
Редактировать:
Просто хочу указать, что mysql_query устарел, поэтому вы можете посмотреть pdo или Mysqli.
Кроме того, вы можете редактировать все строки в одном запросе, используя «WHERE launch_id IN $ launch-ids». $ launchids должен быть разделенным запятыми списком идентификаторов в круглых скобках.
Спасибо за вашу помощь - ваша идея использовать WHERE IN действительно помогла, и мы с этим разобрались! Полное решение в верхней части моего поста.
Попробуйте разделить отображение формы и ее логический процесс.
Например: измените форму на <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. Я действительно пробовал это, но решил, что мой код просто подделали.
$result = mysqli_query($conn, $sql); Необходимо проверить mysql_query("UPDATE... и, конечно же, включить файл конфигурации db (который определяет $conn)
mysqli_query($con,$query);
Пожалуйста, переместите свое решение к собственному ответу, спасибо.