Php Codeigniter form_error()只显示一个错误

Php Codeigniter form_error()只显示一个错误,php,codeigniter,validation,Php,Codeigniter,Validation,我正在运行CI表单验证,并使用form_error()分别显示每个字段的错误。但问题是form_error()函数只返回第一个验证错误 示例字段: <input type="text" name="value" value="short"> 上述输出:值字段的长度必须至少为5个字符。 尽管该字段作为数值也未通过验证 我似乎找不到这方面的文件。我是否缺少一个简单的步骤来获取单个字段输出的所有验证错误?是否有比多次运行验证(每个规则一次)更好的解决方案 编辑: 明确地说,我在这个特定示

我正在运行CI表单验证,并使用form_error()分别显示每个字段的错误。但问题是form_error()函数只返回第一个验证错误

示例字段:

<input type="text" name="value" value="short">
上述输出:
值字段的长度必须至少为5个字符。

尽管该字段作为数值也未通过验证

我似乎找不到这方面的文件。我是否缺少一个简单的步骤来获取单个字段输出的所有验证错误?是否有比多次运行验证(每个规则一次)更好的解决方案

编辑: 明确地说,我在这个特定示例中寻找的输出是:

<p>The Value field must contain only numbers.</p>
<p>The Value field must be at least 5 characters in length.</p>
问题

在测试CI表单中的错误时,
validation\u errors()
in form helper提供的错误并不完全是我所说的“可访问的”

确保它们整洁,每个错误都会显示一条错误消息(因此,如果在需要时未能同时填充用户名和密码,则默认情况下会显示两条错误消息),但这应该更进一步。我说的是错误标签,例如:

<label for="password">The Password field must be at least 6 characters in length</label>
其中set_rules()方法参数如下:

Password field name attribute (the same which you've defined)
Quoting the manual - A "human" name for this field, which will be inserted into the error message.
Validation rules for password field (in the above example password is required and at least 6 characters long) plus some modifiers (trimming spaces and instant conversion to md5).
一个简单的解决方案是在第二个参数中插入一个标签,它将用于显示错误。它可能是这样的:

$this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[6]|md5');
$this->form_validation->set_rules('password', '<label for="password">Password</label>', 'trim|required|min_length[6]|md5');
正如您可能已经注意到的那样,修复将导致我们的目标代码略有不同:

The <label for="password">Password</label> field must be at least 6 characters in length
希望您能在这一点上对form_error()做更多的工作:

// in stylesheet
.form_error label {color:#F00;text-decoration:underline}

// in form controller
$this->form_validation->set_error_delimiters('<div class="form_error">','</div>');
$this->form_validation->set_rules('password', form_label('Password', 'password'), 'trim|required|min_length[6]|md5');
//在样式表中
.form_错误标签{颜色:#F00;文本装饰:下划线}
//表单控制器
$this->form_validation->set_error_分隔符(“”,);
$this->form_validation->set_规则('password',form_标签('password','password'),'trim | required | min_length[6]| md5');

我自己偶然发现了这一点,并找到了解决办法。这不是一个真正的正统解决方案,但在这里

$errors = validation_errors('/', '/');
$errors = explode("/", $errors);
echo $errors[1];
这将只输出数组中的第一个错误

编辑:确保检查数组中的值是否超过1

if(count($errors) > 1) {
echo $errors[1];
}
第一个错误

第二个错误


框p:nth child(2){display:none;}这绝对是一种有趣的技术,我将来可能会使用它。但它并没有真正解决我的特殊问题,问题是CI的表单验证库在某个项的规则失败后将停止检查该项的规则。在您的例子中,一旦min_length[6]失败,它就会停止,并且不需要检查数字规则。您需要扩展表单验证库,可能还需要扩展表单帮助程序,才能获得所需的结果。validation\u errors()仍然只提供其中一个错误。请注意,在我的情况下,我希望在单个字段上获得多个验证错误的输出。正确使用,是的,这将给我所有验证字段的验证错误。然而,这不是我想要的。在我的例子中,一个字段上有两个验证错误,但是表单验证器在输出第一个发现的错误后停止检查。
$this->form_validation->set_error_delimiters('<div class="form_error">','</div>');
<div class="form_error">The <label for="password">Password</label> field must be at least 6 characters in length</div>
.form_error label {color:#F00;text-decoration:underline}
// in stylesheet
.form_error label {color:#F00;text-decoration:underline}

// in form controller
$this->form_validation->set_error_delimiters('<div class="form_error">','</div>');
$this->form_validation->set_rules('password', form_label('Password', 'password'), 'trim|required|min_length[6]|md5');
$errors = validation_errors('/', '/');
$errors = explode("/", $errors);
echo $errors[1];
if(count($errors) > 1) {
echo $errors[1];
}