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

Langage PHP Discussion :

récupérer info id par $_session


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 123
    Points : 54
    Points
    54
    Par défaut récupérer info id par $_session
    Bonsoir,

    débutant en php j'ai un petit problème .. je n'arrive pas à récupérer l'id des clients par l'intermédiaire d'une session alors que je n'ai aucun problème pour récupérer l'email qui se trouve dans la même base de donnée que l'id.

    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
    $requete = "select * from projet where email='$email' AND pass ='$password' " ;
    $verif = mysql_query($requete) or die(mysql_error());
    $row_verif = mysql_fetch_assoc($verif);
    $user = mysql_num_rows($verif);
    while ($info = mysql_fetch_array($requete));
    {$id=$info['id']}
     
    	 if (isset($_POST["email"]))
    		{$email=$_POST["email"];
    		$pass=$_POST["pass"];
     
    			if($user)
    {
     
    				 echo "success";
    				 $_SESSION['id']=$id ;
    				 $_SESSION['email'] = $info['email'];
    				 $_SESSION["connect"]="1";
                     header("Location:accueil.php");
    Le problème est là j'arrive à récupérer l'email mais pas id que je passe par la varible ou la référence direct à la base..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_SESSION['id']=$id;
    $_SESSION['email'] = $info['email'];
    Je pense que c'est une erreur très bête mais je suis bloqué depuis plusieurs jours déjà... si quelqu'un à une idée je suis preneur !


    PS: l'authentification fonctionnr très bien

    Merci par avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    regarde ce que tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ($info = mysql_fetch_array($requete));
    {$id=$info['id']}
    et ceci est faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_fetch_array($requete))
    $requete est une string.

    D'ailleurs, en continuant c'est ton code est étrange (surtout avec la variable $email),
    voici une version plus raccourcie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql  = "SELECT * FROM projet WHERE email='".mysql_real_escape_string($email)."' AND pass ='".mysql_real_escape_string($password)."'";
    $qry  = mysql_query($sql) or die(mysql_error());
    $user = mysql_fetch_assoc($qry); // tu ne dois avoir qu'un seul enregistrement (normalement) 
     
    if ( ! empty($user))
    {
     
    }

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    Tout d'abord je dois avouer que votre code me parait un peu bizarre en plusieurs points mais on va ce concentrer sur le problème qui est ici :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $verif = mysql_query($requete) or die(mysql_error());
    $row_verif = mysql_fetch_assoc($verif);
    $user = mysql_num_rows($verif);
    while ($info = mysql_fetch_array($requete));

    On effectue une requète mysql avec mysql_query. Cette fonction va nous renvoyer un curseur qui va nous permettre de nous déplacer dans le jeux de résultat.

    Pour ce déplacer nous pouvons utiliser mysql_fetch_array, mysql_fetch_assoc et mysql_fetch_row.
    Ces trois fonctions prennent en paramètre le curseur précédemment envoyé.

    Sauf que dans votre code vous vous déplacez premier résultat avec $row_verif = mysql_fetch_assoc($verif); ensuite vous testez le nombre de résultat et ensuite vous essayez de vous déplacer sur un deuxième résultat avec $info = mysql_fetch_array($requete).

    Déjà cette dernière ligne est fausse car mysql_fetch_array doit prendre en paramètre le curseur $verif et non le texte de la requete $requete. Mais surtout théoriquement il n'y a qu'un seul résultat dans une demande d'authentification et vous avez déjà récupéré ce dernier avant donc refaire une requète de ce genre vous renverra false .
    Résultat $id = $info['id']; // FALSEEnfin récupérer le nombre de résultat après votre récupération du dit résultat, sauf qu'il faudrait le faire avant pour que cela est un sens .

    Voici ce que je vous propose :
    Code php : 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
     
    //Pourquoi l'avoir mis plus bas alors que vous l'utilisez dans votre texte de requète ?
    if (isset($_POST["email"])) {
    	$email = $_POST["email"];
    	$password = $_POST["pass"]; //Vous utilisez la variable $password et non $pass
    } 
     
    $requete = "select * from projet where email='$email' AND pass ='$password' " ;
    $verif = mysql_query($requete) or die(mysql_error()); //On exécute la requète
    $userCount = mysql_num_rows($verif); //On récupère le nombre de résultat
    if ($userCount == 1) { //Si il y a un seul résultat (c'est une authentification, si il y a plusieurs résultat c'est une surement tentative de piratage)
    	$userData = mysql_fetch_assoc($verif); //On récupère les données de l'utilisateur trouvé
     
    	$id = $info['id'];
     
    	echo "success";
    	$_SESSION['id'] = $id ;
    	$_SESSION['email'] = $info['email'];
    	$_SESSION["connect"] = "1";
        header("Location:accueil.php");
    }

    Au passage tu devrais protéger tes variables qui entrent dans ta requête avec mysql_real_escape_string. De même je te conseille fortement de passer à
    mysqli
    étant donné que l'extension
    mysql
    est obsolète et plus maintenu.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 123
    Points : 54
    Points
    54
    Par défaut
    merci pour votre aide ! mais j'ai toujours le même soucis je n'arrive à récuperer que l'email et pas l'ID !

    D'autres idées?

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 123
    Points : 54
    Points
    54
    Par défaut
    Après plusieurs test j'ai réussi à comprendre que le problème vient de la lecture de la base de données car l'email se trouve dans le $_POST donc j'ai fait des tests avec un email et un password fixé dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $email="admin";
    $password="admin";
    $sql = "SELECT * FROM `users` WHERE `email` = '$email' && `password` = '$password'";
    $reponse= mysql_query($sql) or die('Erreur');
    while($info = mysql_fetch_array($reponse))  
    {echo $info['id'];}
    Donc le résultat de cette requête est "Erreur" ... aurais-je fais une mauvaise manipulation ?

    PS : quand je fais un echo de la requête sql, j'ai l'impression que la requête est bien comprise ... :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `users` WHERE `email` = 'admin' && `password` = 'admin'

    bien évidement sous SQL la requête fonctionne très bien ..

  6. #6
    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
    Il manque les guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM `users` WHERE `email` = '$email' && `password` = '$password'";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 123
    Points : 54
    Points
    54
    Par défaut
    oui oui merci j'avais remarqué j'ai modifié et donc toujours le même problème ..

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM `users` WHERE `email` = '$email' AND `password` = '$password'";
    Sinon affiche l'erreur avec mysql_error()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 123
    Points : 54
    Points
    54
    Par défaut
    je dois juste mettre

    mysql_error($sql) et c'est censé afficher l'erreur ?

    C'est peut-être une question un peu bête mais je suis débutant .. désoler

  10. #10
    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
    avec un echo
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 123
    Points : 54
    Points
    54
    Par défaut
    Warning: mysql_error() expects parameter 1 to be resource, string given line 38

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given line 39
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $email="admin"; 
    $password="admin";
    $sql = "SELECT * FROM `users` WHERE `email` = '$email' && `password` = '$password' ";
    $reponse= mysql_query($sql);
    echo mysql_error($sql); //ligne 38
    while($info = mysql_fetch_array($reponse))  //ligne 39
    {echo $info['id'];}
     
    ?>
    Donc la requête est fausse?

  12. #12
    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
    C'etait mysql_error() tout court.
    Mais tu n'as pas corrigé le "&&" en "AND"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 123
    Points : 54
    Points
    54
    Par défaut
    merci pour ton aide ça fonctionne ! il s'agissait d'une erreur de connexion à la base de donnée !

    Merci encore

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

Discussions similaires

  1. [Google Maps] Récupérer infos d'une zone sélectionnée par polygone
    Par Chouller dans le forum APIs Google
    Réponses: 1
    Dernier message: 24/07/2009, 14h53
  2. Réponses: 2
    Dernier message: 25/05/2009, 15h53
  3. Réponses: 1
    Dernier message: 30/11/2008, 10h27
  4. Réponses: 5
    Dernier message: 26/12/2007, 12h51
  5. récupérer info d'une table par requête..
    Par the_youpi dans le forum SQL
    Réponses: 4
    Dernier message: 20/06/2007, 16h11

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