Page 1 sur 1

SetCookie, comment l'utiliser !

Posté : 15 juil. 2006, 08:42
par gesualda
Bonjour à tous,

Mon problème aujourd'hui vient de la mise en place d'un cookie dans le cadre d'un site en multi-langue.

Ex:
<?php session_start(); 
define('IN_HISTO', true);

define('path_lang',"./lang");

if ($_GET['langue']=='fr') {        
  	 include(path_lang."/lang_fr.php");	
	 SetCookie("histo_lang", $_GET["langue"]);    	
	 }  	 
   	 elseif ($_GET['langue']=='de') {      
  	 include(path_lang."/lang_de.php");	
	 SetCookie("histo_lang", $_GET["langue"]);  	
	 }
	 elseif ($_GET['langue']=='it') {     
  	 include(path_lang."/lang_it.php");	
	 SetCookie("histo_lang", $_GET["langue"]);  
	 } 
	  
  	 else {                    
   	 include(path_lang."/lang_fr.php");
  	 }		
Voila ce que je met en haut de ma page pour la création du cookie
La page est appelé ainsi après la selection de la langue par un menu comme celui ci:

Code : Tout sélectionner

<li><a href="?id=page_1&langue=fr" id="lien_fr"> En Français</a></li> <li><a href="?id=page_1&langue=it" id="lien_it">In Ialiano</a></li> <li><a href="?id=page_1&langue=de" id="lien_fr"> En Français</a></li>
Lorsque la première page est lu, et que l'on passe à la suivante, il faut que la langue reste celle choisi, donc mon soucis est qu'elle revient à la langue par défault.
<a class="lien_st" href="?id=page_2"><?php echo $lang['suite'] ?></a>
l'appelle de ma deuxième page se fait ainsi etc.....

Merci pour vos conseils :cry:

Posté : 15 juil. 2006, 15:41
par gesualda
A force de chercher j'ai trouvé et je fais ca
<a class="lien_st" href="?id=page_2&langue=<?php echo $_GET['langue']?>"><?php echo $lang['suite'] ?></a>
Ca fonctionne en partant de la page d'accueil et à condition de ne pas changer de langue en cours de lecture.

Mais comme on peut changer de langue à n'importe quel moment, par le biais de lien image comme ceux-ci:

Code : Tout sélectionner

<li><a href="?id=page_1&lang=fr" onClick="<?php echo setcookie("histo_lang"); ?>" ><img src="img/drap_2/i_france.gif" alt="" width="16" height="16" border="0"> </a></li> <li><a href="?id=page_1&lang=it" onClick="<?php echo setcookie("histo_lang"); ?>"><img src="img/drap_2/i_italie.gif" alt="" width="16" height="16" border="0"></a></li>
Il faut donc détruire le cookie en cours pour qu'il prenne une nouvelle valeur, donc détruire ce cookie dans mon cas
SetCookie("histo_lang")
Comment procéder pour qu'il me fasse cette destruction quand je change celle ci en cours de lecture ?

cela ne fonctionne pas avec Onclick ?

Merci de votre aide :)

Posté : 15 juil. 2006, 16:56
par Shrell

Code : Tout sélectionner

<li><a href="?id=page_1&lang=fr" onClick="<?php echo setcookie("histo_lang"); ?>" ><img src="img/drap_2/i_france.gif" alt="" width="16" height="16" border="0"> </a></li> <li><a href="?id=page_1&lang=it" onClick="<?php echo setcookie("histo_lang"); ?>"><img src="img/drap_2/i_italie.gif" alt="" width="16" height="16" border="0"></a></li>
[...]

cela ne fonctionne pas avec Onclick ?
si tu regardes le code source de ta page quand tu l'affiches, tu dois avoir

Code : Tout sélectionner

onClick="true"
Tu es obligé de recharger ta page pour changer de langue, tu ne peux donc pas le faire en javascript. ce que je te conseille de faire:
crée un fichier langue.php dans lequel tu n'affiches que tes drapeaux pour le changement de langue, et dans lequel tu géneres automatiquement l'url, que tu inclues dans chaque page.
Quelque chose dans ce style (il faut adapter à ton architecture)
<?
foreach($_GET as $key => $value) {
if($key!="l") {
$chaine.="&$key=$value";
}
}
?>
<span class="bleu">Choisissez votre langue</span>
<table border="0" cellpadding="2">
<tr><td><img src="images/communs/drapeaux/fr.gif"></td>
<td class="bleu"><a href="<?=$SCRIPT_NAME ?>?l=fr<?=$chaine ?>">Fran&ccedil;ais</a></td></tr>
<tr><td><img src="images/communs/drapeaux/en.gif"></td>
<td class="bleu"><a href="<?=$SCRIPT_NAME ?>?l=en<?=$chaine ?>">Anglais</a></td></tr>
<tr><td><img src="images/communs/drapeaux/al.gif"></td>
<td class="bleu"><a href="<?=$SCRIPT_NAME ?>?l=al<?=$chaine ?>">Allemand</a></td></tr>
<tr><td><img src="images/communs/drapeaux/ital.gif"></td>
<td class="bleu"><a href="<?=$SCRIPT_NAME ?>?l=ital<?=$chaine ?>">Italien</a></td></tr>
<tr><td><img src="images/communs/drapeaux/spa.gif"></td>
<td class="bleu"><a href="<?=$SCRIPT_NAME ?>?l=spa<?=$chaine ?>">Espagnol</a></td></tr>
<tr><td><img src="images/communs/drapeaux/portu.gif"></td>
<td class="bleu"><a href="<?=$SCRIPT_NAME ?>?l=portu<?=$chaine ?>">Portugais</a></td></tr>
</table>
puis pour t'éviter de trimballer un cookie (à moins qu'il ne soit utile pour quelque chose) rajoute dans tous tes liens
?langue=<?=$_GET[langue] ?>

Posté : 15 juil. 2006, 21:19
par gesualda
Merci Shrell

Je pense avoir compris une parti du sens de ta construction mais en fait tout fonctionne dans mon cas de figure, mon problème il n'est que lorsque par exemple tu te retrouve en italien sur la deuxième page et que je clique sur le drapeaux français le cookie n'est pas détruit avant de recharger la page.

PS: La page des drapeaux est déjà dans une page incluse.

Y a un truc qui m'échappe :(

Posté : 15 juil. 2006, 22:41
par Shrell
les cookies ne sont changés qu'au rechargement de la page (c'est du php, donc executé coté serveur, donc inaccessible par javascript)
en plus, si je ne dis pas de betise, tu ne peux acceder à la valeur du cookie (par $_COOKIE[variable]) qu'après un second rechargement de page. C'est pour cela que je te déconseille d'utiliser les cookies

Posté : 16 juil. 2006, 08:37
par gesualda
Je vais repartir sur de nouvelle base et oublié mes cookies :D
qu'appelle tu par la variable
<?=$SCRIPT_NAME ?>
? :roll:

J'appelle mes pages par le biais de :
$app_pag = array (
								'page_1' => path_lg.'/p_1.php',
								'page_2' => path_lg.'/p_2.php', 
								'page_3' => path_lg.'/p_3.php',												
							 );			

			if ((isset($_GET['id'])) && (isset($app_pag[$_GET['id']]))) {
			include($app_pag[$_GET['id']]); 
 			 }
Quand tu appelle la global $_GET dan la boucle, elle ne connait pas la valeur de la
$_GET['langue']
mais de $_GET en général.

Il faudrait donc que la boucle ne prennent que la valeur de
$_GET['langue']


J'espère que je ne m'explique pas trop mal :roll: :oops: Comment procéder alors?

Posté : 16 juil. 2006, 11:27
par Shrell
pour $SCRIPT_NAME, je me suis trompé, c'est $_SERVER[SCRIPT_NAME], qui contient le nom du script en cours (index.php, langue.php, n_importe_quoi.php ...)
Quand tu appelle la global $_GET dan la boucle, elle ne connait pas la valeur de la
$_GET['langue']
mais de $_GET en général.

Il faudrait donc que la boucle ne prennent que la valeur de
$_GET['langue']
euh, là j'ai pas bien compris ta question :oops:

Posté : 16 juil. 2006, 15:44
par gesualda
Alors voila j'ai changé une partie du script comme tu me le préconisait' Shrell' et en fait je l'ai mis en session comme ceux-ci:
 if ($_GET['langue']=='fr') {	   	 
	 $_SESSION['lg'] = $_GET['langue'];
	 include(path_lang."/lang_fr.php");
Je rappelle dans chaque lien avec:
<a class="lien_st" href="?id=page_2&langue=<?php echo $_SESSION['lg'] ?>"><?php echo $lang['suite'] ?></a>
Ca ca fonctionne et comme tu disais pas besoin de trainer un cookie.

Par contre quand je parlais

Code : Tout sélectionner

Quand tu appelle la global $_GET dan la boucle, elle ne connait pas la valeur de la
Je m'exprime mal.

En fait la variable global $_GET est appelé deux fois dans mon lien. Si fais une boucle pour me montrer ce qui est appellé comme ceux-ci:
foreach($_GET as $key => $value) {
echo 'clef: ' .$key .' value: ' . $value .'<br />';
}
Il m'apparait deux valeurs de $_GET.

Code : Tout sélectionner

clef: id value: page_1 clef: langue value: fr
Comment faire pour extraire uniquement la value de la clef "id" ?

:P

Posté : 16 juil. 2006, 16:32
par Shrell
euh, j'ai peur de répondre totalement à coté de la plaque, mais si tu as une adresse du genre :
http://www.phpfrance.com/forums/posting ... ly&t=20555
(c'est la première que j'ai sous les yeux :lol: ) alors $_GET['mode'] vaut "reply" et $_GET['t'] vaut 20555
donc dans ton cas, pour récupérer la valeur de la clé id, :
$id=$_GET['id'];

Posté : 16 juil. 2006, 17:20
par gesualda
euh, j'ai peur de répondre totalement à coté de la plaque,
Je te rassure, je suis certainement plus souvent à coter de la plaque que toi, vu mon grand age.

En tous les cas, c'était bien vu,
$id=$_GET['id'];
Je l'ai mis en session et maintenant tout va.

Le but de récupérer la valeur de 'id' était qu'au changement de langue au cours d'une page de lecture, je puisse avoir la page en cours traduite et non pas comme avant, expédié à nouveau vers l'index.

Voila un problème de résolu, merci de ton aide et @ bientot :D :D

Posté : 16 juil. 2006, 18:04
par Shrell
heureux de t'avoir aidé, à bientot pour de nouvelles aventures :wink: