检查多个字符串是否为空

时间:2012-06-08 14:10:09

标签: php

  

可能重复:
  More concise way to check to see if an array contains only numbers (integers)
  PHP checking if empty fields

我有提交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)

7 个答案:

答案 0 :(得分:4)

另一种可能性:

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

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

if ($valid){
    // complete
} else {
    // alert! some element is empty
}

答案 1 :(得分:3)

这样的东西?

foreach($_POST as $key => $value) 
{
    if (empty($_POST[$key]))
    {
        echo '<div class="empty_p">'.$_POST[$key].' is empty.</div>';
    }
}

答案 2 :(得分: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提供了一系列filter functions函数,可用于验证和/或清理输入变量。例如,要获得与上面相同的行为:

$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
    }
}

答案 3 :(得分:1)

你可以编写Foreach循环

  foreach($_POST as $key => $value) 
    {
        if (!isset($_POST[$key]) || empty($_POST[$key])
        {
            echo '<div class="something">You have empty fields!!!</div>';
        }
    }

答案 4 :(得分: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!';
    }
?>

答案 5 :(得分: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加载到那里。 我确信那里有很多例子:)

答案 6 :(得分:-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!';
}

/ * update * /

OK!伙计们,简单......

您可以使用类型转换来提高安全性,就像我们所有程序员为即将推出的数据所做的那样,例如$id = (int) $_GET['id'],如$username = (string) addslashes($_POST['username'])等等......

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

然后,来自帖子字段的内容让他们来了,这段代码只是寻求它所需要的东西。 这就对了!呃...