[PHP] passer un array dans l'URL pour inclure des pages en pseudo-fram

passer un array dans l'URL pour inclure des pages en pseudo-fram [PHP] - PHP - Programmation

Marsh Posté le 30-10-2006 à 13:53:34    

Bonjour,
 
ça fait un baille que je tâte plus du PHP et y'a une chose qui ne me revient plus.
à l'époque, je faisais genre:

Code :
  1. if(isset($_GET['act']) && (file_exists('./include/'.$_GET['act'].'.php'))){
  2.           include('./include/'.$_GET['act'].'.php');
  3.    }
  4.        elseif(!isset($_GET['act'])){
  5.    include('./include/accueil.php');
  6.    }
  7.        else{
  8.       include('./include/erreur.php');
  9.    }


 
Le souci, c'est que parfois il m'arrive d'avoir mes URL tel que -->
www.site.com/?act=membre/inscription
 
 
en effet, j'ai un dossier "membre" dans le dossier "include" et je trouve le slash pas tip-top dans l'url. :/
 
je voudrais faire un truc plus propre avec des array mais je suis incapable de me débrouiller seul. Il faudrait par exemple que si je fait un lien tel que:
 
www.monsite.fr/?act[0]=acceuil
 
Celà inclus le fichier acceuil.php QUI EST A LA RACINE DU DOSSIER INCLUDE
 
et que si je fait un lien tel qu'il point sur:
 
www.monsite.fr/?act[1]=inscription
Celà inclus le fichier inscription.php qui est dans le dossier "membre" (ce dernier étant lui-même dans le dossier "include" )
 
 
en fait:
 
 0 dans ?act[0] signifierai --> chopper le fichier dans la racine du dossier include
 
1 dans ?act[1] signifierai --> chopper le fichier dans le dossier "membre" ("membre" est dans le dossier "include" )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mille mercis  :jap:  
 


---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 13:53:34   

Reply

Marsh Posté le 30-10-2006 à 13:59:50    

En tous cas, y'a une belle faille de sécurité...

Reply

Marsh Posté le 30-10-2006 à 14:02:12    

je sais  :kaola:
 
edit: elle est belle hein?  :sol:
 
edit2: tu pourrais en profiter pour répondre chef.  :o
 
edit3: tiens au âssage --> comment je pourrais bien m'auto-hacker?  :heink:  
j'ai test:

Code :
  1. http://127.0.0.1/M&M/?act='acceuil.php'))){ echo '<h6>pwned!</h6>'; /*


et ça passe pas.  :sol:


Message édité par pmusa le 30-10-2006 à 14:09:32

---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 14:11:47    

tu n'aurai pas plutot interet a faire qq chose du genre :  
?section=membre&action=accueil


Message édité par flo850 le 30-10-2006 à 14:12:09
Reply

Marsh Posté le 30-10-2006 à 14:13:19    

ouais, trop simple. :/
j'aimais bien mon idée du array.  :)
 
edit: c'est plus court et propre


Message édité par pmusa le 30-10-2006 à 14:13:32

---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 14:16:13    

l'array , plus propre ?  
 
on a pas la meme viosin de la lpropreté d'un code :D  
parceque la solution que je te donne fonctionne directement, alors que la tienne demande pas mal de bidouille ( les tableaux dans une url n'ont pas d'indice, a moins de jouer avec les serialize )

Reply

Marsh Posté le 30-10-2006 à 14:17:58    

Reply

Marsh Posté le 30-10-2006 à 14:18:49    

ça ne me dérange pas de serializer.  :)  
donne moi la soluce au lieu d'insister.  :D  
(mais c'est vrai que ta méthode est aussi bien...)


---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 14:19:36    

serialize est le nom d'une fonction ( anapajari est plus gentil qu emoi il t edonne le lien direct ) :D
 

Reply

Marsh Posté le 30-10-2006 à 14:20:14    


 
 
sans dec? et tu crois peut être que je suis pas allé sur google et php.net avant de venir ici?  :D  
 
je veux juste qu'on me donner une ébauche de code, ça me reviendra après : j'ai juste oublié comment se traite la var recupérée.  :whistle:
 
edit:
 
"serialize est le nom d'une fonction"
 
ptain je sais.  :pfff: chui un ancien ici, faites pas les salauds et crachez un morceau de code bhourdeÿl.  :D


Message édité par pmusa le 30-10-2006 à 14:21:33

---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 14:20:14   

Reply

Marsh Posté le 30-10-2006 à 14:44:26    

bande paÿdaÿ phenos  :fou:  
 
bon ben je me contenterai de ce bouzin:
 

Code :
  1. <?php
  2.    $cat = htmlentities($_GET['cat']); // on definie la categorie (ou plutôt le dossier...)
  3.    $act = htmlentities($_GET['act']); // on definie la page à inclure
  4.    // si les getvars 'cat' et 'act' sont definies et existent :
  5.    if(   ( isset($cat) ) && ( !empty($cat) ) && ( isset($act) ) && ( !empty($act) ) && ( file_exists('./include/'.$cat.'/'.$act.'.php') )   ){
  6.           include('./include/'.$cat.'/'.$act.'.php');
  7.    }
  8.    // si on a uniquement 'act' :
  9.        elseif(   ( isset($act) ) && ( !empty($act) ) && ( file_exists('./include/'.$act.'.php') )   ){
  10.       include('./include/'.$act.'.php');
  11.    }
  12.    else {
  13.    include('./include/accueil.php');
  14.    }
  15.   ?>


 
 
 
 
:/  [:airforceone]


Message édité par pmusa le 30-10-2006 à 14:51:04

---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 14:47:12    

htmlentities, utilises le quand tu fais un echo, utilisé comme tu le fais ça ne sert pas.
la fonction empty() teste aussi si la variable est définie, c'est donc redondant avec isset()

Reply

Marsh Posté le 30-10-2006 à 14:53:09    

ok merci ça fera ça de moins.  ;)  
en effet, sur php.net:
"empty( ) checks for isset AND also the value of the variable"
 

Code :
  1. <?php
  2.    $cat = htmlentities($_GET['cat']); // on definie la categorie (ou plutôt le dossier...)
  3.    $act = htmlentities($_GET['act']); // on definie la page à inclure
  4.    // si les getvars 'cat' et 'act' sont definies et existent :
  5.    if(   ( !empty($cat) ) && ( !empty($act) ) && ( file_exists('./include/'.$cat.'/'.$act.'.php') )   ){
  6.           include('./include/'.$cat.'/'.$act.'.php');
  7.    }
  8.    // si on a uniquement 'act' :
  9.        elseif(   ( !empty($act) ) && ( file_exists('./include/'.$act.'.php') )   ){
  10.       include('./include/'.$act.'.php');
  11.    }
  12.    else {
  13.    include('./include/accueil.php');
  14.    }
  15.   ?>


 
 
le htmlentities est ici tout simplement indispensable.  :o

Message cité 1 fois
Message édité par pmusa le 30-10-2006 à 14:55:24

---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 14:56:45    

mais j'amerais bien, by the way, qu'on me montre avec le array


---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 15:03:26    

euh.. pour quoi faire sérialiser... dans ce cas ?

Reply

Marsh Posté le 30-10-2006 à 15:13:28    

j'ai lu que le titre du topic moi hein :o

Reply

Marsh Posté le 30-10-2006 à 15:17:50    

chani_t a écrit :

euh.. pour quoi faire sérialiser... dans ce cas ?


parce qu'on peut pas passer des array dans une URL. il faut serializer et déserializer en sortie.
 

chani_t a écrit :

j'ai lu que le titre du topic moi hein :o


 :sweat:  


---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le 30-10-2006 à 15:25:00    

tu peux aussi concaténer tes champs, et les retrouver par la suite ( un ti explode par exemple)... ou passer tous tes champs par référence (pas top m'enfin)
 
Tiens ton exemple avec un objet

Reply

Marsh Posté le 30-10-2006 à 15:26:22    

pmusa a écrit :


le htmlentities est ici tout simplement indispensable.  :o


ouais mais non, htmlentities c'est pour protéger une sortie en transformant les caractères spéciaux en entités html (pour par exemple protéger de la faille XSS de ton autre post).
Là t'as absolument aucun besoin de transformer ta chaîne en entité html. Au contraire, ça pourrait même te poser problème si tu utilises un caractère spécial dans ta chaîne (ce qui serait con, on est d'accord). Par exemple, si $_GET['cat'] vaut "éé".

Code :
  1. if ($_GET['cat'] == 'éé') //ca va marcher
  2. if (htmlemtities($_GET['cat']) == 'éé') //ca va pas marcher, htmlemtities($_GET['cat']) vaut "&acute;&acute;"


 
Tu dois protéger ta variable, on est bien d'accord, mais pas avec htmlemtities, qui sert à générer de l'html. Tu n'as pas besoin de générer du html  pour faire un truc en php ...
 
 
Utilises plutot un addslashes http://ch2.php.net/manual/fr/function.addslashes.php
ou un truc fait maison du style

Code :
  1. $cat = ereg_replace("(\.\./?|:|//|<|> )", "", $_GET['cat']);

Reply

Marsh Posté le 30-10-2006 à 15:30:37    

pmusa a écrit :

parce qu'on peut pas passer des array dans une URL. il faut serializer et déserializer en sortie.
 :sweat:


Bin quoi c'était quand même la bonne réponse
 

pmusa a écrit :

mais j'amerais bien, by the way, qu'on me montre avec le array


Comme on t'a dit, en utilisant serialize et unserialize, si tu veux vraiment un exemple un truc dans le genre doit faire l'affaire:
fichier a.php:

Code :
  1. <?php
  2. $a = array('A','B','C');
  3. header('Location: b.php?a='.serialize($a));
  4. ?>


fichier b.php

Code :
  1. <html>
  2. <body>
  3. <?php
  4. $b = unserialize($_GET['a']);
  5. var_dump($b);
  6. ?>
  7. </body>
  8. </html>

Reply

Marsh Posté le 30-10-2006 à 18:05:13    

:)  
 
THX GUYZ.  :hello:


---------------
intralase surgery [:cerveau love]
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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