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

PHP & Base de données Discussion :

Problème avec les $_SESSION


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Problème avec les $_SESSION
    Bonjour,
    Je tente de créer un espace administration sur un blog que je développe, mais je me retrouve face a un problème avec les sessions.


    J'ai mon formulaire pour entrez le pseudo et me mot de passe dans le fichier connexion.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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    if (! mysql_select_db($database))
    {
    echo "Impossible de sélectionner la base de données !";
    }
     
    // Definition de la fonction auth()
    function auth()
    	{
    	print"<html><body>";
    	print"<form name='form' method='post' action='listNews.php'>";
    	print"<table><tr><td align='center'><font color='#0256AA' size='2' face='Verdana'><b>Login :</font></b>";
    	print"</td></tr><tr><td align='center'><input type='text' name='login' size='15'></td></tr><tr>";
    	print"<td align='center'><font color='#0256AA' size='2' face='Verdana'><b>Password :</font></b></td></tr><tr>";
    	print"<td align='center'><input type='password' name='mot_de_passe' size='15'></td></tr><tr><td align='center'><br>";
    	print"<input type='submit' name='submit' value='Entrez'></td></tr></table></form>";
    	print"</body></html>";
    	exit;
    	}
     
    if( !isset($login) && !isset($mot_de_passe) )
    	{
    	// Ouverture de la fonction auth()
    	auth();
    	}
    else
    	{
    	// Requete SQL
    	$query = "Select count(*) From admin where PSEUDO = '".$login."' and MDP = '".$mot_de_passe."'";
    	$resultat = mysql_query($query);
     
    	if($resultat != 0)
    	{
    		// Ici la page de redirection si l'autentification est réussie
    		print"<script>top.location.replace('authentification.php');</script>";
    		}
    	else
    		{
    		// Ici le message d'alerte si l'autentification n'est pas réussie
    		print"alert('Login ou password invalide.');";
    		// Rappel de la fonction d'identification
    		auth();
    		}
    	}
     
    ?>
    L'authentification a lieu dans authentification.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
    29
    30
    31
    32
    33
    34
    if($_POST["login"] != "" && $_POST["mot_de_passe"] != "")
    {
      $login     = $_POST["login"] ;
      $pass      = $_POST["mot_de_passe"] ;
     
      //connexion au serveur
      $cnx = mysql_connect($host,$pseudo,$password) ;
      //sélection de la base de données
      $db  = mysql_select_db($database) ;
     
      //création de la requête SQL
      $sql = "SELECT * FROM admin WHERE PSEUDO= '".$login."' AND MDP= '".$pass."'"	;
      //exécution de la requête SQL
      $requete = @mysql_query($sql, $cnx) or die($sql."<br>".mysql_error()) ;
      //on récupère le résultat
      $result = mysql_fetch_object($requete) ;
      //si la requête s'est bien passée
      if(is_object($result))
      {
        //enregistrement d'une variable de session, ici le login de l'utilisateur
        $_SESSION["login"] = $login ;	
        header("Location: listNews.php") ;
      }//fin if
      //sinon on retourne à la page d'inscription
      else
      {
        header("Location: connexion.php") ;
      }
    }//fin if
    //sinon on retourne à la page d'inscription
    else
    {
      header("Location: connexion.php") ;
    }//fin si
    et si l'authentification est bonne, l'utilisateur est redirigé vers listNews.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
    <?php
     
    // Variables de votre base à renseigner
    $host = "localhost";
    $pseudo = "root";
    $password = "";
    $database = "test";
     
    $connection = mysql_connect($host,$pseudo,$password) or die ('Erreur Connection'); // Ouverture de la Base
    $select_db  = mysql_select_db($database)or die ('Base inexistante'); 
     
    if(!isset($_SESSION["login"]) || $_SESSION["login"] == "")
    {	
    	echo "Problème de connection";
    	//header("Location: connexion.php") ;
    }//fin if
    else
    {  
      echo("<pre>") ;
      print_r($_SESSION) ;
      echo("</pre>") ;
     
      echo("Votre identifiant de session est ". $_SESSION["login"] ."<br/>") ;
     }
     
     ?>

    Mais lorsque l'on arrive sur cette page, il s'affiche "Problème de connection" je ne comprend vraiment pas pourquoi il ne trouve pas ma variable de session.

    J’espère que vous pourrez m'aidez, Merci d'avance

    PS: Avant tout code pour les trois pages j'ai placé le session_start().

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    déjà je vois ce message nulle part dans ton code...

    pourquoi tu testes la sélection de ta bd dans le 1er script alors que tu es même pas connecté à mysql?

    ensuite oublie l'extension mysql et passes à pdo pour te connecter à mysql avant que la prise en charge de cette extension ne se fasse plus...

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; tout a fait d'accord avec ericd69 pour le PDO
    http://php.net/manual/fr/ref.pdo-mysql.php

    pour faire simple vaut mieux mettre la mise en forme dans des fichiers css c'est plus clair et simple a maintenir.
    aussi je voie coté sécurité faut pensé a vous protégé contre les injections sql.
    si j'ai bien compris vos codes je crois qu'il y'a des redondance ,alors vaut mieux organisé l’authentification dans un fichier aut.inc.php , la connexion dans un fichier con.inc.php .
    j'arrive pas a trouver $_SESSION_START(). !!!!!!
    je suis débutant mais je crois je laisse l'avis aux plus expérimenté .

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Peux tu mettre le debug suivant et nous dire ce qu'il te retourne (car là le code est clair et n'a pas l'ai d'être faux à première vue) dans listNews.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(!isset($_SESSION["login"]))
       echo "La session n'existe pas. ";
    else
       echo "La session existe. ";
     
    if(isset($_SESSION["login"]) && $_SESSION["login"] == "")
       echo "La session existe mais est vide.";
    if(!isset($_SESSION['login']))
       echo "L'espoir fait vivre. ";
    else
       echo "Qui ne tente rien n'a rien. ";
    S'il te plait ?

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    J'ai mis le code de debug et il me retourne : "La session n'existe pas. L'espoir fait vivre."

    J'affecte pourtant bien une valeur a ma variable de session et j'ouvre bien mes sessions, je ne comprend pas pourquoi il ne trouve rien =/

    Pour ce qui est des session_start, ils ne sont pas mis dans le code poster mais j'avais précisé que ils sont placé avant le doctype.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Est-ce que tu as pris en compte que tu as pas session_start() au début du fichier ? A moins que tu l'es pas préciser dans ton post ...

  7. #7
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ; ta pas donné suite a mon poste est ce que ta mis SESSION_START() au début du fichier ? sinon affiche le code complet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ......
    if(is_object($result))
      {
        //enregistrement d'une variable de session, ici le login de l'utilisateur
        $_SESSION["login"] = $login ;	
    =================  
     
        header("Location: listNews.php") ;
    essaye de faire ton echo a la place des ===== pour voir si elle a bien reçu $login..

  8. #8
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Citation Envoyé par Clochette44
    Pour ce qui est des session_start, ils ne sont pas mis dans le code poster mais j'avais précisé que ils sont placé avant le doctype.
    Vérifie tout de même que rien d'autre n'est avant, le session_start() doit être la première instruction de tes pages.

    Je te conseil de réaliser cette manip en plus de celle proposer par redoran

    Juste avant :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(!isset($_SESSION["login"]) || $_SESSION["login"] == "")
    {	
    	echo "Problème de connection";
    	//header("Location: connexion.php") ;
    }//fin if
    Essaye de forcer la valeur en rajoutant $_SESSION['loggin'] = "toto";.
    On serra ainsi fixé

  9. #9
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    à tout hasard...

    vérifie aussi les réglages pour les session de ton php...
    il se peut que ça vienne de ça...

    et n'oublie pas que des portions de codes qui sont pour toi bonne peuvent ne pas l'être...

    on arrête pas de vous dire de ne pas "simplifier" ou autre action du genre et de mettre le vrai code concerné complet...

    au passage si tu as de mauvaise pratique ça permet de les voir parfois... surtout sur la sécurité...


  10. #10
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Citation Envoyé par humitake Voir le message
    Vérifie tout de même que rien d'autre n'est avant, le session_start() doit être la première instruction de tes pages.
    Pas d'accord....

  11. #11
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Exact mais il me semble que la seul instruction prioritaire sur le session_start(); est le ob_start();.

    Vu qu'il n'y a pas de header dans le code je suppose qu'il ne sont donc pas appelé.

    Le fait de demander de le placer en première instruction permettrai de corriger l'erreur si elle est du à un echo qui aurait été placé avant.

  12. #12
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Effectivement le placer temporairement en première ligne pour debugguer peut aider.

    Pour ce qui est de toujours le placer en premier, je ne suis pas d'accord.
    Tu peux faire plein d'autres choses avant comme des require, des initialisations d'objets.....

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    session_start() doit être placé avant l'utilisation des variables de sessions.

    Ensuite suivant les cas il peut être plus pratique de le situer à tel ou tel endroit dans le code mais effectivement il n'y a pas d'obligation.

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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