Utilisateur anonyme
-
Modifié par dinolam le 7/07/2016 à 16:20
Utilisateur anonyme -
12 juil. 2016 à 11:07
Bonjour,
J'ai un petit souci qui me bloque dans mon code ajax. En effet, j'ai un formulaire de connexion dans une popup, j'aimerais quand je le valide qu'il me renvoie vers un autre formulaire sans recharger la page (étape suivante popup). Tout ça marche parfait mais mon problème c'est quand un utilisateur saisit une adresse mail qui n'est pas valide pour se connecter, j'aimerais rester sur la même popup et lui afficher le message d'erreur. Mais dès que je saisisse un émail invalide ça me renvoie vers l'autre popup et en plus m'affiche le message d'erreur.
// Traitement connexion if (isset($_POST['valider'])) { if (isset($_POST['email'])) { $email = $_POST['email'];
$q = array('email'=>$email); $sql = "SELECT count(*) AS nbr, email FROM users WHERE email = :email GROUP BY email"; $req = $db->prepare($sql); $req->execute($q) or die(print_r($db->errorInfo())); $data = $req->fetch(PDO::FETCH_ASSOC);
if($data['nbr'] == 1) { $_SESSION['auth'] = 'ok';
$_SESSION['id'] = $data ['id'];
$_SESSION['email'] = $email;
echo '<p class="success">Vous avez été connecté avec succès.</p>;';
$returnVal = array('myVar', $_SESSION['id']); echo json_encode($returnVal); exit(0); } else { echo '<p class="error">Erreur lors de la connexion, veuillez vérifier votre adresse mail !</p>'; } } else { echo '<p class="error">Vous avez oublié de remplir le champ !</p>'; } }
J'aimerais faire en sorte que quand je valide mon formulaire avec une fausse adresse mail d'afficher une message d'erreur et de rester sur la même popup de connexion. En cas de success avec une bonne adresse, passer directement au formulaire suivant et afficher le message de succès. J'ai regardé sur la FAQ et sur les autres forums mais R.A.S.
Mais dès que je saisisse un émail invalide ça me renvoie vers l'autre popup
En même temps... ton IF pour l'instant ne fait que vérifier que le champ email n'est pas vide...
if(email === '') {
Pour vérifier si le format du mail est valide il te faut utiliser une regex.
Par exemple :
function validateEmail(email) {
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
Merci d'avoir pris le temps de me répondre et merci des explications. En fait, mon problème n'est pas la validation du format de mail, mais plutôt la vérification de l'existence du mail dans la base de données. C'est pour empêcher la connexion d'utilisateur qui n'est pas inscrit sur le site. Mais ça je l'ai fait en php puisque j'ai un message d'erreur qui s'affiche en cas de saisie d'un mail qui n'existe pas. Ce que j'aimerais faire est que ce message s'affiche sur la popup de connexion sans qu'il y ait passage à la 2eme popup.
En cas de succès (validation mail existant) je passe directement à la popup suivante (2eme) et mon message de succès s'affiche là.
J'ai modifié mon code que j'ai mis ci-dessus. Ça marche quand je saisie une fausse adresse mail mais je n'arrive pas maintenant à afficher le message de succès sur la 2eme popup.
Au début j'ai une erreur de ce type : SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data.
L'origine de l'erreur vient du dataType: 'json'. Quand je l'enlève je n'ai plus l'erreur.
Merci !
// PHP session_start();
header('Content: application/json', 1);
include('db.php');
// Traitement connexion if (isset($_POST['valider'])) { $retour['valid'] = 0; if (isset($_POST['email'])) { $email = $_POST['email'];
$q = array('email'=>$email); $sql = "SELECT count(*) AS nbr, email FROM users WHERE email = :email GROUP BY email"; $req = $db->prepare($sql); $req->execute($q) or die(print_r($db->errorInfo())); $data = $req->fetch(PDO::FETCH_ASSOC);
En fait, le problème ce ma requête n'arrive pas à me renvoyer en même temps le message de succès et l'id de la session. J'en ai besoin de l'id de session pour poursuivre sur la 2e popup. Mais il faut qu'il soit cacher juste le message de succès qui doit s'afficher.