2016-08-29 2 views
0

J'essaie de faire passer les emails en validation en utilisant filter_var. Cependant, je ne suis pas sûr comment empêcher le manuscrit de traiter les données de forme à ma base de données si l'email n'est pas valide.Comment empêcher l'exécution d'un script lorsque le courrier électronique ne passe pas filter_var

Je

$email = $_POST['email']; 
$email = filter_var($email, FILTER_SANITIZE_EMAIL); 
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) { 
    echo("$email is a valid email address"); 
} else { 
    echo("$email is not a valid email address"); 
    exit(); 
    } 

l'email vient évidemment de ce qui a été entré par l'utilisateur et est dans la variable $ _POST. Le script indique que le courriel est valide ou invalide, mais il traite TOUJOURS le script et place les données du formulaire dans ma base de données. Je pensais que mettre "exit()" serait la solution à cela, ou la bonne façon de gérer quand ce n'est pas valide. Il ouvre simplement une nouvelle page où l'impression d'écho montre.

Qu'est-ce qui me manque ou qui ne va pas? Idéalement, je voudrais que le champ de formulaire soit surligné et donne à l'utilisateur une indication qu'il a entré une adresse électronique incorrectement formatée (bien que je sache que c'est un sujet différent et quelque chose qui cloche), mais je fais certainement Je ne veux pas permettre au script de traiter les données dans ma base de données.

+0

Vous filtrez deux fois? Débarrassez-vous de la 2ème ligne de votre script – Farkie

+1

Votre condition est 'if (false === false)' – Kisaragi

+1

Le double négatif était confus, mais je pense que je le comprends maintenant. C'est dans cet exemple de code à W3Schools http://www.w3schools.com/php/filter_validate_email.asp – TecBrat

Répondre

0

La réponse se trouve là où le code de validation a été placé. Au lieu de le placer juste après les variables affichées et avant le code d'insertion SQL, je l'ai mis à la toute fin du script. Les données publiées sont donc entrées dans la base de données avant d'être validées. J'ai maintenant (qui fonctionne) $ name = $ _POST ['name']; $ email = $ _POST ['email'];

$email = filter_var($email, FILTER_SANITIZE_EMAIL); 
    if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) { 
    echo("$email is not a valid email address"); 
    exit(); 
    } else { 
     $msg_to_user = '<br /><br /><h4>Thanks ' . $name . ', we will send you news when appropriate. Take care!</font></h4>'; 
    $name = ""; 
    $email = ""; 
    } 
    // THE SQL SELECT STATEMENT TO ENSURE NO DUPLICATE EMAIL AND THEN THE INSERT STATEMENT TO PUT THE DATA IN THE DATABASE COMES AFTER THE CODE ABOVE 
+0

Désolé, je ne sais pas comment modifier le code de sorte que tout rentre dans la réponse. Il devrait avoir le $ name = $ _ POST ['nom']; $ email = $ _ POST ['email']; en haut de ce code. – jeshy