Lien de page avec _GET

Lien de page avec _GET - PHP - Programmation

Marsh Posté le 30-09-2003 à 09:27:19    

Bonjour,
 
Voila il y a qq temps, j'avais bricoler un fichier pour pouvoir redirigé vers mes pages en fonction de la variable du lien,
jusque la, j'utlisait un header pour repartir sur les pages. Mais ce qui me deplait, c'est l'url change aussi
dossier/page.htm au lieu de site.com/go.php?action=variable
 
Donc, j'ai voulu faire un include mais la page ne s'affiche pas.
 
Que faire ?
 

Code :
  1. <? ob_start();
  2. $variable = addslashes($_GET['action']);
  3. include ("connexion.php" );
  4. $id = MYSQL_CONNECT($serveur,$login,$pass);
  5. mysql_select_db("$base" );
  6. $query = "SELECT * FROM table WHERE champ = '$variable'" ; 
  7. $result=mysql_query($query) ; 
  8. $var = mysql_fetch_row($result);
  9. $lien = $var[2];
  10. if ($lien == ''){  $lien = 'index.htm' ; }
  11. include "$lien" ;
  12. //header("Location: $lien " );
  13. ?>


Message édité par bodbod le 30-09-2003 à 10:01:57

---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 30-09-2003 à 09:27:19   

Reply

Marsh Posté le 30-09-2003 à 09:51:17    

Si tu as judte des fichiers dans le même répertoire, çà devrait marcher, sinon faut voir.
 
Essaye avec require(), s'il y a une erreur, include() ne l'indique pas.
 
Fait un echo de $lien pour t'assurer de son contenu.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 30-09-2003 à 10:03:34    

Mara's dad a écrit :

Si tu as judte des fichiers dans le même répertoire, çà devrait marcher, sinon faut voir.
 
Essaye avec require(), s'il y a une erreur, include() ne l'indique pas.
 
Fait un echo de $lien pour t'assurer de son contenu.
 

euh, je connais pas require (je suis novice)
 
J'ai deja fais un echo pour verifie et ca donne bien "dossier/fichier.ext" ou "fichier.ext".


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 30-09-2003 à 10:11:44    

je viens d'essayer require mais le resultat est le meme que pour un include => Page blanche
 
Au fait, ce qui est bizarre, c'est que ca marche quand la variable est vide


Message édité par bodbod le 30-09-2003 à 10:14:27

---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 30-09-2003 à 10:23:55    

Heu, un truc, quand même :
 
Tu commence par ob_start(), je suppose que c'est à cause du header que tu faisait  ;)  
 
Maintenant, soit tu fait un ob_end_flush(), soit tu virre le ob_start() !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 30-09-2003 à 10:26:43    

euh oui mais je met l'autre avec include ou require ?


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 30-09-2003 à 10:28:41    

Comme tu veux, la seule différence entre include() et require(), c'est que la première génère un warning si le fichier n'éxiste pas alors que l'autre provoque une erreur fatale : http://fr2.php.net/manual/fr/function.include.php
 
Sinon, çà marche maintenant ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 30-09-2003 à 10:29:50    

j'ai une erreur sur la ligne 3  :(  
La ou esty le _GET


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 30-09-2003 à 10:31:38    

Montre ton nouveau code et l'intitulé de l'erreur...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 30-09-2003 à 10:35:07    

Mara's dad a écrit :

Montre ton nouveau code et l'intitulé de l'erreur...

Code :
  1. <? ob_end_flush()
  2. $variable = addslashes($_GET['action']);
  3. include ("connexion.php" );
  4. $id = MYSQL_CONNECT($serveur,$login,$pass);
  5. mysql_select_db("$base" );
  6. $query = "SELECT * FROM table WHERE action = '$variable'" ; 
  7. $result=mysql_query($query) ; 
  8. $var = mysql_fetch_row($result);
  9. $lien = $var[2];
  10. if ($lien == ''){  $lien = 'index.htm' ; }
  11. //include $lien ;
  12. //echo "$lien" ;
  13. //header("Location: $lien " );
  14. require $lien;
  15. ?>


 

Code :
  1. Parse error: parse error in /home/bodbod/www/go.php on line 3


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 30-09-2003 à 10:35:07   

Reply

Marsh Posté le 30-09-2003 à 10:44:02    

Arf !
 
Quand je dis de mettre ob_end_flush(), c'est pas à la place d'ob_start() !
 
Tu sais à quoi sert ob_start() ? ? ?
 
Ton erreur (PHP) vient du fait que tu as oublié un ; après ob_end_flush().
 
 
Bon, reprenons :
 
ob_start() est une fonction qui sert à mettre en buffer tout ce qui est normalement envoyé au client (navigateur). C'est utile si tu commence à envoyer des choses et que tu te rends compte que tu dois envoyer un header. Comme les headers doivent être envoyés avant tout autre chose, la mise en buffer peut être utilisée pour çà même si çà veux dire que ton code est ... bourrin :)
Quand on utilise la mise en buffer, il faut dire à PHP quand envoyer les données, c'est à çà que sert ob_end_flush().
 
Comme tu ne veux plus utiliser de header, çà ne te sert à rien.
 
Donc :
 

Code :
  1. <?php
  2. $variable = addslashes( $_GET['action'] );
  3. include( "connexion.php" );
  4. $id = MYSQL_CONNECT( $serveur, $login, $pass );
  5. mysql_select_db( "$base" );
  6. $query = "SELECT * FROM table WHERE action = '$variable'" ; 
  7. $result = mysql_query( $query ); 
  8. $var = mysql_fetch_row( $result );
  9. $lien = $var[2];
  10. if ($lien == '')
  11. {
  12.     $lien = 'index.htm';
  13. }
  14. include( $lien );
  15. ?>

 
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 30-09-2003 à 10:53:17    

Voila mon nouveau code :

Code :
  1. <?
  2. $variable = addslashes($_GET['action']);
  3. include ("connexion.php" );
  4. $id = MYSQL_CONNECT($serveur,$login,$pass);
  5. mysql_select_db("$base" );
  6. $query = "SELECT * FROM bodbod_lien_site WHERE action = '$variable'" ; 
  7. $result=mysql_query($query) ; 
  8. $var = mysql_fetch_row($result);
  9. $lien = $var[2];
  10. if ($lien == ''){  $lien = 'index.htm' ; }
  11. include ($lien) ;
  12. echo "$lien" ;
  13. //header("Location: $lien " );
  14. //require $lien;
  15. ?>


Et la page est toujours vide mise a part le echo qui renvoi la valeur de "$lien".
Regarde : http://www.bodbod.com/go.php?action=informatique


Message édité par bodbod le 30-09-2003 à 10:53:38

---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 30-09-2003 à 11:11:19    

Je ne suis pas d'accord avec toi !
 
Va là http://www.bodbod.com/go.php?action=informatique avec ton navigateur préféré.
 
Il affiche bien :

Informatique/index.php


 
Mais va voir le source, et tu comprendras !
 
 
 
 
 
 
Si tu ne comprend pas, l'explication est simple :
 
Ton url est http://www.bodbod.com/go.php?action=informatique
Donc tu est à la racine du site. Le fichier HTML que reçoi ton navigateur est une page qui décrit des frames.
 
MAIS, ton navigateur va pas aller les chercher dans le dossier Informatique, il va les chercher là où il est, à la racine du site.
 
Bon, y'a des solutions pour ton problème. La plus simple est de changer tous tes liens pour les mettre en Absolu au lieu de relatif. Dans le HTML en tout cas.
 
Dans /Informatique/index.php, au lieu  de mettre :
 

<frame name="banniere" scrolling="no" noresize target="sommaire" src="banniereH.htm">


Met un chemin complet :
 

<frame name="banniere" scrolling="no" noresize target="sommaire" src="/Informatique/banniereH.htm">


 
Mais attention à tes liens dans ta base MySql si tu les modifie avec un \ devant, c'est le include() qui va merder si tu le fais tel-quel. Tu comprends pourquoi ?
 
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 30-09-2003 à 11:19:12    

ah OK
En fait, en faisant un include, la page se met dans l'autre comme si elle etait dans le meme repertoir et donc, elle cherche les pages de frame dans ce meme repertoire.
 
Donc j'arrive au limite de mes bidouilles :d
 
Je vais voir ce que je peux faire.
La je dois partir, on verra ca une autre fois


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Sujets relatifs:

Leave a Replay

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