2016-08-29 5 views
0

Ich versuche, die E-Mails mit filter_var validieren zu lassen. Ich bin mir jedoch nicht sicher, wie ich verhindern kann, dass das Skript die Formulardaten in meine Datenbank verarbeitet, wenn die E-Mail nicht gültig ist.So verhindern Sie, dass ein Skript ausgeführt wird, wenn die E-Mail nicht gefiltert wird filter_var

Ich habe

$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(); 
    } 

die E-Mail offensichtlich herkommt, was vom Anwender eingegeben in und in dem $ _POST Variable. Das Skript zeigt die E-Mail als gültig oder ungültig an, aber sie verarbeitet das Skript NOCH und speichert die Formulardaten in meiner Datenbank. Ich dachte, dass das Setzen von "exit()" die Lösung dafür sein würde, oder die richtige Art zu handhaben, wenn es nicht gültig ist. Es öffnet einfach eine neue Seite, auf der der Echo-Druck angezeigt wird.

Was vermisse ich oder mache ich falsch? Idealerweise möchte ich das Formularfeld hervorheben und dem Benutzer einige Hinweise geben, dass sie in einer falsch formatierten E-Mail-Adresse eingegeben haben (obwohl ich weiß, dass das ein anderes Thema ist und ein bisschen Schnickschnack), aber ich mache es auf jeden Fall Ich möchte nicht zulassen, dass das Skript die Daten in meine Datenbank verarbeitet.

+0

Sie filtern zweimal? Befreie die 2. Zeile deines Skripts – Farkie

+1

Deine Bedingung ist 'if (false === false)' – Kisaragi

+1

Das doppelte Negativ war verwirrend, aber ich denke ich verstehe es jetzt. Es ist in diesem Beispielcode bei W3Schools http://www.w3schools.com/php/filter_validate_email.asp – TecBrat

Antwort

0

Die Antwort liegt darin, wo der Validierungscode platziert wurde. Anstatt es RECHTS NACH den veröffentlichten Variablen und vor dem SQL-Einfügecode zu platzieren, lege ich es am Ende des Skripts ab. Die geposteten Daten gingen also in die Datenbank, bevor sie validiert werden können.

So jetzt habe ich (was funktioniert) $ 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

Sorry, ich weiß nicht, wie ich den Code bearbeiten soll, damit alles in die Antwort passt. Es sollte die haben $ name = $ _ POST ['name']; $ email = $ _ POST ['email']; an der Spitze dieses Codes. – jeshy

Verwandte Themen