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

Langage PHP Discussion :

Perte du contenu de la session


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut Perte du contenu de la session
    Bonjour,

    J'essaie de construire un site en français et en allemand.
    L'entête du site contient deux blasons.
    Au départ le site s'affiche en français et si on clique sur le blason allemand le menu que je veux afficher est en allemand. jusque là, ça marche !!!
    Le souci est que si je clique sur le menu allemand, c'est le menu en français qui s'affiche.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    <?php
    session_start();
    if (isset($_GET['choixlangue'])){
    	$_SESSION['choixlangue'];
    }
    ?>
    <!DOCTYPE HTML>
    <html>
    <head>
    ...
    </head>
    <body>
    <?php
    if (isset($_POST['french']))		$langue = $_POST['french'];
    if (isset($_POST['deutch']))		$langue = $_POST['deutch'];
    else $langue = "F";
    ?>
    <div id="global">
    	<FORM NAME="langue" ACTION="index.php?page=index" METHOD="post">
    	<div id="bandeau">
    		<div id="b1"><input name="french" src="images/blason-Troissy.jpg" type="image" value="F" id="imgbandeau" ></div>
    		<div id="b2">JUMELAGE <br> TROISSY ~ PARTENHEIM </br></div>
    		<div id="b3"><input name="deutch" src="images/blason-Partenheim.jpg" type="image" value="D" id="imgbandeau2" >
    			<input type="text" name="choixlangue" value="<?php echo $langue; ?>" style="width:10%; display:inline;">
     
    		</div>
    	</div>
    	</FORM>
    <?php
    if ($langue == "F"){
    ?>
    	<div id="menuF">
    		<div id="menu">
    			<ul>
      				<li><a href="index.php?page=accueilF">Accueil</a></li>
     				<li><a href="index.php?page=historiqueF">Historique</a>
        					<ul>
         						<li><a href="#">Sous-item 1</a></li>
          						<li><a href="#">Sous-item 2</a></li>
          						<li><a href="#">Sous-item 3</a></li>
        					</ul>
      				</li>
      				<li><a href="#">contact</a></li>
    			</ul>
    		</div>
    	</div>
    <?php
    }
    else {
    ?>
    	<div id="menuD">
    		<div id="menu">
    			<ul>
      				<li><a href="index.php?page=accueilD">Home</a></li>
     				<li><a href="#">Historiche</a>
        					<ul>
         						<li><a href="#">Sous-item 1</a></li>
          						<li><a href="#">Sous-item 2</a></li>
          						<li><a href="#">Sous-item 3</a></li>
        					</ul>
      				</li>
      				<li><a href="#">Kontakt</a></li>
    			</ul>
    		</div>
    	</div>
     
    <?php
    }
     
    ?>
     
    	<div id="conteneur">
    		<?php 
    		if ($langue == "F"){
    			if (!isset($_GET['page'])) $page= 'accueilF'; else $page= $_GET['page'];
    			switch($page){
    				//menu général
    				case 'accueilF': include ('french/accueilF.php');break;
    				case 'historiqueF': include ('french/historiqueF.php');break;
    			}
    		}
    		else {
    			if (!isset($_GET['page'])) $page= 'accueilD'; else $page= $_GET['page'];			
    			switch($page){
    				//menu général
    				case 'accueilD': include ('allemand/accueilD.php');break;
    			}
    		}
    		?>
    	</div>
    </div>
    </body>
    </html>
    Quel est le meilleur moyen de solutionner ça ?
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Il faudrait commencer par faire preuve de LOGIQUE, et regrouper les instructions (actuellement contradictoires) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    session_start();
    if (isset($_GET['choixlangue'])){
    	$_SESSION['choixlangue'];
    }
    ?>
    ...
    <?php
    if (isset($_POST['french']))		$langue = $_POST['french'];
    if (isset($_POST['deutch']))		$langue = $_POST['deutch'];
    else $langue = "F";
    ?>
    Ca fait beaucoup (TROP !) de noms de variables différentes !!
    Et autant d'occasion de se tromper...

    2- Là, tu vas galérer pour la MAINTENANCE avec des noms de dossiers ET de fichiers différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		<?php 
    		if ($langue == "F"){
    			if (!isset($_GET['page'])) $page= 'accueilF'; else $page= $_GET['page'];
    			switch($page){
    				//menu général
    				case 'accueilF': include ('french/accueilF.php');break;
    				case 'historiqueF': include ('french/historiqueF.php');break;
    			}
    3- Désolé mais... il faut vraiment TOUT revoir.
    Dernière modification par Invité ; 09/08/2018 à 13h20.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bon.

    ETAPE 1 : Gestion du CHANGEMENT DE LANGUE

    C'est $_SESSION['langue'] qui sera utilisé.

    L'intérêt est qu'une SESSION est disponible PARTOUT (contrairement à une variable "locale").
    (et on uniformise les noms de variables pour "langue")
    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
    <?php if( empty(session_id()) ){ session_start(); }
    // -----------------
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    // Afficher les erreurs et les avertissements
    	error_reporting(E_ALL); 	// en TEST !!
    // -----------------
    // langues disponibles sur le site
    if( empty($_SESSION['langues_array']) )
    {
    	$_SESSION['langues_array'] = ['fr','de']; // français (principale) / allemand (si tu veux ajouter des langues, il suffira de l'ajouter ici)
    }
    // -----------------
    // changement de langue
    if( empty($_SESSION['langue']) )
    {
    	$_SESSION['langue'] = $_SESSION['langues_array'][0]; // langue par défaut
    }
    if(isset($_GET['langue'])) // (reçu via URL)
    {
    	$_SESSION['langue'] = $_GET['langue'];
    } elseif(isset($_POST['langue'])) // (reçu via form)
    {
    	$_SESSION['langue'] = $_POST['langue'];
    }
    if( !in_array($_SESSION['langue'],$_SESSION['langues_array']) )
    {
    	$_SESSION['langue'] = $_SESSION['langues_array'][0]; // langue par défaut
    }
    // -----------------
    ?>
    LE(s) FORMULAIRE(s) de CHANGEMENT DE LANGUE :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <div id="langues">
    	<form method="post" action="">
    		<button type="submit" name="langue" value="fr"<?php if($_SESSION['langue']=='fr'){ echo ' class="active"; } ?>>Français</button>
    	</form>
    	 | 
    	<form method="post" action="">
    		<button type="submit" name="langue" value="de"<?php if($_SESSION['langue']=='fr'){ echo ' class="active"; } ?>>Deutsch</button>
    	</form>
    </div>
    ou sous forme de liste déroulante :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div id="langues">
    	<form action="" method="post">
    		<select name="langue">
    			<option value="fr"<?php if($_SESSION['langue']=='fr'){ echo ' selected="selected"; } ?>>Français</option>
    			<option value="de"<?php if($_SESSION['langue']=='de'){ echo ' selected="selected"; } ?>>Deutsch</option>
    		</select>
    	</form>
    </div>


    ETAPE 2 : Gestion des DOSSIERS / FICHIERS en fonction de la LANGUE

    Il existe plusieurs méthodes.
    Ici, je ne parlerai que de celle qui s'apparente le plus à la tienne :
    • UN DOSSIER PAR LANGUE
    • + des fichiers spécifiques dans chaque dossier

    Par contre, pour ne pas galérer, il faut y mettre de l'ordre :

    2.1- Les dossiers : pour faire simple, il suffit de les appeler
    • fr
    • de

    2.2- Les fichiers : comme ils sont dans des dossiers différents, rien n'empêche qu'ils aient les mêmes noms !
    Au contraire : ce sera plus pratique
    • fr
      • accueil.php
      • machin.php
      • ...
    • de
      • accueil.php
      • machin.php
      • ...

    AINSI, au lieu d'un if(...) ... include ('french/accueilF.php'); (trop complexe !!), il suffira de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include ($_SESSION['langue'].'/accueil.php');
    C'est tout l'intérêt d'avoir appelé les dossiers "fr" et "de" !

    Les liens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <li><a href="index.php?page=accueilF">Home</a></li>
    ...
    <li><a href="index.php?page=accueilD">Home</a></li>
    Non. Là aussi, on uniformise : pas de "accueilF" ou "accueilD". Juste "accueil"

    C'est $_SESSION['langue'] qui permet de sélectionner dans quel dossier ("fr" ou "de") aller chercher les pages.


    3- Ajouter une 3ème langue (ou plus)

    Il suffira de :
    • copier-coller le dossier "fr" (et son contenu) dans un nouveau dossier "en" (anglais)
    • dans le dossier "en", traduire tout en anglais !
    • ajouter 'en' dans $_SESSION['langues_array']

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['langues_array'] = ['fr','de','en']; // français (principale) / allemand / anglais
    Dernière modification par Invité ; 31/08/2018 à 13h47.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Merci pour tous ces conseils.
    J'ai effectivement 1 dossier par langue.
    J'avais mis mis par exemple accueilF et accueilD en pensant que ça permettait d'éviter les mélanges. Mais bon l'expert c'est pas moi !!
    Ce que j'utilise dans la balise <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    Je pense avoir encore besoin d'aide pour le démarrage !!

    Merci encore

  5. #5
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    Pour la gestion des dossiers c'est ok j'ai bien un dossier "fr" et un dossier "de"

    Ok pour la session avec un tableau

    pour l'ouverture du site j'ai dû ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(isset($_POST['french'])) {
    	$_POST['langue'] = 'fr';	
    	$_SESSION['langue'] = $_POST['langue'];
    }
    elseif (isset($_POST['deutch'])) {
    	$_POST['langue'] = 'de';
    	$_SESSION['langue'] = $_POST['langue'];
    }
    sans ces lignes il y a bien "fr" mais par exemple un clic sur le blason allemand ne changeait pas la valeur de l'INPUT. elle restait à "fr" !!

    pour ce qui des noms des fichiers je suis bien d'accord ça va simplifier.
    par contre pour le menu je dois bien avoir un menu en français et un menu en allemand selon le clic.

    voilà où j'en suis !!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ne bricole pas.
    Un code bien conçu est un code simple.

    Modifie ton formulaire.
    Utilise comme name "langue". Et en value "fr" et "de".

    Quant au(x) menu(s), il suffit :
    • d'avoir 2 fichiers menu.php, 1 dans chaque dossier.
    • de mettre un include


    REFLECHIS à la CONCEPTION avant de coder.
    Tu gagneras du temps.

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

Discussions similaires

  1. [ZF 1.10] [Firefox + uploadify] Perte du contenu de session
    Par fanfouer dans le forum Zend Framework
    Réponses: 0
    Dernier message: 19/10/2011, 10h55
  2. perte d contenu de la var session
    Par memoza dans le forum ASP
    Réponses: 5
    Dernier message: 10/02/2007, 13h58
  3. [TPaintBox] Problème de perte du contenu
    Par Tango dans le forum Composants VCL
    Réponses: 5
    Dernier message: 09/12/2005, 09h56
  4. Réponses: 6
    Dernier message: 21/06/2005, 15h13
  5. Perte du contenu des blobs
    Par macakou99 dans le forum Débuter
    Réponses: 10
    Dernier message: 22/05/2003, 15h17

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