检查数组元素是否为空

时间:2017-10-18 20:05:13

标签: php forms

我有一个简单的PHP表单,我希望改进验证,以帮助从机器人提交空表格提交。

我有以下数组,其中包含来自另一页的输入名称。

$expected = array('Project-Inquiry','Name','Company-Name','Phone-Number','Email');

我想验证这些元素实际上是否包含内容,因为它们已经在上一页用JS验证过了。 JS只有在启用时才会很好,所以我想在这里添加额外的验证层,以便在它被禁用时使用。

我尝试了以下内容:

$expected = array_filter($expected);

if (!empty($expected)) {
// Do Something
}

我也尝试了以下内容:

$error = false;
foreach($expected as $field) {
    if (empty($_POST[$field])) {
        $error = true;
    }
}
if ($error) {
    // Do Something
}

我似乎不尽如人意。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

如果你想打击机器人

  1. 创建人类看不到的隐藏输入,机器人会填充它。在做任何事情之前,您需要检查输入。如果输入填充,则表示机器人发送的表格不是人。

  2. 在您显示表单时创建一个当前时间的会话,发布时检查时差。如果它小于3秒,那就是机器人。

  3. 使用验证码系统。

  4. 如果您想验证输入

    不要像你在问题上所做的那样进行验证。您应该尝试使用适当的验证方法验证每一个。例如,您应该如何验证电子邮件与名称完全不同。

    例如,对电子邮件执行此操作:

    $email = (isset($_POST['email']) && is_string($_POST['email']))? trim($_POST['email']) : '';
    $email_error = (filter_var($email,FILTER_VALIDATE_EMAIL))? true : false;
    
    名称的

    是不同的:

    $name = (isset($_POST['name']) && is_string($_POST['name']))? trim($_POST['name']) : '';
    $name_error = (strlen($name)>20 || strlen($name)<3)? true : false;
    

    您可以为我的示例添加更多过滤器。

答案 1 :(得分:0)

让您的预期数据为数组

$expected = ['name', 'email', 'mobile'];

让表单帖子值为$ _POST

foreach($_POST as $key => $value) {
     if (empty($value) && in_array($key, $expected)) {
        if ($value=='') {
            echo $key. ' is should not be empty'."<br/>";
           }   
    }
}

您可以按预期获得结果

HTML表格

<form action="" method="post">
Name    <input type="text" name="name"><br>
email   <input type="text" name="email"><br>
mobile<input type="text" name="mobile">
    <input type="submit" value="Submit">
</form>

答案 2 :(得分:0)

您是否考虑过使用库进行验证?

我建议你使用https://laravel.com/docs/5.5/validation,这样你就可以验证更复杂的规则,而且非常清楚。