Script avec des variables variables.
yann123
-
GallyNet Messages postés 437 Statut Membre -
GallyNet Messages postés 437 Statut Membre -
Bonjour,
Je réalise un script en php afin d'aller chercher dans ma base de données les catégories mere de mon site, ensuite il va chercher les sous catégorie, puis les sous catégories de deuxième niveau.
Voici mon premier script qui fonctionne mais qui a deux inconvénient:
- je répète trois fois la même chose (grosso-modo)
- le script s'arrête au deuxième sous-niveau et s'il y en a 15, je dois écrire 15 fois la même chose.
Comme je l'ai dis si dessus mon code ce répète trois fois pour le niveau1, le niveau2 et le niveau3 et s'il y a plus de 3 niveau ce ne marchera plus ou du moins cela s'arrêtera au troisième niveau.
J'ai donc essayé de réalisé ce même script avec des variables variables, puisqu'il n'y a que les niveau qui change dans le code ci-dessus, mais je ne parviens pas à mes fin.
Voici le code qui ne marche pas. (ça tourne en boucle j'ai l'impression)
Quelqu'un peut-il m'aider à débugger mon script
Merci d'avance.
Je réalise un script en php afin d'aller chercher dans ma base de données les catégories mere de mon site, ensuite il va chercher les sous catégorie, puis les sous catégories de deuxième niveau.
Voici mon premier script qui fonctionne mais qui a deux inconvénient:
- je répète trois fois la même chose (grosso-modo)
- le script s'arrête au deuxième sous-niveau et s'il y en a 15, je dois écrire 15 fois la même chose.
// J'afiche toutes les catégories.
$req_cat_mere1 = mysql_query("SELECT * FROM categories_annuaire WHERE id_categorie_mere='0' order by nom_categorie") or die(mysql_error()); // Requête SQL
echo '<ul>';
while($categorie_mere1 = mysql_fetch_array($req_cat_mere1))
{
$id_categorie_mere1 = $categorie_mere1 ['id'];
echo '<li>' .$categorie_mere1 ['nom_categorie']. '</li>';
// J'afiche toutes les sous-catégories
$req_cat_mere2 = mysql_query("SELECT * FROM categories_annuaire WHERE id_categorie_mere='$id_categorie_mere1' order by nom_categorie") or die(mysql_error()); // Requête SQL
echo '<ul>';
while($categorie_mere2 = mysql_fetch_array($req_cat_mere2))
{
$id_categorie_mere2 = $categorie_mere2 ['id'];
echo '<li>' .$categorie_mere2 ['nom_categorie']. '</li>';
// J'afiche toutes les sous-catégories de niveau-2
$req_cat_mere3 = mysql_query("SELECT * FROM categories_annuaire WHERE id_categorie_mere='$id_categorie_mere2' order by nom_categorie") or die(mysql_error()); // Requête SQL
echo '<ul>';
while($categorie_mere3 = mysql_fetch_array($req_cat_mere3))
{
$id_categorie_mere3 = $categorie_mere3 ['id'];
echo '<li>' .$categorie_mere3 ['nom_categorie']. '</li>';
}
echo '</ul>';
}
echo '</ul>';
}
echo '</ul>';
?>
Comme je l'ai dis si dessus mon code ce répète trois fois pour le niveau1, le niveau2 et le niveau3 et s'il y a plus de 3 niveau ce ne marchera plus ou du moins cela s'arrêtera au troisième niveau.
J'ai donc essayé de réalisé ce même script avec des variables variables, puisqu'il n'y a que les niveau qui change dans le code ci-dessus, mais je ne parviens pas à mes fin.
Voici le code qui ne marche pas. (ça tourne en boucle j'ai l'impression)
$niveau = 0; // J'nitialise le niveau de la categorie
$id_categorie_mere = 0; //J'initialise ma variable id_categorie_mere
$nb_sous_categories != 1 // Pour lancer la premiere bouble.
while($nb_sous_categories != 0)
{
// J'afiche toutes les catégories.
$req_cat_mere{$niveau} = mysql_query("SELECT nom_categorie, id, id_categorie_mere FROM categories_annuaire WHERE id_categorie_mere='$id_categorie_mere' order by nom_categorie") or die(mysql_error()); // Requête SQL
// Je compte le nombre de resultat.
$compter = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM categories_annuaire WHERE id_categorie_mere = '$id_categorie_mere' ") or die(mysql_error());
$nb_sous_categories = array_pop(mysql_fetch_row($compter));
if ($nb_sous_categories != 0)
{
echo '<ul>';
while($categorie_mere{$niveau} = mysql_fetch_array($req_cat_mere{$niveau}))
{
$id_categorie_mere = $categorie_mere{$niveau} ['id'];
echo '<li>' .$categorie_mere{$niveau} ['nom_categorie']. '</li>';
}
$niveau = $niveau + 1;
}
}
$nb_ul = 0;
while($nb_ul != $niveau) // Je ferme autant de liste a puce que j'en ai ouvert
{
echo '</ul>';
}
Quelqu'un peut-il m'aider à débugger mon script
Merci d'avance.
A voir également:
- Script avec des variables variables.
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
- Html script inf ✓ - Forum Virus
1 réponse
Je serai toi, je passerai tout simplement par une fonction récursive. Elle est ce qu'il a de mieux pour ton problème. Elle ne fait qu'afficher les informations d'un niveau, et elle se rappelle pour chacun de ces sous-niveaux.
Voici la fonction tel que je l'aurais fait (enfin pas vraiment, car je l'aurais pas commenté en temps normal).
Voici la fonction tel que je l'aurais fait (enfin pas vraiment, car je l'aurais pas commenté en temps normal).
/* Fonction qui retourne la chaine de caractère à afficher pour un niveau donné
* (et tout ses sous-niveaux).
* */
function afficheCategorie($id_mere = 0){
/* Chaine à retourner */
$result = '';
/* Exécution de la requête */
$req_cat_mere = mysql_query("SELECT * FROM categories_annuaire WHERE id_categorie_mere='$id_mere' order by nom_categorie") or die(mysql_error());
/* On boucle sur chacun des résultat. Si aucun résultat, on ne fait rien. */
while($categorie_mere = mysql_fetch_array($req_cat_mere)){
/* Ajout du nom dela catégorie */
$result .= '<li>' .$categorie_mere ['nom_categorie']. '</li>';
/* Afficahge des sous-niveaux du niveau actuel */
$result .= '<ul>';
$result .=afficheCategorie($categorie_mere['id']);
$result .= '</ul>';
}
/* On retourne la chaine résultat */
return $result;
}
echo afficheCategorie();