Bonjour,

J'ai suivi un tutoriel pour faire une liste déroulante dynamique liée, (la version javascript du tutoriel), et l'adapter à mon site, mais la tache s'avère compliqué.

Néanmoins voici ou j'en suis et à quoi ressemble ma base de donnée:

1/ Fichier arrayPHP2JS.js

aucune modification apporté au fichier si ce n'est que je l'ai déplacé dans un répertoire nommé js


2/ Fichier changeDept.js

renommé en changeCat.js et deplacé dans un répertoire nommé js
Modification :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
var form_d  = '<select name="departement" id="departement">';
en
var form_d  = '<select name="products" id="products">';

3/ Voici la structure de mes tables :
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
--
-- Structure de la table `products_cat`
--
 
CREATE TABLE IF NOT EXISTS `products_cat` (
  `categories_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `categories_en` varchar(255) CHARACTER SET utf8 NOT NULL,
  `categories_vn` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`categories_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
 
--
-- Structure de la table `products`
--
 
CREATE TABLE IF NOT EXISTS `products` (
  `products_id` int(100) unsigned NOT NULL AUTO_INCREMENT,
  `products_cat` varchar(255) CHARACTER SET utf8 NOT NULL,
  `products_model` varchar(15) CHARACTER SET utf8 NOT NULL,
  `products_brand` varchar(15) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`products_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
 
--
-- Contenu de la table `products_cat`
--
 
INSERT INTO `products_cat` (`categories_id`, `categories_en`, `categories_vn`) VALUES
(1, 'Compressor Refrigerant', 'Máy Nén Lạnh'),
(2, 'Evaporator Condenser', 'Dàn Ngưng Tụ Bay Hơi'),
(3, 'Panel PU', 'Panel PU Kho Lạnh'),
(4, 'Door Cold Store', 'Cửa Kho Lạnh'),
(5, 'Evaporator', 'Dàn Lạnh CABERO'),
(6, 'Flake Ice Machine', 'Máy Đá Vảy'),
(7, 'Electric Motor', 'Motor Điện'),
(8, 'Air Blast Freezer', 'Tủ Cấp Đông Gió &Tiếp Xúc'),
(9, 'Water Chiller', 'Máy Làm Nước Lạnh'),
(10, 'Liquid Pump', 'Bơm Cấp Dịch'),
(11, 'Air Compressor', 'Máy Nén Khí'),
(12, 'Generator', 'Máy Phát Điện Diesel'),
(13, 'High Grade Extract', 'Máy SX Hương Liệu');
 
--
-- Contenu de la table `products`
--
 
INSERT INTO `products` (`products_id`, `products_cat`, `products_model`, `products_brand`) VALUES
(1, '3', 'Modeles AR533', 'Bitzer');
 
// je précise, products_cat à 3 signifie que il est catégorie 3 donc PANEL PU, ainsi sont lié products_cat et products: categories_id et products_cat

4/ Ensuite voici les variables prédéfinies dans ma page.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
$host="localhost";
$login="root";
$pass="";
$bd="vini";
$connect = mysql_connect("$host","$login","$pass") || exit(mysql_error());
$base = mysql_select_db("$bd");
$table_categories = "products_cat";
$table_products = "products";
$lang="EN";
// (peut aussi être égale à VN, mais cela aura sont importance dans la requête pour choisir en quel langue on affiche le nom des catégories)

5/ Les scripts javascrips sont bien inclus entre <head></head>

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<script type="text/javascript" src="./js/arrayPHP2JS.js" charset="UTF-8"></script>
<script type="text/javascript" src="./js/changeCat.js" charset="UTF-8"></script>
ici j'ai juste modifié charset (je ne sais pas si c'est utile) et le repertoire des fichiers javascript

Jusqu'ici c'est pas trop compliqué, c'est après que ça se gate


6/ Voici le reste du script entre les balises <body></body> avec modifications par rapport au détails expliqué préalablement au dessus

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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
 
<?php
 
/* Requête SQL de récupération des données */
// J'ai du revoir la requetes pour qu'elle sois approprié à mon exemple
// Je ne suis pas sur de ma requetes, aussi je ne comprends pas le dernier select qui était dans l'exemple du tuto juste region, je l'ai remplacé par ce qu'il me semblai approprié, mais on ne lui donne pas AS à celui la?
$sql = "SELECT products_id AS products_id, products_models AS products_models, products_brand AS products_brand, $table_categories.categories_id AS categories_id, categories_".$lang."".
 
"FROM $table_products, $table_categories ".
 
"WHERE $table_products.products_cat = $table_categories.categories_id ".
 
"ORDER BY $table_categories.categories_id;";
 
/* Connexion et exécution de la requête */
 
if($connect != false)
 
{
 
    $search = mysql_query($sql);
 
    /* Pour ne pas écraser mes tableaux, je crée un témoin */
 
    $temoin_r = 0;
 
    /* Création du tableau PHP des valeurs récupérées */
// j'ai modifié de $categories_idegion à categories
    $categories = array();
 
    /* Index du département par tableau régional */
 
    $id = 0;
 
    while($ligne = mysql_fetch_assoc($search))
 
    {
 
        $categories_id = $ligne['categories_id'];
 
        $products_id = $ligne['products_id'];
 
        /* Je vérifie si je suis toujours dans la même région, sinon je crée les tableaux nécessaires */
 
        if($temoin_r != $categories_id)
 
        {
 
            $categories[$categories_id] = array();
 
            /* J'ajoute la région */
// ici j'ai modifié region en products_cat, mais je ne suis pas sur du tout, comme expliqué plus haut, je ne sais pas à quoi sers le dernier region du select de la requete SQL, j'aurai tres bien pu mettre $categories_.$lang. enfin ca n'aurai pas fonctionner de toute maniere vu la syntaxe
 
            $categories[$categories_id][0] = $ligne['products_cat'];
 
            $categories[$categories_id][1] = array();
 
            $categories[$categories_id][2] = array();
 
            $temoin_r = $categories_id;
 
            $id = 0;
 
        }
 
        /* J'ajoute les départements */
 
        $categories[$categories_id][1][$id] = $products_id;
 
        $categories[$categories_id][2][$id] = $ligne['products_models'];
// J'ajoute cette ligne pour obtenir également la marque du models (comme dans la requetes SQL plus haut j'ai également besoin d'afficher dans le select le models
		$categories[$categories_id][3][$id] = $ligne['products_brands'];
        $id++;
 
    }
 
    /* On sérialise le tableau obtenu pour traitement par JavaScript */
 
    $chaine = htmlspecialchars(serialize($categories), ENT_QUOTES);
 
?>
 
<script type="text/javascript">
 
/* <![CDATA[ */
 
<!--
 
/*
 
* Ici, on transmets la chaîne sérialisée à JavaScript 
 
* pour la transformer en tableau indexé JavaScript 
 
*/
 
var tableau = new PhpArray2Js('<?php echo $chaine; ?>');
 
var tab = tableau.retour();
 
// -->
 
/* ]]> */
 
</script>
 
</head>
 
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
<h3>
  <?php
// ici aussi je dois modifié département et region, mais je ne sais pas par quoi,
// c'est ici que j'abandonne pour vous demandez ou j'en suis
// la suite n'est pas modifier
if(isset($_POST['ok']) && isset($_POST['departement']) && $_POST['departement'] != "")
 
{
 
    $categories_idegion_selectionnee = $_POST['region'];
 
    $products_idept_selectionne = $_POST['departement'];
 
?>
</h3>
<p>Vous avez sélectionné le département <?php echo($products_idept_selectionne); ?> dans la région <?php echo($categories_idegion_selectionnee); ?></p>
 
<?php
 
}
 
?>
 
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
 
  <fieldset style="border: 3px double #333399">
 
  <legend>Sélectionnez une région</legend>
 
    <select name="region" id="region" onchange="changeDept(tab,this.value);">
 
      <option value="vide">- - - Choisissez une région - - -</option>
 
    <?php
 
    /* Construction de la première liste : on se sert du tableau PHP */
 
    $nbr = count($categories);
 
    foreach($categories as $nr => $nom)
 
    {
 
        ?>
 
    <option value="<?php echo($nr); ?>"><?php echo($nom[0]); ?></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 -->
 
  <span id="blocDepartements"></span><br />
 
  <input type="submit" name="ok" id="ok" value="Envoyer" />
 
  </fieldset>
 
</form>
 
<?php
 
 
 
}
 
else
 
{
 
    /*  Si vous arrivez ici, vous avez un gros problème avec la connexion au serveur de base de données */
echo "<p>La connexion au serveur de base de données a échoué. Aucun élément ne peut être affiché.</p>";
 
}
 
?>


J'espère avoir donné suffisamment d'indication pour obtenir de l'aide.

kopax