Vérifier format d’une adresse mail et ça présence en BDD
Quand un visiteur veut s’inscrire sur un site, on doit l’aider avec de petit messages pour pas qu’il fasse d’erreurs comme vérifier l’adresse mail avant d’envoyer le formulaire et surtout voir si elle est en base de données, car on ne peut pas inscrire plusieurs personnes qui ont la même adresse mail.
L’avantage de le faire en Javascript c’est qu’on n’est pas obligé de recharger la page à chaque fois pour indiquer une erreur et que cela apporte plus de confort pour le visiteur.
Pour des raison pratique on interroge seulement le serveur si le format de l’adresse mail est correcte, ça évite de le surcharger pour rien. Le code permet aussi de limiter des adresses comme hotmail.
Le code Js:
$(document).on('keyup', '#inscription_mail', function() { var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; var emailblockReg = /^([\w-\.]+@(?!hotmail.fr)(?!hotmail.com)([\w-]+\.)+[\w-]{2,4})?$/; var emailaddressVal = $(this).val(); if(emailaddressVal.length > 4) { if(!emailReg.test(emailaddressVal)) { $('#inscription_mail_reponse').css({'color': '#D61A1A'}).html('Ce n\'est pas une adresse email'); $('#inscription_mail').css({'background-color': '#D61A1A', 'color': 'white'}); // On change la couleur de l'input } else if(!emailblockReg.test(emailaddressVal)) { $('#inscription_mail_reponse').css({'color': '#D61A1A'}).html('Les adresses hotmail sont interdites'); $('#inscription_mail').css({'background-color': '#D61A1A', 'color': 'white'}); // On change la couleur de l'input } else { $('#inscription_mail_reponse').html('Chargement...'); $.ajax({ url: './ajax/inscription_mail_verif.php', type: 'POST', timeout: 5000, // Après 5 seconde on arrête si c'est trop long dataType: 'json', data: {'mail': $(this).val()}, success: function(json) { if(json.reponse == 1) { $('#inscription_mail').css({'background-color': '#25BA5C', 'color': 'white'}); // On change la couleur de l'input $('#inscription_mail_reponse').empty(); } else { $('#inscription_mail').css({'background-color': '#D61A1A', 'color': 'white'}); // On change la couleur de l'input $('#inscription_mail_reponse').css({'color': '#D61A1A'}).html('Adresse mail déja utilisé'); } }, error: function(XMLHttpRequest,textStatus, errorThrown){ $("#inscription_pseudo_reponse").html('Erreur: '+errorThrown); }, }); return false; } } else { $('#inscription_mail_reponse').empty(); $('#inscription_mail').css({'background-color': '#FFFFFF', 'color': 'black'}); // On change la couleur de l'input } });
Coté PHP rien de plus simple: une simple requête SQL avec une condition:
if(!empty($_POST['mail'])) // Si on à bien reçus l'adresse mail { // La requête SQL: $stmt = $bdd->prepare('SELECT * FROM `utilisateur` WHERE mail = :mail'); $stmt->execute(array('mail' => trim($_POST['mail']))); $stmt->setFetchMode(PDO::FETCH_ASSOC); $donnees = $stmt->fetchAll(); // Le résultat est dans la variable $donnees // krumo($donnees); if(!empty($donnees)) // Si on obtient un résultat { $array['reponse'] = 2; } else { $array['reponse'] = 1; } echo json_encode($array); } else { }
On doit donc avoir en retour json 1 si l’adresse est pas en BDD
Tous les codes sont testés et sont fonctionnels, si il arrive qu'un de ces codes ne fonctionne pas chez vous, merci de me le signaler.