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 :

Session et BDD


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut Session et BDD
    Bonjour,

    J'aimerais avoir un renseignement, voila j'ai mis en place les sessions sur mon site, donc le user se log via un formulaire en rentrant un login et mot de passe. La comparaison se fait par rapport a une table dans laquelle se trouvent plusieurs champs :

    Login - passw - mail - droits - etat

    Seulement dans la session , je ne récupère que le nom ou le passw (ma requete SQL se base par rapport à ces deux champs) j'aimerais pouvoir aller chercher automatiquement les autres champs et les appeler de cette façon et les garder dans la session: $_SESSION['mail'] par exemple sans que le user n'est à rentrer le mail, le droits...

    voila ma fonction de vérification d'éxistance de user :
    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 verification($nom,$motdepasse){
    	$dbhote = 'localhost';
    	$dbuser = 'root';
    	$dbpass = '';
    	$dbbase = 'ATT_CLI';
     
    	$dsn = "mysql:dbname=$dbbase;host=$dbhote";
    	$dbh = new PDO($dsn, $dbuser, $dbpass);
     
    	$nom_sql = $dbh->quote($nom);
    	$pass_sql = $dbh->quote($motdepasse);
    	$sql = "SELECT count(*) as nbres FROM usr WHERE LOGIN=$nom_sql AND PASSW=$pass_sql";
     
    	$result = $dbh->query($sql);
    	$row = $result->fetch();
    	$result = null;
     
    	if($row['nbres'] == 1){
    		return TRUE;
    	}else{
    		return FALSE;
    	}
    }
    et voila la page qui vérifie les valeurs renvoyées par le formulaire (et qui fait appel à la fonction de vérification)

    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
     
     
    include("functions.php");
    session_start();
     
    if(isset($_POST['login']) && isset($_POST['motdepasse'])){
     
    	$nom = $_POST['login'];
    	$motdepasse = $_POST['motdepasse'];
     
    	if(verification($nom, $motdepasse)){
    		session_regenerate_id();
    		$_SESSION['nom'] = $nom;
    		$message = "vous êtes correctement identifié";
    		header('location: index.php');
    	}else{
    		$message = "Mauvais mot de passe";
    		$message .='<a href="auth.php">retour</a>';
    	}
    }else{
    	$message = "le login ou le mot de passe est vide";
    	$message .='<a href="auth.php">retour</a>';
    }
    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Par défaut
    Si tu veux récuperer toutes les informations il te suffit de faire une requete de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $sql = "SELECT * FROM usr WHERE LOGIN=$nom_sql AND PASSW=$pass_sql";
    $ret = mysql_query($sql) or die (mysql_error());
    if(mysql_num_rows($ret)>0) //Si la requete retourne au moins un resultat
    {
           $don = mysql_fetch_array($ret);
           $_SESSION['mail'] = $don['mail'];
           $_SESSION['nom'] = $don['nom'];   
           echo '<p>Vous etes identifie</p>';
    }
    else
    {
        echo '<p>Identifiant inconnu!</p>';
    }
    Tu implémentes ça dans ta fonction de vérification et le tour est joué!

  3. #3
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    salut,
    en faite je modifirais la fonction de vérification, surtout la requete SQL !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT LOGIN,PASSW,MAIL FROM usr WHERE LOGIN=$nom_sql AND PASSW=$pass_sql";
    après tu vérifie que tu as bien un résultat en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $nbres = count($result);
    if($nbres>0){
         $row = $result->fetch();
         $return =array('resultat'=>1,
                              'mail'=>$row['MAIL']
                              );
    }
    else{
        $return = array('resultat'=>0);
    }
    return $return;
    ensuite dans la page qui vérifie l'authentification du fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $verif = verification($nom, $motdepasse);
    if($verif['resultat']>0){
                    session_regenerate_id();
    		$_SESSION['nom'] = $nom;
                    $_SESSION['mail'] = $verif['mail'];
    		$message = "vous êtes correctement identifié";
    		header('location: index.php');
                    exit;
    }
    PS : je te conseille de mette un exit; après le header, car quand on fait un header, le script continue de s'executer j'usqu'au bout avant de faire la redirection.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    cela marche mais provoque une autre erreur, je peux me logger avec n'importe quel mot de passe, en fait mème si je mets n'importe quoi, j'arrive sur une page qui inscrit : "bonjour qsdfqsdq ..."

  5. #5
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    Qu'elle solutions marche ?
    Montre nous un peu ton nouveau code !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    Mon nouveau code ressemble à cela :

    Fonction verification :

    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
    function verification($nom,$motdepasse){
    	$dbhote = 'localhost';
    	$dbuser = 'root';
    	$dbpass = '';
    	$dbbase = 'ATT_CLI';
     
    	$dsn = "mysql:dbname=$dbbase;host=$dbhote";
    	$dbh = new PDO($dsn, $dbuser, $dbpass);
     
    	$nom_sql = $dbh->quote($nom);
    	$pass_sql = $dbh->quote($motdepasse);
     
    	$sql = "SELECT LOGIN,PASSW,MAIL FROM usr WHERE LOGIN=$nom_sql AND PASSW=$pass_sql";
    	//$sql = "SELECT count(*) as nbres FROM usr WHERE LOGIN=$nom_sql AND PASSW=$pass_sql";
    	$result = $dbh->query($sql);
    	$nbres = count($result);
    	if($nbres>0){
    		$row = $result->fetch();
    		$return =array('resultat'=>1,
                              'mail'=>$row['MAIL']
                              );
    	}else{
    		$return = array('resultat'=>0);
    	}
    	return $return;
     
    	//$row = $result->fetch();
    	//$result = null;
     
    	/*if($row['nbres'] == 1){
    		return TRUE;
    	}else{
    		return FALSE;
    	}*/
    }


    Et le fichier verif.php (qui appelle la fonction verification)

    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
     
     
    include("functions.php");
     
    session_start();
     
    if(isset($_POST['login']) && isset($_POST['motdepasse'])){
     
    	$nom = $_POST['login'];
    	$motdepasse = $_POST['motdepasse'];
     
    	/*if(verification($nom, $motdepasse)){
    		session_regenerate_id();
    		$_SESSION['nom'] = $nom;
    		$message = "vous êtes correctement identifié";
    		header('location: index.php');
    		exit;*/
    	$verif = verification($nom, $motdepasse);
    	if($verif['resultat']>0){
            session_regenerate_id();
    		$_SESSION['nom'] = $nom;
            $_SESSION['mail'] = $verif['mail'];
    		$message = "vous êtes correctement identifié";
    		header('location: index.php');
            exit;
    	}else{
    		header('location: index.php?page=bad');
    	}
    }else{
    	header('location: index.php?page=bad');
    }
    Avec ce nouveau code, il va bien chercher aussi l'email et le place dans la variable $_SESSION['mail'], donc il fait ce que je souhaitais.

    Seulement, maintenant sur la page de login, dans le formulaire de connexion, mème en mettant n'importe quoi, cela fait comme si je me loggais !!!

  7. #7
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    bah tu dois avoir une erreur quelque part, faits des echo un peu partout pour vérifier les variables !

    par exemple la requete SQL echo $sql."<br />";
    le nombre de resultat echo $nbres."<br />";
    faits aussi un print_r($row);

    dans des conditions et boucle pour voir combien de fois tu passe dedans.

    Et surtout après chaque header("Location:..."); fait bien un exit.

    perso, je ne ferais pas le test du mots de passe en SQL, mais en php; Et je stockerais le mot de pass crypter et non en clair.=> par exemple avec un $pass_sql = md5($motdepasse);

    //EDIT :
    Je suis pas trop familier de PDO (je sais faudra que je mis mette) mais a mon avis le pb vien de $nbres = count(...); je sais pas !

    il faut peut être faire $row=$result->fetch();
    count($row); a voir .

Discussions similaires

  1. [MySQL] erreur session ou bdd ?
    Par kogoi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/08/2011, 16h41
  2. Réponses: 15
    Dernier message: 07/06/2010, 12h06
  3. [MySQL] difference entre session et bdd
    Par kogoi dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 08/02/2010, 11h09
  4. Associer les données d'une session à une BDD
    Par TinyDwarf dans le forum Langage
    Réponses: 3
    Dernier message: 27/07/2006, 19h11
  5. Utilisation de [Session] et de [BDD]
    Par Alexr dans le forum JDBC
    Réponses: 1
    Dernier message: 21/06/2005, 14h09

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