我有一个包含多个具有相同名称的输入字段的表单。这些使用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变量名?
答案 0 :(得分:1)
除非你通过扩展Form_validation
错误函数(由表单助手form_error
函数使用)来编写自己的函数,否则没有。
此类中的CI error
函数将参数作为字段名称的原因,您设置的规则中的字段名称为$this->form_validation->set_rules('form_dest_numb[]','','callback_validate_dest_numb');
因此CI正在查找名称{{1}中的错误不在form_dest_numb[]
等......
解决此问题的另一种方法是为每个字段设置验证规则(也使用for循环)
form_dest_numb[1], form_dest_numb[1]
答案 1 :(得分: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);
}
如果您的表单有一个“添加更多”按钮并且您不知道预期会有多少数组元素,这将非常有用。