【问题标题】:PHP arrays validationPHP 数组验证
【发布时间】:2020-03-08 15:53:43
【问题描述】:

我有一个在提交时得到验证的表单。我确保某些字段不为空,日期字段具有有效格式等。我有一个复选框块,旁边有一个文本输入。

Option 1
<input type="checkbox" name="jobBonusId[]" value="1"  />
Option 2
<input type="checkbox" name="jobBonusId[]" value="2"  />
Option 3
<input type="checkbox" name="jobBonusId[]" value="3"  />

Amount 1
<input type="number" name="jobBonusAmount[]" step="0.01" value="0.00" />
Amount 2
<input type="number" name="jobBonusAmount[]" step="0.01" value="0.00" />
Amount 3
<input type="number" name="jobBonusAmount[]" step="0.01" value="0.00" />

因此,如果选中任何 jobBonusId[] 复选框,则会创建一个数组。现在,我想验证 jobBonusAmount[] 是否选中了它的 -parent- 复选框并确保它不为空或不等于 0.00。

到目前为止,我有以下代码:

// Run the script
if (isset($_POST['addJobRecord']) && $_POST['addJobRecord']=='oTzm50xfm') {
   // Validate date format
   if (!validateDate($jobDateStart) || !empty($jobDateEnd) && !validateDate($jobDateEnd)) {
      // Show the form
      $displayContent = $displayForm;
   // Validate data dates
   } else if ($jobTimeIn>$jobTimeOut) {
      // Show the form
      $displayContent = $displayForm;
   // Validate bonus values
   } else if (!empty($jobBonusId) && is_array($jobBonusId)) {
      // At least one jobBonusId checkbox was checked
      // Make sure its child input is not empty

      ... HERE'S WHERE I'M STUCK ...

   } else {
      // Everything looks good
      // Add record to database
   }
}

有什么想法可以实现吗?

非常感谢!

【问题讨论】:

  • 如果您在前端创建关联数组,通过隐藏字段发送该数组并为每个jobBonusId 验证jobBonusAmount,这样会容易得多。

标签: php arrays if-statement


【解决方案1】:

您可以使用数组键,并通过jobBonusId键检查child:

foreach ($jobBonusId as $key => $bonusId) {
    if (!empty($bonusId)) {
        if (!empty($jobBonusAmount[$key])) { // check a child
            // if child is filled
        } else {
            // not filled
        }
    }
}

这意味着$jobBonusId数组与$jobBonusAmount数组相同

【讨论】:

  • 我已经尝试过了,但不知道如何退出父 else if (!empty($jobBonusId) && is_array($jobBonusId))。看://启动错误计数 $err = 0; // 循环 trhu 数组值 foreach ($jobBonusId as $id=>$val) { // 验证奖金金额 if ($jobBonusAmount[$id]=='0.00') { // 添加计数 $err++; } } // 验证发现的错误 if (!empty($err)) { // 显示表单 $displayContent = $displayForm; }
  • @CarlosCharles 如果其中一个 cild 已填满,请使用 break。您还可以在 foreach 之前设置标志(变量),如果至少有一个填充 - 将标志设置为 true
猜你喜欢
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多