php - Codeigniter 验证表单中的数组

标签 php forms codeigniter validation

我有一个带表格的表格。该表包括三个用户输入。数量、行项目和价格。在用户提交表单之前,我需要填写所有三个。该表允许添加行。

这是我的 table 。

<form id="add_quote_form" name="add_quote_form" class="form-horizontal">
   <table style="width: 90%" id="myTable" class="centered-table table table-bordered">
   <thead>
    <tr>
        <th>Item</th>
        <th>Qty</th>
        <th>Price</th>
        <th>Action</th>
     </tr>
    </thead>
    <tbody>
      <tr>
        <td style="width: 60%"><input type="text" name="detail[]"required></td>
        <td style="width: 10%"><input type="number" name="qty[]" required></td>
        <td style="width: 15%"><input type="number" name="price[]" required></td>
        <td style="width: 12%"><div class="inline"><input type="button" id="addButton" class="btn btn-primary btn-xs" value="Add"/></div><div class="inline"><input type="button" id="deleteButton" class="btn btn-primary btn-xs" value="Delete"/></div>
       </tr>
    </tbody>
   </table>
   <input type="button" id="saveBtn" name="saveBtn" class="btn btn-primary" value="Create Order" onClick="this.disabled=true; add_quotation();return false;">
</form>

向表中添加行的函数

$(function(){
    $("#addButton").click(function(){
        $(this).closest("tr").clone(true).appendTo("#myTable");
    });

    $("#deleteButton").click(function(){
//      var x = document.getElementById("myTable").rows.length;
        var x = $('#myTable tr').length;
        if(x == 2){

        } else {
             $(this).closest("tr").remove();
        }

    });
});

提交按钮上调用的函数

function add_quotation() { 
document.add_quote_form.saveBtn.value="Saving...";
var formArray = $('#add_quote_form').serialize();

jQuery.post('<?php echo base_url(); ?>index.php/quotes/add_work_order_validation/' , formArray, function(data)
{
    //alert('here');

    if (data.success)
    {
        //GetQuotesPage();
        //location.reload(base_url+'quotes');   
        //window.location = base_url+'quotes';
        document.add_quote_form.saveBtn.value="Save Order";
        document.add_quote_form.saveBtn.disabled=false;
        swal({


    title: "Order Saved!",
               // text: "You clicked the button!",
                type: "success"
            });
            //alert("Quote Saved");
        }
        else
        {
            document.add_quote_form.saveBtn.value="Save Order";
            document.add_quote_form.saveBtn.disabled=false;
            for (var i in data.errors)
            {
                $('#'+i).css('border-color', 'red');
                $('#'+i).validationEngine('showPrompt', data.errors[i], '', 'topRight', true);
            }
            for (var z in data.hidden)
            {
                $('#add_quote_form#' +data.hidden[z]).validationEngine('hide');
            }
    }
}, 'json');

return false;
}

这是我的 Controller

public function add_work_order_validation()
 { 


    $this->form_validation->set_rules('quoteName', 'Quote Name', 'trim|required');
    $this->form_validation->set_rules("dueDate", "Due Date", "trim|required");
    $this->form_validation->set_rules('detail[]', 'Line Items','required|trim|callback_matchLineItems');


    if ($this->form_validation->run() == FALSE) 
    {
        $result['errors'] = array();
        $result['hidden'] = array();
        $result['success'] = false;
        $fields = array('quoteName', "dueDate", "detail");

        foreach ($fields as $field)
        {
            if (form_error($field)) 
            {
                $result['errors'][$field] = strip_tags(form_error($field));
            }
            else
            {
                $result['hidden'][] = $field;
            }
        }
    }
    else
    { //Post Form 
}

最后一部分是我的回调函数

function matchLineItems() {

    $detailArray = $this->input->post("detail");
    $qtyArrayPost = $this->input->post("qty");
    $priceArray = $this->input->post("price");
    $qtyNumberCount = count($qtyArrayPost);
    $priceNumberCount = count($priceArray);
    $detailNumberCount = count($detailArray);

    if($qtyNumberCount != $priceNumberCount || $qtyNumberCount != $detailNumberCount || $detailNumberCount != $priceNumberCount) {
        $this->form_validation->set_message('matchLineItems', 'No Fields Can Be Left Blank');
        return FALSE;
    } else {
        return TRUE;
    }

 }

我遇到的问题是,当我将行项目字段留空时,表单不会提交,但不会显示任何错误。如果我在行项目字段中输入数据但将数量和价格字段留空,则表单会提交。我是否需要为表中的每个字段创建验证?如何让错误出现?

Codeigniter 版本 3.0.6

最佳答案

首先,您在表单中使用了不完整的输入选择器。 应该是这样的..

 <input type="text" name="detail[]" required>

在 codeigniter 代码中。在表单中发布的数组上使用简单的 php isset 和 count 函数。通过这个你可以验证发布的数组。表单验证库随心所欲地工作。发布数据的条件。

    if(isset($_POST['detail']) && (count($_POST['detail'])>0)){
    // code here
    }
    else{
     return "required";
    }

关于php - Codeigniter 验证表单中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38841696/

相关文章:

javascript - 使用 jQuery 从 PHP 关联数组中获取值

c# - 恢复窗口时是否在 C# 中引发了事件?

php - codeigniter,从模型回显数据以查看 PHP

PHP 数组和 HTML 表单下拉列表

php - 丢失 PHP session

php - PHP 和 MySQL 的 Multi-Tenancy

php - 如何从 codeigniter 中的多个选择下拉列表中将数据插入数据库?

php - 将 XML 数据插入 SQL 字段

php - PDO FetchALL 仅返回一行

php - 将多个字段合并为一个值以进行表单提交