Probleme avec pdo et addr email en php

Résolu
tgdn Messages postés 35 Statut Membre -  
tgdn Messages postés 35 Statut Membre -
Bonjour à tous :D
Je fais un site, et il y a un espace membres, sauf que pour s'inscrire tout va bien sauf le PDO avec php et mysql.
Je fais une requête préparée pour savoir si l'e-mail existe déjà ou non dans la table puis j'exécute la requête avec un array :

 try       //On essaye de se connecter à la BDD  
  {  
    $bdd = new PDO('mysql:host=localhost;dbname=membres', 'root', '');  
  }  
  catch(Exception $e)       //Si cela ne marche pas, on recupere l'erreur  
  {  
    die('Erreur : '.$e->getMessage());  
  }  

$nombremail = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE email = :email_inscr') or die(print_r($bdd->errorInfo()));   
   
$nombremail->execute(array('email_inscr' => $_POST['email_inscr']));  

if ($nombremail != 0)    //Et c'est ici ou sa plante, je sais pas comment faire, alors j'ai écrit au pif : si n'est pas égal à 0.  
{  
   //Votre adresse e mail est déjà utilisée par un membre...  
}  


Je suis complètement bloqué.
Si vous pouviez m'aider ce serai super sympa de votre part. Merci.

2 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    $nombremail est un objet (PDOStatement), pas le résultat de la requête.
    Pour gérer les erreurs, il ne faut surtout pas utiliser "or die" mais la structure "try catch" !

    $nombremail = $bdd->prepare('SELECT COUNT(*) AS nb FROM membres WHERE email = :email_inscr');
    $nombremail->execute(array('email_inscr' => $_POST['email_inscr']));
    $donnees = $nombremail->fetch(PDO::FETCH_OBJ);
    $nb = $donnees->nb;
    1
    1. tgdn Messages postés 35 Statut Membre
       
      Merci je teste tout de suite :D
      0
    2. tgdn Messages postés 35 Statut Membre
       
      Alors, enfait, j'ai écrit :

        $nombremail = $bdd->prepare('SELECT COUNT(*) AS nb FROM membres email = :email_inscr');  
        $nombremail->execute(array('email_inscr' => $_POST['email_inscr'])); 
        $donnes = $nombremail->fetch(PDO::FETCH_OBJ); 
        $nb = $donnes->nb; 
        if ($nombremail != 0) 
        { 
            //Votre meail est deja utilisé par un membre... 
        } 
      


      Je crois que je me suis planté encore :P
      Notice: Trying to get property of non-object in C:\wamp\www\inscription\registerok_fr.php  on line 42
      Ligne 42:   $nb = $donnes->nb;
      
      Notice: Object of class PDOStatement could not be converted to int in C:\wamp\www\inscription\registerok_fr.php on line 43
      Ligne 43:   if ($nombremail != 0)
      

      Qu'est ce que je dois mettre à la place de if($nombremail != 0) ??
      Merci.
      0
    3. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      La variable qui contient le nombre est $nb
      Dans la ligne avant le "if", tu peux remplacer "$nb" par "$nombremail"
      0
    4. tgdn Messages postés 35 Statut Membre
       
      Je te dois tout :D merci beaucoup :) Mais il reste un tout petit truc. J'ai mis :
        $nombremail = $bdd->prepare('SELECT COUNT(*) AS nb FROM membres email = :email_inscr'); 
        $nombremail->execute(array('email_inscr' => $_POST['email_inscr']));
        $donnes = $nombremail->fetch(PDO::FETCH_OBJ);
        $nb = $donnes->nb;
        if ($nb != 0)
        {
          $email_error1 = "Votre email est déjà utilisée par un membre.";   
          $i++;
          $nombremail->closeCursor(); 
      


      J'ai ete inscrit et tout, je suis allé voir dans ma BDD tout y est, mais il me dit
      Notice: Trying to get property of non-object in C:\wamp\www\inscription\registerok_fr.php on line 42
      Ligne 42: $nb = $donnes->nb;
      0
    5. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      $nombremail = $bdd->prepare('SELECT COUNT(*) AS nb FROM membres email = :email_inscr');
      Ta requête est mauvaise
      0
  2. tgdn Messages postés 35 Statut Membre
     
    Merci beaucoup pour ton aide :D trop top
    0