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