Bonjour
Je suis en train de développer un formulaire avec des cases à cocher dont le nombre est dynamique. Les pays s'affichent grâce à la fonction "go", les régions s'affichent suivant le pays grâce à la fonction "go_regions". Par exemple pour la France il y a 22 régions, et pour la Belgique il y a 11 régions.
La fonction "lister.php" qui créé la liste déroulante des pays :
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
94
95
96 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script language="JavaScript"> function verif_formulaire() { if (! checkbox_selected(22,'id_region_')){ alert("Veuillez entrer au moins une région ou vous exercez principalement"); document.form1.id_region_1.focus(); return false; } function checkbox_selected(nb,idBox) { var i; for (i=1;i<=nb;i++) { if (document.forms['form1'].elements[idBox+i].checked) return true; } return false; } // Pour lister les pays function go(){ var xhr = getXhr(); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200){ leselect = xhr.responseText; document.getElementById('id_villes').innerHTML = leselect; } } xhr.open("POST","lister_villes.php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sel = document.getElementById('id_pays'); idpays = sel.options[sel.selectedIndex].value; xhr.send("id_pays="+idpays); go_regions(); } // Pour lister les régions function go_regions(){ var xhr = getXhr(); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200){ leselect = xhr.responseText; document.getElementById('id_regions').innerHTML = leselect; } } xhr.open("POST","lister_regions.php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sel = document.getElementById('id_pays'); idpays = sel.options[sel.selectedIndex].value; xhr.send("id_pays="+idpays); } </script> </head> <body> <tr> <td align="left" class="Style4">Mon pays de résidence</td> <td align="left" valign="middle" class="Style4"> <?php lister('pays','nom_pays');?></td> </tr> <tr> <td align="left" class="Style4">Ma ville de résidence</td> <td id="id_villes" align="left" valign="middle" class="Style4"> <?php if((isset($_POST["id_pays"])) && (($_POST["id_pays"]) != 0)) {require_once 'lister_villes.php';} else echo '<select name="id_ville" id="id_ville" style="width:200px"> <option value="0" selected="selected"> choisissez un pays</option></select>';?></td> </tr> <tr> <td width="209" height="120" align="left"><class="Style1"> Je me déplace principalement dans les régions suivantes</td> <td id="id_regions" width="299" align="left" valign="middle" class="Style4"> <?php if((isset($_POST["id_pays"])) && (($_POST["id_pays"]) != 0)) {require_once 'lister_regions.php';} else echo '<select name="id_region" id="id_region" style="width:200px"> <option value="0" selected="selected"> choisissez un pays</option></select>';?></td> </tr> </body> </html>Le fichier "lister_regions.php" qui créé la liste déroulante des régions en fonction du pays et qui éxécute la fonction "nb_regions.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 <?php function lister ($table,$nomchamp) { $requete = "select pays_id,$nomchamp from $table order by $nomchamp"; $resultat = mysql_query($requete) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); echo '<select name="'.'id_'.$table.'" id="'.'id_'.$table.'" style="width:200px" onchange="go()">'; echo '<option value="0"'; if(!isset($_POST['id_'.$table])) { echo ' selected="selected"';} echo '>choisissez...</option>'; while ($ligne = mysql_fetch_array($resultat)) { $pays_id = $ligne['pays_id']; echo '<option value="'.$pays_id.'"'; if((isset($_POST['id_'.$table]))&&(($_POST['id_'.$table])== $pays_id)) { echo ' selected="selected"';} echo '>'.$ligne[$nomchamp].'</option>'; } echo'</select>'; } ?>
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 <?php if((isset($_POST["id_pays"])) && (($_POST["id_pays"]) != 0)) { require_once 'connectbdd.php'; require_once 'nb_regions.php'; $pays = $_POST["id_pays"]; $pays = donne_pays($pays); $resultat = mysql_query('SELECT region_id,nom_region FROM '.$pays.'_regions'.' ORDER BY nom_region') or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); echo '<div style="width:98%;height:100px;overflow:auto;border:1px solid #CCCCCC;padding:2px;">'; $i = 1; while ($ligne = mysql_fetch_array($resultat)) { $lettre = $ligne['region_id']; $region = $ligne['nom_region']; echo '<input type="checkbox" name="'.'id_region_'.$i.'" value="'.$lettre.'"'; if((isset($_POST['id_region_'.$i])) && (($_POST['id_region_'.$i]) == $lettre)) {echo ' checked="checked"';} echo '/>'.$region.'<br/>'; $i++; } echo'</div>'; nb_regions(); } else echo '<select name="id_region" id="id_region" style="width:200px"><option value="0" selected="selected">choisissez un pays</option></select>'; ?>
A la validation du formulaire, je fais un test pour savoir si au moins une région a été cochée avec les fonctions "verif_formulaire" et "checkbox_selected". S'il n'y a pas de région cochée, la fonction affiche une alerte.
Avant ça fonctionnait bien, car je n'avais qu'un seul pays, la France, donc le nombre de région était statique (22). Je passais donc en argument 22 dans la fonction "checkbox_selected" et tout était ok.
Mais maintenant quand l'utilisateur sélectionne la Belgique avec ses 11 régions, le test plante. Il faudrait que je passe en variable le nombre de régions en argument dans la fonction "verif_formulaire".
J'ai donc créé en PHP la fonction "nb_regions.php". Cette fonction est lancée dans le fichier "lister_regions.php". Grace à Ajax je récupère la variable "$_POST["id_pays"]" et je compte le nombre de régions du pays correspondant, et je retourne la variable "$nb_regions".
Fonction "nb_regions.php" qui renvoie le nombre de régions en fonction du pays :
Le problème c'est que je ne sais pas quand et comment passer la variable PHP "$nb regions" dans ma fonction "verif_formulaire". Les scripts sont au début de ma page alors que la fonction "nb_regions" est lancée quand l'utilisateur change de pays.
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 <?php Function nb_regions() { if((isset($_POST["id_pays"])) && (($_POST["id_pays"]) != 0)) { require_once 'connectbdd.php'; $pays = $_POST["id_pays"]; $pays = donne_pays($pays); $resultat = mysql_query('SELECT COUNT(*) FROM '.$pays.'_regions'.'') or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); $row = mysql_fetch_row($resultat); $nb_regions = $row[0]; return($nb_regions); } } ?>
Je suis débutant je ne sais pas si mon raisonnement est bon. Il est peut-être possible de faire autrement.
Merci de votre aide
Partager