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 :

Variables de session incorrectes


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Variables de session incorrectes
    Bonjour tout le monde,

    J'ai ce code :

    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
    <div class="btn" onmouseover="afficher_masque_sous_menu('afficher');"  >
                    	<a href="#" onclick="div_centrale('liens_utiles');" class="btn">Dossiers</a>
                        <div id="sousmenu" style="display:none">
                        	<div class="btn">
                    			<a href="#" onclick="div_centrale('dossiers_chiens'); afficher_masque_sous_menu('masquer'); <?php $_SESSION['animal'] = "chiens"; ?>" class="btn">Chiens</a>
                             </div>
                            <div class="btn">
                                <a href="#" onclick="div_centrale('dossiers_chats'); afficher_masque_sous_menu('masquer'); <?php $_SESSION['animal'] = "chats"; ?>" class="btn">Chats</a>
                             </div>
                            <div class="btn">
                                <a href="#" onclick="div_centrale('dossiers_NAC'); afficher_masque_sous_menu('masquer'); <?php $_SESSION['animal'] = "NAC"; ?>" class="btn">NAC</a>
                            </div>
                        </div> 
     
                    </div>
    C'est en fait un menu déroulant que j'ai créé vite fait.

    J'aurais voulu associer une valeur sur le clic d'un sous-élément de ce menu en y affectant une valeur à une variable de session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div class="btn">
                                <a href="#" onclick="div_centrale('dossiers_chats'); afficher_masque_sous_menu('masquer'); <?php $_SESSION['animal'] = "chats"; ?>" class="btn">Chats</a>
    Le problème est que la variable de session vaut toujours NAC

    un var_dump me montre en effet la valeur de cette variable de session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php session_start();
     
    var_dump($_SESSION); ?>
    <ul>
    	<?php if($_SESSION['animal'] == 'chats') 	{ echo ' <li><a href="#" class="joli_liens" onClick="div_centrale(\'obesite_feline\');return false;">L\'obésité féline</a></li> ';}?>
    me donne :

    array(2) { ["langue"]=> string(2) "FR" ["animal"]=> string(3) "NAC" }
    Qu'en pensez-vous ?

    Merci d'avance pour l'aide et bon dimanche.

    beegees

  2. #2
    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
    Par défaut
    Salut

    J'aurais voulu associer une valeur sur le clic d'un sous-élément de ce menu en y affectant une valeur à une variable de session :
    C'est pas clair.
    Mais comme ça je dirais que les sessions sont du coté serveur, donc pour modifier une valeur d'un élément, il faut que ça soit Php qui le fasse, pas lors d'un clique sur un lien (Javascript en somme).

    L'Ajax peut faire ça par exemple, ou alors faut recharger la page, et transmettre la nouvelle valeur par exemple.

    En tout cas, le code que je voir ne fait qu'affecter une valeur à ta session, et ça dépend où dans ton code tu as vérifié sa valeur (un echo surement).
    La dernière affectation c'est NAC en tout cas.

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Salut,

    Ben oui, tu as raison, comment ais-je pu oublier une telle chose.

    J'avais de l'ajax dans mon site, j'en ai donc profité pour l'utiliser.

    j'utilise donc toujours la même div :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <div class="btn" onmouseover="afficher_masque_sous_menu('afficher');"  >
                    	<a href="#" onclick="div_centrale('liens_utiles');" class="btn">Dossiers</a>
                        <div id="sousmenu" style="display:none">
                        	<div class="btn">
                    			<a href="#" onclick="div_centrale('dossiers_chiens'); afficher_masque_sous_menu('masquer');" class="btn">Chiens</a>
                             </div>
                            <div class="btn">
                                <a href="#" onclick="div_centrale('dossiers_chats'); afficher_masque_sous_menu('masquer');" class="btn">Chats</a>
                             </div>
                            <div class="btn">
                                <a href="#" onclick="div_centrale('dossiers_NAC'); afficher_masque_sous_menu('masquer');" class="btn">NAC</a>
                            </div>
                        </div>
    Sur le onclick, j'ai donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="div_centrale('dossiers_chats');
    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
    function div_centrale(page)
    {
    	alert(page);
    	var xhr = getXhr();
     
    	xhr.onreadystatechange = function()
    	{
    		//alert(xhr.status);
    		//alert(xhr.readyState);
    		if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0 ) )
     
    		{
    			LeRetour = xhr.responseText; 
    			//alert(LeRetour);
    			document.getElementById('centre').innerHTML = LeRetour;
    			div_images(page);
    			//j'appelle la fonction afficher_photo afin d'afficher les photos qui se trouvent dans la bd et le dossier vos_photos
    			if(page == 'vos_photos') 
    			{
    				afficher_photo();
    			}
     
    		}
    	}
     
    	//alert("ici");
    	xhr.open("POST","AJAX/div_centrale.php",true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send("page="+page);
    }
    ça, c'est côté client.

    Côté serveur (PHP) j'ai ceci :

    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
    <?php
     
    	switch($_POST['page'])
    	{
    		case 'accueil':
    			include('../includes/accueil.php');
    		break;
    		case 'cabinet_bus':
    			include('../includes/joindre_cabinet_bus.php');
    		break;
    		case 'cabinet_voiture':
    			include('../includes/joindre_cabinet_voiture.php');
    		break;
    		case 'chiens_accueil':
    			include('../includes/chiens_accueil.php');
    		break;
    		case 'chats_accueil':
    			include('../includes/chats_accueil.php');
    		break;
    		case 'liens_utiles':
    			include('../includes/liens_utiles.php');
    		break;
    		case 'alimentations':
    			include('../includes/alimentations.php');
    		break;
    		case 'vos_photos':
    			include('../includes/photos.php');
    		break;
    		case 'accueil_nl':
    			include('../includes/accueil_nl.php');
    		break;
    		case 'nac_accueil':
    			include('../includes/nac_accueil.php');
    		break;
    		case 'furet':
    			include('../includes/furet.php');
    		break;
    		case 'lapin':
    			include('../includes/lapin.php');
    		break;
    		case 'CAVIOMORPHES':
    			include('../includes/CAVIOMORPHES.php');
    		break;
    		case 'alim_chats':
    			include('../includes/alim_chats.php');
    		break;
    		case 'alim_chiens':
    			include('../includes/alim_chiens.php');
    		break;
    		case 'MYOMORPHES':
    			include('../includes/MYOMORPHES.php');
    		break;
    		case 'annonces':
    			include('../includes/annonces.php');
    		break;
    		case 'dossiers_chats':
    			$_SESSION['animal'] = 'chats';
    			include('../includes/dossiers_chats.php');
    		break;
    		case 'dossiers_chiens':
    			$_SESSION['animal'] = 'chiens';
    			include('../includes/dossiers_chiens.php');
    		break;
     
    		case 'mort':
    			include('../includes/mort_animal.php');
    		break;
     
    		case 'obesite_feline':
    			include('../includes/obesite_feline.php');
    		break;
     
    	}
     
    ?>
    Ce qui nous intéresse, c'est donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    case 'dossiers_chats':
    			$_SESSION['animal'] = 'chats';
    			include('../includes/dossiers_chats.php');
    		break;
    		case 'dossiers_chiens':
    			$_SESSION['animal'] = 'chiens';
    			include('../includes/dossiers_chiens.php');
    		break;
    Je change la valeur de la variable de session.

    Seul hic, la valeur vaut toujours "chiens".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(2) { ["langue"]=>  string(2) "FR" ["animal"]=>  string(6) "chiens" }
    Comprends pas ce qu'il se passe.

    EDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case 'dossiers_chats':
    			var_dump($_SESSION);
    			$_SESSION['animal'] = '';
    			$_SESSION['animal'] = 'chats';
    			include('../includes/dossiers_chats.php');
    le var_dump me donne ceci :

    Notice: Undefined variable: _SESSION in C:\wamp\www\Cocquereaux\AJAX\div_centrale.php on line 57
    NULL
    la ligne 57 :

    Merci pour l'aide.

    beegees

  4. #4
    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
    Par défaut
    Notice: Undefined variable: _SESSION
    As tu démarré la gestion des sessions : session_start() ?
    On dirait que non.

    Puis une question comme ça.
    Est ce que le but est réellement d'affecter une variable de session pour l'exploiter dans d'autres pages, ou juste récupérer une photo selon un type ? (chien, chat, etc ...)

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bonjour,

    Quoi que tu fasse, ta variable de session 'animal' vaudra toujours la dernière valeur que tu lui attribue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case 'dossiers_chats':
    			$_SESSION['animal'] = 'chats';
    			include('../includes/dossiers_chats.php');
    		break;
    		case 'dossiers_chiens':
    			$_SESSION['animal'] = 'chiens';
    			include('../includes/dossiers_chiens.php');
    		break;
    En effet, les sessions, c'est du php, et c'est interprété par le serveur. C'est à dire que le php est exécuté avant d'être envoyé au navigateur, et pendant tout ton code, ta variable vaudra une seule valeur pour une page à moins de la modifier de page en page.

    Je te conseille d'oublier les variables de session si c'est pour faire un traitement sur une seule page en les modifiant au fur et à mesure. Repasse par du code interprétable par ton navigateur ( HTML, etc ... )

    Bien cordialement.

Discussions similaires

  1. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30
  2. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28
  3. Effacer les variables de session
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2003, 13h42
  4. Variable de session
    Par Sadneth dans le forum ASP
    Réponses: 6
    Dernier message: 14/11/2003, 11h12
  5. variable de session
    Par divableue dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2003, 16h04

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