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 :

probleme avec un fetch array [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 166
    Points : 86
    Points
    86
    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 : 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
    <?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'];

  2. #2
    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
    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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2009
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    salut je sais pas si c'est ça, mais dans ta derniere requette sql, il manque les simples quote autour de ta variable $login.

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 166
    Points : 86
    Points
    86
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 156
    Points : 160
    Points
    160
    Par défaut
    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 : 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
    <?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

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 166
    Points : 86
    Points
    86
    Par défaut
    voilà ce que j'ai fait :
    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
    <?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

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 156
    Points : 160
    Points
    160
    Par défaut
    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

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 166
    Points : 86
    Points
    86
    Par défaut
    ok merci, je vais voir ce que je peux apprendre là dessus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème avec mysql fetch array
    Par berko dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/04/2013, 07h24
  2. Probleme avec un public array/tableau de strings
    Par Nico820 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2011, 12h04
  3. probleme avec mysql fetch array
    Par philsand77 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 19/04/2007, 07h56
  4. probleme avec un array
    Par kaygee dans le forum ASP
    Réponses: 8
    Dernier message: 26/03/2007, 12h33
  5. Petit probleme avec Arrays.Sort(...)
    Par Seth77 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 15/01/2006, 12h48

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