Probleme COOKIE site multi langue[RESOLU] - PHP - Programmation
Marsh Posté le 26-08-2007 à 19:14:12
Problème hyper connu qui sort sur ce forum environ trois fois par semaine. Fais une recherche avec "headers already sent by"
Marsh Posté le 26-08-2007 à 20:11:09
Ci c'est parce qu'il faut que je place le code tout en haut de mon index est sans espace c'est fait.
Et aussi une question, je suppose que le cookie (le code) doit ce trouver sur toutes les pages ?
Merci
Marsh Posté le 26-08-2007 à 20:47:11
Bon pour l'erreur j'ai mi setcookie("lang", $lang, time() + $expire); sur la premiere ligne et donc sa fonctionne enfin en tout cas il ne me sort plus l'erreur mais les langues ne ce cchanges pas!
Marsh Posté le 26-08-2007 à 22:35:09
Bon j'ai encore reglé un souci en modifiant le script ainsi
<?php
$expire = 365*24*3600;
setcookie('lang', $lang, time() + $expire);
if ($_GET['lang']=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('language-fr.php');
}
else if ($_GET['lang']=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('language-en.php');
}
else if ($_GET['lang']=='it') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('language-it.php');
}
if (isset($HTTP_COOKIE_VARS['lang'])) {
$lang = $HTTP_COOKIE_VARS['lang'];
} else
{
// si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur
$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);
}
if ($lang =='en') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('language-en.php');
}
else if ($lang =='fr') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('language-fr.php');
}
else if ($lang =='it') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
include('language-it.php');
}
?>
Mais il reste encore un souci, si change de page, par exemple je vais sur contact la langue revient dans celle du navigateur.
Marsh Posté le 27-08-2007 à 02:06:09
C'est normal que ça ne fonctionne pas, regarde l'ordre dans lequel la variable $lang est affectée ...
Marsh Posté le 27-08-2007 à 02:23:40
Je ne connais rien au php tu peut m'claircir un peut plus?
Je debute
merci
Marsh Posté le 27-08-2007 à 02:35:15
Quand tu fais un "setcookie", ca rajoute une ligne dans l'entete HTTP de la réponse de ton serveur lorsqu'elle est envoyée.
Donc quant tu teste la valeur du cookie dans le même script 5 lignes plus loin, il est vide et c'est normal.
Une fois que le navigateur a reçu un cookie dans une entête de réponse HTTP, il va le renvoyer au serveur au prochain click sur un lien en le mettant dans l'entête de sa requête HTTP. C'est comme ça que ça marche les cookies
Marsh Posté le 27-08-2007 à 02:52:39
ok et donc comment faire?
sinon bouchon2 c'est pour faire quoi ton swich?
Bon pour m'entrainer j'ai fait ca !
switch ($lang) {
case 'fr': // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('language-fr.php');
break;
case 'en': // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('language-en.php');
break;
case 'it': // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
include('language-it.php');
break;
}
Ca revient au même
Marsh Posté le 27-08-2007 à 12:42:50
Merci! mais comment je regle mon probleme de cookie car je souhaite que lorsqu'on choisi une langue elle reste la même quand on change de page ce qui est logique.
Et sinon que peut faire un utilisateur mal intentionné si il modifie le cookie et comment le modifie t-il?
Aussi, j'ai trouvé une formation php/mysql http://www.atao.fr/formation_php.php 900 euros 4jours.
C'est pas un peut court pour etre un bon programmeur?
Merci
Marsh Posté le 26-08-2007 à 18:25:01
Bonjour à tous
Voila j'ai mi mon site en plusieur langues grace à un script recupéré sur le net.
Au depart il disent d'ecrire ce ci dans le fichier decide-langue.php
<?php
2
3 if ($_GET['lang']=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
4 include('lang/fr-lang.php');
5 }
6
7 else if ($_GET['lang']=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
8 include('lang/en-lang.php');
9 }
10
11 else { // si aucune langue n'est déclarée on inclut le fichier fr-lang.php par défaut
12 include('lang/fr-lang.php');
13 }
14
15 ?>
Ca fonctionne les langues changent mais quand on clic sur un lien pour acceder a une autre page elle revient au langage par defaut, ils expliquent donc comment faire en maitant un COOKIE et la reconnaissance de la langue du n'avigateur.
Ils donnent cela en correction
<?php
2
3 if(isset($HTTP_COOKIE_VARS['lang'])) {
4 $lang = $HTTP_COOKIE_VARS['lang'];
5 } else {
6 // si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur
7 $lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);
8 }
9
10 //script d'origine
11 if ($lang=='fr') { // si la langue est 'fr' (français) on inclut le fichier fr-lang.php
12 include('lang/fr-lang.php');
13 } elseif ($lang=='en') { // si la langue est 'en' (anglais) on inclut le fichier en-lang.php
14 include('lang/en-lang.php');
15 }
16 //fin du script d'origine
17
18 //définition de la durée du cookie (1 an)
19 $expire = 365*24*3600;
20
21 //enregistrement du cookie au nom de lang
22 setcookie("lang", $lang, time() + $expire);
23
24 ?>
Mais probleme, le site reste dans le langage du navigateur, impossible de modifier les langue et il m'affiche aussi une erreur sur la colonne 22 qui est la suivante
Warning: Cannot modify header information - headers already sent by (output started at /home/*******/money/index.php:4) in /home/******/money/lang/decide-lang.php on line 22
SI VOUS avez une solution....
Merci
Message édité par mr zuppardo le 27-08-2007 à 15:42:43
---------------
Mr-annonce.fr, les petites annonces gratuites sur internet.