Получить $ _POST из нескольких флажков

У меня есть 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

В зависимости от того, какие были проверены, а какие нет.

Я уверен, что вы можете продолжить с этого момента.