我有一系列网站选项。
然后我有一个函数来验证我的用户使用foreach循环提交的所有数据。你不会知道大多数变量来自哪里,但在这种情况下这并不重要:
function settings_validation($input) {
$settings = my_array();
foreach ($settings as $setting) {
//this function leaves the old field's value if there's no input
if($type == 'something' && empty($input[$id])) {
$valid_input[$id] = $option[$id];
}
//this function updates the field if input is not NULL
else if($type == 'something' && !empty($input[$id])) {
$valid_input[$id] = $input[$id];
}
return $valid_input;
};
$ input是提交后生成的所有表单字段的数组,如果字段为空,则其值为“”。
现在,麻烦来了。
当我想要删除其中一个字段时,这是不可能的 - 当我在该字段中没有留下任何数据并提交表单时,它不发送数据并始终触发第一个if语句并在擦除之前将字段保留在该状态。
如果我删除第一个if语句然后提交表单,它会将新数据发送到我编辑的选项并删除所有其他选项(因为他们的$输入为空)。
我不确定应该做哪种检查来区分函数生成的空$输入和用户操作创建的空$ input之间的区别?
我正在使用的settings_validation()函数是一个名为register_setting()的其他函数的回调,我在这里问,因为不是在WPSE上它是与PHP相关的问题。
答案 0 :(得分:0)
答案非常简单且非常棘手:
function settings_validation($input) {
$settings = my_array();
foreach ($settings as $setting) {
if($type == 'something' && empty($input[$id])) {
//nothing here and everything is fine
}
else if($type == 'something' && !empty($input[$id])) {
$valid_input[$id] = $input[$id];
}
return $valid_input;
};
感谢您的帮助!