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 :
- 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
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"> </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"> </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"> </td> </tr> <tr> <td id="tdcontenu"> </td> <td id="tdcontenu">Produit*</td> <td id="tdcontenu"> <div id="produit" style='display:inline'> </div> </td> <td id="tdcontenu"> </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'"> euros</td> <td id="tdcontenu"> </td> </tr> </table> </form> </div>
- Mon fichier de traitement ajaxMajFam.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 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 ajaxMajProd.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php include_once("../fichiersAnnexes/fonctionsPhp.inc"); affFamilles($_POST['fournisseur']); ?>
- 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 <?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); ?>
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?
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); }
Merci d'avance pour vos réponses.
Christophe
Partager