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 :

Modifier une variable de session sur onclick


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut Modifier une variable de session sur onclick
    Bonjour, je suis en train de me prendre la tête sur un problème qui à la base me semblait assez simple : modifier le contenu d'une variable de session lors du clic sur un href !!

    Début de page, ouverture de la session puis assignation d'une valeur à la variable de session si celle-ci n'existe pas. Puis, deux liens href, avec sur le onclick la modification de la variable.

    Or il s'avère lorsque je fais un echo, que la variable prend la dernière valeur lue, même si le onclick n'est pas réalisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    session_start();
    if (!isset($_SESSION['language'])) { $_SESSION['language']="en"; }
    echo "Langue1 : ".$_SESSION['language'];
    ?>
     
    <a href="#" id="lang-en" onclick="<?php $_SESSION['language']='en'; ?>"><img src="img/en.jpg" width="16px" height="11px" border="0" class="lang-en" /></a>
    <a href="#" id="lang-fr" onclick="<?php $_SESSION['language']='fr'; ?>"><img src="img/fr.jpg" width="16px" height="11px" border="0" class="lang-fr" /></a>
     
    <?php echo2 "Langue : ".$_SESSION['language']; ?>
    Le echo1 m'indique bien "en", mais le echo2 m'indique "fr". Le php dans le onclick est interprété même sans que l'action ait lieu. Quel est le problème ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Il ne faut pas perdre de vue que PHP est exécuté côté serveur, JS côté client.

    Ton script PHP délivre la page suivante (fais un "afficher la source" de ta page web si tu as un doute) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Langue1 : en
     
    <a href="#" id="lang-en" onclick=""><img src="img/en.jpg" width="16px" height="11px" border="0" class="lang-en" /></a>
    <a href="#" id="lang-fr" onclick=""><img src="img/fr.jpg" width="16px" height="11px" border="0" class="lang-fr" /></a>
     
    Langue2 : fr
    ... ce qui n'est pas ce que tu souhaites, notamment au niveau du JS, tu en conviendras ;-)
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Ce qui veut dire donc que le php sera toujours interprété au chargement de la page, quelque soit son emplacement et sa "condition" d'exécution, c'est ça ?

    Du coup, ajax ?

  4. #4
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    bingo.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Du coup, ajax ?
    Ou tu recharges la page en envoyant les paramètres quivontbien.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Ok, ce sera ajax alors car j'aimerai ne pas avoir à recharger la page !
    Je vais tenter ça.

  7. #7
    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
    Citation Envoyé par nicolas2603
    Ok, ce sera ajax alors car j'aimerai ne pas avoir à recharger la page !
    Je vais tenter ça.
    Si l'Ajax se contente de modifier coté serveur la langue (la session en faite), le contenu de la page coté client ne changera pas pour autant.
    Ca sera une fois avoir cliquer sur un lien que cette fois le contenu sera en relation avec la nouvelle langue, ce qui revient presque à recharger la page.

    Je vois d'ici les utilisateurs cliquer 10 fois sur le lien ne voyant pas le contenu changer de langue.
    Ce qui suppose donc qu'au retour de l'Ajax, il faudrait afficher une message (un alert() par exemple) expliquant tout ça.
    Mouais.


    Puis n'oublie pas non plus que les moteurs de cherches n'exécutent pas Javascript (évènement onclick, connait pas), ce qui sous entend que les autres langues risquent d'être jamais parcourues, jamais référencées.

    Faire ça en Ajax, faut voir.

    Puis créer des liens de type <a href="#">, donc sans l'ombre d'une URL est presque qu'un non sens
    Créer des liens sans liens, pourquoi donc créer des liens alors ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    En fait j'utilise un script jquery qui permet de modifier en ajax le contenu d'un texte lors d'un clic sur le langage (ChangeLang). Donc ça ça fonctionne, mais lors de la navigation dans les liens, le langage sélectionné n'est pas conservé et la nouvelle page s'affiche dans la langue par défaut. C'est pour ça que j'essaye en plus d'y associer une variable de session.

    Voici le code utilisé dans mon html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script>
    $("#lang-en").click(function(){$("body").changeLang({lang: "en", file: "language.xml"});});
    $("#lang-fr").click(function(){$("body").changeLang({lang: "fr", file: "language.xml"});});
    </script>
     
    <a href="#" id="lang-en"><img src="img/en.jpg" width="16px" height="11px" border="0" class="lang-en" /></a>
    <a href="#" id="lang-fr"><img src="img/fr.jpg" width="16px" height="11px" border="0" class="lang-fr" /></a>
    Et voici la fonction :
    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
    (function($) {
    $.fn.changeLang = function(params){
    	var defaults = {
    		file: 'language.xml',
    		lang: 'en'
    	}
    	var aTexts = new Array();
    	if(params) $.extend(defaults, params);
    	$.ajax({
    		type: "GET",
    		url: defaults.file,
    		dataType: "xml",
    		success: function(xml) {
    			$(xml).find("text").each(function()	{
    				var textId = $(this).attr("id");
    		        	var text = $(this).find(defaults.lang).text();
    				aTexts[textId] = text;
    			});
    			$.each($("*"), function(i, item) {
    				if($(item).attr("langtag") != null) {
    						$(item).fadeOut(150).fadeIn(150).text(aTexts[$(item).attr("langtag")]);
    				}
    			});
    		}
    	});
    };
    })(jQuery);
    Effectivement je n'ai pas le réflexe de coder l'action sur le clic sur l'image directement, c'est pour ça que j'ai des liens href="#". Mais effectivement, je vais corriger ça, et puisque ma fonction est déjà de l'ajax, je vais essayer d'y intégrer la modification de la variable de session.

  9. #9
    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
    Citation Envoyé par nicolas2603
    C'est pour ça que j'essaye en plus d'y associer une variable de session.
    Tout à fait, la session est prévue pour conserver une persistance tout au long de la navigation pour chaque utilisateur.
    Il faut donc modifier la session pour que la fois d'après (prochaine page que demandera l'utilisateur) le contenu soit en rapport avec la nouvelle langue, en rapport avec cette variable de session ($_SESSION['language']).

    Pour modifier une variable de session (language) en Ajax il faut que l'URL + la langue en paramètre pointe vers une page Php (genre changeLang.php) qui s'occupera de le faire.


    Après, que tu souhaite que le contenu actuel soit quand même modifié (tout ou en partie, peu importe), ce que fait ton code actuellement, pourquoi pas.
    Mais l'URL pointe sur un fichier XML (language.xml), ceci ne te donne pas la possibilité de faire du Php.
    Dans ce cas là, il faut donc bien voir qu'il y a 2 choses différentes : Modifier la session pour la navigation futur + modifier le contenu actuel.

    Enfin, si j'ai bien compris le truc.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Ce que je tente de faire à l'heure actuelle, c'est de rajouter au code qui gère déjà le contenu EN-FR via AJAX la partie qui modifie la variable de session.

    Car lord du clic sur mes éléments #lang-en et #lang-fr, le contenu de la page change déjà via AJAX, ça ça fonctionne.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Bonjour, j'ai réussi à modifié ma variable de session en AJAX, un alert m'en donne bien la preuve, mais apparemment elle ne reste pas en mémoire !

    Mon fichier index.php
    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
    <?php
    session_start();
    if (!isset($_SESSION['language'])) { $_SESSION['language']="en"; }
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head profile="http://gmpg.org/xfn/11">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title></title>
    <script language="javascript" type="text/javascript" src="css/jquery-1.4.4.min.js"></script>
    <script>$("body").changeLang({lang: "<?php echo $_SESSION['language']; ?>", file: "language.xml"});</script>
    <script>
    $(".lang-en").click(function(){$("body").changeLang({lang: "en", file: "language.xml"});});
    $(".lang-fr").click(function(){$("body").changeLang({lang: "fr", file: "language.xml"});});
    </script>
    </head>
    <body>
     
    <div id="global">
         <div id="header">
              <img src="img/en.jpg" width="16px" height="11px" border="0" class="lang-en" />
              <img src="img/fr.jpg" width="16px" height="11px" border="0" class="lang-fr" />
         </div>
    </div>
     
    </body>
    </html>
    Le script qui modifie le contenu du texte en fonction de la langue, et qui modifie également la variable de session via le fichier language.php
    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
     
    (function($) {
    	$.fn.changeLang = function(params){
    		var aTexts = new Array();
    		$.ajax({
    			type: "GET",
    			url: params.file,
    			dataType: "xml",
    			success: function(xml) {
    				$(xml).find("text").each(function()	{
    					var textId = $(this).attr("id");
    		        	var text = $(this).find(params.lang).text();
    					aTexts[textId] = text;
    				});
    				$.each($("*"), function(i, item) {
    					if($(item).attr("langtag") != null) {
    						$(item).fadeOut(150).fadeIn(150).text(aTexts[$(item).attr("langtag")]);
    					}
    				});
    				$.get("language.php", { id:params.lang });
    			}
    		});
    	};
    })(jQuery);
    Et pour finir mon fichier language.php tout simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $_SESSION['language']=$_GET['id'];
    echo $_SESSION['language'];
    ?>
    Quand je clique sur chaque image ça m'indique bien Langage modifié:fr ou Langage modifié:en, donc la variable est bien modifiée, mais lorsque je clique sur une autre page, elle reprend sa valeur 'en' comme si elle n'existait pas.

    Une idée d'où vient mon erreur ?

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il ne manquerait pas un session_start() dans ton fichier language.php ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    effectivement, à force de me creuser la tête, j'en ai fait une erreur de débutant !!!!

    Merci beaucoup, ça fonctionne maintenant !

  14. #14
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 1
    Points : 2
    Points
    2
    Par défaut La manière propre
    Cet article propose une méthode propre pour modifier les variables de session depuis des actions client :

    http://corporate.maxmatcher.com/fr/a...vec-JavaScript

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

Discussions similaires

  1. modifier une variable de session via javascript
    Par DiverSIG dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 02/04/2010, 07h13
  2. modifier une variable de Session
    Par mouvma dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 12/09/2007, 17h20
  3. [JSP] [Javascript] Modifier une variable de Session
    Par fady005 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 05/04/2007, 11h48
  4. Réponses: 1
    Dernier message: 07/12/2006, 19h02
  5. Réponses: 9
    Dernier message: 03/07/2006, 18h32

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