当只有没有错误时,PHP表单使用foreach和store值进行验证

时间:2015-10-20 16:25:33

标签: php validation foreach

如果我在没有验证的情况下提交,我正在使用字段数组并将数据保存到数据库而没有问题。

我遇到的麻烦是在使用update_setting( $optionname, $optionvalue );保存任何单个字段数据之前检查foreach迭代中是否存在错误

当前代码正在保存所有字段的数据,但错误为1。那么有没有办法首先验证所有字段,如果没有单个错误,只存储到数据库。否则在页面上拍摄错误信息。

$errors = [];
foreach ( $optionnames as $optionname ) {
    $optionvalue = get_post_field( $optionname );

    // check the field if not set
    if ( get_post_field( 'test' ) == '' ) {
        $errors['test'] = 'Test field is required';
    }

    /**
     * all loop items only should be add/update if there is not single error
     * If any single error occure than it shold not save any single field data
     */
    // add/update settings
    elseif ( empty( $errors ) ) {
        update_setting( $optionname, $optionvalue );
    }
}

2 个答案:

答案 0 :(得分:1)

琐碎但可能有效:)

option[record.field] for option in vm.brgFilterDataOptions

答案 1 :(得分:1)

为什么不运行一个查询,而不是每次迭代都使用UPDATE查询来访问数据库?无论如何,如果将代码分解为两个foreach循环,就可以实现目标,如下所示:

// first loop validates each option
$errors = [];
foreach($optionNames as $optionName){
     $optionValue = get_post_field($optionName);

     if( strlen(trim($optionValue)) == 0 ){
         $errors[] = sprintf("%s field is required!", $optionName);
         // you could break here if you do not want to accumulate error messages
     }
}

// if any errors were found, halt execution and output error messages
if( count($errors) > 0){
   $errorMessages = implode(",", $errors);
   die("Cannot save due to the following errors: " . $errorMessages);
}

// this will only execute if no errors were found
foreach($optionNames as $optionName){
    $optionValue = get_post_field($optionName);
    update_setting( $optionName, $optionValue );
}

我不会这样做,但我选择使用您提供的代码回答您的问题,而不是提供完全不同的内容。

尽量避免使用"否则"在早期返回(或在我的示例中,停止执行)是一种选择的情况下。它通过提供所需结果的清晰路径来帮助清理代码。