Pobierz $ POST z wielu pól wyboru

Mam 1 Formularz z wieloma checkboxami w nim (każdy z kodem):

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

Gdzie $row['Report ID'] jest kluczem podstawowym w bazie danych -więc każda wartość jest inna.

Jak mogę stwierdzić, które pola zostały zaznaczone? (Może Wiele)

(w kontekście:) Its dla systemu skrzynek odbiorczych i mam przycisk poniżej, który chcę (po kliknięciu) usunąć wszystkie wiadomości (id: $row['Report ID']), które mają zaznaczone pole wyboru...

Jak miałbym to zrobić?

Dzięki dużo...

Author: Pete, 2011-02-15

6 answers

Ustaw nazwę w formularzu na check_list[], a będziesz mógł uzyskać dostęp do wszystkich pól wyboru jako tablica ($_POST['check_list'][]).

Oto mała próbka zgodnie z życzeniem:

<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.
    }
}
?>
 298
Author: Sean Walsh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-06 06:10:00

Edytuj , aby odzwierciedlić to, co @ Marc powiedział w komentarzu poniżej.

Możesz zrobić pętlę przez wszystkie opublikowane wartości.

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
}
 21
Author: Scone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-30 14:11:43

Musisz odpowiednio nazwać swoje checkboxy:

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

Możesz następnie uzyskać dostęp do wszystkich zaznaczonych checkboxów za pomocą

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

Ps. upewnij się, że poprawnie uciekasz od wyników (htmlspecialchars())

 15
Author: knittl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 09:42:24
<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">

A po wpisie możesz je przerobić:

   if(!empty($_POST['check_list'])){
     foreach($_POST['check_list'] as $report_id){
        echo "$report_id was checked! ";
     }
   }

Lub uzyskaj określoną wartość dodaną z poprzedniej strony:

if(isset($_POST['check_list'][$report_id])){
  echo $report_id . " was checked!<br/>";
}
 12
Author: Mārtiņš Briedis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-13 17:04:23

Sorry, Stary temat, ale jest to jeden ważny kawałek, o którym warto wspomnieć, z którym @JamesRattray i inni mieli problemy.

Nie zamykaj znacznika input (używając />), gdy próbujesz dodać wiele wartości do skryptu PHP. Gdy sam zamkniesz znacznik, zakończy on definicję tablicy i będziesz miał tylko jedną wartość dodaną do skryptu podczas przesyłania. W efekcie odpowiedź @Scone może nie działać, dopóki /> nie zostanie zmieniona.

To właśnie powoduje Warning: Invalid argument supplied for foreach() in /home1/... PHP błąd w tym przypadku.

EDIT: jak zauważono w komentarzach poniżej, dalsze badania sugerują, że jest to zależne od DOCTYPE. Jeśli masz ustawiony DOCTYPE dla XHTML, będzie to wymagało zamknięcia znacznika wejściowego. Jeśli masz zestaw DOCTYPE HTML5, będzie to wymagało, aby znacznik wejściowy nie był zamknięty. Istnieje również szansa, że może to być podyktowane przez to, w jakiej przeglądarce użytkownik przegląda stronę i jak dobrze postępuje zgodnie z typem DOCTYPE określonym w kodzie.

 12
Author: Jon Gallup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-07 15:08:54

To dość proste. Zwróć uwagę, a dostaniesz go od razu! :)

Utworzysz tablicę html, która zostanie następnie wysłana do tablicy php. Twój kod html będzie wyglądał tak:

<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">

Gdzie [1] [2] [3]ID S Twoich wiadomości, co oznacza, że będziesz echo Twoim $row['Report ID'] w ich miejsce.

Następnie, po przesłaniu formularza, tablica PHP będzie wyglądać tak:

print_r($check_list)

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

W zależności od tego, które zostały sprawdzone, a które nie.

I ' m oczywiście, że możesz kontynuować od tego momentu.

 5
Author: Richard Rodriguez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-10 04:38:02