Validation email en php (preg_match) [Résolu/Fermé]

Signaler
-
Messages postés
6
Date d'inscription
mercredi 3 août 2016
Statut
Membre
Dernière intervention
6 août 2016
-
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

Messages postés
1
Date d'inscription
samedi 27 octobre 2007
Statut
Membre
Dernière intervention
20 novembre 2013
8
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
6
Date d'inscription
mercredi 3 août 2016
Statut
Membre
Dernière intervention
6 août 2016
12
Bonjour,

Pour valider qu'une adresse existe réellement, tu peux utiliser https://www.validator.pizza

Ça vérifie beaucoup de paramètres et c'est gratuit. Tu peux même l’intégrer dans ton code PHP facilement avec une API.
8
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
268
bonjour,

personnellement j'utilise ca :

preg_match('#^([\w\.-]+)@([\w\.-]+)(\.[a-z]{2,4})$#',trim($string))

pour vérifier les mails
Il serait pas mal de tester si la variable a du contenu avant de tester le format du contenu :
if(!empty($_POST["email_expediteur"])) 
{ 
    if(!preg_match(..., $_POST["email_expediteur"])) 
    { 
        // Adresse mail erronée 
    }else{ 
        // Envoi mail 
    } 
} 
Bonjour,

Si j'utilise

preg_match('#^([\w\.-]+)@([\w\.-]+)(\.[a-z]{2,4})$#',trim($string)) 


Le résultat est le même : "Email incorrect" au chargement de la page.
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
268
affiche ta variable post qui pose problème dans ton alert

ça te permettra de voir ce qui cloche
Impossible de mettre ma variable dans l'alert. Je pense que ce n'est pas la variable qui pose problème, mais la fonction preg_match qui est mal placée.
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
268
comment ca impossible ?

echo 'alert(\''.$_PSO['CESTPOSSIBLE'].'\');';
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
avec ce preg_match:
preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#",$_POST["email_expediteur"])

tu verifies que le serveur est bien hotmail ou live ou msn, donc le test inverse !preg_match va rejeter tous les autres serveurs

essayes:

!preg_match("#^[a-z0-9._-]+@[^hotmail|live|msn].[a-z]{2,4}$#",$_POST["email_expediteur"])


ou

!preg_match("#^[a-z0-9._-]+@[^hotmail|^live|^msn].[a-z]{2,4}$#",$_POST["email_expediteur"])
Merci à tous les deux du coup de main. Mais bon, je n'arrive toujours pas à placer le preg_match de manière à ce que ça marche.
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
en fait il faut d'abord tester si adresse mail au bon format en ensuite tester si elle ne contient pas hotmail ou live ou msn

if( !preg_match('#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#',$_POST["email_expediteur"]) || preg_match_all("#hotmail|live|msn#",$_POST["email_expediteur"],$out)) 


\w c'est une classe de caractères alphanum
C'est parfait. Avec tout ça, ça marche correctement. Merci !