web-dev-qa-db-fra.com

Obtenez $ _POST à ​​partir de plusieurs cases à cocher

J'ai 1 formulaire avec plusieurs cases à cocher (chacune avec le code):

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

$row['Report ID'] est une clé primaire dans une base de données, où chaque valeur est différente.

Comment pourrais-je savoir quelles cases ont été cochées? (Peut-être multiple)

Ceci est pour un système de boîte de réception et j'ai un bouton ci-dessous que je veux (quand on clique dessus) pour supprimer tous les messages (identifiants de: $row['Report ID']) qui ont la case cochée.

151
James Rattray

Définissez le nom sous la forme sur check_list[] et vous pourrez accéder à toutes les cases à cocher sous forme de tableau ($_POST['check_list'][]).

Voici un petit échantillon comme demandé:

<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.
    }
}
?>
315
Sean Walsh

Edit Pour refléter ce que @Marc a dit dans le commentaire ci-dessous.

Vous pouvez faire une boucle à travers toutes les valeurs publiées.

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
Scone

vous devez nommer vos cases à cocher en conséquence:

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

vous pouvez ensuite accéder à toutes les cases cochées avec

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

ps. assurez-vous d'échapper correctement à votre sortie (htmlspecialchars())

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

Et après le post, vous pouvez les parcourir:

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

Ou obtenez une certaine valeur postée de la page précédente:

if(isset($_POST['check_list'][$report_id])){
  echo $report_id . " was checked!<br/>";
}
12
Mārtiņš Briedis

Désolé, vieux sujet, mais c’est un élément important à mentionner pour lequel @JamesRattray et d’autres avaient des problèmes.

Ne fermez pas automatiquement la balise input (à l'aide de />) lorsque vous essayez d'envoyer plusieurs valeurs dans le script PHP. Lorsque vous fermez vous-même la balise, la définition du tableau se termine et vous n'aurez qu'une seule valeur publiée dans votre script lors de la soumission. En effet, la réponse de @Scone risque de ne pas fonctionner tant que le /> n'aura pas été modifié.

C’est ce qui cause l’erreur Warning: Invalid argument supplied for foreach() in /home1/... PHP dans ce cas.

EDIT: Comme indiqué dans les commentaires ci-dessous, d’autres recherches suggèrent que cela dépend de DOCTYPE. Si vous avez défini DOCTYPE pour XHTML, il faudra que la balise d’entrée soit fermée. Si vous avez un ensemble DOCTYPE de HTML5, il faudra que la balise d'entrée ne soit pas fermée. Cela pourrait également être dicté par le navigateur dans lequel l'utilisateur visualise la page et dans quelle mesure il respecte le DOCTYPE spécifié dans le code.

12
Jon Gallup

C'est assez simple. Faites attention et vous l'aurez tout de suite! :)

Vous allez créer un tableau html, qui sera ensuite envoyé à un tableau php. Votre code html ressemblera à ceci:

<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] sont les IDs de vos messages, ce qui signifie que vous echo votre $row['Report ID'] à leur place.

Ensuite, lorsque vous soumettez le formulaire, votre tableau PHP ressemblera à ceci:

print_r($check_list)

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

En fonction de ce qui a été vérifié et qui ne l'étaient pas.

Je suis sûr que vous pouvez continuer à partir de maintenant.

5
Richard Rodriguez