PHP formulaire saisie d'email

Résolu
Bonjour,
je 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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. -- 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 …
    1. 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.
      1. Contributeur
        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.
        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
    2. Contributeur
      you're welcome, bon courage pour la suite !
      -;o)
      1. je sais pas si vous serrez toujours la pour repondre a des questions, j'aime bien votre maniere d'expliquer, c simple et rapide, est ce que je pourrais vous posez d'autres questions ?
      2. 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.
    3. merci,

      ca marche avec des petites modifications de quelque accollades, merci pour ton aide, ca m'a vraiment epargné beaucoup de temps
      1. 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 !
        1. Contributeur
          y a mieux là !!!
      2. Contributeur
        ah ben voilà !

        t'as trouvé pour le checkbox ?
        y a plus qu'à l'ajouter à ta fonction !
        1. Contributeur
          et dans ta fonction, le <input/> et sa valeur sont bien définis ?

          ajoute une alerte :
          var email = document.formulaire_inscription.email.value; 
          alert(email);
          1. 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
            1. c moi qui a ecrit le 16
              1. Contributeur
                lol, je parlais du <15>…

                tu as bien ajouté le "return" ?
            2. 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
              1. Contributeur
                tu as lu le <16> ?
            3. Contributeur
              ah oui, il manque le "return" !
              <form method="post" action="formvalide.php" name="formulaire_inscription" onsubmit="return validation();"> 
              1. Contributeur
                ça doit être les guillemets autour de l'appel de fonction :
                <form method="post" action="formvalide.php" name="formulaire_inscription" onsubmit="validation();"> 
                1. ce code me donne un message d'erreur mais valide quand meme le formulaire
                  1. <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>
                    • 1
                    • 2