2

可能重复:
检查数组是否仅包含数字(整数)的更简洁方法
PHP 检查是否为空字段

我有提交 10 个字段的表单,其中 7 个应该填写,这是我现在在 PHP 中检查它的方式:

if (!$name || !$phone || !$email || !$mobile || !$email || !$state || !$street || !  $city) {
        echo '<div class="empty_p">You have empty fields!!!</div>';}
else{
        //process order or do something
}

我的问题是:有没有更简单的方法来做到这一点?因为有时我有更多的字符串要检查 (12-15)

4

7 回答 7

5

另一种可能:

$elements = array($name, $email, $mobile);
$valid = true;

foreach ($elements as $element) {
    if (empty($element)) {
        $valid = false;
    }
}

if ($valid) {
    // complete
} else {
    // alert! some element is empty
}
于 2012-06-08T14:20:43.950 回答
3

像这样的东西?

foreach($_POST as $key => $value) 
{
    if (empty($_POST[$key]))
    {
        echo '<div class="empty_p">'.$_POST[$key].' is empty.</div>';
    }
}
于 2012-06-08T14:16:39.617 回答
2

最好具体说明这些数据的预期位置,例如$_POST

if (!isset($_POST['name'], $_POST['phone'], $_POST['email'], $_POST['mobile'], $_POST['state'], $_POST['street'], $_POST['city'])) {
    // something is up
}

您可以通过使用所需的字段名称创建一个数组来稍微缩短此代码:

$required_fields = array('name', 'phone', 'email', 'mobile', 'state', 'street', 'city');

然后可以将“检查存在”代码简化为:

foreach ($required_fields as $f) {
    if (!isset($_POST[$f])) {
        // something is up
    }
}

更好的方式™

但是,您应该认真考虑将存在检查验证/清理检查结合起来。PHP 提供了一系列过滤函数,您可以使用它们来验证和/或清理输入变量。例如,要获得与上述等效的行为:

$required_fields = filter_input_array(INPUT_POST, array(
    'name' => FILTER_UNSAFE_RAW,
    'email' => FILTER_VALIDATE_EMAIL,
));

if (is_null($required_fields) || in_array(null, $required_fields, true)) {
    // some fields are missing
}

存在但未通过验证的字段将设置为false,因此这是您检测此类事件的方式:

foreach ($required_fields as $name => $value) {
    if (false === $value) {
        // field $name failed validation (e.g. bad email format)
    } elseif (!strlen(trim($value))) {
        // field is empty
    }
}
于 2012-06-09T16:15:06.627 回答
1

您可以编写 Foreach 循环

  foreach($_POST as $key => $value) 
    {
        if (!isset($_POST[$key]) || empty($_POST[$key])
        {
            echo '<div class="something">You have empty fields!!!</div>';
        }
    }
于 2012-06-08T14:17:43.217 回答
1

最好的方法是创建某种形式的验证器。但是,您可以使用此功能:

<?php
    function isAnyEmpty() {
        $total = 0;
        $args = func_get_args();
        foreach($args as $arg)
        {
            if(empty($arg)) {
                return true;
            }
        }

        return false;
    }
    $var1 = 1;
    $var2 = 'test';
    $var3 = '';

    if(isAnyEmpty($var1, $var2, $var3)) {
        echo 'empty fields!';
    }
?>
于 2012-06-08T14:24:34.497 回答
1

您可以尝试创建一个可以重用且更精确的通用验证类。

一些伪代码:

<?

class validateFields {
    $validators = array(
        "name" => array(
            "empty" => array(
                "rule"          => "some regex",
                "errorMessage"  => "name may not be empty"
            ),
            "noNumbers" => array(
                "rule"          => "some regex",
                "errorMessage"  => "No numbers are allowed in the name field"
            )
        ),
        "otherVariable" => array(
            "atLeast50chars" => array(
                "rule"          => "some regex",
                "errorMessage"  => "This field must be at least 50 chars"
            )
        )
    );


    public function Validate($post){
        $errors = array();

        foreach($_POST as $key => $value){
            if(!array_key_exists($key, $validators)) {
                continue;
            }

            foreach($validators[$key] as $validator) {
                if(!preg_match($validator["rule"], $value) {
                    $errors[$key] = $validator["errorMessage"];
                    break;
                }
            }
        }

        return $errors;
    }
}


?>

然后在您的代码中,您可以执行以下操作:

$errors = Validate($_POST);
foreach($error as $errorMessage) {
    echo $errorMessage . "</br>";
}

当然你可以想象一下,在相关输入字段的正下方/旁边添加带有类的 div,然后将 $errorMessage 加载到那里。我敢肯定那里有很多例子:)

于 2012-06-08T14:42:35.973 回答
-1
<input type="text" name="required[first_name]" />
<input type="text" name="required[last_name]" />
...


$required = $_POST['required'];
foreach ($required as $req) {
   $req = trim($req);
   if (empty($req))
      echo 'gotcha!';
}

/* 更新 */

好的!小伙伴们,轻松...

你可以让它更安全,就像我们程序员为即将到来的数据所做的那样,就像我们所做的那样进行类型转换,像$id = (int) $_GET['id'],像$username = (string) addslashes($_POST['username'])等等……;

$required = (array) $_POST['required'];

然后,任何来自 post 字段的东西都让它们来,这段代码只是寻找它需要的东西。这就对了!呃……

于 2012-06-08T14:15:49.770 回答