根据验证(名称和密码)动态更改输入字段类

问题描述 投票:0回答:1

我正在 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;
    }
php codeigniter
1个回答
0
投票

您不能将

$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'; ?>">

希望以上内容对您有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.