2010-10-24 5 views
0

Hé les gars, Je sais qu'il y a beaucoup de meilleures façons d'envoyer des emails avec PHP. Cependant, à cette fin, la solution la plus simple est parfaite. La seule chose: je ne peux pas savoir pourquoi, ma validation ne fonctionne pas!La validation de l'adresse e-mail php ne fonctionne pas?

Je reçois l'adresse e-mail, mais la validation ne fonctionne pas, je suis en mesure d'envoyer un formulaire complètement vide. Des idées?

<?php 
//Email 
$Name = Trim(stripslashes($_POST['author'])); 
$EmailFrom = Trim(stripslashes($_POST['email'])); 
$Subject = Trim(stripslashes($_POST['subject'])); 
$Comment = Trim(stripslashes($_POST['comment'])); 
$EmailTo = "[email protected]"; 

/*$Name = "Some Name"; 
$EmailFrom = "[email protected]"; 
$Subject = "Test"; 
$Comment = "Why is the validation not working, don't get it?"; 
$EmailTo = "[email protected]";*/ 


/*echo $Name . " length: " . strlen($Name) . "<br/>"; 
echo $EmailFrom . " length: " . strlen($EmailFrom) . "<br/>"; 
echo $Subject . " length: " . strlen($Subject) . "<br/>"; 
echo $Comment . " length: " . strlen($Comment) . "<br/>"; 
echo $EmailTo . " length: " . strlen($EmailTo) . "<br/>";*/ 


//*************************** 
//Validation 
//*************************** 
$validationOK=true; 
if ($Name == "") $validationOK=false; 
if (isValidEmail($EmailFrom) == 0) $validationOK=false; 
if ($Subject == "") $validationOK=false; 
if ($Comment == "") $validationOK=false; 
function isValidEmail($email = null) { 
    return preg_match("/^[\d\w\/+!=#|$?%{^&}*`'~-][\d\w\/\.+!=#|$?%{^&}*`'~-]*@[A-Z0-9][A-Z0-9.-]{1,61}[A-Z0-9]\.[A-Z]{2,6}$/ix", $email); 
} 

if (!$validationOK) { 
    print "error"; 
} 

//*************************** 
//Order 
//*************************** 
$Body = "Contactform"; 
$Body .= "\n\n"; 
$Body .= $Comment; 

// Email Headers with UTF-8 encoding 
$email_header = "From: " . $EmailFrom . "\r\n"; 
$email_header .= "Content-Type: text/plain; charset=UTF-8\r\n"; 
$email_header .= "Reply-To: " . $EmailFrom . " \r\n"; 
// send email 
$success = mail($EmailTo, $Subject, $Body, $email_header); 

//*************************** 
//Success or Error 
//*************************** 
if ($success){ 
    print "success"; 
} 
else{ 
    print "error"; 
} 

?> 
+0

Vous pouvez également vérifier le domaine en utilisant cette fonction: checkdnsrr !! En tout cas, regardez la documentation php !! –

Répondre

0

Vous imprimez le mot d'erreur si $ validationOK est faux mais vous n'arrêtez pas le script à ce moment-là, donc php continue à traiter les commandes après lui.

Effectuez les opérations suivantes

if (!$validationOK) { 
    print "error"; 
    exit(); 
} 
1

vous devez revenir après la condition

if (!$validationOK) { 
    print "error"; 
    // return or exit 
} 

DonT continuer à envoyer du courrier

1

Vous ne finissez pas votre script après impression "erreur". Vous devriez terminer le script ou faire d'autres changements afin qu'il ne soit pas envoyé en cas d'erreur. Par exemple:

if (!$validationOK) { 
    print "error"; 
    exit; 
} 
0

Ce code:

if (!$validationOK) { 
    print "error"; 
} 

ne conserve pas votre programme d'envoyer un message, il imprime simplement un message d'erreur.

0

Ne pas écrire votre propre fonction de validation email a essayé et testé des logiciels libres pour le faire pour vous.

Vous êtes invités à utiliser ma fonction PHP gratuite is_email() pour valider les adresses. Il est disponible au téléchargement [ici] [1].

Il s'assurera qu'une adresse est entièrement conforme à RFC 5321. Il peut également vérifier si le domaine existe réellement et possède un enregistrement MX. Vous ne devriez pas compter sur un validateur pour vous dire si l'adresse e-mail d'un utilisateur existe réellement: certains FAI donnent des adresses non conformes à leurs utilisateurs, en particulier dans les pays qui n'utilisent pas l'alphabet latin. Plus dans mon essai sur la validation d'email ici: [http://isemail.info/about][2].

Questions connexes