我正在 CodeIgniter 中开发一个表单,我想根据名称和密码字段的验证状态动态更改输入字段类。我的问题是,当我提交有效的名称和无效的密码时,密码和名称都变成红色。 我想要的输出是,如果名称有效,它会变成绿色,密码会变成红色,因为提交时它无效。 任何建议或见解将不胜感激!
这是我的视图或 Github 存储库中的相关代码片段:
form.php(查看)
<input type="text" name="name" value="<?php echo set_value('name'); ?>" class=<?php echo (isset($name_valid) && $name_valid === true) ? '"text-green-500"' : '"text-red-500"'; ?>>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" class="<?php echo (isset($password_valid) && $password_valid == 'true') ? 'text-green-500' : 'text-red-500'; ?>">
UserController.php(控制器方法)
public function create() {
$this->load->model('UserModel');
$data = array(
'name' => $this->input->post('name'),
'password' => $this->input->post('password')
);
$validated_result = $this->UserModel->validate_input($data);
if ($validated_result['name_valid'] === true) {
$data['name_valid'] = true;
}
if ($validated_result['password_valid'] === true) {
$data['password_valid'] = true;
}
$this->load->view('form', $data);
用户模型.php
public function validate_input($data) {
$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'name', 'required|trim|regex_match[/^[^0-9]+$/]');
$this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[5]|max_length[100]');
$result['name_valid'] = $this->form_validation->run(['name' => $data['name']]);
$result['password_valid'] = $this->form_validation->run(['password' => $data['password']]);
return $result;
}
您不能将
$this->form_validation->run()
与单个字段的名称和数据一起使用。 run
方法接受的唯一参数是组的名称,它指的是配置文件中的一组验证规则,然后该规则将应用于整个表单,而不是单个字段。
通过调用
$this->form_validation->run()
两次,它会执行您在上面为两个字段设置的 2 条验证规则两次。这两个调用都会为您提供整个表单的结果,而不是各个字段的结果(因此,如果两个字段都有效,则为 true;如果一个或两个字段都有错误,则为 false)。
要获取单个字段的错误,您可以在调用
$this->form_validation->error('fieldName');
后使用 $this->form_validation->run();
,这会为您提供该字段的错误消息,如果该字段有效,则会显示一个空字符串。如果需要,您可以将其转换为布尔值:
public function validate_input($data) {
$this->load->library('form_validation');
$this->form_validation->set_data($data);
$this->form_validation->set_rules('name', 'name', 'required|trim|regex_match[/^[^0-9]+$/]');
$this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[5]|max_length[100]');
$this->form_validation->run();
$result['name_valid'] = !$this->form_validation->error('name');
$result['password_valid'] = !$this->form_validation->error('password');
return $result;
}
如果您想验证 $_POST 数组中的数据(这似乎就是您正在做的事情),您可以省略
$data
参数和 $this->form_validation->set_data($data);
- 表单验证库默认情况下会验证 $_POST
数据,如果您不要向其中传递任何数据。
并且您也可以直接使用
$this->form_validation->error('fieldName');
访问视图中的错误,而不是使用 form_error('fieldName')
获取错误然后将其传递到视图中,如下所示:
<input type="text" name="name" value="<?php echo set_value('name'); ?>" class=<?php echo !form_error('name') ? '"text-green-500"' : '"text-red-500"'; ?>>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" class="<?php echo !form_error('password') ? 'text-green-500' : 'text-red-500'; ?>">
希望以上内容对您有所帮助!