J'essai de suivre le tutoriel pour les listes déroulantes, la version javascript, et l'adapter à mon site, mais la tache s'avère compliqué.
URL DU TUTORIAL
Voici ou j'en suis :
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 : Tout sélectionner
var form_d = '<select name="departement" id="departement">';
en
var form_d = '<select name="products" id="products">';3/ Voici la structure de mes tables :
--
-- 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
$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>
<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 javascriptJusqu'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
<?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, et me dire ou je me suis planté, et comment continué.
kopax