【问题标题】:How to prevent a script from running when email does not pass filter_var电子邮件未通过 filter_var 时如何防止脚本运行
【发布时间】:2017-01-05 22:06:22
【问题描述】:

我正在尝试使用 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()”将是解决这个问题的方法,或者是在它无效时处理的正确方法。它只是打开一个显示回显打印的新页面。

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

【问题讨论】:

  • 您要过滤两次?摆脱脚本的第二行
  • 你的条件是if(false === false)
  • 双重否定令人困惑,但我想我现在明白了。它位于 W3Schools w3schools.com/php/filter_validate_email.asp 的示例代码中
  • 我不明白。我从 W3Schools 那里得到了那个脚本(我知道它的代表不好),我不明白为什么它会是 !filter_var。但我已经把它拿出来(第二行),它仍然回显“不是有效的电子邮件地址”,但它仍然将数据放入数据库中。如果它不是有效的(格式正确的)电子邮件地址,我该如何防止它这样做?我还更新了问题中的代码。
  • 你没有向我们展示你的数据库代码。

标签: php filter-var


【解决方案1】:

答案在于验证码的放置位置。我没有把它放在发布的变量之后和 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

【讨论】:

  • 对不起,我不知道如何编辑代码以使其全部适合答案。它应该有 $name=$_POST['name']; $email=$_POST['email'];在该代码的顶部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 2022-01-08
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多