Fonction PHP pour déclarer une erreur si Email déjà utilisé PDO

Fermé
vivian - 29 janv. 2018 à 15:10
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 29 janv. 2018 à 16:26
Bonjour,

Je voudrais ecrire une fonction pour lors de l'inscription d'un utilisateur si l'email est deja utilisé, une erreur lui soit déclaré tout sela en PDO, svp.

Voila mon code:

function Email_existe($Email)
{

try{

$bdd = new PDO('mysql:host=localhost;dbname=rs;charset=utf8', 'root', ' ');

$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

} catch(PDOException $e) {
die('Erreur : ' . $e->getMessage());
}

$reponse = $bdd->prepare("SELECT COUNT(id) FROM utilisateurss WHERE Email='$Email'");

$reponse->execute(array($Email));


}

Je vous remercie d'avance
A voir également:

1 réponse

Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
29 janv. 2018 à 15:30
Bonjour,

Un code comme celui-ci devrait convenir :

function Email_existe($email) 
{

    try 
    {
        $bdd = new PDO('mysql:host=localhost;dbname=rs;charset=utf8', 'root', ' ');

        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } 
    catch (PDOException $e) 
    {
        die('Erreur : ' . $e->getMessage());
    }

    $req = $bdd->prepare("SELECT COUNT(*) FROM utilisateurss WHERE Email = :email"); //Inutile de préparer la requête si c'est pour ne pas bind ensuite !
    $req->execute(array(
        'email' => $email //Ici on bind
    ));
    $results = $req->fetch(); //On fetch la requête
    $req->closeCursor(); //On ferme la connexion BDD, ça évite les soucis

    if($results[0] == 0)
    {
        return false; //L'email n'existe pas, on peut créer l'utilisateur
    }
    else
    {
        return true; //L'email existe, il ne faudra pas créer l'utilisateur
    }
}


Cordialement.
0
Merci. J'ai essayer mais lors de l'inscription elle ne signale pas l'email. L'inscription est accepter quand même ?
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > vivian
29 janv. 2018 à 15:58
2 solutions :

- Ou ta fonction inclut déjà un echo :

Donc à la place de return true ou return false, tu peux écrire :

echo "L'email est déjà utilisé" ou bien echo "L'email a bien été enregistré".

- Ou ta fonction est booléenne, elle ne retournera que vrai ou faux :

La fonction telle que te l'ai donné. Dans ce cas, tu peux utiliser ta fonction comme ceci :

if (isset($_POST['leNameDeTonInputPourLAdresseMail']))
{
    if(Email_existe($_POST['leNameDeTonInputPourLAdresseMail']))
    {
        echo "L'e-mail renseigné existe déjà";
    }
    else
    {
        echo "Votre compte a bien été enregsitré. Merci.";
    }
}


Cordialement.
0
J'ai fait comme cela mais l'inscription se produit toujours avec le même email
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > vivian
29 janv. 2018 à 16:26
Dans ce cas, écris la fonction directement en dur (sans la fonction en fait), remplace la valeur de l'email par un email que tu écris en dur et que tu sais qu'il est déjà dans la base. Puis teste la valeur de $results[0] avec un echo. Tu fais ça sur un fichier à part pour tester la fonction.
0