2016-08-29 15 views
0

filter_varを使用して電子メールの検証に合格させようとしています。ただし、電子メールが有効でない場合、スクリプトがフォームデータをデータベースに処理しないようにする方法がわかりません。電子メールがfilter_varを渡さないときにスクリプトが実行されないようにする方法

私は、電子メールは明らかにユーザによって入力されたものから来ていると$ _POST変数である

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

を持っています。スクリプトDOESは電子メールを有効または無効として表示しますが、スクリプトをまだ処理していて、フォームデータをデータベースに格納します。私は "exit()"を置くことがこれに対する解決策であるか、またはそれが有効でないときの適切な対処方法であると考えました。エコープリントが表示される新しいページを開くだけです。

私は何が間違っているのか、間違っていますか?理想的には、フォームフィールドをハイライト表示し、間違ってフォーマットされた電子メールアドレスで入力したことをユーザーに伝えたいと思います(ただし、これは別のトピックで、多少の鐘や笛のタイプです)。スクリプトがデータを自分のデータベースに処理できるようにしたくありません。

+0

2度フィルタリングしていますか?あなたのスクリプトの2行目を取り除く – 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']を持つ必要があります。 $ email = $ _ POST ['email'];そのコードの先頭に – jeshy

関連する問題