Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 10/03/2010, 11h30   #1
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 146
Points : 37
Points : 37
Envoyer un message via MSN à Kuchiki Byakuya
Par défaut probleme avec un fetch array

bonjour, je dois faire un site de vente aux enchere factice comme projet pour mon iut. je suis entrain de faire des comptes utilisateurs et un systeme d'authentification. l'inscription et la connection au compte fonctionne. lorsque je me connecte, une variable de session est créée contenant le pseudo. je cherche à récuperer les autres info du comptes pour les mettre dans une page profil. la connectioin à mysql et à la base fonctionne mais je n'arrive pas a récupérer les infos ... voici mon code ( le sql m'a l'air correct vu la simplicité ). le navigateur ne m'affiche pas les deux informations que je lui demande ( le nom et le prenom de l'utilisateur dont le login est papa ).
ma table mysql est user et les attributs sont login, nom, prenom, password, adresse, info.
pouvez vous m'expliquer pourquoi les informations ne sont pas récupérées puisque l'utilisateur existe sur la BDD ?
voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php 
 
$link=mysql_connect("localhost", "ulrich", "mdp") or die(mysql_error());// Connexion à MySQL
$database=mysql_select_db("inscription",$link) or die(mysql_error());// Sélection de la base inscription
extract($_POST);
$res=mysql_query("select * from user where login='$login';");
if(mysql_num_rows($res)!=1){ 
header("location:http://localhost/mini_projet/inscription.php");
}
$row=mysql_fetch_array($res);
$pass=md5($password);
if($pass != $row['password']){
	echo "identifiants incorrect";
	header("location:http://localhost/mini_projet/auth.html");
	}
else {
	echo"identification réussie";
	session_start();
	echo $login;
	$marchepas=mysql_query("select * from user where login=$login;");
	$tuple0=mysql_fetch_array($marchepas);
	echo $tuple0['nom'];
	echo $tuple0['prenom'];
Kuchiki Byakuya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 11h40   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
1 - tu ne peux pas avoir un session_start() après un echo
2 - ton code ne prend pas du tout en compte le problème des injections SQL
3 - tu fais deux fois la même requête ... ce n'est pas très économique ; il suffit de recuperer pass, nom et prenom dés le début.
4 - dans ta deuxième requête il manque les apostrophes autour de ta valeur
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 11h43   #3
Nouveau Membre du Club
 
Dariumis LaCitrouille
Inscription : mars 2009
Messages : 27
Détails du profil
Informations personnelles :
Nom : Dariumis LaCitrouille
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2009
Messages : 27
Points : 31
Points : 31
salut je sais pas si c'est ça, mais dans ta derniere requette sql, il manque les simples quote autour de ta variable $login.
dariumis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 11h54   #4
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 146
Points : 37
Points : 37
Envoyer un message via MSN à Kuchiki Byakuya
merci pour tous ces conseils, j'ai modifié mon code pour régler 3 d'entre eux mais je ne comprends pas ce que tu veux dire par : "tu ne tiens pas comptes des injections sql" excuse moi mais je suis très néophyte.
voilà ce que j'ai changé :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
if($pass == $row['password']){
	session_start();
	echo"identification réussie";
	$tuple0=mysql_fetch_array($res);
	echo $tuple0['nom'];
	echo $tuple0['prenom'];
 
	}
else {
	echo "identifiants incorrect";
	header("location:http://localhost/mini_projet/auth.html");
}
et au final le navigateur me retourne ça : identification réussieResource id #5
l'identification réussie c'est normal, j'imagine que le resource id#5 est ce que j'ai récupéré mais je ne comprends pas où est le problème
Kuchiki Byakuya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 12h00   #5
Membre habitué
 
Inscription : juillet 2009
Messages : 156
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 156
Points : 133
Points : 133
un code rapide de base un peu plus propre a mon gout... je connais pas ce que fait ta fonction extract exactement, donc je suis partit sur un $_POST de base après tu adaptes...

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
<?php 
 
$link=mysql_connect("localhost", "ulrich", "mdp") or die(mysql_error());
$database=mysql_select_db("inscription",$link) or die(mysql_error());
 
 
if (isset($_POST['login']) && isset($_POST['password'])) {
	$login = $_POST['login'];
	$password = md5($_POST['password']);
 
	$requete_sql = "SELECT * FROM user WHERE login='".$login."' AND password='".$password."' ";
	$query = @mysql_query($requete_sql) or die($requete_sql."<br>".mysql_error()) ;
	$result = mysql_fetch_object($query) ;
 
	if(is_object($result)) {
			session_start() ;
			//tu fais tes session utilisateurs trouvé
	}
	else {
		//echec identification ton code ici
	}
}
 
?>
J'ai dis plus propre mais pas forcément la meilleurs... ensuite il faut sécurisé au maximum tes requètes SQL pour éviter les injections en tout genre...
Tu as pas mal de class.SQL de nos jours très bien faites et très complètes qui te permettent de faire tes requêtes encore plus proprement et rapidement...

bon courage pour ton projet
Ze AzAr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 12h20   #6
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 146
Points : 37
Points : 37
Envoyer un message via MSN à Kuchiki Byakuya
voilà ce que j'ai fait :
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
<?php 
 
$link=mysql_connect("localhost", "ulrich", "mdp") or die(mysql_error());
$database=mysql_select_db("inscription",$link) or die(mysql_error());
 
 
if (isset($_POST['login']) && isset($_POST['password'])) {
	$login = $_POST['login'];
	$password = md5($_POST['password']);
	$requete_sql = "SELECT * FROM user WHERE login='".$login."' AND password='".$password."';";
	$query = @mysql_query($requete_sql) or die($requete_sql."<br>".mysql_error()) ;
	$tuple0 = mysql_fetch_array($query) ;
	if(!isset($tuple0['nom']))
	{
		//echec identification ton code ici
		header("location:http://localhost/mini_projet/auth.html") ;
	}
	else
	{
		session_start() ;
		//tu fais tes sessions utilisateurs trouvés
		echo"identification réussie";
		echo"<br/>";
		echo $tuple0['nom']; echo"<br/>";
		echo $tuple0['prenom']; echo"<br/>";
		echo $tuple0['adresse']; echo"<br/>";
		echo $tuple0['info']; echo"<br/>";
	}
 
	}
 
?>
celà fonctionne, merci à tous

Dernière modification par Kuchiki Byakuya ; 10/03/2010 à 13h08.
Kuchiki Byakuya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 13h21   #7
Membre habitué
 
Inscription : juillet 2009
Messages : 156
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 156
Points : 133
Points : 133
Et pour faire ca encore plus proprement, et éviter les failles de sécu, faire ta requête en class...

Par la suite tu fais tu mets tout affichage dans une variable à l'intérieur de ta class et tu fais un return de cette variable, et tu fais un echo de la variable de ton objet...

L'avantage travailler sous forme de class te permet de reforcer la sécurité, et ton code peux facilement évoluer... sans pour autant tout modifier derrière et surtout comme le font la majorité des dév (je le pense et je l'espère ) ta class à été construite de la manière la plus généraliste possible pour pouvoir être utiliser sur d'autre projet

Au final, si tu continue à développer dans l'avenir, tes outils seront fait maison et ne cesseront de s'améliorer avec l'expérience que tu as acquise et surtout selon tes besoin tout en restant généraliste...

et aussi par habitude... mais bon ca c'est propre à moi je pense, je ne renvoi pas directement les valeurs de ma requête SQL je les repasse en variable...
en même temps, vu que je suis en "class" donc j'ai pris cette habitude
Ze AzAr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 13h37   #8
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 146
Points : 37
Points : 37
Envoyer un message via MSN à Kuchiki Byakuya
ok merci, je vais voir ce que je peux apprendre là dessus
Kuchiki Byakuya est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 08h39.


 
 
 
 
Partenaires

Hébergement Web