Bonsoir,

Dans un formulaire, j'ai une liste founisseurs. Lorsque je sélectionne un fournisseur dans la liste, je voudrais mettre à jour la liste des familles à jour et, lorsque celle-ci a été mise à jour par de l'AJAX, je voudrais pouvoir sélectionner une une famille et, par ce fait, mettre à jour, toujours via de l'AJAX, une liste de produits.

Le problème, c'est que ma liste des familles se met bien à jour en fonction du fournisseur sélectionné, mais lorsque je veux mettre à jour la liste des produits, la value de l'option correspondant à la famille n'est pas récupérée, et donc ma mise à jour des produits ne s'effectue pas.

Je travaille avec FireFox.

Voici mon code :

- Mon formulaire ajaxCommandes.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
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
97
98
99
100
101
102
103
104
<div id="contenu">
   <form name="commande" method="post" action="enregCommande.php">
   <?php afficherErreur($erreur); ?>
	<table id="tcontenu">
 	<tr>
 		<td id="tdcontenu" colspan="7">Date*
 
		 <select name='jour' id='jour' tabindex='1' onChange="if(document.forms.commande.dejaControle.value == 1) CheckDate(document.forms.commande.jour, document.forms.commande.mois, document.forms.commande.annee, '2007', '3007', document.forms.commande.dejaControle)">
		     <option value='0' selected></option>
		     <option value='01'>01</option>
		     <option value='02'>02</option>
		     <option value='03'>03</option>
		     <option value='04'>04</option>
		     <option value='05'>05</option>
		     <option value='06'>06</option>
		     <option value='07'>07</option>
		     <option value='08'>08</option>
		     <option value='09'>09</option>
		     <option value='10'>10</option>
		     <option value='11'>11</option>
		     <option value='12'>12</option>
		     <option value='13'>13</option>
		     <option value='14'>14</option>
		     <option value='15'>15</option>
		     <option value='16'>16</option>
		     <option value='17'>17</option>
		     <option value='18'>18</option>
		     <option value='19'>19</option>
		     <option value='20'>20</option>
		     <option value='21'>21</option>
		     <option value='22'>22</option>
		     <option value='23'>23</option>
		     <option value='24'>24</option>
		     <option value='25'>25</option>
		     <option value='26'>26</option>
		     <option value='27'>27</option>
		     <option value='28'>28</option>
		     <option value='29'>29</option>
		     <option value='30'>30</option>
		     <option value='31'>31</option>
		    </select>
		 /
			<select name='mois' id='mois' tabindex='2' onChange="if(document.forms.commande.dejaControle.value == 1) CheckDate(document.forms.commande.jour, document.forms.commande.mois, document.forms.commande.annee, '2007', '3007', document.forms.commande.dejaControle)">
		      <option value='0' selected></option>
			  <option value='01'>01</option>
		      <option value='02'>02</option>
		      <option value='03'>03</option>
		      <option value='04'>04</option>
		      <option value='05'>05</option>
		      <option value='06'>06</option>
		      <option value='07'>07</option>
		      <option value='08'>08</option>
		      <option value='09'>09</option>
		      <option value='10'>10</option>
		      <option value='11'>11</option>
		      <option value='12'>12</option>
		    </select>
		 /
			<select name='annee' id='annee' tabindex='3' onChange="CheckDate(document.forms.commande.jour, document.forms.commande.mois, document.forms.commande.annee, '2007', '3007', document.forms.commande.dejaControle)">
		      <option value='0' selected></option>
              <?php
                if(date('m') == 1)
                                 echo "<option value='" . date("Y", mktime(date('H'), date('i'), date('s'), date('m'), date('w'), date('Y') - 1)) . "'>" . date("Y", mktime(date('H'), date('i'), date('s'), date('m'), date('w'), date('Y') - 1)) . "</option>";                  
                                echo "<option value='" . date("Y") . "'>" . date('Y') . "</option>";                    
                          ?> 			  
			</select>
			<input type='hidden' name='dejaControle' id='dejaControle' value='0'>
		</td>
 	</tr>
	<tr>
 		<td id="tdcontenu">&nbsp;</td>
 		<td id="tdcontenu">Fournisseur</td>
 		<td id="tdcontenu">
		    <select name='fournisseurs' id='fournisseurs' style='width:150px' tabindex='4' onChange="majFam();">
		       <option value='0' selected></option>
		       <?php affFourn(); ?>
		    </select>		   
	    </td>
 		<td id="tdcontenu">&nbsp;</td>
 		<td id="tdcontenu">Famille</td>
 		<td id="tdcontenu">
		  <div id="famille" style='display:inline'>
			<SELECT name='famille' tabindex='5' onChange="majProd();">
		      <option value='0' selected>Choisir un fournisseur</option>
		    </select>
		  </div>
	    </td>
 		<td id="tdcontenu">&nbsp;</td>
 	</tr>
	<tr>
 		<td id="tdcontenu">&nbsp;</td>
 		<td id="tdcontenu">Produit*</td>
 		<td id="tdcontenu">
		 <div id="produit" style='display:inline'>
		 </div>
		</td>
 		<td id="tdcontenu">&nbsp;</td>
 		<td id="tdcontenu">Prix unitaire*</td>
 		<td id="tdcontenu"><input type="text" name="requiredprix" id='7' size="5" maxlength="5" tabindex='7' onblur="this.style.backgroundColor = '#FFFFFF'; if(verifNombre(this)) this.style.backgroundColor = '#F3C200'">&nbsp;&nbsp;euros</td>
 		<td id="tdcontenu">&nbsp;</td>
 	</tr>
 </table>
   </form>
  </div>
- Mes fonctions du fichier fonctionsJs.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
function getXhr()
	{
        var xhr = null;
 
		if(window.XMLHttpRequest) // Firefox et autres
			xhr = new XMLHttpRequest(); 
		else if(window.ActiveXObject)
			{ // Internet Explorer 
				try 
					{
			            xhr = new ActiveXObject("Msxml2.XMLHTTP");
			        } catch (e) 
						{
			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
			            }
			}
		else 
			{ // XMLHttpRequest non supporté par le navigateur 
				alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
				xhr = false; 
			} 
        return xhr;
	}
 
function majFam()
{
 {
  xhr=getXhr();
  xhr.onreadystatechange = function()
   {
    if(xhr.readyState == 4 && xhr.status == 200)
     {
      // On affiche dans le div le retour 
      document.getElementById('famille').innerHTML = xhr.responseText;
     }
   }
  // On envoie la requete 
  xhr.open("POST",'../transferts/ajaxMajFam.php',true);
  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  // On recupere la valeur du paramètre
  fournisseur = document.getElementById('fournisseurs').value;
  // On envoie la récupération
  xhr.send("fournisseur="+fournisseur);
 }
 
}
 
function majProd()
{
 {
  xhr=getXhr();
  xhr.onreadystatechange = function()
   {
    if(xhr.readyState == 4 && xhr.status == 200)
     {
      // On affiche dans le div
      document.getElementById('produit').innerHTML = xhr.responseText;
     }
   }
  // On envoie la requete 
  xhr.open("POST",'../transferts/ajaxMajProd.php',true);
  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  // On recupere la valeur des paramètres
  fournisseur = document.getElementById('fournisseurs').value;
  famille = document.getElementById('famille').value;
  // On envoie la récupération
  xhr.send("fournisseur="+fournisseur+"&famille="+famille);
 }
 
}
- Mon fichier de traitement ajaxMajFam.php :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
<?php
 include_once("../fichiersAnnexes/fonctionsPhp.inc");
 affFamilles($_POST['fournisseur']);
?>
- Mon fichier de traitement ajaxMajProd.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
<?php
 include_once("../fichiersAnnexes/fonctionsPhp.inc");
 
 if($_POST['fournisseur'] == "" || $_POST['fournisseur'] == 0)
   $fournisseur = "";
 else
   $fournisseur = $_POST['fournisseur'];
 
 if($_POST['famille'] == "" || $_POST['famille'] == 0)
   $famille = "";
 else
   $famille = $_POST['famille'];
 
 affProd($fournisseur, $famille);
 
 ?>
- Et, pour finir, mes fonctions du fichier fonctionsPhp.inc :

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
function affFamilles($fourn)
 {
  $connect = connection("../interfaces/gestProd.php");
 
  echo "<SELECT name='famille' tabindex='5' onChange='majProd();'>";
 
   $requete = "SELECT distinct cle_famille, nom_famille FROM familles_tb, fournisseurs_tb, produits_tb WHERE (cde_fournisseur1_prod = $fourn or cde_fournisseur2_prod = $fourn or cde_fournisseur3_prod = $fourn) and cde_famille_prod = cle_famille order by nom_famille";
   $result = mysql_query($requete, $connect);
   $num_result = mysql_num_rows($result);
 
   for($i = 0; $i < $num_result; $i++)
    {
     $row = mysql_fetch_array($result);
     echo "<OPTION VALUE='" . $row[0] . "'>" . htmlentities($row[1]) .  "</OPTION>";
    }
 echo "</select>";
 
  mysql_free_result($result);
  mysql_close($connect);
 }
 
function affProd($fourn, $fam)
 {
    $connect = connection("../interfaces/gestProd.php");
 
    echo "<SELECT name='produit' tabindex='6'>";
 
    if($fourn == "" && $fam == "")
      $requete = "select cle_prod, denom_prod from produits_tb where supprime_prod = 0 order by denom_prod";
    elseif($fam == "")
      $requete = "select cle_prod, denom_prod from produits_tb where cde_fournisseur1_prod = '$fourn' and supprime_prod = 0 order by denom_prod";
    else
      $requete = "select cle_prod, denom_prod from produits_tb where cde_fournisseur1_prod = '$fourn' and cde_famille_prod = '$fam' and supprime_prod = 0 order by denom_prod";
 
   $result = mysql_query($requete, $connect);
   $num_result = mysql_num_rows($result);
 
   for($i = 0; $i < $num_result; $i++)
    {
     $row = mysql_fetch_array($result);
     echo "<OPTION VALUE='" . $row[0] . "'>" . $row[1] . "</OPTION>";
    }
 
  echo "</select>";
 
  mysql_free_result($result);
  mysql_close($connect);
 
 }
Quelqu'un pourrait m'expliquer pourquoi ma liste famille se met bien à jour mais que je ne récupère pas l'id de ma famille lorsque je la sélectionne dans la liste pour mettre à jour la liste des produits? Comment faire pour le récupérer?

Merci d'avance pour vos réponses.

Christophe