perdu dans les cookies

perdu dans les cookies - PHP - Programmation

Marsh Posté le 30-10-2004 à 03:06:08    

bonjour, je suis en train de faire un site multilingue, mais je ne comprends pas bien.j'ai choisi la methode des cookies.chaque page appelle un fichier decide.php qui lui meme appelle des glossaires en.php et fr.php

Code :
  1. //decide.php
  2. j'ai fait ceci mais ca ne marche pas :(
  3. [code]if(isset($_GET['lang']))
  4. {
  5. if ($_GET['lang']=='fr'){
  6. $lang='fr';
  7. }
  8. else if ($_GET['lang']=='en'){
  9. $lang='en';
  10. }
  11. else $lang='fr';
  12. setcookie("lang","",0);
  13. $expire = 365*24*3600; 
  14. setcookie("lang", $lang, time() + $expire);
  15. }
  16. if(isset($_COOKIE['lang'])){
  17. setcookie("lang","",0);
  18. $expire = 365*24*3600; 
  19. setcookie("lang", $lang, time() + $expire);
  20. }
  21. if ($lang=='en') {         
  22.  include('en.php');
  23.  }
  24. else include('fr.php');


 
petites precisions
en fait j'ai un page index qui permet de choisir ma langue francais/english
et on arrive en GET sur page1.php  
soit page1.php?lang=en soit page1.php?lang=fr
donc il faudrait que cette variable GET se transforme en cookie pour que je puisse apres la recupere dans toutes les autres pages (qui elles n'ont pas de get).
 
merci de votre aide   :)


Message édité par attentio le 24-03-2005 à 21:01:53

---------------
L'ordinateur a de la mémoire mais aucun souvenir ...
Reply

Marsh Posté le 30-10-2004 à 03:06:08   

Reply

Marsh Posté le 30-10-2004 à 10:30:11    

bien complexe pour ecrire un cookie ta procédure :)

Code :
  1. <?
  2. $lang = (isset($_GET['lang'])) ? $_GET['lang'] :  $_COOKIE['lang'];
  3. if ($lang) {
  4.   $expire = 365*24*3600;
  5.   setcookie("lang", $lang, time() + $expire,'/');
  6.   echo 'cookie ecrit';
  7. }
  8. switch($lang) {
  9.   case 'en':
  10.     echo('en.php');
  11.     break;
  12.   case 'fr':
  13.   default:
  14.     echo('fr.php');
  15.     break;
  16. }
  17. ?>

Reply

Marsh Posté le 30-10-2004 à 12:38:47    

super merci !!!
mais j'ai encore un ptit pb, voila le cookie de cree bien, mais dans mon echo $_COOKIE['lang'] il affiche la langue precedente cad a dire que si j'ai selectionné english puis je veux selectionner le francais il va falloir que je clique 2 fois de suite sur francais sinon au premier au premiere 'clique' il reste sur english (pourtant mon cookie suit)... etrange,nan?

Code :
  1. @$lang = (isset($_GET['lang'])) ? $_GET['lang'] :  $_COOKIE['lang'];
  2. if ($lang) { 
  3.   $expire = 365*24*3600;
  4.   setcookie("lang", $lang, time() + $expire,'/'); 
  5.   echo 'cookie ecrit '.$_COOKIE['lang'];
  6. }
  7. switch($lang) {
  8.   case 'en':
  9.     include('en.php');
  10.     break;   
  11.   case 'fr':
  12.   default:
  13.     include('fr.php');
  14.     break;
  15. }


 
merci de votre aide

Reply

Marsh Posté le 30-10-2004 à 12:49:32    

Le cookie est envoyé dans les header donc c'est normal que tu ne puisse pas le récupérer au premier passage tu ne pe pas l'envoyer et faire en sorte que le client te l'envoi en meme temps ...
Donc il fo qu'au moment de la depose tu initialise la variable $_cookie['lang'] toi meme, mais tu n'as besoin de le faire que a la depose apres le client t'enverra la variable lui meme ...
Voila j'espere t'avoir aidé

Reply

Marsh Posté le 30-10-2004 à 13:22:38    

en faite, j'ai pas tres bien compris  :ange:  
j'ai fait comme ca

Code :
  1. if ($lang) {
  2. setcookie("lang","",0);
  3.   $expire = 365*24*3600;
  4.   setcookie("lang", $lang, time() + $expire,'/'); 
  5.   echo 'cookie ecrit '.$_COOKIE['lang'];
  6. }


mais ca change rien!!
 
merci de votre aide :)

Reply

Marsh Posté le 30-10-2004 à 13:35:05    

Code :
  1. @$lang = (isset($_GET['lang'])) ? $_GET['lang'] :  $_COOKIE['lang']; 
  2. if ($lang) { 
  3.   $expire = 365*24*3600; 
  4.   setcookie("lang", $lang, time() + $expire,'/'); //MOMENT DE LA DEPOSE  
  5.   $_COOKIE['lang'] = $lang; // INITIALISATION MANUEL OBLIGATOIRE LA 1er fois
  6. echo 'cookie ecrit '.$_COOKIE['lang']; 
  7. }


Message édité par Rainbow_Efreet le 30-10-2004 à 13:35:33
Reply

Marsh Posté le 30-10-2004 à 13:53:48    

:bounce: cool merci !
juste une derniere question comment faire pour que si $_GET['lang']n'est pas declarée (si l'utilisateur arrive par une autre page que la page1.php, la seul avec du get['lang'])alors on essaye de reconnaitre la langue du navigateur et si la langue n'est ni du francais ni de l'anglais alors $lang=fr
 
merci encore

Reply

Marsh Posté le 30-10-2004 à 14:47:31    

C'est ptet une proposition débile, mais...

Code :
  1. if(!isset($_COOKIE['lang']))
  2.     //langue non déclarée
  3. else
  4.     //langue déclarée


ca marche pas?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-10-2004 à 15:14:40    

oui t'as raison ...je vais faire au plus simple

Reply

Marsh Posté le 30-10-2004 à 15:18:20    

attentio a écrit :

en faite, j'ai pas tres bien compris  :ange:  
j'ai fait comme ca

Code :
  1. if ($lang) {
  2. setcookie("lang","",0);
  3.   $expire = 365*24*3600;
  4.   setcookie("lang", $lang, time() + $expire,'/'); 
  5.   echo 'cookie ecrit '.$_COOKIE['lang'];
  6. }


mais ca change rien!!
 
merci de votre aide :)


faut que tu fasse une redirection vers la page utilisant le cookie : ajoute header('location : tonfichier.php'); apres le setcookie
ton echo 'cookie...' tu le mets en dehors.
 
que j'explique :)
Quand tu recupere la valeur de $lang la premiere fois par l'url, c'est via $_GET,tu ecris en meme temps la variable dans le cookie via setcookie
 
donc tu ne peux accéder directement à la variable du cookie via $_COOKIE sans réactualiser la page...sauf si tu utilise la ligne supplémentaire de rainbow_efreet par laquelle tu affecte à $_COOKIE la valeur de lang directement, ce qui si je ne me trompe pas evite la redirection, mais d'un autre coté $_COOKIE est normalement utilisé pour lire le contenu d'un cookie, pas pour ecrire dedans, c'est donc comme si tu ecrivais dans un simple tableau :)
 
 


Message édité par Profil supprimé le 30-10-2004 à 15:29:13
Reply

Marsh Posté le 30-10-2004 à 15:18:20   

Reply

Marsh Posté le 30-10-2004 à 15:55:43    

Je confirme la reponse de spike une redirection header suivi d'un exit() sera bcp plus propre que la ligne que j'ai rajouté :)
cela permettra aussi de VRAIMENT voir si le cookie a été déposé car avec la ligne supplémentaire on verra toujours la valeur que l'on a voulu deposé mais pas la valeur réel du cookie


Message édité par Rainbow_Efreet le 30-10-2004 à 15:56:51
Reply

Sujets relatifs:

Leave a Replay

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