lire un cookie aussitot l'avoir ecrit

Eléphant du PHP | 294 Messages

08 avr. 2007, 16:47

Bonjour
j'essaie de modifier un cookie aprés un test , manifestement le cookie est bien modifié , mais il faut recharger la page pour que le cookie soit pris en compte ( c'est pour gérer des langues).
if(isset($_GET['lg'])){
switch($_GET['lg'])
{case "EN" :setcookie("ang", "EN", time()+86400*100);
	break;
case "ES" : setcookie("lang", "ES", time()+86400*100);
	break;
case "FR" : setcookie("lang", "FR", time()+86400*100);
	break;
	}
}

switch($_COOKIE['lang']){
case "FR":
require("includes/main_FR.php");
break;
case  "EN":
require("includes/main_EN.php");
break;
case "ES":
require("includes/main_ES.php");
break;
}
la première partie c'est pour si l'utilisateur change de langue dans la page en cours, alors on réécrit le cookie. Le second script recupère le cookie et gere l'affichage.
Tous ce passe comme si la modification du cookie n'était pris en compte qu'en rechargeant la page une autre fois
Une solution? merci.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

08 avr. 2007, 18:15

Bonjour,

Ce comportement est normal car les cookies passent en en-tête des requêtes HTTP donc le rechargement de la page est obligatoire pour les prendre en compte.

Voila une alternative à ton script:
if(isset($_GET['lg'])){
    switch($_GET['lg']){
case "EN" :setcookie("lang", "EN", time()+86400*100);
    $lang="EN";
    break;
case "ES" : setcookie("lang", "ES", time()+86400*100);
    $lang="ES";
    break;
case "FR" : setcookie("lang", "FR", time()+86400*100);
    $lang="FR";
    break;
    }
}else{
    $lang=$_COOKIE['lang'];
}

switch($lang){
case "FR":
require("includes/main_FR.php");
break;
case  "EN":
require("includes/main_EN.php");
break;
case "ES":
require("includes/main_ES.php");
break;
} 
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 294 Messages

08 avr. 2007, 18:23

Super, merci ça fonctionne impec , maintenant je vais étudier ça pour comprendre comment tu t'y est pris... et merci pour l'info sur les cookies, j'ignorais.
Merci