Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2008, 13h38   #1
Membre régulier
 
Inscription : avril 2006
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 289
Points : 89
Points : 89
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 :
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 :
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.
kanabzh29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 14h04   #2
Membre du Club
 
Inscription : mai 2008
Messages : 50
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 50
Points : 42
Points : 42
Si tu veux récuperer toutes les informations il te suffit de faire une requete de ce genre :
Code :
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é!
Psymon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 14h13   #3
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
salut,
en faite je modifirais la fonction de vérification, surtout la requete SQL !
Code :
$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 :
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 :
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.
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 15h49   #4
Membre régulier
 
Inscription : avril 2006
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 289
Points : 89
Points : 89
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 ..."
kanabzh29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 16h31   #5
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
Qu'elle solutions marche ?
Montre nous un peu ton nouveau code !
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 16h47   #6
Membre régulier
 
Inscription : avril 2006
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 289
Points : 89
Points : 89
Mon nouveau code ressemble à cela :

Fonction verification :

Code :
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 :
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 !!!
kanabzh29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 16h57   #7
Membre régulier
 
Avatar de guiyomh
 
Inscription : avril 2007
Messages : 320
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 320
Points : 99
Points : 99
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 .
guiyomh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h57.


 
 
 
 
Partenaires

Hébergement Web