Получить $_POST из нескольких флажков
У меня есть 1 форма с несколькими флажками (каждый с кодом):
<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">
Где $row['Report ID']
является первичным ключом в базе данных -so, каждое значение отличается.
Как бы я мог сказать, какие флажки были отмечены? (Может быть несколько)
Это для системы входящих сообщений, и у меня есть кнопка внизу, которую я хочу (при нажатии) удалить все сообщения (идентификаторы: $row['Report ID']
), у которых установлен флажок.
Ответы
Ответ 1
Установите в форме имя check_list[]
и вы сможете получить доступ ко всем флажкам в виде массива ($_POST['check_list'][]
).
Вот маленький образец в соответствии с просьбой:
<form action="test.php" method="post">
<input type="checkbox" name="check_list[]" value="value 1">
<input type="checkbox" name="check_list[]" value="value 2">
<input type="checkbox" name="check_list[]" value="value 3">
<input type="checkbox" name="check_list[]" value="value 4">
<input type="checkbox" name="check_list[]" value="value 5">
<input type="submit" />
</form>
<?php
if(!empty($_POST['check_list'])) {
foreach($_POST['check_list'] as $check) {
echo $check; //echoes the value set in the HTML form for each checked checkbox.
//so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
//in your case, it would echo whatever $row['Report ID'] is equivalent to.
}
}
?>
Ответ 2
Изменить. Чтобы отразить то, что сказал @Marc в комментарии ниже.
Вы можете выполнить цикл через все опубликованные значения.
HTML:
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" />
PHP:
foreach($_POST['check_list'] as $item){
// query to delete where item = $item
}
Ответ 3
вы должны указать свои флажки соответственно:
<input type="checkbox" name="check_list[]" value="…" />
вы можете получить доступ ко всем отмеченным флажкам с помощью
// loop over checked checkboxes
foreach($_POST['check_list'] as $checkbox) {
// do something
}
пс. убедитесь, что вы правильно выбрали свой выход (htmlspecialchars()
)
Ответ 4
<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">
И после сообщения вы можете пропустить через них:
if(!empty($_POST['check_list'])){
foreach($_POST['check_list'] as $report_id){
echo "$report_id was checked! ";
}
}
Или получить определенное значение, опубликованное на предыдущей странице:
if(isset($_POST['check_list'][$report_id])){
echo $report_id . " was checked!<br/>";
}
Ответ 5
Извините, старая тема, но это один из важных моментов, чтобы упомянуть об этом, с которыми у @JamesRattray и других были проблемы.
Нельзя закрывать тег input
(используя />
), когда вы пытаетесь отправить несколько значений в PHP скрипт. Когда вы самостоятельно закрываете тег, он заканчивает определение массива, и вы будете иметь только одно значение, отправленное на ваш script при представлении. Фактически ответ @Scone может не работать до тех пор, пока не будет изменен />
.
Вот что вызывает ошибку Warning: Invalid argument supplied for foreach() in /home1/...
PHP в этом случае.
РЕДАКТ: Как отмечается в комментариях ниже, дальнейшие исследования показывают, что это зависит от DOCTYPE. Если у вас установлен DOCTYPE для XHTML, это потребует закрытия входного тега. Если у вас есть набор DOCTYPE для HTML5, это потребует, чтобы входной тег не был закрыт. Существует также вероятность, что это может быть продиктовано тем, какой браузер пользователь просматривает страницу и насколько хорошо он соответствует DOCTYPE, указанному в коде.
Ответ 6
Это довольно просто. Обратите внимание, и вы сразу это получите!:)
Вы создадите массив html, который затем будет отправлен в php-массив.
Ваш html-код будет выглядеть следующим образом:
<input type="checkbox" name="check_list[1]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[2]" alt="Checkbox" value="checked">
<input type="checkbox" name="check_list[3]" alt="Checkbox" value="checked">
Где [1] [2] [3]
- это ID
ваших сообщений, что означает, что вы echo
ваш $row['Report ID']
на своем месте.
Затем, когда вы отправляете форму, ваш PHP-массив будет выглядеть следующим образом:
print_r($check_list)
[1] => checked
[3] => checked
В зависимости от того, какие были проверены, а какие нет.
Я уверен, что вы можете продолжить с этого момента.