Validation email en php (preg_match)

Résolu/Fermé
forumeur - 17 oct. 2012 à 08:38
Yelowwclo Messages postés 6 Date d'inscription mercredi 3 août 2016 Statut Membre Dernière intervention 6 août 2016 - 3 août 2016 à 23:57
Bonjour,

Je n'arrive pas à mettre en place la validation d'email avec la fonction preg_match, ça fonctionne, mais ça me met "Email incorrect" dès l'ouverture de la page. Voici le code concernée :

IF($action == "commentaires") {
mysql_connect($host, $login_host, $pass_host) or die('Erreur de connexion');  
mysql_select_db($hostname) or die('Base inexistante');  

# was there a reCAPTCHA response?
if ($_POST["recaptcha_response_field"]) {
	
	   $resp = recaptcha_check_answer ($privatekey,
                                        $_SERVER["REMOTE_ADDR"],
                                        $_POST["recaptcha_challenge_field"],
                                        $_POST["recaptcha_response_field"]);

        if ($resp->is_valid) {
echo' <script type="text/javascript">
alert("Votre commentaire a été envoyé.");
</script>';

// Insertion dans la bdd
echo'<table width="80%" cellpadding="0" border="0" cellspacing="0" align="center" class="categories'.$prefixe.'">';
$email = strip_tags(secure($_POST['email_expediteur']));
$pseudo = strip_tags(secure($_POST['pseudo']));
$titre = strip_tags(secure($_POST['titre']));
$texte = strip_tags($_POST['texte']);
$note = strip_tags($_POST['note']);
$id = intval($_POST['id']);
$date = date("y-m-d");
$sql = "INSERT INTO ".$prefixe."_comments(id, pseudo,titre, texte, note, date, news) VALUES('','$pseudo','$titre','$texte','$note','$date','$id')"; 
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

echo'<tr>
	 <td align="center" valign="center" class="admin'.$prefixe.'"><h2>Your comment has been sent !<br/>'; var_dump ($resp); echo'<br/></h2></td>
	 <script type="text/javascript">
   setTimeout("window.location=\'\'",5000); 
</script>';
echo'</table>';

        } else {
                # set the error code so that we can display it
echo' <script type="text/javascript">
alert("Code invalide !");
setTimeout("window.location=\'\'",5000); 
</script>';
        }
}

if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#",$_POST["email_expediteur"]) )// On filtre les serveurs qui présentent des bogues.
{
	echo' <script type="text/javascript">
alert("Email incorrect");
setTimeout("window.location=\'\'",5000); 
</script>';
}
else
{
//Envoi de l'email au webmaster
  // on génère une frontière
  $boundary = '-----=' . md5( uniqid ( rand() ) );
  // on génère un identifiant aléatoire pour le fichier
  $file_id  = md5( uniqid ( rand() ) ) . $_SERVER['SERVER_NAME'];

  $headers  = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
  $headers .= "Reply-to: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">".$passage_ligne;
  $headers .= "MIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
  
//=====Définition du sujet.
  $sujet = "Nouveau commentaire sur $titresite !";

  $message  = "Nouveau commentaire sur le site $titresite.\n\n";
  $message .= "--" . $boundary . "\n";
  $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
  $message .= "Content-Transfer-Encoding: 8bit\n\n";
  $message .= "<html><body>Pseudo : $pseudo<br><br>";
  $message .= "Titre : $titre<br><br>";
  $message .= "Note : $note<br><br>";
  $message .= "Message : $message<br><br>";
  $message .= "\n\n";
  $message .= "--" . $boundary . "\n";
  $message .= "Content-Type: image/jpg; name=\"avatars/$nomImage\"\n";
  $message .= "Content-Transfer-Encoding: base64\n";
  $message .= "Content-ID: <$file_id>\n\n";
  $message .= $content_encode . "\n";
  $message .= "\n\n";
  $message .= "--" . $boundary . "--\n";			
		
		 mail($email_webmaster, $sujet, $message, $headers);
//Email envoyé

if(!$_POST['submit']){

12 réponses

Paul073 Messages postés 1 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 20 novembre 2013 8
Modifié par Paul073 le 20/11/2013 à 10:38
Les solutions présentées ici sont du bidouillage.
PHP a tout prévu avec la fonction filter_var :


if(!empty($_POST['email'])) {
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
// adresse e-mail valide
} else {
// adresse e-mail invalide
}
}

A noter que cette fonction peut tester bien d'autres types :
https://www.php.net/manual/fr/function.filter-var.php
8