Checkbox multiple

Résolu
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   -  
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   28
 
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   Statut Membre Dernière intervention   475
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   475
 
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   Statut Membre Dernière intervention   28
 
foreach ($_POST as $key => $val) {

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

}
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Ok je vais étudier ça.
0