Bonjour,
Je suis en train de faire un formulaire et je voudrais vérifier si l'adresse email existe dans la base avant d'enregistrer. Voici le code de formulaire.php :
Jusque là tout va bien ! Ca fonctionne, ça affiche les alertes, et ça enregistre dans la base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 <?php session_start();?> <script language="JavaScript"> function verif_formulaire() if(document.form1.email.value == "") { alert("Veuillez entrer votre email"); document.form1.email.focus(); return false; } else { validite('form1','email','EMAIL',0,30); if (probleme == 1) { document.form1.email.focus(); return false; } } function validite(form1,champ,format,mini,maxi) { probleme = 0; // ici normalement la fonction validite que je ne détaille pas // pour ne pas alourdir l'énoncé du problème ! // En gros elle contient les expressions régulières // et affiche des alert s'il y a une erreur de saisie. // S'il y a une erreur elle définit la variable "probleme" à 1 } </script> <?php // connexion à la base $connexion = mysql_connect($host,$user,$pass) or die mysql_select_db("$bdd") or die // Récupération des champs if(isset($_POST['email'])) { $email = $_POST["email"] ; $_SESSION['email'] = $email;} // initialistation de la variable de test $test = 0; // Verification de l'existence ou non de l'email dans la base if(isset($_POST['email'])) { $resultat = mysql_query ("SELECT email FROM identification WHERE email ='$email'"); $test = mysql_num_rows($resultat); // si l'email est libre pas dans la base on enregistre. // j'ai du rajouter (&& ($email != "") à la condition sinon // ça m'enregistrait un enregistrement vide dans la base. // Ca fait sans doute partie du problème. if(($test==0) && ($email != "")) { // création de la requête SQL: $sql = "INSERT INTO identification email VALUES '$email'"; //exécution de la requête SQL: $requete = mysql_query($sql, $connexion) or die // si tout s'est bien passé j'appelle la page activation.php // qui m'affiche un récapitulatif des données saisies. // Ca justifie la session tout en en haut du code // afin de récupérer les données include ("./activation.php"); mysql_close(); } } ?> </head> <body> <form action="formulaire.php" method="post" onSubmit="return verif_formulaire()" name="form1" class="Style1" id="form1"> <p class="Style2"><strong>Email</strong> <strong>valide</strong> <input name="email" type="text" size="30" maxlength="30" <input type="submit" name="envoyer" id="envoyer" value="Créer votre profil" />
Je souhaiterais maintenant vérifier si l'adresse email saisie dans le formulaire existe dans la base avant d'enregistrer.
Si elle n'existe pas je voudrais afficher une alert. Voici les instructions que je rajoute dans la fonction "verif_formulaire()" :
Ce qui me donne le fichier formulaire.php suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12else { // je passe ma variable php de test dans une variable javascript var essai= '<?php echo $test; ?>' ; // Si l'adresse existe dans la base if (essai != 0) { alert('Cette adresse existe déjà'); document.form1.email.focus(); return false; } }
Le problème c'est que dès que rajoute les lignes de conditions la fonction verif_formulaire() ne fonctionne plus. Si je valide un formulaire vierge ça ne me fait plus aucune vérification de saisie, ça ne m'affiche aucune alert, et évidemment ça ne m'affiche pas l'alert tant attendue : "Cette adresse existe déjà".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 <?php session_start();?> <script language="JavaScript"> function verif_formulaire() if(document.form1.email.value == "") { alert("Veuillez entrer votre email"); document.form1.email.focus(); return false; } else { validite('form1','email','EMAIL',0,30); if (probleme == 1) { document.form1.email.focus(); return false; } // Les lignes ajoutées sont ici else { var essai= '<?php echo $test; ?>' ; if (essai != 0) { alert('Cette adresse existe déjà'); document.form1.email.focus(); return false; } } // fin du rajout } function validite(form1,champ,format,mini,maxi) { probleme = 0; // ici normalement la fonction validite que je ne détaille pas // pour ne pas alourdir l'énoncé du problème ! // En gros elle contient les expressions régulières // et affiche des alert s'il y a une erreur de saisie. // S'il y a une erreur elle définit la variable "probleme" à 1 } </script> <?php // connexion à la base $connexion = mysql_connect($host,$user,$pass) or die mysql_select_db("$bdd") or die // Récupération des champs if(isset($_POST['email'])) { $email = $_POST["email"] ; $_SESSION['email'] = $email;} // initialistation de la variable de test $test = 0; // Verification de l'existence ou non de l'email dans la base if(isset($_POST['email'])) { $resultat = mysql_query ("SELECT email FROM identification WHERE email ='$email'"); $test = mysql_num_rows($resultat); // si l'email est libre pas dans la base on enregistre. // j'ai du rajouter (&& ($email != "") à la condition sinon // ça m'enregistrait un enregistrement vide dans la base. // Ca fait sans doute partie du problème. if(($test==0) && ($email != "")) { // création de la requête SQL: $sql = "INSERT INTO identification email VALUES '$email'"; //exécution de la requête SQL: $requete = mysql_query($sql, $connexion) or die // si tout s'est bien passé j'appelle la page activation.php // qui m'affiche un récapitulatif des données saisies. // Ca justifie la session tout en en haut du code // afin de récupérer les données include ("./activation.php"); mysql_close(); } } ?> </head> <body> <form action="formulaire.php" method="post" onSubmit="return verif_formulaire()" name="form1" class="Style1" id="form1"> <p class="Style2"><strong>Email</strong> <strong>valide</strong> <input name="email" type="text" size="30" maxlength="30" <input type="submit" name="envoyer" id="envoyer" value="Créer votre profil" />
Avant que je rajoute la condition ($email != "")) dans cette ligne : if(($test==0) && ($email != "")) ça m'enregistrait même un et un seul enregistrement "vierge" dans la base.
Je voulais éviter l'ajax avec cette astuce car je suis débutant, mais pour l'instant ça ne fonctionne pas...
Peut-être est ce impossible de faire la vérification de l'email dans la base de cette façon ? Si c'est impossible, et que quelqu'un peut m'ajouter les lignes d'ajax, qu'il n'hésite pas je suis preneur !
Qu'en pensez-vous ?
Merci d'avance
Partager