0

我正在尝试使用 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 变量中。该脚本确实将电子邮件显示为有效或无效,但它仍然处理脚本并将表单数据放入我的数据库中。我认为放置“exit()”将是解决此问题的方法,或者是在它无效时处理的正确方法。它只是打开一个显示回显打印的新页面。

我错过了什么或做错了什么?理想情况下,我希望表单字段突出显示并给用户一些指示,表明他们输入了格式不正确的电子邮件地址(尽管我知道这是一个不同的主题,有点花里胡哨的东西),但我当然会不想让脚本将数据处理到我的数据库中。

4

1 回答 1

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
于 2016-08-29T20:18:44.290 回答