Problème passage de Variable dans URL & Erreur 404 !!!

Petit nouveau ! | 2 Messages

16 sept. 2007, 18:32

Bonjour à tous,

C'est mon premier message sur ce forum, j'en profite pour saluer tous ses membres :D

Je suis infographiste et mes connaissances PHP sont assez limitées... mais j'essaye de me soigner et je fais une cure intensive PHP/MYSQL 20 comprimés par jour !

Je réalise un site qui sera porté en 4 langues à terme (2 langues dans l'immédiat) et je bute sur un problème de passage de variables.

J'ai une page index.php classique avec 2-3 trucs dedans. Sur cette page plusieurs drapeaux permettant de changer la langue. Lorsqu'on clique sur un drapeau, cela renvoi sur une page choix_langue.php qui traite les variables envoyée en $_GET depuis index.php puis recharge la page (dans ce cas index.php).

Comment je procède :

- Dans index.php, au tout début de la page je récupère l'adresse de la page en cours via

Code : Tout sélectionner

$url = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
.

- Puis mon drapeau Français sur index.php possède un HREF tel que :

Code : Tout sélectionner

<a href="choix_langue.php?langue=fr&redirection=<?php echo $url; ?>">
et mon drapeau Anglais possède un HREF tel que :

Code : Tout sélectionner

<a href="choix_langue.php?langue=en&redirection=<?php echo $url; ?>">
.

Lorsque je clique sur un drapeau, j'obtiens une Erreur 404. Cela me fait ça depuis que je passe la 2ème variable &redirection=<?php echo $url; ?>. Sans cela, juste avec a href="choix_langue.php?langue=fr par exemple, et bien ma page choix_langue.php est trouvée et $_GET['langue'] traité...

POURQUOIIIII ?????? :cry:

Merci à tous ceux qui pourront m'aider à trouver une solution !

d0m
Mammouth du PHP | 1141 Messages

17 sept. 2007, 08:20

l'erreur vient vraisemblablement de l'url passé en paramètre. Il doit y avoir des caractères qui ne sont pas aimés.
Essaies voir avec l'ajout de fonctions pour les traiter
$url = addslashes(urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));
ou
$url = urlencode(htmlentities(('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));

Petit nouveau ! | 2 Messages

17 sept. 2007, 10:08

Merciiiiii !

Effectivement avec ta première ligne ($url = addslashes(urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));) la page choix_langue.php est trouvée et la variable est récupérée :D

Par contre, en sortie de choix_langue.php je fais un

Code : Tout sélectionner

header('location: $url');
pour retourner d'où l'on vient, et là, il ne trouve pas la page de sortie !!!

Est-ce du au fait que l'adresse est encodée et qu'il faille lui redonner une forme plus "lisible" pour le naviguateur avant de l'insérer dans le header ?

Edit : Je suis trop NAZE : il suffisait de mettre

Code : Tout sélectionner

header("location: $url");
au lieu de

Code : Tout sélectionner

header('location: $url');
Merci à tous !!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 sept. 2007, 10:27

Afin d'éviter ce genre d'étourderie, il te suffit de toujours sortir tes variables des chaines :
header('location:' . $url);
Ainsi apostrophe ou guillemet, tu n'auras jamais de soucis et ton code n'en sera que plus lisible pour repérer les variables grace à la coloration syntaxique :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...