Php 验证来自阵列的多封电子邮件

Php 验证来自阵列的多封电子邮件,php,arrays,Php,Arrays,我有一个疑问,我不太确定如何才能让它工作 我有一个表单,最终用户可以使用jquery添加多个电子邮件字段,并将每个文本输入放入一个数组中 我创建了一些代码来验证每个数组键,并用数字填充数组以进行验证 以下是验证帖子的代码: // Collect and verify attached email if(isset($_POST["email"])){ // set var for collecting email and store as null $emailfields =

我有一个疑问,我不太确定如何才能让它工作

我有一个表单,最终用户可以使用jquery添加多个电子邮件字段,并将每个文本输入放入一个数组中

我创建了一些代码来验证每个数组键,并用数字填充数组以进行验证

以下是验证帖子的代码:

// Collect and verify attached email
if(isset($_POST["email"])){

    // set var for collecting email and store as null
    $emailfields ="";

    // start verify loop
    foreach($_POST["email"] as $key => $email)
    {
        // Filter var email to comfirm it is an email
        $email = filter_var($email, FILTER_SANITIZE_EMAIL);
         if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false)
        {
            $emailcheckarray[] = 1;
        } else {
            $emailcheckarray[] = 0;
        }
            // Create a string for later
            $emailfields .= $email .",";

        }

    // Verify Array contains value
    if (!in_array('1', $emailcheckarray, true)) 
    {
    $emailverification = 1;
    } else {
    $emailverification = 0;
    }    
}

echo $emailfields;
echo $emailverification;
现在,如果电子邮件有效,它将使用1填充数组$emailcheckarray,具体取决于用户使用的输入数量


是否有一种方法可以让in_数组仅在所有密钥与当前密钥相同的情况下工作?如果其中一个密钥为0,则它仍将输出$emailverification作为1,如果用户输入1封有效的电子邮件,当我希望它为0时,剩余的无效。检查是否为零:

if (in_array('0', $emailcheckarray, true)) {
    $emailverification = 0;
} else {
    $emailverification = 1;
}

如果没有任何零,则表示它们都是1。

检查零的肯定值:

if (in_array('0', $emailcheckarray, true)) {
    $emailverification = 0;
} else {
    $emailverification = 1;
}

如果没有任何零,则表示它们都是1。

如果在任何检查失败的循环期间将验证设置为0,则可以省略数组中的
。因此,从值1开始,因为您还没有失败:

$emailverification = 1; // added
// start verify loop
foreach($_POST["email"] as $key => $email)
{
    // Filter var email to comfirm it is an email
    $email = filter_var($email, FILTER_SANITIZE_EMAIL);
    if (filter_var($email, FILTER_VALIDATE_EMAIL) !== false)
    {
        $emailcheckarray[] = 1;
    } else {
        $emailcheckarray[] = 0;
        $emailverification = 0; // added
    }
    // Create a string for later
    $emailfields .= $email .",";
}

。。。然后在循环结束时得到正确的值。

如果在循环过程中,当任何检查失败时,将验证设置为0,则可以忽略数组中的
。因此,从值1开始,因为您还没有失败:

$emailverification = 1; // added
// start verify loop
foreach($_POST["email"] as $key => $email)
{
    // Filter var email to comfirm it is an email
    $email = filter_var($email, FILTER_SANITIZE_EMAIL);
    if (filter_var($email, FILTER_VALIDATE_EMAIL) !== false)
    {
        $emailcheckarray[] = 1;
    } else {
        $emailcheckarray[] = 0;
        $emailverification = 0; // added
    }
    // Create a string for later
    $emailfields .= $email .",";
}

。。。然后在循环结束时得到正确的值。

您可以使用
array\u map
array\u filter
等函数获取所有有效电子邮件的数组

if (isset($_POST['email'])) {
    $sanitized_emails = array_map(function ($email) {
        return filter_var($email, FILTER_SANITIZE_EMAIL);
    }, $_POST['email']);
    $valid_emails = array_filter($sanitized_emails, function($email) {
        return filter_var($email, FILTER_VALIDATE_EMAIL);
    });
    $emailfields = implode(',', $sanitized_emails);
}
然后,您只需比较两个选项卡的大小

$emailverification = 0;
if (count($emails) == count($valid_emails)) {
    $emailverification = 1;
}

您可以使用
array\u map
array\u filter
等函数获取所有有效电子邮件的数组

if (isset($_POST['email'])) {
    $sanitized_emails = array_map(function ($email) {
        return filter_var($email, FILTER_SANITIZE_EMAIL);
    }, $_POST['email']);
    $valid_emails = array_filter($sanitized_emails, function($email) {
        return filter_var($email, FILTER_VALIDATE_EMAIL);
    });
    $emailfields = implode(',', $sanitized_emails);
}
然后,您只需比较两个选项卡的大小

$emailverification = 0;
if (count($emails) == count($valid_emails)) {
    $emailverification = 1;
}

谢谢,这非常有意义,请注意,我删除对filter_var的第二个调用有点太快了。我没有注意到传递的参数之间的差异。还原了。这似乎比需要的更详细。如果($email!==false)
,那么
if
就不能是
if吗?你在做上面同样的事情…@cale_b,我也这么想,但是看看filter_var:-)的第二个参数,啊!很难看出,但很重要的区别!很好。谢谢,这是一个完美的senseThanks,请注意,我删除对filter_var的第二个调用有点太快了。我没有注意到传递的参数之间的差异。还原了。这似乎比需要的更详细。如果($email!==false)
,那么
if
就不能是
if吗?你在做上面同样的事情…@cale_b,我也这么想,但是看看filter_var:-)的第二个参数,啊!很难看出,但很重要的区别!很好,很好!如何添加$emailcheckarray的填充?也许OP仍然需要它们。。。还请注意,原始代码连接了经过清理的电子邮件,而不仅仅是有效的电子邮件。我假设
$emailcheckarray
只是一个中间变量,但您可以使用与获取
$sanitized\u emails
相同的方法获取它:只需将返回行更改为
返回筛选器变量($email,filter\u VALIDATE\u email)?1 : 0;不错!如何添加$emailcheckarray的填充?也许OP仍然需要它们。。。还请注意,原始代码连接了经过清理的电子邮件,而不仅仅是有效的电子邮件。我假设
$emailcheckarray
只是一个中间变量,但您可以使用与获取
$sanitized\u emails
相同的方法获取它:只需将返回行更改为
返回筛选器变量($email,filter\u VALIDATE\u email)?1 : 0;