English 中文(简体)
验证数组中的每个元素?
原标题:
  • 时间:2009-01-23 16:06:37
  •  标签:

我目前正在尝试通过服务器端验证表单,它的工作方式是将所有数据放入数组中,以表单字段作为键,以字段数据作为值,但是我需要检查所有键是否与值相关联,否则我希望停止提交并让用户编辑其详细信息,然后重新提交,是否有快速检查可以运行而不需要分解数组并进行检查,或者在将其放入数组之前使用开关或大量if语句进行检查?

最佳回答

有一个选择是两者兼而有之。

使用字段名作为键来创建一个分离的字段选项数组。

$fieldTypes = array( nameFirst  =>  name ,
                     nameLast   =>  name ,
                     phone      =>  phone ,
                     email      =>  email );
foreach($input as $key => $value) {
    switch($fieldTypes[$key]) {
        case  name :
            //run $value against name validation
            break;
        case  phone :
            //run $value against phone validation
            break;
        case  email :
            //run $value against email validation
            break;
        default:
            //code here for unknown type
    }
}

现在,它可以以任何方式使用,并很容易扩展,以包括字段是否必需或错误消息等信息。通过将$fieldTypes数组转换为多维数组,或包含数据的对象数组。

如果您决定添加一个字段,可以不用更改太多验证代码。

问题回答

Sico87,

更多的情况下,您不想同时测试所有字段。例如,您可能有一个联系人字段,其中包含一个不是强制性的电话号码条目选项,因此因此原因拒绝提交可能会有问题。

在很多情况下,单独测试您的领域会更容易,这样您就可以给每个领域都特别关注它所需的注意事项。您想要特别关注电子邮件地址,以及特别关注生日。

长期来看,平等对待所有人可能会引起非常严重的问题。

function fieldEmpty($value) {
    return trim($value) ==   ;
}

if (count(array_filter($array,  fieldEmpty ))) {
    die( bad );
}

这个怎么样? (Zhè ge zěn me yàng?)

<?php
$arrayFilled = true;
foreach($array as $key=>$value) {
    $arrayFilled = trim($value) ==    ? false : $arrayFilled;
    if($arrayFilled === false) { break; }
}
if($arrayFilled === false) {
    echo "missing data";
}
else {
    echo "filled array";
}

你可能需要检查的不仅仅是空字符串,但我会留给你。





相关问题
热门标签