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 :

Récupérer variable de session


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 42
    Points
    42
    Par défaut Récupérer variable de session
    Bonjour,

    Je suis entrain de construire un site internet.

    Sur ma page d'index j'ai des menus mais je souhaite qu'il ne soit accessible qu'uniquement au personne identifié. J'ai donc créé un formulaire (relié à une BDD) permettant de s'identifier dont voici le 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
     
    //inclusion du fichier qui contient les fonctions
     
    include("../include/connexion.inc.php");
    include("../include/fonctions.inc.php");
     
     
    $idcom2=connexion("evaluation","parametre_connec");
     
     
     
    //appel de la fonction pour construire le début de la page
    debut_html();
     
    echo"
    <form method='POST' action='verifid.php'>
    <h3>S'authentifier</h3>
    ID :
    <input type='text' name='id' value='' /><br></br>
    Mot de passe  :
    <input type='password' name='mdp' value='' /><br></br>
    <input type='submit' value='Envoyer' />";
     
     
     
    //appel de la fonction pour construire la fin de la page
    fin_html();
    mysql_close($idcom2);
     
    ?>
    Cela renvois donc sur la page verifi id qui elle vérifie si oui ou non le Mot de passe est correct.
    En partant de ce site ci ( http://fr.html.net/tutorials/php/lesson12.php) j'ai donc cherché à affecté à la session un YES ou NO en fonction que si le mot de passe était bon ou non. Ce qui me donne 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
    <?php
    //inclusion du fichier qui contient les fonctions
     
    include("../include/connexion.inc.php");
    include("../include/fonctions.inc.php");
     
     
    $idcom2=connexion("evaluation","parametre_connec");
     
    // Récupération des données saisies dans le formulaire d'accueil
    	$id=$_POST['id'];
    	$mdp=$_POST['mdp'];
     
     
    	// Requête de recherche du mot de passe et de l'id de l'utilisateur		
    		$req="SELECT * FROM utilisateurs WHERE id='$id' and mdp='$mdp'";
     
    	// Execution de la requête
    		$sql=mysql_query($req);
     
    		if (mysql_num_rows($sql)==0)
    			// La requête ne renvoie aucun résultat, l'id est inconnu
    			// et/ou le mot de passe est incorrect
    			{
    			session_start();
    			$_SESSION["id"] = "NO";
    			echo "Erreur de mot de passe ; <a href='index.php'>Identifiez-vous</a>";
    			}
    		else
    			// La requête renvoie au plus un résultat (le client recherché)
    			{
    			session_start();
    			$_SESSION["id"] = "YES";			
    			header('location: page.php');
    			}
     
    ?>
    Si le mot de passe est faux, j'ai bien le message que je souhaite. Si le mot de passe est correct je vais bien sur la page "page.php" dont voici le 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
    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
    <?php
    // Start up your PHP Session
    	session_start();
     
    	// If the user is not logged in send him/her to the login form
    	if ($_SESSION["id"] = "NO") {
    	echo"blabla";
    	}
    	else {
     
     
     
    //inclusion du fichier qui contient les fonctions
    include("../include/fonctions.inc.php");
     
    //appel de la fonction pour construire le début de la page
    debut_html();
     
    if (isset ($_GET['num']))
    	{
    	$num = ($_GET['num']);
     
     
    //////////////////////////////////////
     
    include("../include/connexion.inc.php");
    $idcom2=connexion("evaluation","parametre_connec");
     
    //requete 
    $requete="SELECT `numero`, `titre`, `contenu` FROM `articles` WHERE `numero`=$num";
    $result=@mysql_query($requete,$idcom2);
     
    $nb_col=mysql_num_fields($result);
    $nb_ligne=mysql_num_rows($result);
     
     
    	$ligne=mysql_fetch_row($result);
    	for($j=0;$j<$nb_col;$j++)
    		$ligne[$j];	
    	$numero=$ligne[0];	
    	$titre=$ligne[1];
    	if (!isset($titre)) $titre="Ecrire votre titre";
    	$contenu=$ligne[2];
    	if (isset($contenu) || isset($titre)||isset($numero)) $remplacer=true;
    	else $remplacer=false;
     
     
     
    echo"		<form name='test' action='enregistrement.php?num=$num&&remplacer=$remplacer' method='POST'>
    				<input type='text' value='".$titre."' name='titre'>
    				<textarea  name='texte' cols='50' rows='20' id='myarea1' class='mceEditor'>";
    					if (isset($contenu)) echo $contenu;
    					echo "	
    				</textarea>
    				<input type='submit' value='Vérification des mises à jour'>
    			</form>";
    }
    else echo "selectionner un item du menu";
    //appel de la fonction pour construire la fin de la page
    fin_html();
    }
     
     
     
    ?>
    Or, à ce moment quand bien même que le mot de passe soit correct, la page ne s'affiche pas et le contenu de mon echo c'est à dire "bla la" s'affiche dans tous les cas même si le mot de passe est bon alors qu'il aurait du obtenir la variable de session YES.

    Pourquoi ? Comment puis-je faire ?

    Merci de votre aide.

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Dans ton test, tu fait actuellement une affectation et non une comparaison :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION["id"] == "NO" //deux signe "égal" pour comparer
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    Merci de ta réponse.

    En effet ... cela fonctionne un peu mieux mais je continue à avoir une erreur qui est la suivante :

    Notice: Undefined index: id in C:\Ludovic\EasyPHP-DevServer-14.1VC9\data\localweb\projects\etape1_menu_javascript\administration\page.php on line 6
    Cependant la page s'affiche tout de même correctement en dessous de ce message d'erreur ...

    Ps : Le fichier page.php correspond à la dernière citation de code dans mon premier message.

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Le message est on ne peu plus clair : $_SESSION['id'] n'existe pas.

    Fait un print_r($_SESSION) juste avant ton test pour voir ce que contient ta session.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    En effet ... cela m'affiche

    Array ( )
    Donc je suppose qu'il n'y a rien ...

    j'ai rajouté ça à la ligne 13 de mon deuxième fichier mais cela ne change rien ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION["id1"] = $id1;
    Je vois pas trop ce qui bloque. Qu'est ce que je pourrais améliorer dans mon code pour que cela fonctionne ? ...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Vérifie déjà que les sessions fonctionnent normalement sur ton serveur avec un test tout simple :
    page1.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    session_start();
    $_SESSION['test'] = 'toto';
    header('Location: page2.php');
    page2.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session_start();
    echo 'session  : ' . $_SESSION['test'];
    N'oublie pas que l'extension mysql est obsolète et qu'au moins si tu l'utilises, il faut echapper les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	// Requête de recherche du mot de passe et de l'id de l'utilisateur		
    		$req="SELECT * FROM utilisateurs WHERE id='" . mysql_real_escape_string($_POST['id']) . "' and mdp='" . mysql_real_escape_string($_POST['mdp']) . "'";
     
    	// Execution de la requête
    		$sql=mysql_query($req);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    Bonsoir,

    Merci pour ta réponse.

    La requête fonctionne bien puisque lorsque je me trompe de mot de passe j'ai bien l’exécution suivante qui se produit :

    echo "Erreur de mot de passe ; <a href='index.php'>Identifiez-vous</a>";

    Je n'ai plus aucun message d'erreur lorsque je supprime ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	print_r($_SESSION);
     
     
    	// If the user is not logged in send him/her to the login form
    	if ($_SESSION["id"] == "NO") {
    	echo"blabla";
    	}
    	else {
    Je suppose que cela vient donc de là.

    A défaut comment faire pour que si l'utilisateur n'est pas connecté, lorsqu'ilclique sur un menu, cela renvois un message comme quoi il n'est pas connecté. Peut-être avez vous un autre moyen ?

    Bonne soirée

    Ludovic

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Certes mais elle n'est pas sécurisée.

    Pour le reste, lit ce que j'ai écris, sinon ça ne sert à rien que je m'interesse à ton problème.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    Re,

    Je viens de changer la requête. Merci de l'info je ne pensais pas que mysql était obsolète

    Je viens également de tester ce que tu viens de me dire. Tout vas bien si je test avec des mots comme toto. En revanche je viens de tester avec la variable $id avec ta page 1 et ta page 2

    Page 1.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Start up your PHP Session
    	session_start();
    $_SESSION['id'] = $id;
    header('Location: page2.php');
    Il n'arrive pas à récupérer le contenu de cette variable dans la page 2 ... Par contre pour toto il y avait aucun soucis ...

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ou est défini $id dans page1 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    en effet nul part ...

    je vois vraiment pas comment arriver à obtenir ce que je cherche

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu pourrais déjà changé ta condition comme suit pour le cas ou on accède directement à page.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!isset($_SESSION["id"]) || $_SESSION["id"] == "NO") {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    ok ok merci de l'info.

    J'ai encore une petite dernière question ...

    Sur la page ou je vérifie si le mot de passe est correct et ou j'affecte une variable à la session je retrouve ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Récupération des données saisies dans le formulaire d'accueil
    $id=$_POST["id"];
    $mdp=$_POST["mdp"];
    $_SESSION["id"] = "";
    je souhaiterai affecter à $_SESSION["id"]="" soit la variable NO soit la variable YES.

    Lors de la vérification du mot de passe j'ai donc écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (mysql_num_rows($sql)==0){
    	// La requête ne renvoie aucun résultat, l'id est inconnu
    	// et/ou le mot de passe est incorrect
    	$_SESSION["id"] = "NO";
    	echo "Erreur de mot de passe ; <a href='index.php'>Identifiez-vous</a>";
    }
    else{
    	// La requête renvoie au plus un résultat (le client recherché)
    	session_start();
    	$_SESSION["id"] = "YES";			
    	header('location: page.php');
    }
    Visiblement avec ce code je n'arrive toujours pas à affecter la variable YES ou NO. Est-ce-que vous savez pourquoi ? ou c'est plus compliqué que ce que j'ai fait ?

    MErci d'avance

    Ludovic

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton session_start() a disparu du cas "NO".
    Met le de toute façon au début de ton script.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2011
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    ça marche. Merci je l'ai remit.

    ça fonctionne malheureusement toujours pas.

Discussions similaires

  1. Récupérer variable de session dans un bean
    Par thefutureisnow dans le forum Débuter avec Java
    Réponses: 15
    Dernier message: 25/11/2009, 09h19
  2. Récupérer une variable de session dans une Servlet
    Par Lazarey dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/03/2008, 11h46
  3. Affecter et récupérer une variable de session
    Par vhellers dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/08/2007, 17h57
  4. Affecter et récupérer une variable de session
    Par vhellers dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 16/08/2007, 15h15
  5. [WebForms][1.1]Récupérer des variables de session php en asp
    Par jwalter dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 26/11/2006, 14h49

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