Problème formulaire de contact PHP

Résolu/Fermé
nob51 Messages postés 44 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 4 mars 2011 - 26 janv. 2011 à 18:05
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 - 26 janv. 2011 à 18:50
Bonjour,

Je m'explique, j'ai un soucis avec mon formulaire de contact : lorsque l'on rentre une adresse au format adresse@domaine.tld celui ne marche pas, il faut que l'adresse de messagerie soit au format adresse.adresse@domaine.tld

Je ne sais pas d'où ça peut venir, j'ai regardé mes expressions régulières mais elles ont l'air correctes.

Le code :

elseif (!eregi("^([a-zA-Z0-9]+)([_\.-]+)([a-zA-Z0-9]+){1,}@([a-zA-Z0-9]+).([a-zA-Z]+){2,4}$",$_POST["son_mail"]))
{ // On vérifie si l'email est bien de la forme messagerie@domaine.tld
            $erreur="Votre adresse e-mail n'est pas valide...";
        }



Merci d'avance,
nob51




A voir également:

5 réponses

seebz Messages postés 38 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 6 mars 2011 28
26 janv. 2011 à 18:10
Si tu utilise PHP >= 5.2.0, tu peux utiliser la fonction filter_var() :

filter_var($email, FILTER_VALIDATE_EMAIL)
1
nob51 Messages postés 44 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 4 mars 2011 5
Modifié par nob51 le 26/01/2011 à 18:15
Effectivement j'utilise PHP5. Je dois donc remplacer l'expression régulière par le filtre?
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
26 janv. 2011 à 18:32
Tu peux, pas tu dois :-)
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
26 janv. 2011 à 18:11
Hello,

Peux-tu reformuler le problème : il faut que ce soit adresse.adresse@... ou au contraire tu veux que ça accepte nimportequoi@.... ??

Et as-tu marqué volontairement deux fois "adresse" ou bien cela peut-il être nimportequoi1.nimportequoi2@... ?

Parce que en effet, vu ta regexp tu as besoin de deux parties séparées par ., - ou _.
1
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
26 janv. 2011 à 18:24
Alors pas besoin de séparer, une classe [a-zA-Z0-9.-_] suffit largement. Après tout une adresse peut contenir plusieurs points !

"^([a-zA-Z0-9_\.-]+)@([a-zA-Z0-9]+).([a-zA-Z]+){2,4}$"

Pour info, tu oublies surement des cas d'adresse... Je te conseille de regarder le tutoriel PHP du site du zéro, dans lequel une regexp d'email est créée et elle est très efficace !
1
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
26 janv. 2011 à 18:25
PS : je ne sais plus s'il faut échapper le point dans un [ ]...
0
nob51 Messages postés 44 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 4 mars 2011 5
26 janv. 2011 à 18:29
Mince on a du taper le message en même temps j'ai eu la même réflexion que toi.
Merci Mihawk pour ton aide ;)!
0
nob51 Messages postés 44 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 4 mars 2011 5
Modifié par nob51 le 26/01/2011 à 18:19
Et bien je voudrais que l'on puisse mettre les deux types d'adresses, séparées ou non comme nimportequoi1.nimportequoi2@... ou nimportequoi1@
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nob51 Messages postés 44 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 4 mars 2011 5
26 janv. 2011 à 18:25
Désolé du double post mais j'ai trouvé!
Il fallait supprimer le regexp qui comme tu me l'avais fait remarquer, demandait de séparer les partie par un point ou - ou underscore.

La solution :
elseif (!eregi("^([a-zA-Z0-9.]+)([a-zA-Z0-9]+){1,}@([a-zA-Z0-9]+).([a-zA-Z]+){2,4}$",$_POST["son_mail"]))
{ // On vérifie si l'email est bien de la forme messagerie@domaine.tld (cf cours d'expressions régulières)
            $erreur="Votre adresse e-mail n'est pas valide...";


Merci pour votre aide!
nob51
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
26 janv. 2011 à 18:28
Ouais mais alors là les tirets ne sont plus acceptés !!!
Quel intérêt de mettre une seconde fois la classe a-zA-Z0-9 ? C'est pas super propre !!
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
26 janv. 2011 à 18:40
Je te l'ai mis dans ma réponse en vert tout en haut.
0
nob51 Messages postés 44 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 4 mars 2011 5
26 janv. 2011 à 18:43
Bon ce coup ci c'est bon!!
J'ai utilisé la seconde classe pour faire office de séparateur avec les _ et -. La bonne solution :
 elseif (!eregi("^([a-zA-Z0-9.]+)([-_a-zA-Z0-9]+){1,}@([a-zA-Z0-9]+).([a-zA-Z]+){2,4}$",$_POST["son_mail"]))
{ // On vérifie si l'email est bien de la forme messagerie@domaine.tld (cf cours d'expressions régulières)
            $erreur="Votre adresse e-mail n'est pas valide...";
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
Modifié par Mihawk le 26/01/2011 à 18:51
Je persiste à dire que c'est pas propre comme solution...
Deux classes quasiment identique mises l'un à la suite de l'autre (avec des + en plus) peuvent largement être regrouper.

De plus, quel intérêt de préciser {1,} à la fin alors que c'est exactement le rôle du + ?!!

^([a-zA-Z0-9.]+)([-_a-zA-Z0-9]+){1,} = ^[a-zA-Z0-9.-_]+
0