【问题标题】:PHP - if statement trouble. Difference between 0, NULL and " "PHP - if 语句麻烦。 0、NULL 和“”之间的区别
【发布时间】:2012-03-01 13:11:00
【问题描述】:

我有一系列网站选项。

然后我有一个函数可以验证我的用户使用 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 语句然后提交表单,它会将新数据发送到我编辑的选项并删除所有其他选项(因为它们的 $inputs 是空的)。

我不确定我应该做什么样的检查来区分函数生成的空 $input 和用户操作创建的空 $input?

我正在使用的 settings_validation() 函数是另一个名为 register_setting() 的函数的回调,我在这里问是因为不是在 WPSE 上,而是与 PHP 相关的问题。

【问题讨论】:

  • 你循环了$settings,但你从来没有在循环中使用它......你只引用$input$valid_input$option,索引$id......在那里缺少一些代码?有些东西没有加起来......
  • 一切都很好,$id = $setting['id'] 仅此而已。
  • 如果不知道所有变量的来源,就很难判断。如果表单要编辑已经存在的内容,那么您肯定会使用该信息填充它,如果它返回为空,那是因为用户已将其删除?

标签: php arrays function if-statement


【解决方案1】:

答案非常简单且非常棘手:

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

感谢您的帮助!

【讨论】:

  • 是的,这对任何人都没有意义。 $type 不知从何而来。 $id也是如此。
  • $id$type 都只是 $settings 数组的元素,请参阅我上面的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多