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

[Fermé]
Signaler
Messages postés
13
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
7 juillet 2014
-
Messages postés
13
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
7 juillet 2014
-
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>";

}
  

3 réponses

Messages postés
207
Date d'inscription
mardi 16 novembre 2010
Statut
Membre
Dernière intervention
10 décembre 2014
23
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
13
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
7 juillet 2014

Du moment qu'il y a une insertion dans la bdd donc ça doit etre un problème de reception non?
Messages postés
207
Date d'inscription
mardi 16 novembre 2010
Statut
Membre
Dernière intervention
10 décembre 2014
23
Suivant l'exemple que je t'ai donné, il est impossible d'avoir une insertion à moins que maildeb et teldeb contiennent une valeur. Donc $maildeb doit forcément s'afficher.
Messages postés
13
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
7 juillet 2014

qu'es que je vais faire alors ? j'avais utilisé le meme code et il fonctionnait ,j'ai juste modifié le pseudo en email ,et au lieu d'avoir 2 tables une pour email et mdp et l'autre pour les autres informations ,là j'ai utilisé une seule qui englobe le tout
Messages postés
207
Date d'inscription
mardi 16 novembre 2010
Statut
Membre
Dernière intervention
10 décembre 2014
23
Je t'ai envoyé un MP avec mon adresse mail afin que tu m'envoies tes sources si c'est ok pour toi. Ce plus rapide pour régler ça
Messages postés
13
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
7 juillet 2014

oui j'ai reçu et je t'ai envoyé tout les fichiers ,merci beaucoup
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci


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
Messages postés
13
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
7 juillet 2014

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
Messages postés
13
Date d'inscription
jeudi 3 juillet 2014
Statut
Membre
Dernière intervention
7 juillet 2014

ça change rien finalement c'est vraiment bizarre je ne sais plus quoi faire??!!