Bonjour
Je débute, j'essaie de comprendre, mais là je plante.
Est-ce que quelqu'un pourrait m'aider ?
Voila deux j'ai deux listes déroulantes "camp" et "block".
Un formulaire de départ; "arrivée.php"
un script java "camp_xhr.js"
un fichier "u_block.php".
J'arrive a créer ma première liste et à l'afficher.
Mais pas la deuxième.
Voici mon code :
Ensuite mon JSCode:
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 <div class="main_page_b" style="background-color:white"> <h1 align=center><?php echo $_SESSION['msg_104'] ;?> </h1> <FONT size=2><CENTER><?php echo $_SESSION['msg_105'] ;?> </CENTER><BR/> <FORM class="form_3" method=post action="maj_arrivee.php" > Type Attribution : <SELECT Name="heb_statut" style="background-color:cyan;" > <?php Connect_Base(); $sql_heb="SELECT C_LIB_HEB_STATUT FROM statut_heb ORDER BY C_ID_HEB_STATUT"; $result = mysql_query($sql_heb); while ($row = mysql_fetch_assoc($result)) echo "<option value=\"".$row["C_LIB_HEB_STATUT"]."\"" .( ($row["C_LIB_HEB_STATUT"]==$_SESSION['heb_statut'] ) ? " selected" : "" ) .">".$row["C_LIB_HEB_STATUT"]."</option>" ; mysql_free_result($result); ?> </SELECT> <BR/><BR/> Date attribution : <INPUT Name="heb_arr" size="20" value="<?php if (isset($_SESSION['heb_arr'])) echo $_SESSION['heb_arr'] ;?>" /><BR/><BR/> Date départ prévue : <INPUT Name="heb_dep" size="23" value="<?php if (isset($_SESSION['heb_dep'])) echo $_SESSION['heb_dep'] ;?>" /><BR/><BR/> Installation occupée :<BR><BR> Camp : <?php /* Requete SQL de recuperation des donnees de la premiere liste */ $sql_camp="SELECT C_ID_CAMP as idcamp, C_LIB_CAMP FROM camp ORDER BY C_ID_CAMP"; Connect_Base(); $res_camp = mysql_query($sql_camp); /* Création du tableau PHP des valeurs récupérées */ $camp = array(); /* Index block par tableau camp */ $id = 0; while($ligne = mysql_fetch_assoc($res_camp)) { $camp[$ligne['idcamp']] = $ligne['C_LIB_CAMP']; } ?> <select name="heb_id_camp" id="camp" onchange="getBlock(this.value);"> <option value="vide"></option> <?php /* Construction de la première liste : on se sert du tableau PHP */ foreach($camp as $nr => $nom) { ?> <option value="<?php echo($nom); ?>"><?php echo($nom); ?></option> <?php } ?> </select> <!-- ICI, le secret : on met un bloc avec un id ou va s'insérer le code de la seconde liste déroulande --> <?php $_SESSION['camp']= ($_POST['idcamp']); echo "jjjj".$_SESSION['camp']; ?> <span id="SelectBlock"></span><br /> Chambre : <SELECT Name="heb_id_chb" style="background-color:cyan;" > <?php Connect_Base(); $sql_chb="SELECT C_ID_CHB FROM infrastructure ORDER BY C_ID_CHB where C_ID_BLOCK="."\"".$_POST['heb_id_block']."\"". " and C_FLAG_DISPO=\"OUI\""; $res_chb = mysql_query($sql_chb); while ($row = mysql_fetch_assoc($res_chb)) echo "<option value=\"".$row["C_ID_CHB"]."\"" .( ($row["C_ID_CHB"]==$_SESSION['heb_id_chb'] ) ? " selected" : "" ) .">".$row["C_ID_CHB"]."</option>" ; mysql_free_result($res_chb); ?> </SELECT> Lit : <SELECT Name="heb_id_lit" style="background-color:cyan;" > <?php Connect_Base(); $sql_lit="SELECT C_ID_LIT FROM infrastructure ORDER BY C_ID_LIT where C_ID_CHB="."\"".$_POST['heb_id_chb']."\"". " and C_FLAG_DISPO=\"OUI\""; $res_lit = mysql_query($sql_lit); while ($row = mysql_fetch_assoc($res_lit)) echo "<option value=\"".$row["C_ID_LIT"]."\"" .( ($row["C_ID_LIT"]==$_SESSION['heb_id_lit'] ) ? " selected" : "" ) .">".$row["C_ID_LIT"]."</option>" ; mysql_free_result($res_lit); ?> </SELECT> <BR/><BR/> Type de chambre : <INPUT Name="heb_typ_chb" READONLY size="22" value="<?php if (isset($_POST['heb_id_camp'])) { echo Recherche_Installation($_POST['heb_id_camp'],$_POST['heb_id_block'],$_POST['heb_id_chb'], $_POST['heb_id_lit']); } ?> " /><BR/><BR/> Commentaire hébergement :<BR/> <TEXTAREA rows="3" name="heb_msg" cols="67" > <?php if (isset($_SESSION['heb_msg'])) echo $sql_block ;?> </TEXTAREA><BR/> <INPUT Value="Valider" type='submit' name="bt_heb" /> </FORM> </FONT> </div>
Et enfin mon fichier PHP pour la creation du 2ème blockCode:
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 /* Création de la variable globale qui contiendra l'objet XHR */ var requete = null; function creerRequete() { try { /* On tente de créer un objet XmlHTTPRequest */ requete = new XMLHttpRequest(); } catch (microsoft) { /* Microsoft utilisant une autre technique, on essays de créer un objet ActiveX */ try { requete = new ActiveXObject('Msxml2.XMLHTTP'); } catch(autremicrosoft) { /* La première méthode a échoué, on en teste une seconde */ try { requete = new ActiveXObject('Microsoft.XMLHTTP'); } catch(echec) { /* À ce stade, aucune méthode ne fonctionne... mettez donc votre navigateur à jour ;) */ requete = null; } } } if(requete == null) { alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.'); } } /** * Fonction privée qui va mettre à jour l'affichage de la page. */ function actualiserblock() { var listeBlock = requete.responseText; var SelectBlock = document.getElementById('SelectBlock'); SelectBlock.innerHTML = listeBlock; } /** * Fonction publique appelée par la page affichée. * Cette fonction va initialiser la création de l'objet XHR puis appeler * le code serveur afin de récupérer les données à modifier dans la page. */ function getBlock(idcamp) { /* Si il n'y a pas d'identifiant de camp, on fait disparaître la seconde liste au cas où elle serait affichée */ if(idcamp == 'vide') { document.getElementById('SelectBlock').innerHTML = ''; } else { /* À cet endroit précis, on peut faire apparaître un message d'attente */ var SelectBlock = document.getElementById('SelectBlock'); /* SelectBlock.innerHTML = "Traitement en cours, veuillez patienter..."+idcamp; */ /* On crée l'objet XHR */ creerRequete(); /* Définition du fichier de traitement */ var url = 'u_block.php?idcamp='+idcamp; /* Envoi de la requête à la page de traitement */ requete.open("POST", "arrivee.php", true); requete.SetRequestHeader('Content-type', 'application/x-www-form-urlencoded'); requete.send("idcamp="+idcamp); /* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */ requete.onreadystatechange = function() { /* Lorsque l'état est à 4 */ if(requete.readyState == 4) { /* Si on a un statut à 200 */ if(requete.status == 200) { /* Mise à jour de l'affichage, on appelle la fonction apropriée */ actualiserBlock(); } } }; requete.send(null); } }
J'attends vos conseils et/ou corrections avec impatienceCode:
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 <?php session_start(); /** * Code est appele par un objet XHR et qui * retourne la liste déroulante des blocks * correspondant à la camp sélectionnée. */ /* On récupère l'identifiant de la région choisie. */ $idcamp = isset($_POST['idcamp']) ? $_POST['idcamp'] : false; /* Si on a un camp, on procède à la requête */ if(false !== $idcamp) { /* Cération de la requête pour avoir les blocks de ce camp */ $sql_block="SELECT C_ID_BLOCK FROM infrastructure where C_ID_CAMP="."\"".$idcamp."\"". " and C_FLAG_DISPO=\"OUI\" ORDER BY C_ID_BLOCK"; Connect_Base(); $rech_block = mysql_query($sql_block); /* Un petit compteur pour les blocks */ $nd = 0; /* On crée un tableau pour les noms des blocks */ $nom_block = array(); /* On met les noms des blocks dans le tableaux */ while(false != ($ligne_block = mysql_fetch_assoc($rech_block))) { echo $ligne_block['C_ID_BLOCK']; $nom_block[] = $ligne_block['C_ID_BLOCK']; $nd++; } /* Maintenant on construit la liste déroulante */ $liste = ""; $liste .= '<select name="heb_id_block" id="block" >'."\n"; for($d = 0; $d < $nd; $d++) { $liste .= ' <option value="'. $nom_block[$d] .'">'. htmlentities($nom_block[$d]) .' ('. $nom_block[$d] .')</option>'."\n"; } $liste .= '</select>'."\n"; /* Un petit coup de balai */ mysql_free_result($rech_block); /* Affichage de la liste déroulante */ echo($liste); } /* Sinon on retourne un message d'erreur */ else { echo("<p>Une erreur s'est produite. le camp sélectionné comporte une donnée invalide.</p>\n"); } ?>
Merci à tous