Récapitulons
Tu avais l'intention de faire une seule page affichant toutes les autres pages contenues dans la bdd. Je t'ai répondu que c'était une très mauvaise idée, bien que ce fut possible. Il existe d'autres moyens, je t'en ai montré un : les structures à pages inclues. Le site du Zer0, Judgehype, mon propre site et plein d'autres sites à structure pratiquement invariable fonctionnent avec des
includes sécurisés.
Les includes :
"
Tout code peut être sécurisé, tout est dans l'art et la manière de faire."
Lifaen
Une inclusion normale est sans danger : "
include('fonction.php');". Ce code inclus
fonction.php, rien de particulier ne se passe. Qu'une
include soit sécurisée ou insécurisée vient du fait que le paramètre de la fonction est variable. "
include($page);" est potentiellement dangereux car
$page peut avoir plusieurs valeurs ('
accueil.php' ou '
bdd.php' ou '
http://www.hack.net/virus.php'), le code inclus le fichier quel qu'il soit.
Je ne veux donc jamais, JAMAIS voir : "
include($_GET[$page]);".
En revanche, si tu met le code :
- Code:
-
if($_GET['page'] == 'page')
{
include('page.php');
}
Alors il n'y a aucun risque, il inclus page ou il inclus rien. *Ouf*
Voici un exemple :
Un lien pour un livre d'or : "
index.php?page=livredor" et celle d'une page de connexion : "
index.php?page=connexion".
- Code:
-
// Le code qui affiche la page
if($_GET['page'] == 'livredor')
{
include('livredor.php');
}
elseif($_GET['page'] == 'connexion')
{
include('connexion.php');
}
else // Sinon j'affiche la page d'accueil
{
include('accueil.php');
}
Ce système est parfaitement sécurisé, il n'y a
aucun risque.
Petite précision :
- Le lien peut aussi être "?page=livredor", écrire index.php n'est pas nécessaire car si aucun fichier spécifique n'est demandé, c'est lui qui s'affiche.
- Le lien peut aussi être "index.php?livredor", c'est plus joli et ça fonctionne aussi avec le code suivant.
- Code:
-
if(isset($_GET['livredor']))
{
include('livredor.php');
}
elseif(isset($_GET['connexion']))
{
include('connexion.php');
}
else // Sinon j'affiche la page d'accueil
{
include('accueil.php');
}
- Il est également possible de combiner les deux : ?livredor". C'est plus pratique, plus esthétique...
Tuto sur les includes sécurisés et infinis !
Je t'ai ensuite proposé de faire, pour ton site, un système qui combine plusieurs méthodes.
Essaie de faire une boucle qui, à l'aide de ta
bdd et de ta table
page, détermine quelle page il faut inclure.
Modifie ta table
page comme ceci :
id : auto_increment, int, 9
nom : varchar, 255
chemin_page : varchar, 255
Pour faire ce système, tu dois:
- Charger la liste des pages existante et le chemin correspondant avec une requête SQL
- Faire une boucle qui détermine la page qui correspond à la valeur dans ton lien ($_GET['page])
- Faire un script dans une page à part qui permet de rajouter le nom d'un nouvelle page et son chemin dans ta table page
Précision : Tu peux mettre une variable dans une variable
superglobale ou un
array : si
$variable = 'page' alors
$_GET[$variable] revient
à $_GET['page'].
Si tu n'y arrives pas, je t'y aiderais. Prochain épisode : le bonus !
Bonne chance !
(une petite récapitulation ne fait pas de mal, surtout pour un sujet qui devenait compliqué alors qu'il ne l'est pas particulièrement)