Bonjour à tous,
J'aimerais que les cases de mes checkbox restent cochées même si le formulaire n'a pas été complètement validé de manière à ce que l'utilisateur n'ait pas à les cocher une seconde fois.
J'ai appliqué la fonction mysql_fetch_assoc qui permet qu'à chaque nouvelle entrée dans la base de donnée une nouvelle case dans la checkbox se créée.
Par exemple, si je rentre dans ma table "demande" les attributs "id" = "1" et "nom" = "site internet", le formulaire créé automatiquement la case à cocher avec le nom correspondant.
Pour réaliser ce que je veux il me semble nécessaire de mettre une "value" pour chaque case de la checkbox de manière à pouvoir les distinguer chacune mais pour mon cas on ne peut attribuer de value qu'à une seule ligne (voir fichier formulaire.php ci dessous). Je pense pouvoir résoudre mon problème avec une boucle "for" mais je ne sais pas comment l'intégrer à la fonction mysql_fetc_assoc.
Voici des extraits de mes deux fichiers
Fichier formulaire.php
Fichier traitement.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 <fieldset style="margin:25px"> <legend><b>Vos informations</b></legend> <table> <tr> <td width="250"><label for="site[]">Comment avez vous connu le site ?</label></td> <td> <?php while($aData = mysql_fetch_assoc($qSite)){ ?> <input type="checkbox" name="site[]" value="<?php echo $aData['id']; ?>" /> <label><?php echo $aData['n_site']; ?></label> <?php } if (empty($aSite)) { echo " => Veuillez préciser comment vous avez connu le site!"."</br>"; }?> </td> </tr> <tr> <td width="250"><label for="demande[]">Quelles sont vos demandes de site ?</label></td> <td> <?php while($aData = mysql_fetch_assoc($qDemande)){ ?> <input type="checkbox" name="demande[]" value="<?php echo $aData['id']; ?>" <?php if(!empty($aDemande)) echo 'checked="checked"'; ?>/> <label><?php echo $aData['n_demande']; ?></label> </td> <?php } if (empty($aDemande)) { echo "</br>"." => Veuillez préciser votre demande de site!"."</br>"; }?> </tr> </table> </fieldset>
Remarque : j'ai complété le code concernant la deuxième checkbox de formulaire.php (avec $aDemande) sans pouvoir dégager le moindre résultat si ce n'est que lorsque l'on coche par exemple une case ou deux sur les trois présentes, toutes sont finalement cochées par défaut lorsque l'on souhaite valider le formulaire. Par contre, j'ai laissé telle qu'elle la première checkbox de formulaire.php (avec $aSite).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 <?php //------------------------------------------------------ //Déclaration des variables à poster dans le formulaire $aSite=$_POST['site']; if(isset($aSite)){array_map("htmlentities", $aSite);} $aDemande=$_POST['demande']; if(isset($aDemande)){array_map("htmlentities", $aDemande);} // Traitement des données du formulaire /** * * Si formulaire posté Alors * Si données valide Alors * enregistrer en base de donnée et dire que ça marche uniquement le message, le formulaire doit disparaitre ! * Sinon * Afficher le formulaire avec les valeurs que l'utilisateur a inscrite + message que tous les champs ne sont pas valides * Fin Si * Fin Si * */ if(isset($_POST['valider'])){ if (isset($aSite) && isset($aDemande)){ $etat='envoi'; // envoi des données à la bdd avec message de validation } //---------------------------------------------------------------------------- // Gestion affichage des checkbox site et demande dans formulaire et dans bdd //site $sSQL = "SELECT n_site FROM site ORDER BY n_site" ; $qSite = mysql_query($sSQL); $sSQLSite = "SELECT * FROM site ORDER BY n_site"; $qSite = mysql_query($sSQLSite); //demande $sSQL = "SELECT n_demande FROM demande ORDER BY n_demande" ; $qDemande = mysql_query($sSQL); $sSQLDemande = "SELECT * FROM demande ORDER BY n_demande"; $qDemande = mysql_query($sSQLDemande); //---------------------------------------------------------------------------- // Cas état envoi if($etat=='envoi'){ // si toutes les données sont remplies et valides //Requetes pour insertion des données dans la base si elles sont toutes valides $sql = "INSERT INTO formulaire(id, nom, prenom, adresse, code_postal, ville, telephone, fax, email, devis, contact) VALUES('','$nom','$prenom','$adresse','$code_postal','$ville','$telephone','$fax','$email', '$devis', '$contact')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); $id_formulaire = mysql_insert_id();// on récupère l'id_formulaire qui vient d'être généré if(isset($aSite)){ foreach($aSite as $n_site){ $sql = "INSERT INTO siteformulaire(id_formulaire, id_site) VALUES ('$id_formulaire','$n_site')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); } } if(isset($aDemande)){ foreach($aDemande as $n_demande){ $sql = "INSERT INTO demandeformulaire(id_formulaire, id_demande) VALUES ('$id_formulaire','$n_demande')"; mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); } } echo "les données ont été envoyées à la base de données"; ?></br><a href="index.php?page=p_accueil.php">Revenir à l'accueil</a><?php } } ?>
N'hésitez pas à me dire ce que vous en pensez car je ne suis pas sûr que cela soit réalisable qu'avec php. Merci
Partager