2016-08-29 7 views
0

Я пытаюсь выполнить проверку электронной почты с помощью filter_var. Тем не менее, я не уверен, как предотвратить скрипт от обработки данных формы в моей базе данных, если письмо недействительно.Как предотвратить запуск скрипта, когда электронная почта не проходит filter_var

У меня есть

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

электронной почты явно исходит из того, что было введено в пользователем и находится в переменной $ _POST. Сценарий ДОЛЖЕН показать, что письмо является допустимым или недействительным, однако STILL обрабатывает скрипт и помещает данные формы в мою базу данных. Я думал, что установка «exit()» будет решением этого или правильным способом обработки, когда это недействительно. Он просто открывает новую страницу, на которой отображается эхо-печать.

Что мне не хватает или что-то не так? В идеале я хотел бы, чтобы поле формы выделило и дало пользователю некоторые указания на то, что они ввели неверно отформатированный адрес электронной почты (хотя я знаю, что это другая тема, а иногда и характерный тип), но я, безусловно, не хотите, чтобы сценарий обрабатывал данные в моей базе данных.

+0

Вы фильтруете дважды? Избавьтесь от второй строки вашего скрипта – Farkie

+1

Ваше условие 'if (false === false)' – Kisaragi

+1

Двойной негатив был сбивчивым, но я думаю, что сейчас понимаю. Это в этом примере кода в W3Schools http://www.w3schools.com/php/filter_validate_email.asp – TecBrat

ответ

0

Ответ заключается в том, где был установлен код проверки. Вместо того, чтобы поместить его вправо после опубликованных переменных и до кода вставки SQL, я помещаю его в самый конец скрипта. Таким образом, опубликованные данные попадают в базу данных, прежде чем они могут быть проверены.

Итак, у меня есть (который работает) $ 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

Извините, я не знаю, как отредактировать код, чтобы он все вписывался в ответ. Он должен иметь значение $ name = $ _ POST ['name']; $ Электронная почта = $ _ POST [ 'электронная почта']; в верхней части этого кода. – jeshy

 Смежные вопросы

  • Нет связанных вопросов^_^