[PHP-JS] vérification si champ existe dans base de données mysql
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 :
Code:
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" /> |
Jusque là tout va bien ! Ca fonctionne, ça affiche les alertes, et ça enregistre dans la base.
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()" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
else {
// 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;
}
} |
Ce qui me donne le fichier formulaire.php suivant :
Code:
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" /> |
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à".
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