8768 sujets

Développement web côté serveur, CMS

Bonjour par ici,

J'ai quelques problemes quand à la gestion des liens en PHP. Je vous explique mon soucis:

J'utilise le systeme des GET pour mon menu. J'ai donc créé une page design, où j'inclus les modules php en fonction de la page.

Jai donc çà en haut de ma page index.php:

<?php 
$page=$_GET['page'];
if ($page=="")
{
	$page="accueil";
}
?>


Et ceci dans la div contenu de ma page index.php:

<?php include("contenu/".$page.".php"); ?>


Jusque la ca va a peu pres... sauf un petit soucis, lorsque je vais sur monsite.com, j'ai ceci qui s'affiche:


Notice: Undefined index: page in c:\program files\easyphp1-8\www\monsite\index.php on line 2


Pour ce qui est du gros probleme...

J'ai créé un formulaire f_login.php qui exécute identification.php... et je que ce fichier renvoie vers erreur.php si le membre n'est pas authentifié. J'ai donc voulu utiliser:

header("location: erreur.php");


Mais j'ai cette erreur qui arrive:

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\monsite\index.php:15) in c:\program files\easyphp1-8\www\monsite\contenu\identification.php on line 32


...et malgré mes recherches, je ne trouve pas la solution, j'ai compris qu'il y avais un probleme avec le GET, mais pr le corriger... Smiley bawling


La solution serait peut-etre d'utiliser un autre systeme que les get pour mes liens ? Où il y a t'il une autre solution que le header() ?

Merci à vous... Smiley cligne
Modifié par Howard (02 Nov 2006 - 12:50)
Le petit probleme est résolu...

if (!isset($_GET['page'])) $page="accueil"; else $page=$_GET['page'];


;)
Bonjour,
Howard a écrit :
<?php include("contenu/".$page.".php"); ?>
Ce genre de code est dangereux quand, comme dans ton cas, $page est récupéré directement à partir d'un paramètre transmis par l'utilisateur.

En effet, rien n'empêche l'utilisateur de t'envoyer n'importe quelle valeur et ainsi d'inclure dans la page de réponse n'importe quel fichier php se trouvant sur le serveur Web. Par exemple, si j'envoie "../admin/effacer_utilisateurs" comme paramètre "page", tu inclueras "contenu/../admin/effacer_utilisateurs.php".
Howard a écrit :
Ah... et il y a une solution je suppose ?
L'idéal est de ne pas utiliser de paramètres GET pour la sélection de la page courante si tu n'en as pas vraiment besoin, ce qui t'assurera par la même occasion un meilleur référencement.

Sinon, tu peux mettre en dur toutes les valeurs possible de $page et tester que la valeur donnée par l'utilisateur est bien dans cet ensemble, quitte à renvoyer une erreur 404 si ce n'est pas le cas.
En clair, quelque chose comme ça :
$pages = array('accueil', 'page1', 'page2', 'page3');

$page = array_key_exists('page', $_GET) ? $_GET['page'] : 'accueil';

if (!in_array($page, $pages)) {
  // Erreur
}
Edit : erreur corrigée
Modifié par Eldebaran (31 Oct 2006 - 17:17)
Hum avec ta solution je ne vois pas...

Je fais appel au formulaire d'indentification qui appelle identification.php... et je veux qu'identification.php envoie vers erreur.php si l'auth est incorrecte.

Hors le formulaire point vers "index.php?page=identification" donc... erf pommé.
Mon problème est résolu Smiley smile Il suffisait de place mon identification.php en include avant le code html de ma page index.php.

Merci à vous Smiley smile