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 :
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
 
  <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&eacute;part pr&eacute;vue : <INPUT Name="heb_dep" size="23" 
                          value="<?php if (isset($_SESSION['heb_dep'])) echo $_SESSION['heb_dep'] ;?>" /><BR/><BR/>
    Installation occup&eacute;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&eacute;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>
Ensuite mon JS
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
 
/* 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);
    }
}
Et enfin mon fichier PHP pour la creation du 2ème block
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
 
<?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");
}
?>
J'attends vos conseils et/ou corrections avec impatience
Merci à tous