Importation d'une variable par cookie

jrmy7 Messages postés 15 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 22 mai 2012 - 14 nov. 2011 à 09:38
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 14 nov. 2011 à 12:35
Bonjour à tous !

Comme vous le devinerez je débute en PHP.
C'est la deuxième fois que je pose cette question, la première publication m'a permis de comprendre beaucoup de chose mais pas à résoudre mon problème que je vais tenter de vous présenter le plus clairement possible.

Je suis entrain de réaliser un site en 3 langues différentes (en, fr, nl)... il y a donc un script de détection de la langue qui redirige vers
index_en.php
ou index_fr.php
ou index_nl.php.

Tout le texte de mon site se trouve dans un fichier externe en 3 langues :
m_lang_en_inc.php,
m_lang_fr_inc.php,
m_lang_nl_inc.php.

(fichier inclus directement dans l'une des 3 version "index").
Par exemple : m_lang_en_inc.php est inclus directement dans index_en.php

Jusque là tout fonctionne.

Maintenant mon problème :

Un menu "drapeau" est inclus dans chaque page (lui aussi en fichier externe).
Quand on clique sur l'un des drapeau, on retourne sur la page "home" de mon site dans la version correspondant au drapeau (fr, nl, ou en)

Dans cette dernière page ("home" en français par exemple) mon code commence (première ligne de script) par :

<?php
setcookie('ch_langue', '', time() - 3600); //destruction de l'ancien cookie (s'il y en a eut un)
$langue = 'fr'; //attribution de la valeur "fr" à la variable "langue"
setcookie('ch_langue', $langue, 3600); // création d'un cookie "ch_langue"
?>

C'est donc la variable "langue" avec la valeur "fr" que je veux envoyer à la page suivante.

Quand on clique sur un lien se trouvant sur la page "home".
Ce lien envoie sur la page suivante qui doit récupérer cette variable.

Le code sur la page suivante qui est chargé de récupérer la variable :

<?php
if ( isset($_COOKIE['ch_langue'])) {
$langue = $_COOKIE['ch_langue'];
}
else {
$langue = 'en';
}
?>

Donc mon code récupère la variable "ch_langue" avec comme valeur "fr" et sinon il utilise la valeur "en".

Et le problème c'est qu'il utilise TOUJOURS la valeur "en" car il ne reçoit pas la valeur "fr".

J'espère avoir été assé clair.

Encore merci à ceux qui pourront me donner un coup de pouce.

3 réponses

JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
14 nov. 2011 à 10:55
Deux questions:
- Ta variable $langue, elle vaut quoi quand tu appelle setcookie()? tu as essayé de faire un echo dessus, histoire d'être certain que c'est pas à ce moment là que ta langue est fausse?

- Quand tu récupère ton cookie, que contient $_COOKIE? Tu peux essayer de faire un print_r dessus?
0
jrmy7 Messages postés 15 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 22 mai 2012
14 nov. 2011 à 12:05
ce que je pense ces que ma variable de vos rien lorsque j'appelle setcookei().
Et qu'elle prend la valeur "en" par la suite :

else {
$langue = 'en';
}

Car en utilisant print_r en m'affiche "en".

???
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
14 nov. 2011 à 12:35
Salut,

<?php
setcookie('ch_langue', '', time() - 3600); //destruction de l'ancien cookie (s'il y en a eut un)
$langue = 'fr'; //attribution de la valeur "fr" à la variable "langue"
setcookie('ch_langue', $langue, 3600); // création d'un cookie "ch_langue"
?>

Deux remarques :
- Je ne pense pas qu'il soit judicieux de détruire le cookie si c'est pour le reconstruire dans la même page.
- Le second setcookie a un timespamp ridiculement petit dépassé depuis des années et ton cookie ne peux donc pas fonctionner. Rajoute donc time().

Et juste une dernière remarque d'ordre générale : dupliquer tes fichiers en fonction de la langue est une idée extrêmement mauvaise. Si tu as 42 langues tu devra avoir 42 copies de ton site, et donc 42 fois la même modification a faire lorsque tu veux changer quelque chose. Créé donc des fichiers de langue qui seront utilisés en fonction des cas, ainsi tu sépare le contenu (textes dans différentes langues) du "moteur".
0
Rejoignez-nous