Ajout de optgroup dans select en ajax

Signaler
Messages postés
15
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
10 novembre 2010
-
Messages postés
15
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
10 novembre 2010
-
Bonjour,
Voici une petite question :
J'ai une table rubrique qui contient les champs "code_rubrique", "libelle_rubrique" et "code_pere_rubrique".
certaine rubrique sont sur 2 niveaux et d'autres sur 3 : je m'explique : certaines catégories ont une sous-catégorie intermédiaire alors que d'autres non. J'ai par exemple la catégorie "audio" qui possède les sous-catégories "prise de son" ou "mixage" contenant elle-même des rubriques telles que "consoles analogiques ou "haut-parleurs" alors que d'autres catégories comme "événementiel" contient directement les rubriques "tribunes" ou "chapiteaux".

J'ai donc deux select, le premier pour la catégories et le deuxième pour les sous-catégories et rubriques ou les rubriques le cas échéant.
Ce que qui s'affiche dans le deuxième dépend de ce que je sélectionne dans le premier bien évidemment.
Jusque là tout va bien, pour celles possédant 2 niveaux. Pour ceux avec 3 niveaux je voudrais afficher les sous-catégories sous forme de optgroup dans mon select mais que pour ceux-là.

Voilà où j'en suis dans mon code php appelé par la fonction javascript elle-même appelée par l'évènement onChange de mon premier select :

<?php
include("../config/main.php");//j'inclus le fichier de connexion
//Ici : premier cas ou la catégorie ne fait pas partie des catégories à 3 niveaux : ça fonctionne
if ($_POST["niveau1"]!="S" && $_POST["niveau1"]!="A" && $_POST["niveau1"]!="L" && $_POST["niveau1"]!="SE"){
$query="SELECT * FROM rubrique WHERE code_pere_rubrique = '".$_POST["niveau1"]."'";
$result=mysql_query("SET NAMES, 'utf8'");
$result=@mysql_query($query);
echo 'var o = null;';
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 0;';
while($r = mysql_fetch_array($result))
{
echo 's.options[s.options.length] = new Option("'.stripslashes(utf8_encode($r["libelle_rubrique"])).'","'.$r["code_rubrique"].'");';

}
//Ici : deuxième cas ou la catégorie fait partie des 4 catégories qui posent pb
}else{ 
$query="SELECT * FROM rubrique WHERE code_pere_rubrique = '".$_POST["niveau1"]."'";
$result=mysql_query("SET NAMES, 'utf8'");
$result=@mysql_query($query);
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 0;';
echo 'objSelect = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
while ($r = mysql_fetch_array($result)){
echo 'optGroup[s.options.length] = document.createElement("optgroup")';
echo 'optGroup.label[s.options.length] = "'.stripslashes(utf8_encode($r["libelle_rubrique"])).'"';
$sql5=mysql_query("SELECT * FROM rubrique WHERE code_pere_rubrique='".$r['code_rubrique']."'");
$result5=mysql_query("SET NAMES, 'utf8'");
$result5=@mysql_query($sql5);
while ($r5=mysql_fetch_array($result5)){
echo 'objOption[s.options.length]=document.createElement("option")';
echo 'objOption[s.options.length].innerHTML = "'.stripslashes(utf8_encode($r5["libelle_rubrique"])).'"';
echo 'objOption[s.options.length].value = "'.$r5["code_rubrique"].'" ';
echo 'optGroup.appendChild(objOption[s.options.length])';
}
echo 'objSelect.appendChild(optGroup[s.options.length])';	
}
}
?>


En fait j'ai essayé d'adapter ce que j'ai trouver pour l'<option> au <optgroup> mais apparemment ça plaît pas et je n'ai rien trouver sur le net qui puisse correspondre.
Je ne pense pas être loin du but mais c'est ça le plus frustrant.

Merci de vos réponses

1 réponse

Messages postés
15
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
10 novembre 2010

Je n'ai pas eu de réponse, mais j'ai trouvé par moi même ! Je la met, ça peut aider certains :

<?php
include("../config/main.php");

if ($_POST["niveau1"]!="S" && $_POST["niveau1"]!="A" && $_POST["niveau1"]!="L" && $_POST["niveau1"]!="SE"){
$query="SELECT * FROM rubrique WHERE code_pere_rubrique = '".$_POST["niveau1"]."'";
$result=mysql_query($query);
echo 'document.getElementById("niveau_2").innerHTML=null;';
echo 'var o = null;';
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 0;';
while($r = mysql_fetch_array($result))
echo 's.options[s.options.length] = new Option("'.stripslashes(utf8_encode($r["libelle_rubrique"])).'");';

}else{
$query="SELECT * FROM rubrique WHERE code_pere_rubrique = '".$_POST["niveau1"]."'";
$result=mysql_query("SET NAMES, 'utf8'");
$result=@mysql_query($query);
echo 'document.getElementById("niveau_2").innerHTML=null;';
echo 'var theSel = document.getElementById("niveau_2");';
echo 'theSel.options.length = 0;';
while ($r = mysql_fetch_array($result)){
echo 'var optGrp = document.createElement("optgroup");';
echo 'optGrp.label="'.stripslashes(utf8_encode($r["libelle_rubrique"])).'";';
$sql5="SELECT * FROM rubrique WHERE code_pere_rubrique='".$r['code_rubrique']."'";
$result5 = mysql_query ($sql5) or die ('Erreur : '.mysql_error());
while ($r5 = mysql_fetch_array($result5)){
echo 'var item = new Option();';
echo 'optGrp.appendChild(item);';
echo 'item.value = "'.$r5["code_rubrique"].'";';
echo 'item.text = "'.stripslashes(utf8_encode($r5["libelle_rubrique"])).'";';	

}
echo 'theSel.appendChild(optGrp);';
}
}
?>