IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Souci de session / cookie site multilangue [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Points : 144
    Points
    144
    Par défaut Souci de session / cookie site multilangue
    Bonjour,

    J'ai un souci avec ma session. Quand j'arrive sur ma page, tant que je n'ai pas cliqué sur le drapeau de la langue désirée, je n'ai pas le paramètre de la langue dans l'url Pourtant je mets la langue française par défaut ce qui fonctionne mais je ne la récupère pas dans l'url...

    Ce qui me donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://127.0.0.1/real_estate/about.php?lang=
    Mon code php pour la session:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <?php 
    	session_start();
    	session_name('language');	
    	if (isset($_GET['lang'])){
    		$lang=$_GET['lang'];
    		$_SESSION['lang'] = $lang;
     
    		setcookie("lang", $lang, time() + (3600 * 24 * 30));
    	}else if(isset($_SESSION['lang'])){
    		$lang = $_SESSION['lang'];
    	}else if(isset($_COOKIE['lang'])){
    		$lang = $_COOKIE['lang'];
    	}else{
    		$lang = 'fr-lang.php';
    	}
     
    	switch ($lang) {
    	  case 'fr':
    	  $lang_file = 'fr-lang.php';
    	  break;
     
    	  case 'en':
    	  $lang_file = 'en-lang.php';
    	  break;
     
    	  case 'nl':
    	  $lang_file = 'nl-lang.php';
    	  break;
     
    	  default:
    	  $lang_file = 'fr-lang.php';
    	}	
    	require_once 'lang/'.$lang_file;
     
    	require_once("require/inc.connect.php");
    ?>
    Mes paramètres d'url:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <li><a href="about.php?lang=<?php echo $_SESSION['lang']?>">A propos</a></li>
    Est ce que mon code est correct pour ma session ou je suis à côté de la plaque?

    Merci de vos lumières,
    David

  2. #2
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Points : 144
    Points
    144
    Par défaut
    Je reviens vers vous car je ne trouve pas de solution... J'ai essayé avec l'url par défaut dans le HTACCESS mais cela ne me donne pas le paramètre de la langue.

    Avez-vous une solution?

    Merci d'avance

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut


    Le souci vient que tu fais tout pour initialiser une variable $lang, mais pas pour la session $_SESSION['lang'].
    Cette variable de session "lang" est initialisée uniquement si on reçois en GET la langue.
    L'autre souci, c'est que tu ne prévois pas de langue par défaut, il en faudrait une (Français ou Anglais, peu importe).

    Pour ma part, plusieurs questions :
    Pourquoi initialise tu une variable $lang ?
    Mais aussi, pourquoi par défaut l'initialise tu avec : "fr-lang.php", pourquoi ne pas le faire avec uniquement "fr" ?
    Plus troublant encore, tu as un switch($lang) qui au bout initialise une autre variable $lang_file qui contiendra la même chose.


    A mon sens, tu te complique la vie avec ces variables, ça ne sert pas à grand chose.
    Le plus simple, serait d'initialiser d'office la session, et c'est après, si la personne choisie une autre langue que celle par défaut ou il faudra la modifier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if ((isset($_GET['lang']) && !empty($_GET['lang']))
        || (isset($_COOKIE['lang']) && !empty($_COOKIE['lang']))) {
        $_SESSION['lang'] = $_GET['lang'];
        setcookie("lang", $_SESSION['lang'], time() + (3600 * 24 * 30));
    }
    // Langue par défaut
    if (empty($_SESSION['lang'])) $_SESSION['lang'] = 'fr';
    Ensuite, il suffit d'exploiter partout dans son code $_SESSION['lang'], cette variable de session contiendrait donc fr, ou en, etc ...
    Il serait tout de même bon de vérifier si la langue obtenue en GET ou dans le COOKIE fait partie des langues proposées.


    Si on souhaite par exemple inclure un fichier en rapport avec le code de la langue, suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    include('fichier'.$_SESSION['lang'].'-lang.php');
    Il n'est pas utile de créer 50 variables différentes.
    De plus, une variable à une portée limitée, elle n'est pas visible dans une fonction ou classe, sinon faut la rendre globale.
    $_SESSION est une super global, donc ce tableau peut être exploiter absolument partout dans son code.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session_name('language');
    Petite parenthèse concernant ce code ci-dessus ou tu donne comme nom à la session : 'language'.
    J'ai l'impression que tu confond la session et les varariables de sessions quelle contient (l'ensemble du tableau qu'est $_SESSION).
    Cest 2 choses sont très différentes, non nom, ça peut être le nom de ton site, ou un diminutf, de plus, et par convention on la nomme souvent en majuscule.
    Exemple : ANDEMAN_BLOG_SESS
    Les variables de sessions, c'est entre autre la langue : $_SESSION['lang'], lang est une des variables.

  4. #4
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Points : 144
    Points
    144
    Par défaut
    Merci RunCodePhp

    Tes explications sont toujours précieuses !
    Oui j'ai beaucoup de mal avec les sessions...

    Dans ton explications tu mets "... code etc ..." Mais que dois-je mettre en plus?

    Merci

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Dans ton explications tu mets "... code etc ..." Mais que dois-je mettre en plus?
    Au setcookie().

    Mais le redéfinir d'office serait tout aussi simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (empty($_SESSION['lang'])) $_SESSION['lang'] = 'fr';
    setcookie('lang', $_SESSION['lang'], time() + (3600 * 24 * 30));

    NB : J'ai modifié mon code du post plus haut, il manquait des parenthèses à la condition.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Session /Cookie et site multilangue
    Par Invité dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/09/2011, 12h18
  2. [Cookies] Erreur de code pour un site multilangue
    Par MaTTuX_ dans le forum Langage
    Réponses: 2
    Dernier message: 25/08/2007, 22h23
  3. [Cookies] Site multilingue et sessions
    Par franc3 dans le forum Langage
    Réponses: 6
    Dernier message: 20/03/2007, 00h17
  4. [Cookies] Site PHP multilangue
    Par RobinNono dans le forum Langage
    Réponses: 4
    Dernier message: 15/05/2006, 13h47
  5. [Cookies] site multilangue
    Par manaboko dans le forum Langage
    Réponses: 11
    Dernier message: 22/11/2005, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo