Checkbox multiple

Résolu/Fermé
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 - 26 janv. 2009 à 18:02
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 - 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.

3 réponses

jona303 Messages postés 369 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 28 janvier 2013 28
27 janv. 2009 à 17:57
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
}
2
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
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.
0
Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1
27 janv. 2009 à 10:04
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)
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
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.
0
jona303 Messages postés 369 Date d'inscription dimanche 25 janvier 2009 Statut Membre Dernière intervention 28 janvier 2013 28
27 janv. 2009 à 15:52
foreach ($_POST as $key => $val) {

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

}
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
27 janv. 2009 à 17:53
Ok je vais étudier ça.
0