Câu hỏi Cách xác thực các mảng đa chiều với Codeigniter và Jquery


Xin chào, tôi cần xác nhận một biểu mẫu đa chiều như thế này

<input type="text" class="input-xlarge span5 req" id="contact_first_name" name="hotel[<?=$id?>][contact_first_name]" value="<?= set_value('hotel[contact_first_name]') ?>">
<input type="text" class="input-xlarge span5 req" id="contact_last_name" name="hotel[<?=$id?>][contact_last_name]" value="<?= set_value('hotel[contact_last_name]') ?>">

Tôi không biết kích thước của mảng cuối cùng vì các đầu vào được thêm động thông qua jquery.

Tôi đang sử dụng Codeigniter Form_Validation cho phía máy chủ và thông qua JQuery với Trình xác thực JQuery cho phía máy khách.

Đây là quy tắc form_validation của tôi

$config['add_hotel'] = array(
array(
    'field' => 'hotel[][hotel_name]', 
    'label' => 'Hotel Name', 
    'rules' => 'required'
    ),    
array(
    'field' => 'hotel[][contact_first_name]', 
    'label' => 'First Name', 
    'rules' => 'trim|required'
    ),
array(
    'field' => 'hotel[][contact_last_name]', 
    'label' => 'Last Name', 
    'rules' => 'trim|required'
    ),

và đây là cách tôi làm điều đó thông qua trình xác nhận jquery

$("#add_hotel").validate({
rules: {
    "hotel[][hotel_name]": "required"

  /*  errorElement: "div",
    wrapper: "div"*/
},
messages: {
   "hotel[][hotel_name]": "Please enter the Association Name"
},
submitHandler: function(form) {
    form.submit();
}

Không biết cách xác thực mỗi Hotel[] đầu vào với id riêng của nó, hoặc có thể có một cách khác để xác định các đầu vào có thể đơn giản hơn.


7
2017-09-17 17:04


gốc




Các câu trả lời:


Mảng đã đăng

$hotel = $this->input->post('hotel');
if(!empty($hotel))
{
    // Loop through hotels and add the validation
    foreach($hotel as $id => $data)
    {
        $this->form_validation->set_rules('hotel[' . $id . '][contact_first_name]', 'First name', 'required|trim');
        $this->form_validation->set_rules('hotel[' . $id . '][contact_last_name]', 'Last name', 'required|trim');
    }
}

Quy tắc mặc định áp dụng mọi lúc

$this->form_validation->set_rules('username', 'Username', 'required');

if ($this->form_validation->run() == FALSE)
{
    // Errors
}
else
{
    // Success
}

9
2017-09-17 21:03



Cảm ơn rất nhiều, đó là thủ thuật cho CI Form_validation. Bây giờ tôi phải xác nhận nó bằng plugin JQuery Validator, nhưng không biết cách tạo chỉ mục var bên trong xác nhận hợp lệ - user1678153
là nó có thể tránh vòng lặp và thiết lập các quy tắc xác nhận trong config / form_validation.php? - IJas


Codeigniter có một cách rất nghiêm ngặt để xử lý các quy tắc xác nhận cho các đầu vào được đặt tên như mảng, nó sẽ chỉ xác nhận nếu tên trường là chính xác như nhau, do đó, quy tắc

array(
    'field' => 'hotel[][hotel_name]', 
    'label' => 'Hotel Name', 
    'rules' => 'required'
    ),    

sẽ chỉ hoạt động nếu trường được đặt tên là [] [hotel_name].
Vì đó không phải là tên của trường (tên thật là một cái gì đó giống như khách sạn [1] [hotel_name]), nó sẽ không được Codeigniter xác nhận.

Bạn có thể tạo ra các mảng cấu hình theo thực tế, nhưng tôi nghĩ bạn nên viết các quy tắc xác nhận riêng cho các trường đó một cách riêng biệt.


0
2017-09-17 20:11