8796 sujets

Développement web côté serveur, CMS

Bonjour, j'ai trouvé sur un forum une façon dite "sécurisée" pour l'include de fichiers. Voici le code
<div id="content">
      <?php
// On liste les pages
$array_page = array(
'accueil' => 'accueil',
'agenda' => 'agenda',
'contact' => 'contact'
);

// On vérifie si la variable $_GET['page'] existe bien
if (empty ($_GET['page']))
{
        // On inclue la page d'index
        include('./includes/accueil.inc.php');
}
if (!array_key_exists($_GET['page'], $array_page)) // On vérifie si la page demandé ce situe dans l'array
{
        // On affiche un message d'erreur
        echo 'La page n\'existe pas sur serveur.';
}
else
{
        // On inclue la page demandé
        include('./includes/'.$array_page[$_GET['page']].'.inc.php');
}
?> 
	</div>



j'ai essayé d'installer ce système sur pour mon site, mais malgré que ça fonctionne j'ai une erreur que voici

Notice: Undefined index: page in C:\wamp\www\monsite_2009\index.php on line 64
La page n'existe pas sur serveur. 


Pour explication je pars d'une page index et j'include seulement le "content" qui diffère en fonction des liens du menu .
<a href="index.php?page=accueil">Accueil</a>


La Fonction m'affiche l'erreur uniquement au lancement de mon site quand je n'ai encore cliqué sur aucun lien, la texte d'accueil s'include bien, mais l'erreur est présente en bas de page, un fois que je clique un lien l'erreur disparait.

Je pense que je comprend +- ce qu'il se passe, mais je ne sais pas comment règler ça^^Pourriez-vous m'aider svp
Modifié par foxprox (27 Apr 2009 - 16:52)
Salut,

Je pense qu'il y a un probleme dans tes conditions : il faut remplacer le second if par un elseif afin que le message d'erreur ne s'affiche pas s'il n'y a pas d'inclusion demandee


<?php
// On liste les pages
$array_page = array(
'accueil' => 'accueil',
'agenda' => 'agenda',
'contact' => 'contact'
);

// On vérifie si la variable $_GET['page'] existe bien
if (empty ($_GET['page']))
{
        // On inclue la page d'index
        include('./includes/accueil.inc.php');
}
elseif (!array_key_exists($_GET['page'], $array_page)) // On vérifie si la page demandé ce situe dans l'array
{
        // On affiche un message d'erreur
        echo 'La page n\'existe pas sur serveur.';
}
else
{
        // On inclue la page demandé
        include('./includes/'.$array_page[$_GET['page']].'.inc.php');
}
?> 


Je ne suis pas sur que cela resolve tout le pb, mais ca y contribue Smiley cligne
Sinon pour dévier un peu des problèmes, qu'est ce que vous pensez de cette méthode dite "sécurisée"?
Au départ je suis parti de ce tuto sur le site du zerovoir ici

et on l'a fait évolué avec le listage des pages dans un tableau... Je ne sais pas trop si la méthode du site du zero et meilleur ou plus recommandé??? Smiley ohwell
foxprox a écrit :
et on l'a fait évolué avec le listage des pages dans un tableau... Je ne sais pas trop si la méthode du site du zero et meilleur ou plus recommandé??? Smiley ohwell
Salut,

ben AMHA les méthodes se valent... même si je préfère utiliser le array_key_exists (ce qui implique bien sûr de mettre à jour le tableau à chaque nouvelle page et de savoir ce que l'on fait Smiley langue ).

De toutes façons dès que le nombre de page devient important il vaut mieux à mon avis stocker le contenu dans une table... (et à dire vrai c'est ce que je fais systématiquement même si les pages ne sont pas nombreuses : je me contente du include pour les parties statiques -config, fonctions, etc...-)
a écrit :
ce qui implique bien sûr de mettre à jour le tableau à chaque nouvelle page et de savoir ce que l'on fait

savoir ce que l'on fait...mdr Smiley rolleyes oui en effet et bien souvent ce n'est pas mon cas ^^
mais faut croire que je m'en sors quand même un peu, j'arrive à adapter ce que je trouve sur le net à mon site, c'est déjà un bon point ^^