Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php多变量验证_Php_Html_Css - Fatal编程技术网

php多变量验证

php多变量验证,php,html,css,Php,Html,Css,我需要验证6个变量,看看它们是否为空,如果是这样,我想以某种方式保留一个记录,哪些是空的,这样我就可以警告我的网站的用户,哪些他仍然需要填写信息。到目前为止,我只能警告他,他需要用以下代码填充字段: if (empty($email) || empty($emailConf) || empty($password) || empty($passwordConf) || empty($firstname) || empty($lastname)){ $alert = "Every field ne

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

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

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

您可以执行嵌套的
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
}

我想你的信息来自一张邮寄表格。如果是这样,就这样做

<?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!";
?>


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

即使最好的方法是在提交之前检查输入(使用javascript),要执行所需操作,您已经拥有必要的数据: 变量本身表示其中哪一个为空,因此:

$message=""; //initialize
if(empty($var1)) $message.="var1 is empty<br/>";
if(empty($var2)) $message.="var2 is empty<br/>";
...//And so on... 
echo $message;
$message=”“//初始化
if(empty($var1))$message.=“var1为空
”; if(empty($var2))$message.=“var2为空
”; ……等等。。。 回声$信息;

你可以设计得更好…

按照@Valentin Mercier的建议,使用
array\u filter
。默认情况下,
array\u 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 ) )
    );
}
请参阅:

试试这个;)

结果:
缺少以下字段:emailConf、密码

$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'
)
'empty, null, zero, strZero'
如果只需要名称,请对结果使用数组_keys(),然后可以内爆(“,”,$keys)

输出

array(
'empty' => '',
'null' => null,
'zero' => 0,
'strZero' => '0'
)
'empty, null, zero, strZero'
解释一下,

array_filter()删除空元素,
array_diff_key()返回一个数组,该数组包含array1中不在array2中的所有键
array_keys()仅返回数组中的键

内爆()?thanks@aconstancio请再读一遍答案。提示:查看
$invalid_字段
我得到了无效字段,但它们仍然没有准备好显示给用户,因为我只得到它的名称,而它的名称没有被“处理”。例如,我想做的是显示一个列表,如:空字段:名称年龄等,但我现在还不能,我所能做的就是例如:空字段:txtName txtAge等当浏览此数组和
echo
每个无效字段时,不必预先考虑显示/样式设置。首先,应该实现一个验证用户输入的逻辑。错误消息输出应单独处理。例如,收集一个数组中的所有空字段(即它们的名称)并在模板中使用此数组。Epic回答,太糟糕了,我今天已经达到了我的最高投票数,我会很高兴地对这一个进行投票。我更喜欢数组_diff_键,请看我的答案,我就是这么做的。@ArtisiticPhoenix是的,我看到了你的答案,你正在使用两个函数调用和两个内部循环来实现相同的结果;-)@feeela是真的,但我不认为性能会成为一个问题(在1个内部循环之间,因为这才是真正的区别),我会跳过对sprintf的函数调用,因为简单的连接也会这样做。你的我看到3个函数调用一个循环,我的2个函数调用2个循环,(不算内爆和数组_键,还有你的空)-但现在我们正在分裂头发+1,因为我说过我会:)