PHP - 如果语句有问题。 0,NULL和“”之间的区别

时间:2012-03-01 13:11:01

标签: php arrays function if-statement

我有一系列网站选项。

然后我有一个函数来验证我的用户使用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相关的问题。

1 个答案:

答案 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;
};    

感谢您的帮助!