Les Allergies
Alimentaires
Posez votre question Signaler

Checkbox multiple [Résolu]

arthezius 2624Messages postés 15 mai 2008Date d'inscription 16 mai 2012Dernière intervention - Dernière réponse le 27 janv. 2009 à 21:06
Bonjour,
Je me posais une question.
Supposons que j'ai une liste de donnée provenant d'une base de donnée qui soit affiché avec une boucle while.
Par exemple:
$sql = 'SELECT * FROM table';
$req = mysql_query($sql) or die('Erreur SQL 1 !<br />'.$sql.'<br />'.mysql_error());
while ($data = mysql_fetch_array($req))
     { echo $data['donnee']; }

C'est un exemple tout bête.
Supposons maintenant que pour chaque résultat figure un checkbox avec un identifiant différent.
La question que je me pose maintenant est comment traité un tel formulaire sachant que le nombre de donnée à traité sera variable ?
Je ne peux pas tout bêtement récupérer les données par un $_POST['...'] vue que le nombre de donnée est indéfini.
Comment faire donc pour traité à la fois 1 ou 5 valeurs par exemple ?
Exemple concret, on supposera que la liste de donnée est une liste de message reçu dans une messagerie et que je veux en supprimer plusieurs en les sélectionnant.
Si quelqu'un aurai une piste à me conseiller...
Merci d'avance.
Lire la suite 

Checkbox multiple »

6 réponses
Réponse
+2
moins plus
attention que si t'as d'autres données postées genre des hidden ou autre, fais un test avant ta requete sql..

un truc comme
if ($key!='monhidden'&&$key!='monhidden2) {
la requete sql
}
arthezius- 27 janv. 2009 à 21:06
En fait j'ai trouvé une autre solution qui m'a semblé plus simple dans mon cas.
Voici le script que j'ai utilisé:
<?php
if (isset($_POST['mon_champ'])) {
    echo "Vous avez choisi :";
    for ($i = 0, $c = count($_POST['mon_champ']); $i < $c; $i++) {
        echo "<br/><b>" . $_POST['mon_champ'][$i] . "</b>";
    }
}
?>
 
<form method="POST">
    <input type="checkbox" name="mon_champ[]" value="Option 1"/>Option 1<br>
    <input type="checkbox" name="mon_champ[]" value="Option 2"/>Option 2<br>
    <input type="checkbox" name="mon_champ[]" value="Option 3"/>Option 3<br>
    <input type="submit" value="OK">
</form>

Script trouvé sur: http://julp.developpez.com/php/formulaires/

J'ai fais des essai avec les solutions données précédement mais sans succès.

J'ai adapté le code de la manière suivante:
if (isset($_POST['id_mssg'])) {
    for ($i = 0, $c = count($_POST['id_mssg']); $i < $c; $i++) {
        $id_mssg = $_POST['id_mssg'][$i];
        $sql = 'DELETE FROM messages WHERE id="'.$id_mssg.'"'; 
        // on lance cette requête SQL 
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    }
}


Merci toutefois à ceux qui m'ont aidé.
A la limite, si vous voulez donner un résultat similaire avec votre solution, celà peut toujours être sympa et aider.
Ajouter un commentaire
Réponse
+0
moins plus
Tu utilises $_POST et tu nommes tes données caseAcocher_128 ou 128 est l'identifiant de ton mail.

Côté traitement,
un foreach($_POST as $cle => $val)
arthezius- 27 janv. 2009 à 15:49
Supposons l'identifiant du mail soit sur id (numéro de la ligne dans la base). Ce numéro est donc tout à fait variable. Je pourrai à la limite le faire transité via une variable. Toutefois comment faire pour que celà marche également dans le cas d'une sélection de plusieurs mail différent ?
Si je pouvais avoir un exemple concrêt en application ou tout du moins un quelques chose pour me mettre sur la piste.
Dans le cas d'un seul élément à supprimer c'est simple.
Un DELETE [...] WHERE id=''.$id.'' marcherai mais là le nombre de champs étant variable...

Merci d'avance.
Ajouter un commentaire
Réponse
+0
moins plus
foreach ($_POST as $key => $val) {

mysql_query('DELETE FROM `latable` WHERE `id`="'.$val.'"');

}
arthezius- 27 janv. 2009 à 17:53
Ok je vais étudier ça.
Ajouter un commentaire
Ce document intitulé « Checkbox multiple » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?