Je cherche une solution à un problème qui ressort souvent avec des solutions simples sur les forums... mais je le complique un peu plus.
J'ai une base SQL nommée TETE construite comme ceci :
IDTET : clé primaire
TET_LIBELLE : texte
TET_IDMOD : Id du modèle
TET_IDTYP : Id du type
TET_IDBRO : Id de la broche
TET_IDLON : Id de la longueur
TET_IDCON : Id du cone
TET_3D : booléen : 3d dispo ou pas
TET_FICHIER : Url du fichier 3D
Les différents ID sont des références à d'autres tables conçues de la même manière :
IDxxx : ID du parametre
xxx_LIBELLE : libellé du paramètre
xxx correspond aux trois premieres lettre du paramètre : par exemple pour la broche c'est IDBRO et BRO_LIBELLE.
Jusque là tout va bien les tables sont opérationnelles.
Dans ma page php j'utilise le script performant développé dans ce forum
faq-tutoriels/formulaires-listes-deroul ... t4562.html
il fonctionne super bien pour les deux premières listes déroulantes mais au delà de deux il ne fonctionne plus... Est ce que quelqu'un à une solution pour faire ce type de listes déroulantes sur 3 ou 4 niveaux ?
Mon code de page PHP est le suivant :
<?php
//entêtes de la page
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin = "user";
$mdp = "user";
$base = "mabase";
/* On récupère si elles existent les valeurs de recherche envoyées par le formulaire */
$mod = isset($_POST['modele'])?$_POST['modele']:null;
$typ = isset($_POST['type'])?$_POST['type']:null;
$lon = isset($_POST['longueur'])?$_POST['longueur']:null;
//fichiers entete
include 'header.php';
include 'navigation.php';
echo('
<div id="shadowslider"></div>
<!--debut de content -->
<div id="content" class="gradient layout-sidebar-no group">');
//TITRE PRINCIPAL DE LA PAGE
echo('
<div id="slogan" class="inner">
<h1>SECTION 3D</h1>
</div>
');
//affichage des infos choisies dans le fornulaire
if(isset($_POST['ok']))
{
if(isset($_POST['modele']) && $_POST['modele'] != "")
{
$mod_select = $_POST['modele'];
}
if(isset($_POST['type']) && $_POST['type'] != "")
{
$typ_select = $_POST['type'];
}
if(isset($_POST['longueur']) && $_POST['longueur'] != "")
{
$lon_select = $_POST['longueur'];
}
}
//on indique à l'utilisateur ce qu'il a sélectionné
//echo('<p>Vos filtre de recherche : Modèle : '.$mod_select.' / Type : '.$typ_select.' / Longueur : '.$lon_select.' / Broche : '.$bro_select.'</p>');
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
* car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion != false)
{
$choixbase = mysql_select_db($base, $connexion);
$sql1 = 'SELECT * FROM MODELE ORDER BY IDMOD';
$rech_modeles = mysql_query($sql1);
$code_modele = array();
$modele = array();
/* On active un compteur pour les modèles */
$nb_modeles = 0;
if($rech_modeles != false)
{
while($ligne = mysql_fetch_assoc($rech_modeles))
{
array_push($code_modele, $ligne['IDMOD']);
array_push($modele, $ligne['MOD_LIBELLE']);
/* On incrémente de compteur */
$nb_modeles++;
}
}
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgmod">
<h3>Rechercher une tête</h3>
<!-- ///////////////////////////// MODELES ////////////////////////////////// -->
<div class="border-line"></div>
Modèle : <select name="modele" id="modele" onchange="document.forms['chgmod'].submit();">
<option value="-1">- - - Choisissez un modèle - - -</option>
<?php
for($i = 0; $i < $nb_modeles; $i++)
{
?>
<option value="<?php echo($code_modele[$i]); ?>"<?php echo((isset($mod) && $mod == $code_modele[$i])?" selected=\"selected\"":null); ?>><?php echo($modele[$i]); ?></option>
<?php
}
?>
</select><br>
<!-- //////////////////////////// TYPES ///////////////////////////////////// -->
<div class="border-line"></div>
<?php
/* On commence par vérifier si on a envoyé un numéro de modèle et le cas échéant s'il est différent de -1 */
if(isset($mod) && $mod != -1)
{
/* Cération de la requête pour avoir les types de ce modèle */
$sql2 = 'SELECT DISTINCT
TYPE.IDTYP AS IDTYP,
TYPE.TYP_LIBELLE AS TYP_LIBELLE,
TETE.TET_IDMOD AS TET_IDMOD
FROM
TETE,
TYPE
WHERE
TETE.TET_IDTYP = TYPE.IDTYP
AND
(
TETE.TET_IDMOD = '.$mod.'
)
ORDER BY
TYP_LIBELLE ASC';
if($connexion != false)
{
$rech_type = mysql_query($sql2, $connexion);
/* Un petit compteur pour les types */
$nb_types = 0;
/* On crée deux tableaux pour les numéros et les noms des types */
$code_type = array();
$nom_type = array();
/* On va mettre les numéros et noms des types dans les deux tableaux */
while($ligne_type = mysql_fetch_assoc($rech_type))
{
array_push($code_type, $ligne_type['IDTYP']);
array_push($nom_type, $ligne_type['TYP_LIBELLE']);
$nb_types++;
}
/* Maintenant on peut construire la liste déroulante */
?>
Type : <select name="type" id="type" onchange="document.forms['chgmod'].submit();">
<?php
for($d = 0; $d<$nb_types; $d++)
{
?>
<option value="<?php echo($code_type[$d]); ?>"<?php echo((isset($typ_select) && $typ_select == $code_type[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_type[$d]); ?></option>
<?php
}
?>
</select><br />
<?php
}
}
?>
<!-- ///////////////////////////////////// LONGUEUR //////////////////////////// -->
<div class="border-line"></div>
<?php
/* On commence par vérifier si on a envoyé un numéro de type et le cas échéant s'il est différent de -1 */
if(isset($mod) && $mod != -1 && isset($typ) && $typ != -1)
{
/* Cération de la requête pour avoir les types de ce modèle */
$sql3 = 'SELECT DISTINCT
LONGUEUR.IDLON AS IDLON,
LONGUEUR.LON_LIBELLE AS LON_LIBELLE,
TETE.TET_IDMOD AS TET_IDMOD,
TET.TET_IDTYP AS TET_IDTYP,
TET.TET_IDLON AS TET_IDLON
FROM
TETE,
LONGUEUR
WHERE
TETE.TET_IDLON = LONGUEUR.IDLON
AND
(
TETE.TET_IDMOD = '.$mod.',
TETE.TET_IDTYP = '.$typ.'
)
ORDER BY
LON_LIBELLE ASC';
if($connexion != false)
{
$rech_longueur = mysql_query($sql3, $connexion);
/* Un petit compteur pour les longueurs */
$nb_longueur = 0;
/* On crée deux tableaux pour les numéros et les noms des longueurs */
$code_longueur = array();
$nom_longueur = array();
/* On va mettre les numéros et noms des longueurs dans les deux tableaux */
while($ligne_longueur = mysql_fetch_assoc($rech_longueur))
{
array_push($code_longueur, $ligne_longueur['IDLON']);
array_push($nom_longueur, $ligne_longueur['LON_LIBELLE']);
$nb_longueur++;
}
/* Maintenant on peut construire la liste déroulante */
?>
Longueur : <select name="longueur" id="longueur" onchange="document.forms['chgmod'].submit();">
<?php
for($e = 0; $e<$nb_longueur; $e++)
{
?>
<option value="<?php echo($code_longueur[$e]); ?>"<?php echo((isset($lon_select) && $lon_select == $code_longueur[$e])?" selected=\"selected\"":null); ?>><?php echo($nom_longueur[$e]); ?></option>
<?php
}
?>
</select><br />
<?php
}
}
?>
<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
</form>
<?php
/* Terminé, on ferme la connexion */
/* Un petit coup de balai */
mysql_free_result($rech_type);
mysql_free_result($rech_modeles);
mysql_close($connexion);
}
else
{
/* Si on arrive là, c'est pas bon signe, il faut vérifier les
* paramètres de connexion, mot de passe, serveur pas démarré etc... */
?>
<p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>
<?php
}
?>
<!-- fin de content -->
</div>
<!-- Bande de contact -->
<div id="content" class="layout-sidebar-right group">
<div class="call-to-action">
<div class="incipit">
<h2>En savoir plus ?</h2>
<p>Contactez notre service commercial</p>
</div>
<div class="separate-phone"></div>
<div class="number-phone">+xxxxxxxxx</div>
<div class="clear"></div>
</div>
</div>
<?php include 'basdepage.php';
?>
Merci d'avance pour toute personne qui aurait une solution ou qui a déjà été confronté à ce problème.