Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur de récupération adresse email

problème sur la clause WHERE

Sujet résolu
    9 novembre 2010 à 12:45:37

    Bonjour à tous,

    Voila je continue la construction de mon site web et suis sur la partie de login d'un utilisateur.
    Pour cela, j'utilise une page php demandant à l'utilisateur d'entrer son login (qui est son adresse email) et son mot de passe (que j'encrypte ensuite en sha1 j'y reviendrai mais là n'est pas mon problème en fait) via un formulaire. Tout ceci dans la partie View.

    Je transmet ces infos (en utilisant htmlspecialchars bien entendu) vers une php de la partie Controler avec la méthode POST. (J'ai vérifié les données, ce sont bien celles entrées dans la page de login).

    J'appelle ensuite une fonction de vérification (qui va donc devoir récupérer les infos correspondant au login pour permettre la vérification du mot de passe). Là intervient mon problème. J'ai remarqué (après insertion de diverses variables pour tester mes fonctions et pages), que le problème vient de la requête SELECT.

    Voici mon code:

    <?php
    class membre {
    public function connecter_membre()
    	{
    		
    		$arr=sql_connexion_membre($this->email_membre);
    		$this->password_membre = passHache($this->password_membre);
    		
    		if ($this->password_membre == $arr['password'])
    		{
    			if(!empty($arr))
    			{
    				//le membre a été trouvé
    				$this->id_membre = $arr['id'];
    				$this->nom_membre = $arr['nom'];
    				$this->prenom_membre = $arr['prenom'];
    				$this->email_membre = $arr['email'];
    				$this->password_membre = $arr['password'];
    				$this->q_secrete_membre = $arr['q_secrete'];
    				$this->reponse_membre = $arr['reponse'];
    				
    				return true;
    			}
    			else
    			{
    				//le membre n'est pas présent dans la bdd
    				return false;
    			}
    		}
    		else
    		{
    			$_SESSION['invalid_connection_time']++;
    			return false;
    		}
    } ?>
    

    je n'ai pas insérer la totalité de la classe membre, mais ce n'est pas nécessaire vous aurez compris que j'ai des variables privates dont email_membre et password_membre

    J'appelle donc ensuite ma fonction de récupération de l'utilisateur:

    <?php
    include_once('../Controler/membre.class.php');
    include_once('../Model/sql_connexion_bdd.php');
    
    	function sql_connexion_membre($email)
    	{
    		$bdd = connexion_db();
    		$req = $bdd->query("SELECT * FROM membres WHERE email = $email") or die(print_r($bdd->errorInfo()));
    		
    		$donnees = $req->fetch();
    		$req->closeCursor();
    		
    		return $donnees;
    	}
    ?>
    


    c'est ici que survient le problème. Il semblerait (au regard de l'erreur renvoyée par le navigateur, que je vais insérer ensuite), que le problème vienne de ma clause WHERE, où le fait de mettre email=xxx@xxx.xxx ne convienne pas pour ma version de MySQL.

    Voici mon erreur:
    Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com' at line 1 ) 1

    Il y a aussi un tableau au début car j'ai demandé un print_r de mon $req->fetch();

    Dans ma table j'ai ceci
    id nom prenom email password q_secrete reponse date_inscription
    14 Vescera Alexandre a.vescera@gmail.com 0b9c2625dc21ef05f6ad4ddf47c5f203837aa32c jeunefille tica 2010-11-08


    Toutes mes cellules sont en varchar(255) sauf id et date_inscription et password (varchar(40)).

    Voila, si vous avez déjà rencontré ce problème, cela pourrait m'être grandement utile. J'ai commencé à jeter un oeil sur la doc de MySQL mais pour ceux qui y sont déjà allé vous me comprendrez si je vous dit que ce n'est pas simple de trouver ce que l'on cherche ;).
    Merci d'avance

    AV

    PS : s'il vous faut plus d'infos n'hésitez pas.
    • Partager sur Facebook
    • Partager sur Twitter
      9 novembre 2010 à 13:38:38

      Salut, essaie en mettant ton email entre simple cote !

      de plus ton password tu peux le mettre en char(40) au lieu de varchar(40)
      • Partager sur Facebook
      • Partager sur Twitter
        9 novembre 2010 à 15:20:01

        Hello Lucky,

        1- Quel est l'intérêt de mettre le champs password en char plutôt que varchar? (pour ma compréhension personnelle).

        2- J'ai déjà essayé de mettre $email entre simple quote ça ne change rien, même en mettant toute la requête entre simple quote plutôt que des doubles et ça n'a rien changé non plus.
        J'ai aussi essayé avec un "prepare" mais la il ne met carrément plus rien du tout dans le tableau. J'avoue être un peu perdu.
        • Partager sur Facebook
        • Partager sur Twitter
          9 novembre 2010 à 17:02:12

          ta table s'apelle bien membres avec un s ?

          la difference entre varchar et char c'est que char(40) contiendras tout le temps 40 caracteres alors que varchar(40) pourras contenir 40, 39, 12, 0 caracteres. c'est une securité supplementaire de char quand tu le peux
          • Partager sur Facebook
          • Partager sur Twitter
            9 novembre 2010 à 17:29:24

            Merci pour l'explication (j'ai modifié en table, effectivement le cryptage étant sur 40 caractères tout le temps, autant mettre char).
            ma table s'appelle bien membres effectivement avec un "s".

            J'ai réussi à faire fonctionner ma requête, mais sans passer par un prepare.
            Il faut pour qu'elle fonction que je mette des doubles quotes autour de la variable $email

            <? php
                $bdd = connexion_db();
                $req = $bdd->query('SELECT * FROM membres WHERE email = "'.$email.'"') or die(print_r($bdd->errorInfo()));
            ?>
            


            Voila, je passe le post à resolved, mais je vais continuer de chercher pour faire fonctionner ceci avec un prepare. Le coup du 'email' => $email ne passe pour moi.

            Merci encore :D
            • Partager sur Facebook
            • Partager sur Twitter

            erreur de récupération adresse email

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown