167 votes

Obtenir $_POST de plusieurs cases à cocher

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

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

Dónde $row['Report ID'] est une clé primaire dans une base de données - chaque valeur est donc différente.

Comment puis-je savoir quelles cases ont été cochées (peut-être plusieurs) ?

Il s'agit d'un système de boîte de réception et j'ai un bouton en dessous que je veux (lorsqu'il est cliqué) pour supprimer tous les messages (ids) : $row['Report ID'] ) dont les cases sont cochées.

352voto

Sean Walsh Points 3928

Définir le nom du formulaire comme suit check_list[] et vous pourrez accéder à toutes les cases à cocher sous la forme d'un 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.
    }
}
?>

4 votes

Pouvez-vous me donner un exemple d'écho d'une case à cocher check_list[] ? (Et en serait-il de même pour deux cases sélectionnées ?) Merci.

2 votes

Je devrais également préciser que si aucune valeur n'est définie dans le code HTML, $check sera égal à on .

9 votes

if($_POST) - inutile, $_POST sera toujours vrai. Vous devez vérifier si !empty($_POST['check_list']) au lieu de cela.

23voto

Scone Points 103

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

Vous pouvez effectuer une boucle sur toutes les valeurs enregistré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
}

1 votes

Erreur bizarre : Avertissement : Invalid argument supplied for foreach() in /home1/mountgam/public_html/zombiewrath/reports.php on line 30 =/

2 votes

Cela ne fonctionnerait que si vous utilisiez le [] dans la définition du champ, ce qui permet à PHP de créer la valeur $_POST sous forme de tableau. Sinon, il s'agira d'une seule valeur qui ne sera pas un tableau, ce qui fera exploser la boucle foreach().

1 votes

J'ai essayé les deux, mais ok je vais réessayer (Sans [] dans le formulaire/nom)

17voto

knittl Points 64110

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

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

vous pouvez alors 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() )

13voto

Mārtiņš Briedis Points 7934
<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">

Après l'envoi, vous pouvez les parcourir en boucle :

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

Ou obtenir une certaine valeur affichée à partir de la page précédente :

if(isset($_POST['check_list'][$report_id])){
  echo $report_id . " was checked!<br/>";
}

6voto

Richard Rodriguez Points 2617

C'est très simple. Prêtez attention et vous comprendrez tout de suite ! :)

Vous allez créer un tableau html, qui sera ensuite envoyé dans 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">

Dónde [1] [2] [3] sont les ID s 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 de ce qui ne l'a pas été.

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

6 votes

Rappelez-vous que check_list[] commencerait par check_list[0] plutôt que check_list[1] .

1 votes

Value="checked" est contre-productif. Si aucune valeur n'est spécifiée, vous obtenez "on". L'avantage de spécifier les valeurs que vous voulez soumettre dans les attributs value est que vous pouvez envoyer des données presque arbitraires qui n'ont pas besoin de devenir un index de tableau PHP. L'itération sur les valeurs d'un tableau avec foreach est également plus facile que l'itération sur les clés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X