session et liens

Eléphant du PHP | 223 Messages

07 mai 2011, 17:17

bonjour

est il possible de changer une variable de session via un lien href ?

car j'ai fait sa est sa ne fonctionne pas

<a href="<?php $_SESSION['lang']='fr' ?>">drapeau</a>

comment faire je veut le faire en session bien sur

merci

ViPHP
xTG
ViPHP | 7331 Messages

07 mai 2011, 18:12

<?php
if( isSet($_GET['lang']) )
  $_SESSION['lang'] = $_GET['lang'];
echo "<a href=\"{$_SERVER['PHP_SELF']}?lang=fr\">drapeau</a>";
?>

Eléphant du PHP | 223 Messages

07 mai 2011, 19:52

salut

je ne veut pas le faire en $_GET mais plutot en $_SESSION
merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 mai 2011, 20:15

salut,

tu n'a pas comprit le principe de session, c'est variable n'est remplie que par des infos stockées sur le serveur. Et pour les remplir faut bien par tir de quelque part, ton lien pointe vers une page web (html ou php) et cette page va générer la variable de session comme l'a indiqué xTG.

Après si tu parle de l'utilisation de cette variable de session dans un lien un simple echo suffit !


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

07 mai 2011, 22:51

Tu veux sûrement faire un site web multi-linguistique, et pouvoir changer de langue avec des drapeaux cliquables. (C'est en tout cas ce que j'ai compris). Je te propose cette solution :

HTML :
<a href="modifierLangue.php?langue=fr"><img src="francais.jpg" /></a>
<a href="modifierLangue.php?langue=es"><img src="espagnol.jpg" /></a>
<a href="modifierLangue.php?langue=en"><img src="anglais.jpg" /></a>
modifierLangue.php :
<?php
session_start();

$langueChoisie = $_GET['langue'];

# Au cas où un malin utilise un autre choix
if($langueChoisie == 'fr' || $langueChoisie == 'en' || $langueChoisie == 'es')
{
     $_SESSION['lang'] = $_GET['langue'];
}

Eléphant du PHP | 223 Messages

07 mai 2011, 23:20

yes cela fonctionne mais il faut que je clicker deux fois sur le drapeau
il doit me manque une ligne dans le code

Petit nouveau ! | 3 Messages

07 mai 2011, 23:52

yes cela fonctionne mais il faut que je clicker deux fois sur le drapeau
il doit me manque une ligne dans le code
Il faut cliquer deux fois sur le drapeau pour arriver à la page modifierLangue.php? Bizarre... A mon avis c'est un problème de ton navigateur, puisque j'ai utilisé un lien ordinaire :?

Eléphant du PHP | 223 Messages

08 mai 2011, 00:01

je suis sous safari mac os x

Eléphant du PHP | 223 Messages

08 mai 2011, 19:40

j ai teste aces IE8 firefox windows cela est pareil obliger de cliquez 2fois sur le drapeau pour que sa change de langue
même en cumulant GET et SESSION
j ai aucune idée pourquoi cela

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 mai 2011, 01:06

Salut,

Sans le code complet je ne peux que supposer, mais je pense que le probleme est du au fait que tu fait le choix d'affichage avant la validation de la langue ce qui fait que obtient ce "délais" de prise en compte.

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

09 mai 2011, 09:21

Bonjour,

Le fait qu'il faille faire 2 fois l'affectation de $_SESSION pour que la langue soit prise en compte me fait penser à un calcul de la langue avant ton traitement.

Eléphant du PHP | 223 Messages

09 mai 2011, 18:50

voici le code que j'utilise

Le drapeau

<a href="?langue=fr"><img src="./images/lang/France.png" title="Fran&ccedil;ais" border="0"></a>

decide-lang.php

if ($_GET['lang']=='fr') { include('lang/fr-lang.php'); } 
else if ($_SESSION['lang']=='fr') { include('lang/fr-lang.php'); } 
else {                       
include('lang/fr-lang.php');
}


index.php

<?
session_start();
require("decide-lang.php");
$langueChoisie = $_GET['langue'];
if($langueChoisie == 'fr' || $langueChoisie == 'en')
{
     $_SESSION['lang'] = $_GET['langue'];
}
?>
je comprend pas pk il faut cliquez deux fois sur le drapeau ou une fois sur le drapeau et un lien du menu
site test : http://www.observatoiremigrateurs.com/new/

quelqu'un as une idées pk
merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 mai 2011, 22:03

comme l'indique mazarini il faut inverser le code de vérification et l'inclusion (l'affectation en session doit être faite avant les includes).

et la sélection du fichier a inclure ne doit se faire que sur le $_SESSION et pas sur le get.

en gros
- si _GET['lang'] existe, modification de $_SESSION['lang']
- inclusion du fichier voulu en fonction de $_SESSION['lang']

Si tu souhaite garder la langue choisis par le visiteur (par exemple dans un cookie) il faut prendre ce cas en compte dans la 1ère ligne (si $_SESSION['lang'] n'existe pas).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 223 Messages

10 mai 2011, 14:29

Trouver petite erreur dans le code
ce n'est pas
if ($_GET['lang']=='fr') { include('lang/fr-lang.php'); } 
Mais
if ($_GET['langue']=='fr') { include('lang/fr-lang.php'); } 
c'est tous galere 48H pour sa trop nul je suis
merci all pour votre aides