Déconnexion de session

Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
 geoffreyvp -
Bonjour,

J'utilise ce code pour rendre mon site multi-langue :

Page Langues.php
<?php  
if(isset($HTTP_COOKIE_VARS['lang'])) {$lang = $HTTP_COOKIE_VARS['lang'];} else {$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); } 

if  ($lang=='fr') {include('langues/fr-lang.php');} elseif  
 ($lang=='en') {include('langues/en-lang.php');} elseif  
 ($lang=='ar') {include('langues/ar-lang.php');}  

$expire = 365*24*3600;  

setcookie("lang", $lang, time() + $expire);  
?> 


Mes feuilles appellent la page ainsi :
<?php require("langues.php"); ?>


Et mon fichier langue est bien généré. Jusque là, aucun problème, les caractères s'affichent et les textes sont justes... Mais lorsqu'il s'agit de changer la langue en anglais ou en arabe, là je rencontre un problème, je me déconnecte de ma session et lorsque je me reconnecte, rien ne se passe. L'on croirais que le mode standard (français) se maintient et refuse de passe la main aux autres...

<a href="http://www.monsite/index.php?lang=fr">Français</a>
<a href="http://www.monsite/index.php?lang=en">English</a>
<a href="http://www.monsite/index.php?lang=ar">???????</a>

Comment je peux corriger ce problème svp ?

Qu'avez-vous besoin comme éléments que j'ai omis de mentionner ?

Merci d'avance pour votre aide.

Source du script multi-langue : http://www.phpdebutant.org/article107.php

28 réponses

  • 1
  • 2
Résumé de la discussion

Le problème porte sur un script PHP de gestion multilingue basé sur un cookie et sur HTTP_ACCEPT_LANGUAGE, qui affiche correctement le français mais réinitialise la langue lors du passage à l’anglais ou l’arabe.

Plusieurs répondants suggèrent d’utiliser $_GET pour transmettre la langue et d’appuyer le choix sur le cookie 'lang', afin que les pages suivantes ne reviennent pas à Accept-Language.

D'autres propositions présentent des variantes qui lisent la langue d’abord via GET, puis via COOKIE et enfin via Accept-Language, avec une inclusion conditionnelle des fichiers linguistiques selon ces priorités.

La discussion signale une résolution partielle, mais le problème persiste sur certaines pages, notamment celles liées à l’administration, et la solution proposée nécessite encore des ajustements.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. geoffreyvp
     
    est ce que t'es sur que ta session expire ?? car ta valeur d'expiration ce rapproche un peu d'une année complete la :p
    0
  2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Si elle expire, je ne sais pas, mais l'on me demande de me reconnecter et ce quelque soit le navigateur utilisé.
    D'habitude, si je ferme la page et que je re-ouvre, je reste toujours connecté à ma session, mais là une fois que je change la langue, paf, il se déconnecte carrément !
    0
  3. geoffreyvp
     
    tu change de langue grace a quoi exactement ?
    0
    1. geoffreyvp
       
      ah non pardon , avait pas vu les liens en bas :s
      0
  4. geoffreyvp
     
    pourquoi ne pas recuperer avec un $_GET par exemple ?
    je trouve ca plus simple que tes premieres lignes.

    ps : j'essaie de t'aider mais vu que je suis un codeur "moyen" je suis pas tres fort non plus ^^
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Hihi, vu que tu me guide sur le $_GET cela dit que tu es mieux avancé que celui qui à commencé il y a moins de 15 jours :D
    0
  7. geoffreyvp
     
    je suis occupé depuis un petit temps et j'utilise toujours le $_GET parce que c'est plus simple :p
    0
  8. geoffreyvp
     
    si je readapte , ca donne ca. (j'aime bien l'espace comme tu le comprendra :p)
    $lang = $_GET['lang'];

    if ($lang=='fr')
    {
    include('langues/fr-lang.php');
    }
    elseif ($lang=='en')
    {
    include('langues/en-lang.php');
    }
    elseif ($lang=='ar')
    {
    include('langues/ar-lang.php');
    }

    regarde si ca marche et on verra bien
    0
  9. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Non, il fonctionne pas !
    Il supprime même la langue par défaut (fr) et m'affiche maintenant mes define :
    TXT_HEAD_ADMIN
    0
  10. geoffreyvp
     
    tu as mis TOUT le code de la langues.php ?
    0
  11. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    oui oui, c'est pas long :
    <?php 
    if(isset($HTTP_COOKIE_VARS['lang'])) {$lang = $HTTP_COOKIE_VARS['lang'];} else {$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2); }
    
    if 	($lang=='fr') {include('langues/fr-lang.php');} elseif 
    	($lang=='en') {include('langues/en-lang.php');} elseif 
    	($lang=='ar') {include('langues/ar-lang.php');} 
    
    $expire = 365*24*3600; 
    
    setcookie("lang", $lang, time() + $expire); 
    ?> 


    Si tu as besoin aussi de ma page verif et ma page config et ma page fonction je te les donnes... pttr qu'il y a quelque chose laba qui t'intéresseront ?
    0
  12. geoffreyvp
     
    je comprend pas tres bien. A quoi te sert ta page verif et config ??

    avec une seule page , tu peux normalement faire ta page qui se transforme sans probleme. t'aura juste ?lang=en ou un autre qui se rajoute a tes pages si tu veux changer de langue.
    0
    1. geoffreyvp
       
      ou bien on peut jouer avec des $_Sessions aussi...
      0
  13. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    A part mes connection à ma base de données, voici ce que contient mon fichier config et verif

    ini_set('session.use_trans_sid', 0);  
    ini_set('session.use_only_cookies', 0);   
    ini_set("url_rewriter.tags", ""); 
    session_start(); 
    
    /* Vérifications */ 
    if (empty($_SESSION["idara"]["admin"])) { header("location: ".DOSSIER_ADMIN."logout.php"); exit(); } 
    $s_idadmin = $_SESSION["idara"]["admin"]["idadmin"]; 
    $s_login = $_SESSION["idara"]["admin"]["login"]; 
    $s_password = $_SESSION["idara"]["admin"]["password"]; 
    $r = mysql_query("select * from Adm_Connection where login='".addslashes($s_login)."' and password='".addslashes($s_password)."' ;"); 
    if (mysql_num_rows($r)==0) { header("location: ".DOSSIER_ADMIN."logout.php"); exit(); }
    0
  14. geoffreyvp
     
    ton fichier verif ici est un acces a un dossier admin auquelle tu a uniquement acces. il n'entre pas en compte normalement avec ta page de langue.

    tout comme ton fichier config d'ailleurs.
    0
  15. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Ah, donc ce qu'il fait est tout à fait normal, c'est pas un beug de code dans ce cas !
    Mais alors... comment régler le problème ? :s J'ai déjà défini toutes les phrases du site et bossé dessus comme un fou !
    0
  16. geoffreyvp
     
    tes phrases deja preparées sont sous quelle forme ? TXT_HEAD_ADMIN ou bien des variables du genre $hi ou $autre (avec le $ surtout :p) ??
    0
  17. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Comme ça :/
    // Index.php
    define('TXT_TIT_TABBORD', 		'Tableau de bord');
    define('TXT_TIT_SERV', 'Serveur');
    define('TXT_DAT_JOUR', 'Nous sommes le :');
    define('TXT_HEU_SERV', 'Heure du serveur :');
    define('TXT_RAC_SERV', 'Racine du serveur :');
    define('TXT_NOM_DOMA', 'Nom de domaine du serveur :');
    define('TXT_ADD_IPSE', 'Adresse IP du serveur :');
    define('TXT_ADD_IPAC', 'Votre adresse IP actuelle :');
    define('TXT_POR_HTTP', 'Port associé au protocole HTTP sur le serveur :'); 
    define('TXT_LAN_SERV', 'Langue utilisée par le serveur :');
    define('TXT_ENC_SERV', 'Types d'encodage que le serveur peut réaliser :');
    define('TXT_VER_SCGI', 'Version des spécifications CGI :');
    define('TXT_VER_APAC', 'Version Apache :');
    define('TXT_VER_PHP', 'Version PHP :');
    define('TXT_VER_MSQL', 'Version MySQL :');
    define('TXT_VER_PROT', 'Version du protocole :');
    0
  18. geoffreyvp
     
    imaginons qu'on crée un fichier FR.php pour le francais et un fichier EN.php pour l'anglais.

    Le FR est la langue par defaut.
    dans les 2 fichiers de langues , on crée la variable $hi = "hi"; ou $hi = "salut"; pour le FR

    on va commencer par verifier si un changement de langue veut etre fait en verifiant si le $_GET n'est pas vide

    <?php
    $lang = $_GET['lang'];

    if(empty($lang))
    {
    include('langues/FR.php');
    }
    elseif($lang='en')
    {
    include('langues/EN.php');
    }

    echo $hi;

    ?>

    normalement la personne francaise arrivera sur un lien avec une fin index.php
    tandis que l'anglais (qui aura decider sur la page FR en cliquant sur un petit drapeau anglais) verra un lien avec une fin index.php?lang=en
    0
  19. geoffreyvp
     
    pour afficher ces variables , tu fais comment ? (parce que j'ai jamais vu ca en fait :p)
    0
    1. geoffreyvp
       
      non finalement j'ai regardé ton lien , c'est comme des variables normales ...

      si tu veux , je peux m'occuper de te remanier toutes tes phrases anglaises comme ca tu t'occupe de la partie francaise ?
      0
  20. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    C'est vraiment pas compliqué comme truc, c'est le plus simple que j'ai connu même de toutes sortes de scripts !

    Source du script multi-langue : http://www.phpdebutant.org/article107.php

    Je les appel comme ça simplement :
    <?php echo TXT_DUJOUR; ?>
    0
    1. geoffreyvp
       
      est ce que ta deja reussi a afficher quelque chose avec ca au moins ? parce que si oui , c'est que ta un probleme avec ton code.
      0
  21. geoffreyvp
     
    on va quand meme essayer de trouver sans trop remanier le code , car si ta deja bossé sur les phrases ,ca serait dommage que ca soit pour rien.

    donc essaie ce code ci

    $lang = $_GET['lang']
    if(empty($lang))
    {
    include('langues/fr-lang.php');
    }
    elseif($lang='en')
    {
    include('langues/en-lang.php');
    }
    elseif($lang='ar')
    {
    include('langues/ar-lang.php');
    }
    ?>
    0
    1. geoffreyvp
       
      j'ai oublié un ; apres le $lang = $_GET['lang']
      0
    2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Parse error: syntax error, unexpected T_IF in /homez.349/hightsec/www/administration/langues.php on line 4
      0
    3. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      <?php
      $lang = $_GET['lang']
      if(empty($lang)){include('langues/fr-lang.php');}
      else if($lang='en'){include('langues/en-lang.php');}
      else if($lang='ar'){include('langues/ar-lang.php');}
      ?>
      0
    4. geoffreyvp
       
      change avec ca

      <?php
      $lang = $_GET['lang'];
      if(empty($lang)){include('langues/fr-lang.php');}
      else if($lang='en'){include('langues/en-lang.php');}
      else if($lang='ar'){include('langues/ar-lang.php');}
      ?>

      le ; etait manquant.
      0
    5. geoffreyvp
       
      et par hasard , elseif ne devrait pas etre en 1 mot ? je peux me tromper mais je crois qu'il est en 1 mot.
      0
  • 1
  • 2