У меня есть 1 форма с несколькими флажками в ней (каждый с кодом):
<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">
Где $row['Report ID']
– первичный ключ в базе данных, так что каждое значение отличается.
Как я могу определить, какие флажки были проверены? (Возможно, несколько)
(В контексте 🙂 Его для системы входящих сообщений, и у меня есть кнопка ниже, которую я хочу (при нажатии), чтобы удалить все сообщения (id of: $row['Report ID']
), которые имеют флажок …
Как мне это сделать?
Большое спасибо…
Задайте имя в форме 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. } } ?>
Изменить Чтобы отразить то, что сказал @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 }
вы должны указать свои флажки соответственно:
<input type="checkbox" name="check_list[]" value="…" />
вы можете получить доступ ко всем отмеченным флажкам с помощью
// loop over checked checkboxes foreach($_POST['check_list'] as $checkbox) { // do something }
пс. убедитесь, что вы правильно htmlspecialchars()
свой выход ( htmlspecialchars()
)
<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/>"; }
Извините, старая тема, но это один из важных моментов, чтобы упомянуть об этом, с которыми у @JamesRattray и других были проблемы.
НЕ закрывайте тег input
(используя />
), когда вы пытаетесь опубликовать несколько значений в PHP-скрипте. Когда вы закрываете тег самостоятельно, он заканчивает определение массива, и вы будете иметь только одно значение, отправленное в ваш сценарий при отправке. В действительности ответ @Scone может не работать до тех пор, пока не будет изменено значение /.
Вот почему в этом случае Warning: Invalid argument supplied for foreach() in /home1/...
PHP-ошибке.
EDIT: Как отмечается в комментариях ниже, дальнейшие исследования показывают, что это зависит от DOCTYPE. Если у вас установлен DOCTYPE для XHTML, это потребует закрытия входного тега. Если у вас есть набор DOCTYPE для HTML5, это потребует, чтобы входной тег не был закрыт. Существует также вероятность того, что это может быть продиктовано тем, какой браузер пользователь просматривает страницу и насколько хорошо он соответствует DOCTYPE, указанному в коде.
Это довольно просто. Обратите внимание, и вы сразу это получите! 🙂
Вы создадите массив 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
В зависимости от того, какие были проверены, а какие нет.
Я уверен, что вы можете продолжить с этого момента.