如果我在没有验证的情况下提交,我正在使用字段数组并将数据保存到数据库而没有问题。
我遇到的麻烦是在使用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 );
}
}
答案 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 );
}
我不会这样做,但我选择使用您提供的代码回答您的问题,而不是提供完全不同的内容。
尽量避免使用"否则"在早期返回(或在我的示例中,停止执行)是一种选择的情况下。它通过提供所需结果的清晰路径来帮助清理代码。