8722 sujets

Développement web côté serveur, CMS

Bonjour

J'utilise des includes dans mon fichier index pour afficher différentes pages php à différents endroits de mon site ( main , droite)

mais voila j'ai un probleme :
c-a d que qd j'arrive sur ma page index si je ne clique pas sur un lien rien ne s'affiche sur ma page (par défaut).
Et bien sur qd je clique sur un lien tout s'affiche correctement.

Mon soucis est d'arriver à afficher ma page home.php par défaut.

J'ai essayé 2 ou 3 bidouillages, mais sans réel succes.

Pouvez vous m'aider svp?

Merci

Chesko

<ul id="menu">
									<li><a href="index.php?page=contact&pageDroite=droitpromo">Contact</a></li>
									<li><a href="index.php?page=shop&pageDroite=droitautre">Shop</a></li>
									<li><a href="index.php?page=news&pageDroite=droitpromo">News</a></li>
									<li><a href="index.php?page=gallery&pageDroite=droitpromo">Gallery</a></li>
									<li><a href="index.php?page=artist&pageDroite=droitautre">Artiste</a></li>
									</ul>


et

<div class="mainGauche">
								<?php
 $pageOK = array('news' => 'news.php',
											  'home' => 'home.php',
											  'shop' => 'shop.php',

.....
 'contact' => 'contact.php',
											  'links' => 'links.php');
 if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
								include($pageOK[$_GET['page']]); 
}
							
								?>
</div>


vous voyez plus ou moin de quoi il s'agit?
Smiley smile
Réponse directe :
 if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
include($pageOK[$_GET['page']]);
}
else {
    include 'home.php';
}

Sinon, tu pourrais faire un système d'include sécurisé plus simple, plus performant et plus souple qu'un array : en te basant sur la fonction basename.
Par exemple :
if(!empty($_GET['page']) && is_file(basename($_GET['page'].'.inc.php'))) {
        $page = basename($_GET['page']);
}
else {
        $page = 'default';
}
require $page.'.inc.php';
à adapter bien sûr Smiley smile
Merci pour la réponse, basename cela semble être intéressant.

Désolé pour les règles, je viens de lire les règles.
Longue vie au forum.

à bientot Smiley smile
J'attire ton attention sur les failles de sécurité que peut provoquer l'utilisation de basename : en faisant quelques recherches tu devrais trouver des explications sur le danger de mettre des noms de fichier dans une URL...
basename, provoquer des failles ?

Développes, ou donne un lien sur le sujet, parce que c'est la première fois que j'entend ça (je viens de faire quelques recherches Google, et je n'ai rien trouvé sur une éventuelle faille liée à basename)
Je me suis un peu mal exprimé Smiley ohwell
Ce n'est pas lié à la fonction basename elle-même mais plutot aux include non-controlés et qui font appel à des variables ($_GET) qui sont aussi le nom de fichier (si vous avez compris cette phrase vous êtes très fort Smiley lol )
Voila un lien qui resume bien la situation : http://www.sheep-team.org/tutos/15

Dans ce cas précis ça devrait aller puisqu'il utilise un tableau répertoriant les pages acceptées, mais ça peut servir à d'autres Smiley smile Soyez prudent !
Justement Smiley smile

On peut utiliser basename pour sécuriser les includes, et c'est - à mon goût - la meilleure méthode.

Car entièrement sécurisé et beaucoup plus souple et performant qu'un array (pas besoin de rajouter une ligne dans l'array à chaque nouvelle page :x)

Tu as du lire mon premier post en diagonale Smiley cligne
Bonjour,
Suite à la lecture de ce sujet j'ai une question ou deux à poser à propos du script avec 'basename' de Elentar. Smiley lol
POur faciliter les choses je le remet le code ici. Smiley langue
if(!empty($_GET['page']) && is_file(basename($_GET['page'].'.inc.php'))) {

        $page = basename($_GET['page']);

}

else {

        $page = 'default';

}

require $page.'.inc.php';


Donc la première question est en quoi ce code est plus sécuritaire qu'un autre??
La seconde se rattache à la première: ayant regarder la despcription de basename sur fr.php.net j'ai constater qu'elle agissait en fonction du 'path' mais je n'ai pas réussi à comprendre quel chemin faisait référence dans le code de Elentar. Smiley eek

Si quelqu'un pouvait éclairer ma lanterne... Smiley cligne
Merci à tous ^^