Probleme COOKIE site multi langue[RESOLU]

Probleme COOKIE site multi langue[RESOLU] - PHP - Programmation

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

Marsh Posté le 26-08-2007 à 18:25:01   

Reply

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"


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

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


Message édité par mr zuppardo le 26-08-2007 à 20:11:54

---------------
Mr-annonce.fr, les petites annonces gratuites sur internet.
Reply

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!


---------------
Mr-annonce.fr, les petites annonces gratuites sur internet.
Reply

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.


Message édité par mr zuppardo le 26-08-2007 à 22:36:04

---------------
Mr-annonce.fr, les petites annonces gratuites sur internet.
Reply

Marsh Posté le 27-08-2007 à 02:05:13    

Reply

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

Reply

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


Message édité par mr zuppardo le 27-08-2007 à 02:23:59

---------------
Mr-annonce.fr, les petites annonces gratuites sur internet.
Reply

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


---------------
The Rom's, à votre service
Reply

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


Message édité par mr zuppardo le 27-08-2007 à 02:53:32

---------------
Mr-annonce.fr, les petites annonces gratuites sur internet.
Reply

Marsh Posté le 27-08-2007 à 02:52:39   

Reply

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


Message édité par mr zuppardo le 27-08-2007 à 12:50:34

---------------
Mr-annonce.fr, les petites annonces gratuites sur internet.
Reply

Sujets relatifs:

Leave a Replay

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