Vérifier si un émail existe déja dans la bdd

Fermé
rika122 Messages postés 13 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 7 juillet 2014 - 3 juil. 2014 à 13:25
rika122 Messages postés 13 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 7 juillet 2014 - 7 juil. 2014 à 14:56
Bonjour;
Je travaille sur un formulaire et là je dois vérifier si l'email existe déja dans ma base ou non,avant ce code marchait nickel (j'avais utilisé un pseudo) mais là il m'affiche toujours ke l'email existe déjà alors que réellement il n'est pas dans la base ,s'il vous plait si quelqu'un pourra m'aider .
voici le code

if(isset ($_POST['submit']))
{

$TELLDEB=htmlentities(trim($_POST['TELDEB']));
$MAILDEB=htmlentities(trim($_POST['MAILDEB']));
$PSWDEB=htmlentities(trim($_POST['PSWDEB']));
$REPEATPSWDEB=htmlentities(trim($_POST['REPEATPSWDEB']));

//vérifier si les deux mot de passe sont identiques

if($MAILDEB&&$PSWDEB&&$REPEATPSWDEB&&$NOMDEB&&$PRENDEB&&$ADRDEB&&$CPDEB&&$VILLEDEB&&$IBANDEB&&$BICDEB&&$TELDEB)
{
if ($PSWDEB==$REPEATPSWDEB)        
{
$PSWDEB=sha1($PSWDEB);
$connexion = new PDO('mysql:host=localhost;dbname=test', 'root', '') ;  // connexion à la base de données
$req1 = $connexion->prepare('SELECT MAILDEB FROM client');
$req1->execute();

 if (isset($_POST['MAILDEB']))
{
// Alors dans ce cas on met saisie du $_POST['MAILDEB'] dans la variable $MAILDEB
    $MAILDEB = htmlentities($_POST['MAILDEB']);
     
    // On insère la variable MAILDEB qui correspond à la saisie de l'utilisateur dans la requête SQL
    $req1 = $connexion->prepare("SELECT MAILDEB FROM client WHERE MAILDEB = \'':maildeb'\'OR TELDEB = \'':teldeb.'\';' ");
    $req1->execute(array(':maildeb' => $_POST['MAILDEB'],':teldeb' => $_POST['TELDEB']));
 
     // recherche de résultat
    $data = $req1->fetch();
 
    if ($data=':maildeb')
    {
        // S'il y a un résultat, c'est à dire qu'il existe déjà un email, alors "Cet email est déjà utilisé"
        echo "Cet e-mail existe deja!";
    
     //Sinon le résultat est nul ce qui veut donc dire qu'il ne contient aucun email 
	 }else
    {
  echo "Bienvenue !" ;
  
    $req1="INSERT INTO client  (MAILDEB)VALUES('".$MAILDEB."','" .$TELDEB. "')";
	
    
   die ("       Inscription terminee  <a href='accueil.php'> connectez vous  </a> ici");
}
}
}else echo "<center>Les deux mot de passe doivent être identiques</center>";


}else echo "<center> Veuillez saisir tous les champs</center>";

}
  
A voir également:

3 réponses

ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
Modifié par ghFrankfurt le 3/07/2014 à 14:05
Bonjour,

Déjà dans le if, tu dois comparer $data['MAILDEB'] (le nom de la colonne) suivi d'un double égal à la variable $maildeb :
if($data['MAILDEB'] == $MAILDEB)

Au lieu de ($data=':maildeb')

Sinon encore mieux: Tu testes déjà si le mail existe avec ta requête sql. Donc s'il n'y a pas de résultat, fetch() retournera 0 => false. S'il en trouve ce sera un tableau avec du contenu => "true"
if($req1->fetch()) 
1
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
3 juil. 2014 à 14:03
Egalement, avec la comparaison de $data avec $maildeb, il faut fait attention à la casse.

PHP est sensible à la casse donc "mail" et "Mail" ne seront pas identique.
Par défaut MySQL est insensible à la casse donc ses deux chaînes seront identiques pour lui.
0
rika122 Messages postés 13 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 7 juillet 2014
3 juil. 2014 à 15:24
Bonjour ,
merci pour vos remarques,j'ai deja utilisé la condition pour vérifier si l'email existe mais c'est pareil ça ne fonctionne pas et pourtant avant il fonctionnait nickel je ne sais pas pourquoi ,voici le code


// recherche de résultat
/*$res = $req1->fetchAll();

if ($res)
{
// S'il y a un résultat, c'est à dire qu'il existe déjà un email, alors "Cet email est déjà utilisé"
echo "Cet e-mail existe deja!";
}*/
//Sinon le résultat est nul ce qui veut donc dire qu'il ne contient aucun email
}else

echo "Bienvenue !" ;

$req1=$connexion->exec("INSERT INTO client VALUES('$MAILDEB','$PSWDEB')");



die (" Inscription terminee <a href='activer.php'> Activez votre compte </a> ici");


}else echo "<center>Les deux mot de passe doivent être identiques</center>";

}else echo "<center> Veuillez saisir tous les champs</center>";

}
0
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
Modifié par ghFrankfurt le 3/07/2014 à 15:49
J'ai épuré un peu le code. Je n'ai pas testé mais normalement ceci devrait fonctionner (mis à part qu'il manque les isset) :
Après tu pourras adapter le code à tes besoins.

<?php

$MAILDEB=trim($_POST['MAILDEB']);
$TELDEB=trim($_POST['TELDEB']);

if($MAILDEB && $TELDEB){
 $connexion = new PDO('mysql:host=localhost;dbname=test', 'root', '') ;  // connexion à la base de données

 $req1 = $connexion->prepare("SELECT MAILDEB FROM client WHERE MAILDEB = :maildeb OR TELDEB = :teldeb");
 $req1->execute(array(':maildeb' => $MAILDEB,':teldeb' => $TELDEB));
  
 if($req1->fetch()){
  echo 'Cet e-mail existe déjà!';
 }else{
  echo 'Bienvenue !';
  $req1 = $connexion->prepare("INSERT INTO client (MAILDEB, TELDEB) VALUES (:maildeb, :teldeb)");
  $req1->execute(array(':maildeb' => $MAILDEB,':teldeb' => $TELDEB));
 } 
}else{
 echo '<center> Veuillez saisir tous les champs</center>';
}

?>
0
rika122 Messages postés 13 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 7 juillet 2014
Modifié par rika122 le 3/07/2014 à 16:21
j'ai testé ton code mais il m'affiche toujours que l'email existe dejà que ça soit il est dans la base ou il ne l'est pas
0
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
3 juil. 2014 à 16:32
J'ai testé chez moi, ça fonctionne correctement.
Deux possibilités :
Tu envoies une mauvaise information depuis ton formulaire (vide ou fixe).
Tu insères une donnée (teldeb OU maildeb) déjà présent dans ta base de donnée.
0
Bonjour

En plus des remarques de ghFrankfurt, que font toutes ces apostrophes et ce point dans ta requête préparée ? Il n'en faut pas :
$req1 = $connexion->prepare("SELECT MAILDEB FROM client WHERE MAILDEB = :maildeb OR TELDEB = :teldeb ");

Es-tu sûr que c'est un OR que tu veux dans ta condition, et non pas un AND ? Mais là, c'est toi qui vois en fonction de ton application.

Et pour ta seconde requête,
    $req1="INSERT INTO client  (MAILDEB)VALUES('".$MAILDEB."','" .$TELDEB. "')";


tu devrais aussi utiliser une requête préparée au lieu de mettre directement les variables sans les échapper.
Et tu insères 2 valeurs alors que tu n'indiques qu'un seul champ !
Et tu devrais surtout l'exécuter !
1
Utilisateur anonyme
3 juil. 2014 à 16:24
Attention, tu sors ce message d'erreur même si l'email n'existe pas, il suffit que le téléphone y soit puisque tu as un OR dans ta condition comme je te l'ai déjà fait remarquer
0
rika122 Messages postés 13 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 7 juillet 2014
3 juil. 2014 à 16:27
donc je vais mettre un AND comme tu as suggéré c'est ça?
parce qu'en fait j'utilise un email ou un numero te telephone pour s'identifier

je vais mettre AND et je te tiens au courant du résultat
0
rika122 Messages postés 13 Date d'inscription jeudi 3 juillet 2014 Statut Membre Dernière intervention 7 juillet 2014
3 juil. 2014 à 16:30
ça change rien finalement c'est vraiment bizarre je ne sais plus quoi faire??!!
0