Créer un "chemin de fer" (suite de lien donnant la position dans l'arborescence d'un site)

Présentation
Supposons d'abord que vous avez une base de donnée avec une table pour vos pages (nommons la PAGES, parfaitement au hasard). Supposons ensuite que dans cette table, vous avez un champ Id_page (identifiant de la page en cours, un auto increment fera très bien l'affaire), un autre appelé Id_parent (l'ID de la page parent, le N+1 dans l'organigramme), et un champ Titre (contenant le titre de votre page).
La seule règle imposée sera que l'Id_parent de la page racine sera 0.

Il nous suffit d'appeler cette fonction à l'endroit indiqué comme suit :

$chemin_de_fer = recur_chemin($id_de_la_page_en_cours);
echo $chemin_de_fer;
Détails
Catégories : Divers
Avatar de titoumimi
Expert éminent
Voir tous les téléchargements de l'auteur
Licence : Autre
Date de mise en ligne : 14 février 2011




Avatar de Tortue33 Tortue33 - Candidat au Club https://www.developpez.com
le 03/06/2011 à 22:33
Salut titoumimi,
Merci tout d'abord pour ce code, je voudrai le faire fonctionner sur mon site mais la je bloque.

Alors j'ai fait ma table (pages) avec 3 champs:
-Id_page
-Id_parent
-Titre

Je me connecte sur ma base de données avec:
Code : Sélectionner tout
1
2
3
4
5
 
<?php     
require "config.php"; 
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS); 
mysql_select_db(DB_BDD);

puis je colle ton code dans mon index:

Code : Sélectionner tout
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
function recur_chemin($idpage) { 
// on définit la variable pour éviter le warning 
$chemin_complet = ""; 
// Si l'id de la page en cours est différent de 0 
// (0 = page parente de la page racine = inexistante) 
if ($idpage != 0) { 
// on récupère les informations de la page en cours dans la DB 
$strSQL = "SELECT * FROM pages WHERE Id_page=".$idpage; 
$resultat = requete_SQL($strSQL); 
$tabl_result = mysql_fetch_array($resultat); 
  
$titrepage = $tabl_result['titre']; 
$idparent = $tabl_result['id_parent']; 
  
// cr?ation du lien vers la page en cours 
$chemin_page_en_cours = " -> <a href=\"index.php?id_p=".$idpage."\">".$titrepage."</a>"; 
  
// Concaténation du lien de la page N-1 et 
// du lien de la page en cours 
$chemin_complet = recur_chemin($idparent).$chemin_page_en_cours; 
} 
//renvoie le chemin complet 
return $chemin_complet; 
} 
?>
et je colle ça pour afficher le chemin:

Code : Sélectionner tout
1
2
3
4
5
 <?php 
 $chemin_de_fer = recur_chemin($id_de_la_page_en_cours); 
echo $chemin_de_fer; 
mysql_close();  
?>
Alors mon problème est que rien s'affiche, faut-il configurer ton code exemple:
Code : Sélectionner tout
$chemin_complet = "";


Peux-tu m'aider a m'orienter sur mes erreurs?
Merci.
Avatar de Shikiryu Shikiryu - Membre éclairé https://www.developpez.com
le 03/06/2011 à 22:57
Je pense que, quitte à faire un tutoriel en 2011, autant ne plus "polluer"* le web avec l'utilisation des fonctions mysql_* à l'heure où, depuis PHP5, elles ne sont plus maintenues, et à laquelle nous devrions inciter les débutants à utiliser à minima mysqli_* (si ce n'est PDO).

Actuellement et depuis la venue de PHP3 (et mysql_* en 1998 !!), il en pleut des tutoriels avec ces fonctions et, malheureusement, continuer à en produire ne fera qu'inciter les "nouveaux" ou les "habitués" à les utiliser... Pour info, PHP5 a déjà 7 ans (2004).

Pour arguments (mais il y en a plus d'un), rien ne vaut la doc officielle : http://www.php.net/manual/fr/mysqli.overview.php (tableau en bas, par exemple)

Par ailleurs, ce script a de bonnes failles de sécurité si l'utilisation qui en est faite et rapide et non réfléchie ($idpage en GET sans vérification avant requête par exemple). Il serait bien de rajouter la vérification à la fonction ou, à minima de prévenir d'éventuel aventurier

A part cela, l'idée est bonne et l'algorithme est plutôt bien trouvé

*désolé pour l'expression un peu exagérée, je trouve pas le mot que je voulais utiliser
Avatar de Tortue33 Tortue33 - Candidat au Club https://www.developpez.com
le 04/06/2011 à 10:22
Merci Shikiryub pour cette remarque, car c'est la premier fois que j'attends parlé de mysqli, je vais donc essayer d'apprendre tout ça pour en suite l'utiliser sur mon site. C'est sympa de mettre le doigt sur les failles de sécurité car je ne l'ai détecte pas encore.

Je suis débutant donc je ne rentrerai pas dans un débat car il est bon d'apprendre les nouveautés sur tout quand on débute et je remercie aussi toutes les personnes qui font des tutoriels pour nous car cela est mon seul moyen d'étudier le php.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Contacter le responsable de la rubrique PHP