0

我有一个包含多个同名输入字段的表单。这些使用 for 循环填充。

<input type="text" id="form_dest_numb[<?=$i?>]" name="form_dest_numb[<?=$i?>]" value="<?php echo $form_dest_numb[$i];?>" maxlength="15" size="15" />

我现在使用相同的回调函数对这些字段进行验证。我现在的问题似乎是显示表单错误。

我目前有以下代码:

<?php if(form_error('form_dest_numb['.$i.']')) { echo "<div class=\"error\"><span class=\"error\">" . form_error('form_dest_numb['.$i.']') . "</span></div>"; } ?>

我似乎无法在特定键上显示错误消息。我希望错误消息突出显示数组中受影响的行。有没有办法将密钥传递给 form_error 变量名?

4

2 回答 2

1

没有,除非您通过扩展Form_validation错误函数(由表单辅助form_error函数使用)来编写自己的函数

此类中的 CIerror函数将参数作为文件名的原因,您设置的规则中的文件名是$this->form_validation->set_rules('form_dest_numb[]','','callback_validate_dest_‌​numb');所以 CI 正在寻找名称中的错误,form_dest_numb[]而不是form_dest_numb[1], form_dest_numb[1]等...

解决此问题的另一种方法是为每个字段设置验证规则(也使用 for 循环)

for(i=0;  $i<10; $i+2){ // +2 as example with fields not being properly indexed 

     $this->form_validation->set_rules('form_dest_numb['.$i.']','','callback_validate_dest_‌​numb');

}
于 2013-06-03T14:35:59.547 回答
0

除了 Elijan Sejic 的正确回答之外,我还编写了以下函数来帮助设置验证规则并获取错误和值:

在 MY_Form_validation.php 中:

function set_rules_array($name, $label, $rules)
{
    for ($i = 0; $i < count($_POST[$name]); $i++)
    {
        $this->set_rules("{$name}[$i]", $label, $rules);
    }
}

在我打电话的助手中form2

function form2_error($name)
{
    static $array_fields = array();

    // if the last 2 characters are [], then handle this as an array field.
    if (substr($name, -2) === '[]')
    {
        // If this field has been form2_error'd before, then increment the index, otherwise set to zero.
        $array_fields[$name] = ! isset($array_fields[$name]) ? 0 : $array_fields[$name] + 1;
        $name = substr($name, 0, -2) . '[' . $array_fields[$name]. ']';
    }
    return form_error($name);
}

function form2_set_value($name)
{
    static $array_fields = array();

    // if the last 2 characters are [], then handle this as an array field.
    if (substr($name, -2) === '[]')
    {
        // If this field has been form2_error'd before, then increment the index, otherwise set to zero.
        $array_fields[$name] = ! isset($array_fields[$name]) ? 0 : $array_fields[$name] + 1;
        $name = substr($name, 0, -2) . '[' . $array_fields[$name]. ']';
    }
    return set_value($name);
}

如果您的表单有一个“添加更多”按钮并且您不知道预期有多少数组元素,这将特别有用。

于 2014-08-13T13:43:15.317 回答