Получить $ _POST от нескольких флажков - PullRequest
151 голосов
/ 15 февраля 2011

У меня есть 1 форма с несколькими флажками (каждый с кодом):

<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">

Где $row['Report ID'] - первичный ключ в базе данных, поэтому каждое значение отличается.

Как мне узнать, какие флажки были отмечены?(Может быть несколько)

Это для системы входящих сообщений, и у меня есть кнопка ниже, которую я хочу (при нажатии) удалить все сообщения (идентификаторы: $row['Report ID']), у которых установлен флажок.

Ответы [ 6 ]

315 голосов
/ 15 февраля 2011

Установите имя в форме на 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.
    }
}
?>
21 голосов
/ 15 февраля 2011

Изменить Чтобы отразить то, что @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
}
16 голосов
/ 15 февраля 2011

вы должны соответствующим образом назвать свои флажки:

<input type="checkbox" name="check_list[]" value="…" />

затем вы можете получить доступ ко всем отмеченным флажкам с помощью

// loop over checked checkboxes
foreach($_POST['check_list'] as $checkbox) {
   // do something
}

пс.убедитесь, что правильно выходите из вашего выхода (htmlspecialchars())

12 голосов
/ 23 февраля 2015

Извините, старая тема, но для этого стоит упомянуть одну важную вещь, с которой у @JamesRattray и других возникли проблемы.

НЕ закрывайте тег input (используя />), когда вы пытаетесь опубликовать несколько значений в сценарии PHP. Когда вы закрываете тег самостоятельно, он завершает определение массива, и у вас будет только одно значение, отправленное в ваш скрипт при отправке. В действительности, ответ @Scone может не работать, пока не будет изменено />.

Это то, что вызывает Warning: Invalid argument supplied for foreach() in /home1/... ошибку PHP в этом случае.

РЕДАКТИРОВАТЬ: Как отмечено в комментариях ниже, дальнейшие исследования показывают, что это зависит от DOCTYPE. Если вы установили DOCTYPE для XHTML, потребуется закрыть тег ввода. Если у вас есть DOCTYPE HTML5, потребуется, чтобы входной тег не был закрыт. Существует также вероятность, что это может быть продиктовано тем, в каком браузере пользователь просматривает страницу, и насколько хорошо она соответствует DOCTYPE, указанному в коде.

12 голосов
/ 15 февраля 2011
<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 голосов
/ 15 февраля 2011

Все довольно просто.Обратите внимание, и вы получите это прямо сейчас!:)

Вы создадите 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 s ваших сообщений, а это означает, что вы echo ваши $row['Report ID'] на их месте.

Затем, когда вы отправляете форму, ваш PHP-массив будет выглядеть так:

print_r($check_list)

[1] => checked [3] => checked

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...