如何验证codeigniter验证中的克隆字段?

时间:2014-12-30 08:26:20

标签: php codeigniter validation

在我的应用程序中,用户可以创建自己的字段列表来添加产品。这是我的表单。

<div class="row productsdiv">
    <input type="text" name="product[]" class="product form-control" <?php echo   set_value('product[]'); ?>'>
    <?php echo form_error('product[]'); ?>
    <input type="hidden" name="product_id[]" <?php set_value("");?>>
     <input type="text" name="price[]" class="price form-control"<?php echo set_value("price[]");?> placeholder='<?php echo lang('placeholder_price'); ?>'>
     <?php echo form_error('price[]'); ?>
     <input type="text" name="qty[]" class="quantity form-control"<?php echo set_value("qty[]");?>'>
     <?php echo form_error('qty[]'); ?>
     </span><span class="total">0</span>
     <textarea name="description[]" cols="40" rows="3" class="footerinput form-control"></textarea>
     <?php echo form_error('description[]'); ?>
</div><!--Product row end -->

上面的div产品是使用按钮添加更多克隆的。 我的jquery

 $('#addmore').on('click', function() {      
     var cloneRow = $('.productsdiv:first').clone();
     cloneRow.find("input").val("").end();
     cloneRow.find(".total").text("").end();
     cloneRow.find(".total").after('<button type="button" class="close lebel-danger" data-dismiss="alert">&times;</button>');
     cloneRow.find(".footerinput").css({"display":"none"});
     cloneRow.appendTo('#products');

我的控制员:

if($_POST){
 $this->form_validation->set_rules('customer_id', $this->lang->line('validation_name_label'),   'required');
    $this->form_validation->set_rules('date',$this->lang->line('validation_date_label'), 'required');
    $this->form_validation->set_rules('product[]', $this->lang->line('validation_product_label'), 'required');
    $this->form_validation->set_rules('price[]',$this->lang->line('validation_price_label'), 'required|is_numeric');
    $this->form_validation->set_rules('qty[]',$this->lang->line('validation_quantity_label'), 'required|is_numeric');

//remaing logic here after.....

我的问题是当验证失败时,我在页面重新加载时丢失了新添加的表单字段。如何将表单错误发送回每个受尊重的表单字段,并在表单验证失败时仍然保留所有工作? 如果我不清楚,我很抱歉。如果需要,请对任何进一步的信息发表评论。

2 个答案:

答案 0 :(得分:0)

您可以在客户端使用jquery_validator库来显示每个字段的错误:

http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/

另一方面(服务器端)你可以做的就是全局验证:

$this->form_validation->set_rules('product[]', 'lang:product', 'trim|required');

答案 1 :(得分:0)

您需要使表单创建更具动态性,这意味着:将您置于循环中。类似的东西:

 $countProducts = 1;

 if ($this->input->post("submit", TRUE)) {
    $countProducts = $this->input->post("product", TRUE);
}

for ($i = 0; $i < $countProducts; $i++){

echo "<div class='row productsdiv'>";

echo  "<input type='text' name='product[" . $i . "]' class='product form-control'" .  set_value("product[" . $i . "]");

// echo the other items

echo "</div>";
}

要更轻松地创建表单和验证,请查看表单生成库http://frankmichel.com/formgenlib/user_guide/installation/install.html