PHP formulaire saisie d'email
Résoluje voudrais m'assurer que le champs email saisie par un utilisateur a son enregistrement sur mon site dans le formulaire PHP correspant effectivement au format email,
Merci
Configuration: Windows XP Internet Explorer 7.0
28 réponses
Validation de l'adresse email saisie dans un formulaire PHP repose sur une double approche: vérification du format email côté client et surtout validation côté serveur pour éviter les contournements. La meilleure réponse suggère d'utiliser filter_var($adresse_mail, FILTER_VALIDATE_EMAIL) pour valider le format, une solution efficace mais à compléter par une vérification serveur robuste, car certains environnements PHP limitent les options. D'autres échanges soulignent l'importance de la validation côté serveur indépendante de JavaScript, évoquant ereg ou preg_match en PHP selon les versions, et la nécessité d'assurer le retour correct en onsubmit. Pour améliorer la robustesse, il est recommandé d'exécuter une validation serveur avec des tests concrets d'adresses et d'utiliser des expressions régulières compatibles PCRE ou les filtres PHP selon l'hébergement.
-
-- et tu comptes passer à PHP 5.2 en 2050 ?
la plupart des hébergeurs ont migré, non ? --
Free n’a pas migré, et c’est pour moi la meilleure des raisons ! :P
Même en forçant le rendu par Php5 (en ajoutant l’exension .php5 à mes pages), je ne profite hélas que d’une RC de la version 5.1.3 … -
Bon je vois que j'arrive après les hostilités mais, en relisant le fil, je m'aperçois que la validation du côté du serveur est passée à la trappe. Pourtant, c'est la plus importante, car un utilisateur un peu bidouilleur, ou simplement qui a désactivé JavaScript (c'est courant sur les postes en entreprises), contourne ça facilement …
La fonction filter_var a été mentionnée, mais ce n'est pas la meilleure solution pour l'instant, car elle ne marche pas sur des versions de Php antérieures à la 5.2.0.
Pour utiliser les regexp sous Php, il y a au moins deux solutions : ereg et preg_match, qui utilisent une syntaxe d'expressions rationnelles différente (respectivement POSIX et PCRE). J'ai tendance à préférer la seconde, je la trouve plus « officielle », mais c'est mon humble avis.
Cela dit, pour une simple vérification de mail, la première est plus facile d'emploi :<?php ### Test regexp mail ### $address = strip_tags(@$_POST['address']); // sécurité anti-XSS ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Test regexp mail</title> </head> <body> <form action="" method="post"> <p> <label for="address">Entrez une adresse e-mail valide :</label> <input id="address" name="address" type="text" value="<?php echo $address ?>" /> <input type="submit" /> </p> <?php if (ereg("^[[:alnum:]_.-]+@[[:alnum:]_.-]+\.[:alpha:]+$", $address)) echo "<p>L’adresse $address est valide !</p>\n"; else echo "<p>Bah non, ça marche pas …</p>\n"; ?> </form> </body> </html>
Pour alléger l'exemple, j'ai volontairement fait du HTML non valide, j'espère que vous me pardonnerez :P
Petites explications pour la syntaxe POSIX :
^ le caractère de début de chaîne, et $ celui de fin de chaîne : je m'assure que l'utilisateur n'a rien entré d'autre que son adresse ;
[[:alnum:]_.-]+ → je n'autorise que les lettres, chiffres, points, tirets et soulignés
@ → le @ du milieu
\. → le caractère point, échappé avec \ pour qu'il soit traité comme un banal point
et enfin après le point, que des lettres : ça correspond au .com, .fr ou autre.
J'espère que cet exemple servira beaucoup ^^
;)
NB : cf. la référence officielle de Php pour la fonction ereg.-
ContributeurLa fonction filter_var a été mentionnée, mais ce n'est pas la meilleure solution pour l'instant, car elle ne marche pas sur des versions de Php antérieures à la 5.2.0.
et tu comptes passer à PHP 5.2 en 2050 ?
la plupart des hébergeurs ont migré, non ?
-;o)
j'ai volontairement fait du HTML non valide, j'espère que vous me pardonnerez
ah là, non !!!
-:oD
+ une ressource pour les RegEx
-
-
ok ok :)
-
Contributeuryou're welcome, bon courage pour la suite !
-;o)
-
-
Contributeur@saadainesej'aime bien votre maniere d'expliquer, c simple et rapide
merci du compliment !
est ce que je pourrais vous posez d'autres questions ?
il suffit d'ouvrir un nouveau fil de discussion dans le forum et si tu veux être sûr que je le lise, envoie-moi un MP pour me signaler la discussion.
-
-
merci,
ca marche avec des petites modifications de quelque accollades, merci pour ton aide, ca m'a vraiment epargné beaucoup de temps -
Contributeur
function validation() { var flag = false; var email = document.formulaire_inscription.email.value; var verif = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,3}$/ if (verif.exec(email) == null) { alert("Votre email est incorrecte"); } else flag = true; } if (!document.formulaire_inscription.checkbox.checked) { alert("il faut cocher !"); flag = flag && false; } else flag = flag && true; } return flag; }
évidemment, j'ai pas testé, hein !
-
Contributeury a mieux là !!!
-
-
je ne sais pas comment faire pour le check box ?
-
ou ?
-
Contributeurah ben voilà !
t'as trouvé pour le checkbox ?
y a plus qu'à l'ajouter à ta fonction !
-
Contributeuret dans ta fonction, le <input/> et sa valeur sont bien définis ?
ajoute une alerte :var email = document.formulaire_inscription.email.value; alert(email);
-
AH OUIIIIIIIIII, CA MARCHE avec le return;
merci merci merci dalida, ca marche,
quand l'email n'est pas valide , il ne passe pas, on reste sur la meme page,
quand il est valide ca passe,
merci -
c moi qui a ecrit le 16
-
Merci dalida pour ton assistance,
mais ca ne marche toujours meme pas avec les guillemets, si je mets un email valide, le formulaire se valide, et quand je mets un email non valide, je recois un message d'erreur comme quoi l'email n'est pas valide, et quand j'appuie ok, et ca continue "formvalide" :s -
Contributeurah oui, il manque le "return" !
<form method="post" action="formvalide.php" name="formulaire_inscription" onsubmit="return validation();">
-
Contributeurça doit être les guillemets autour de l'appel de fonction :
<form method="post" action="formvalide.php" name="formulaire_inscription" onsubmit="validation();"> -
ce code me donne un message d'erreur mais valide quand meme le formulaire
-
<HEAD>
<TITLE>Formulaire_inscription</TITLE>
<script language="javascript">
function validation()
{
var email = document.formulaire_inscription.email.value;
var verif = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9-]{2,}[.][a-zA-Z]{2,3}$/
if (verif.exec(email) == null)
{
alert("Votre email est incorrecte");
return false;
}
else
return email;
}
</script>
</HEAD>
<body>
<form method="post" action="formvalide.php" name="formulaire_inscription" onsubmit= validation();>
<tr><td><b><i>E_mail</i></b></td><td><input type="text" name="email" id="email" size="20"/></td></tr>
</form>
</body> -
Contributeurbon va falloir que je teste ce que j'écris alors !
-:oD
-
oui oui, j'ai changé les id, :(
-
Contributeur
- 1
- 2