Importation d'une variable par cookie

Signaler
Messages postés
15
Date d'inscription
samedi 10 octobre 2009
Statut
Membre
Dernière intervention
22 mai 2012
-
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
-
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

Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

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?
Messages postés
15
Date d'inscription
samedi 10 octobre 2009
Statut
Membre
Dernière intervention
22 mai 2012

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".

???
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
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".