我有以下PHP代码:
$required_fields = array ('menu_name','visible','position');
foreach($required_fields as $fieldname)
{
if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname]) )
{
$errors [] = $fieldname;
}
}
menu_name
,visible
和position
是通过post方法接收的变量。
当visible
的值为零时,它会在错误数组中创建一个条目。
当0被视为“非空”时,检测变量是否为空的最佳方法是什么?
答案 0 :(得分:8)
来自PHP的manual:
如果var有a,则empty()返回FALSE 非空和非零值。
做这样的事情:
if ( !IsSet ( $_POST['field'] ) || Trim ( $_POST['field'] ) == '' )
这将确保该字段已设置且不包含空字符串
实质上:导致问题的是empty()
而不是IsSet()
答案 1 :(得分:1)
由于用户数据很草率,我使用自定义函数将空格作为非数据处理。听起来这将完全符合您的要求。此函数将“0”视为有效(也称为非空)数据。
function isNullOrEmpty( $arg )
{
if ( !is_array( $arg ) )
{
$arg = array( $arg );
}
foreach ( $arg as $key => $value )
{
$value = trim($value);
if( $value == "" || $value == null )
{
return true;
}
}
return false;
}
请注意它也支持数组,但要求数组中的每个值都包含数据,这可能很有用,因为你可以这样做:
$required = array( $_POST['name'], $_POST['age'], $_POST['weight'] );
if ( isNullOrEmpty($required) )
{
// required data is missing
}
PS:请记住,如果未设置该值,此函数将触发PHP警告,并且没有简单的方法,但您不应该在生产中启用警告。
答案 2 :(得分:0)
如果您想确保存在数组键,可以使用array_key_exists()代替空()
检查将成为is_array()和array_key_exists()的串联,当然是偏执狂
答案 3 :(得分:-1)
你不能只用以下内容添加另一行:
if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname]) )
{
if ($fieldname != 'visible' || $_POST[$fieldname] != 0)
{
$errors [] = $fieldname;
}
}