php多变量验证

时间:2014-07-04 20:54:26

标签: php html css

我需要验证6个变量以查看它们是否为空,如果是这样我想以某种方式记录哪些是空的,这样我就可以警告我的网站用户哪些仍需要填写信息。到目前为止,我只能警告他,他有字段填写这段代码:

if (empty($email) || empty($emailConf) || empty($password) || empty($passwordConf) || empty($firstname) || empty($lastname)){
$alert = "Every field needs to be filled with information!";
}

我也觉得这种方法有点不专业,所以如果你们有任何想法让它变得更好并且也解决了我上面提到的问题,请随时提出建议!

6 个答案:

答案 0 :(得分:1)

我认为您的信息来自POST表单。如果是这样的话。

<?php
$ok = true;
$invalid_fiels = array();
foreach($_POST as $key => $value) {
    if (empty($value)) {
        $ok = false;
        $invalid_fields[] = $key;    
    }
}

if (!$ok)
    echo "Every field needs to be filled with information!";
?>

数组invalid_fields将包含所有无效字段。

答案 1 :(得分:1)

使用array_filter做@Valentin Mercier建议的另一种方法。默认情况下,array_filter会删除数组中的所有空值,但您可以使用回调来反转该行为,该回调会为空数组条目返回true。 (回调函数返回true的每个值都保存在返回的数组中。)

使用循环或过滤功能的主要原因是您可以添加或删除一些输入,但检查仍然有效。

$emptyFields = array_filter( $_POST, function( $value ) {
    return empty( $value );
} );

if( !empty( $emptyFields ) ) {
    echo sprintf(
        'The following fields were missing: "%s"',
        implode( '", "', array_keys( $emptyFields ) )
    );
}

请参阅:http://php.net/manual/en/function.array-filter.php

答案 2 :(得分:1)

$values = array(
                'name' => 'name',
                'email' => 'email',
                'empty' => '',
                'null'  => null,
                'zero'  => 0,
                'strZero'=>'0'
        );

var_export( array_diff_key( $values, array_filter( $values ) ) );

输出

array(
'empty' => '',
'null' => null,
'zero' => 0,
'strZero' => '0'
)

如果您只想让名字在结果上使用array_keys(),那么您可以内爆(&#39;,&#39;,$ key)。

var_export( implode(', ' , array_keys( array_diff_key( $values, array_filter( $values ) ) ) ) );

输出

'empty, null, zero, strZero'

解释,

array_filter()删除空元素,
array_diff_key()返回一个数组,其中包含array1中不在array2中的所有键 array_keys()仅返回数组中的键 implode(),用文本分隔符破坏数组。

答案 3 :(得分:0)

你可以这样做一个嵌套的if语句,这可以确定哪些是空的并告诉用户

if (empty($email) || empty($emailConf) || empty($password) || empty($passwordConf) || empty($firstname) || empty($lastname)){
$alert = "Every field needs to be filled with information!";

if(empty($email)){$ErrorVariable = "Email is empty!";}

if(empty($emailConf)){$ErrorVariable = "EmailConf is empty!";}

//Do this for everything you don't want empty, if the field is not empty, the nested if statement won't get called
}

答案 4 :(得分:0)

试试这个;)

// Just for test ;)
$_POST = array(
    'email'     => 'foo',
    'emailConf' => '',
);

$required_fields = array('email', 'emailConf', 'password');
$empty_fields = array();

array_walk(
    $required_fields,
    function ($field) use ($empty_fields) {
        if(!isset($_POST[$field]) || trim($_POST[$field]) == ''){
            $empty_fields[] = $field;
        }
    }
);

if(!empty($empty_fields)) {
    echo 'The following fields where missing: ';
    echo implode(', ', $empty_fields);
}

结果: The following fields where missing: emailConf, password

答案 5 :(得分:-1)

即使最好的方法是在提交之前检查输入 (使用javascript),要做你想要的,你已经有了必要的数据: 变量本身表明哪些是空的,所以:

$message=""; //initialize
if(empty($var1)) $message.="var1 is empty<br/>";
if(empty($var2)) $message.="var2 is empty<br/>";
...//And so on... 
echo $message;

你可以更好地设计它...