Bonjour à toutes et à tous,

Pour mon formulaire d'adhesion, j'ai crée un script permettant de valider l'adresse email saisie par le futur producteur.
L'inconvénient est que la validation est sujette au bouton submit du formulaire.
Lorsque je clique sur le bouton submit l'adresse email est envoyée en base alors que cette dernière est invalide.

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
 
<?php
require_once("inc_connexion.php");	
	$conn=opendb_conn(); // on se connecte à la Base de données	
	/* script permettant l'insertion d'un producteur en Base, ce script ne vérifie pas que le login est dejà présent.
		L'identifiant saisie dans le formulaire d'adhésion correspond à la première lettre du prénom suivi du nom
		de famille, le tout attenant. Cet identifiant sera le login inséré en Base
		Il faudra envoyer un mail au producteur inscrit afin de lui communiquer son login et son password après validation
		de l'unicité du login en base.
	*/
 
 
	if(isset($_POST['submit'])) {
 
		// variables correspondant aux champs présents en base
		// utilisation de l'opérateur ternaire ?: pour assigner la variable $login de la valeur du champ identifiant du formulaire
		$login = (isset($_POST['login']))?$_POST['login']:''; 
		$login=htmlentities(trim($login));
		$password = (isset($_POST['password']))?$_POST['password']:'';
		$password = sha1($password);		
		$nom = (isset($_POST['nom']))?$_POST['nom']:'';
		$nom = htmlspecialchars($_POST['nom']);// On rend inoffensives les balises HTML que le visiteur a pu rentrer
		$prenom = (isset($_POST['prenom']))?$_POST['prenom']:'';
		$prenom = htmlspecialchars($_POST['prenom']);// On rend inoffensives les balises HTML que le visiteur a pu rentrer
		$langue = (isset($_POST['langue']))?$_POST['langue']:'';
		// vérification du contenu du champ téléphone
		$telephone = (isset($_POST['telephone']))?$_POST['telephone']:'';
		$telephone = htmlspecialchars($_POST['telephone']);// On rend inoffensives les balises HTML que le visiteur a pu rentrer
		$fax = (isset($_POST['fax']))?$_POST['fax']:'';
		$fax = htmlspecialchars($_POST['fax']);// On rend inoffensives les balises HTML que le visiteur a pu rentrer
		$site = (isset($_POST['site']))?$_POST['site']:'';
		$email = (isset($_POST['email']))?$_POST['email']:'';
		$email  = htmlspecialchars($_POST['email']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
		$propriete = (isset($_POST['propriete']))?$_POST['propriete']:'';
		$adresse = (isset($_POST['adresse']))?$_POST['adresse']:'';
		$cp = (isset($_POST['cp']))?$_POST['cp']:'';
		$region = (isset($_POST['region']))?$_POST['region']:'';
		$appellation = (isset($_POST['appellation']))?$_POST['appellation']:'';
		$appellation = htmlspecialchars($_POST['appellation']);// On rend inoffensives les balises HTML que le visiteur a pu rentrer
		$pays = (isset($_POST['pays']))?$_POST['pays']:'';
 
		// requête pour l'insertion du producteur en base
		$req = 
			"insert into producteurs 
				values(null,:login,:password,:nom,:prenom,:langue,:telephone,:fax,:site,:email,:propriete,:adresse,:cp,:region,:appellation,:pays,CURDATE())";
 
		// on prépare le traitement de la requête
		$stm=$conn->prepare($req);
		// Tentative d'insertion en base d'un nouveau producteur en utilisant le mode transactionnel
		// bloc try ... catch()
		try {			
			$conn->beginTransaction();			
			// on associe les marqueurs nommés avec les variables crées plus haut
			$stm->bindParam(':login', $login, PDO::PARAM_STR);
			$stm->bindParam(':password', $password, PDO::PARAM_STR);
			$stm->bindParam(':nom', $nom, PDO::PARAM_STR);
			$stm->bindParam(':prenom', $prenom, PDO::PARAM_STR);
			$stm->bindParam(':langue', $langue, PDO::PARAM_STR, 2);
			$stm->bindParam(':telephone', $telephone, PDO::PARAM_STR);
			$stm->bindParam(':fax', $fax, PDO::PARAM_STR);
			$stm->bindParam(':site', $site, PDO::PARAM_STR);
			$stm->bindParam(':email', $email, PDO::PARAM_STR);
			$stm->bindParam(':propriete', $propriete, PDO::PARAM_STR);
			$stm->bindParam(':adresse', $adresse, PDO::PARAM_STR);
			$stm->bindParam(':cp', $cp, PDO::PARAM_STR,5);
			$stm->bindParam(':region', $region, PDO::PARAM_STR);
			$stm->bindParam(':appellation', $appellation, PDO::PARAM_STR);
			$stm->bindParam(':pays', $pays, PDO::PARAM_STR);			
			// exécution de la requête
			$stm->execute();			
			// on commit
			$conn->commit();
			$stm->closeCursor();			
			print '<div style="color:green">Vous êtes enregistré ... </div>';
			header( "refresh:3;url=http://localhost/index.php" ); 
		}catch(PDOException $e) {
			// on rollback si cela se passe mal
			$conn->rollback();
			// on affiche un message d'erreur
			print "Erreur lors de l'insertion en base !: " . $e->getMessage() . "</br>";
		}		
	} //if
?>
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
 
<?php
if (isset($_POST['mail']))
{
    $_POST['mail'] = htmlspecialchars($_POST['mail']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
 
    if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))
    {
        echo 'L\'adresse ' . $_POST['mail'] . ' est <strong>valide</strong> !';
    }
    else
    {
        echo 'L\'adresse ' . $_POST['mail'] . ' n\'est pas valide, recommencez !';
    }
}
?>
Je ne vois pas où placer ce code pour que la validation de l'adhésion ne se fasse que si l'adresse email est correcte.
Merci d'avance.
Transact.