Afficher des pages php issues d'une aborescence

Signaler
Messages postés
48
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
30 septembre 2010
-
Messages postés
13
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
27 juillet 2010
-
Bonjour à tous,
Je suis nouveau concernant la programmation en php et je voudrais solliciter votre aide.
Je travaille sur une application web dans laquelle je dois afficher dynamiquement un menu en arborescence de pages php stockées dans une base de données.J'ai utilisé la methode des feuilles filles et parents en stockant les identifiants des pages ainsi que ceux de leurs parents de sorte à afficher le menu.
les attributs de ma table page sont:id,nom,contenu (text),parent_id.Lorsque le contenu de la page est entierement en html je peux directement saisir le code dans la colonne contenu de ma base de données mais lorsqu'il s'agit de php le navigateur execute seulement le html et affiche le php sans l'exécuter.Mon problème est le suivant:comment exécuter des mas pages php dans ce cas là.

merci d'avance pour vos idées.

5 réponses

Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
8
Bonjour,

PHP n'est pas exécute dans le navigateur. C'est un langage serveur, ce qui veut dire qu'il te faut un serveur (par exemple Apache avec PHP etc... ca existe en packs tout fait avec rien à configurer, type: XAMPP) capable d'exécuter le code PHP pour te générer le code HTML que le navigateur peux interpréter.

Si j'ai répondu à côté de la plaque j'ai mal compris ton problème ;)

Cordialement,
- Pysco68
Messages postés
48
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
30 septembre 2010

Bonjour ,
Merci pour la reponse mais je l'ai peut être mal posé.Mon but est d'afficher dynamiquement un menu arborescent vertical de pages php incluant des sous menus toutes filles de la page index.php et dont les adresses sont stockées dans une base de données.ma première tentative m'a permis d'afficher le menu arborescent selon les identifiants des pages et ceux des pages filles.ce qui resouds mon problème à moitié car les pages s'affichent en fonction de leur identifiants et moi je voudrais qu'elles s'affichent selon leurs adresses car elles sont stockées physiquement sur le serveur et je n'en ai pas accès.voici le code me permettant d'afficher le menu selon les identifiants mais qui ne resouds pas mon problème:
Je dispose de 2 pages php.1 pour mes fonctions et 1 autre pour la page d'acccueil:index.php.


code de mes fonction.php

<?php
// --------------------------------------------------------------------------------------------------------------------------
// Se connecte à la DB
// Paramètres : nom de la base -> $name_DB
function connexion_DB($name_DB) {
// Déclaration des paramètres de connexion
$host = "127.0.0.1";
$user = "root";
$bdd = $name_DB;
$passwd = "";
// Connexion au serveur
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
}

// --------------------------------------------------------------------------------------------------------------------------
// Deconnection de la DB
function deconnexion_DB() {
mysql_close();
}

// --------------------------------------------------------------------------------------------------------------------------
// Exécute une requète SQL. Si la requête ne passe pas, renvoie le message d'erreur MySQL
// Paramètres : chaine SQL -> $sql
// Renvoie : enregistrements correspondants -> $req
function executer($sql) {
$req = mysql_query($sql);
if (!$req) {
$message = 'Erreur SQL : ' . mysql_error() . "
\n";
$message .= 'SQL string : ' . $sql . "
\n";
$message .= "Merci d'envoyer ce message au webmaster";
die($message);
}
return $req;
}

// --------------------------------------------------------------------------------------------------------------------------
// Récupère les informations de la page concernée
function extraction_infos_DB() {
$sql 'SELECT * FROM `page` WHERE `id` '.$_ENV['id'];
$result = executer($sql);
$ligne = mysql_fetch_array($result);
$_ENV['nom'] = $ligne['nom'];
$_ENV['contenu'] = $ligne['contenu'];
$_ENV['parent_id'] = $ligne['parent_id'];
}


// --------------------------------------------------------------------------------------------------------------------------
// Affiche le chemin de fer.
// Paramètres : id de la page en cours -> $idpage
// Renvoie : chemin complet -> $chemin_complet
function affiche_chemin_fer($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
$sql 'SELECT `nom`, `parent_id` FROM `page` WHERE `id` '.$idpage;
$result = executer($sql);
$ligne = mysql_fetch_array($result);

$nompage = $ligne['nom'];
$idparent = $ligne['parent_id'];

// création du lien vers la page en cours
$chemin_page_en_cours = ' -> [index.php?id='.$idpage.' '.$nompage.']';

// Concaténation du lien de la page N-1 et
// du lien de la page en cours
$chemin_complet = affiche_chemin_fer($idparent).$chemin_page_en_cours;
}
// renvoie le chemin complet
return $chemin_complet;
}

// --------------------------------------------------------------------------------------------------------------------------
// Affiche le menu.
// Paramètres : id de la page -> $idpage
// (id de la page en cours pour le menu de gauche, id de la page racine (1) pour le menu du haut)
// Renvoie : le menu sous forme de liste -> $menu_retour
function affiche_menu($idpage) {
// Sélectionne toutes les pages filles de la page en cours
$sql 'SELECT `id`, `nom`, FROM `page` WHERE `parent_id` '.$idpage;
$result = executer($sql);
// Si la page n'a pas de page fille, alors on modifie la requète pour obtenir ses pages soeurs.
if (mysql_num_rows($result) == 0) {
$sql 'SELECT `id`, `nom` FROM `page` WHERE `parent_id` '.$_ENV['parent_id'];
$result = executer($sql);
}
$menu_retour = '';
while ($ligne = mysql_fetch_array($result)) {
$menu_retour .= '<li>';
$menu_retour .= '[index.php?id='.$ligne['id'].' ';
$menu_retour .= $ligne['nom'];
$menu_retour .= ']';
$menu_retour .= '</li>';
}
$menu_retour .= '';
return $menu_retour;
}
?>



code de ma page index.php
<?php
// Active tout les warning. Utile en phase de développement
// En phase de production, remplacer E_ALL par 0
error_reporting(E_ALL);

// Inclus le fichier contenant les fonctions personalisées
include_once 'mes_fonctions.php';

// Fonction de connexion à la base de données
connexion_DB('gest');

// Définit l'Id de la page d'accueil (1 dans cet exemple)
// Pensez à le modifier si ce n'est pas le cas chez vous.
$id_accueil = 1;

// Récupère l'id de la page courante passée par l'URL
// Si non défini, on considère que la page est la page d'accueil
if (isset($_GET['id'])) {
$_ENV['id'] = intval($_GET['id']);
} else {
$_ENV['id'] = $id_accueil;
}

// Extrait les informations correspondantes à la page en cours de la DB
extraction_infos_DB();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- Insère le nom extrait de la DB dans la balise correspondante -->
<title><?php echo $_ENV['nom']; ?></title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>




<?php
// Affiche le chemin de fer
echo 'Vous êtes ici : '.affiche_chemin_fer($_ENV['id']);
?>






<?php
// Affiche le menu en cours => id de la page = id de la page en cours.
echo affiche_menu($_ENV['id']);
?>




<?php
// Affiche le contenu de la page en cours

echo $_ENV['contenu'];
?>






<?php include("pied_page.html"); ?>


<?php deconnexion_DB(); ?>

</html>

en espérant avoir été plus explicite.
Merci d'avance
Messages postés
13
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
27 juillet 2010

J'ai une question (surement tres bete) :

En faite, tu dis avoir 2 pages .php : une page de fonction et une page index. C'est juste une impression mais je vois que tu utilises tes fonctions dans index.php et je vois nulle part de reference a celle-ci.

As-tu essaye de creer une classe regroupant tes fonctions ? puis d'inserer la ligne dans ta page index :
<?php
include(Fonctions.class.php);
$maclasse = New MaClasse;
$maclasse->affiche_menu($_ENV['id']);
?>
Messages postés
48
Date d'inscription
vendredi 13 novembre 2009
Statut
Membre
Dernière intervention
30 septembre 2010

Bonjour,
Je pose mal mon problème? excusez moi!je suis nouveau en developpement web et php.Le code ci_dessous m'a permis d'afficher mon menu arborescent suivant ce schéma:
ANIMAUX
Reptils
serpents
crocodile
Batraciens
grenouille
crapaud


Dans le dossier ANIMAUX de mon site,j'ai 2 sous dossiers Reptils et Batraciens
dans lesquels se trouvent 2 pages php chacunes(serpents et crocodile pour le 1er,grenouille et crapaud pour le second).Dans mon menu arborescent,lorsque je click sur la page parent reptil par exemple les pages filles serpents et crocodile s'affichent et l'url affiche l'id de la page et je voudrais plutôt que ce soit l'adresse de la page stockée dans la base de données et présente physiquement dans le dossier Reptils sur mon serveur.
Merci pour votre aide et votre indulgence.
Messages postés
13
Date d'inscription
samedi 25 octobre 2008
Statut
Membre
Dernière intervention
27 juillet 2010

Donc, si j'ai bien compris , il seulement que tu modifies le lien dans tes balises [index.php?id='.$ligne['id'].' ';

Par :
$menu_retour .= ']';
En prenant bien soin de renommer tes dossiers en lettres miniscules.

Try and enjoy