【问题标题】:Require dynamic fields on form需要表单上的动态字段
【发布时间】:2013-10-25 07:18:59
【问题描述】:

快速提问。

我有一个表单,其中包含配对的动态复选框和文本框。当我提交表单并打印出 $_POST 信息时,这就是我得到的。

    Array
(
    [chkname_156] => chkname_156
    [txtID_156] => 
    [chkname_157] => chkname_157
    [txtID_157] => 
    [doChooseAppSvc] => doChooseAppSvc
)

正如您在上面看到的,复选框已被选中,但 txtID(s) 为空。我想要完成的是这个。如果存在复选框,这意味着它们已被选中,但文本框为空,我需要提醒用户。由于每个都是动态的,因此下划线后面的数字会发生变化,但名称的开头保持不变。

我认为,通过执行以下操作,我已经获得了一半的解决方案。我正在使用 preg_grep 创建一组已选中的复选框。这是那个代码。

$pm = preg_grep("/^chkname.*/", $p);

现在,我被困住了。任何帮助将不胜感激。

【问题讨论】:

    标签: php dynamic checkbox


    【解决方案1】:

    我建议在您的表单中使用数组。
    它可能更容易比较值。

    例如:

    <input type="checkbox" name="chkname[<?=$id?>]" value="" />
    <input type="text" name="txtID[<?=$id?>]" value="" />
    

    然后,对于每次迭代,您可以检查:

    if (isset($posted['chkname'][$id]) && $posted['txtID'][$id]=='') {
       // alert the user
    }
    

    编辑:

    这是一个检查输入的循环示例:

    // loop through all text inputs
    foreach ($posted['txtID'] as $id => $txtID_value) {
    
      // for each text input, validate against checkbox with the same $id
      if (isset($posted['chkname'][$id]) && $txtID_value!='') {
    
        // output an error message
        echo "<p>You checked box #$id but didn't fill in text input #$id.</p>";
    
      }
    
    }
    

    【讨论】:

    • 发布后,您从哪里获得 $id?当我选中一个框并发布它时,我得到以下 array.Array ( [chkname] => Array ( [156] => chkname156 ) [txtID] => Array ( [156] => 1234 [157] => ) )
    • 在我的示例中,$id 是特定输入集的索引。例如,如果您要检查编号为 156 的文本/复选框输入,则为 $id=156。 (我想你会遍历输入来检查它们。)鉴于你的数组输出和我的代码示例,用户根本不会收到警报,因为检查了chkname[156]txtID[156] 不是空白,@987654328 @ 未选中,但 txtID[157] 为空白。所以没有人满足我的if 声明并且表格是完整/有效的。
    • 对不起。我现在比刚开始时更困惑。我试图弄清楚当它们是动态的时如何访问每个数组项。我如何知道 $posted['chkname'][$id] 中的 $id 是什么?
    • 哎呀,很遗憾听到这个消息。我用一个示例验证循环编辑了我的答案。我希望它有助于澄清,我不只是把你带到一个兔子洞......
    猜你喜欢
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多