如何使用CodeIgniter表单验证库通过AJAX验证空复选框并显示消息?

时间:2019-04-21 23:59:07

标签: php ajax forms codeigniter validation

使用CodeIgniter表单验证库未选中复选框时显示表单错误消息。

当前,仅当选中复选框时才显示表单错误消息。

这是AJAX呼叫:

$('#add_user').on('submit', function(e) {
    e.preventDefault();

    $.ajax({
        url : $(this).attr('action'),
        method : "post",
        data: $(this).serialize(),
        dataType: "json",
        success: function(result) {
            if(result.success == true) {
                alert('Success');
            } else {
                $.each(result.errors, function(key, value) {
                    var error = $('#' + key);
                    error.closest('div.form-group')
                    .find('.error').remove();
                    error.after(value);
                });
            }
        }
    });
});

这是PHP控制器:

$this->form_validation->set_rules('agreement', 'Agreement', 'callback_agreement_checkbox');

if($this->form_validation->run()) {
            $data['success'] = true;
            $this->load->view('Success');
        } else {
            foreach($this->input->post() as $key => $value) {
                $data['errors'][$key] = form_error($key);
            }
            echo json_encode($data);
        }

public function agreement_checkbox() {
        if (empty($this->input->post('agreement'))) {
            return FALSE;
        } else {
            $error = 'Please accept TOS';
            $this->form_validation->set_message('agreement_checkbox', $error);
            return TRUE;
        }
    }

在未选中复选框的情况下提交表单时,不会显示错误消息(但应该显示)。仅在选中复选框且不正确时显示。

编辑:

为了支持混合不同的输入数据,我做了一些修改:

$this->form_validation->set_rules('first_name', 'First name', 'trim|required');
$this->form_validation->set_rules('last_name', 'Last name', 'trim|required');
$this->form_validation->set_rules('email', 'E-mail', 'trim|required');
$this->form_validation->set_rules('agreement', 'Agreement', 'required');

if($this->form_validation->run()) {
            $data['success'] = true;
            $this->load->view('Success');
        } else {                
            foreach($this->input->post() as $key => $value) {
                $data['errors'][$key] = form_error($key);
            }
            if (empty($this->input->post('agreement'))) {
                $data['errors']['agreement'] = form_error('agreement', '<div id="agreement_error">', '</div>');
            }           
            echo json_encode($data);
        }

1 个答案:

答案 0 :(得分:0)

Codeigniter的回调函数未定义$this->input->post()。我建议您使用required。所以会是这样。

$this->form_validation->set_rules('agreement', 'Agreement', 'required');

它将定义在提交复选框之前是否已选中该复选框。然后也更改此代码。

if($this->form_validation->run()) {
    if(! empty($this->input->post('agreement))){
          $data['success'] = "It was checked";
        }else{
          $data['error'] = validation_errors();
    }
    echo json_encode($data);
}

您的ajax:

        success: function(result) {
        if(result.success) {
            console.log(result.success);
        } else {
            console.log(result.error);
        }
    }

让我知道结果。