【问题标题】:Fetch data from msql into selectpickers for editing从 mysql 获取数据到 selectpicker 进行编辑
【发布时间】:2020-07-20 08:04:25
【问题描述】:

我有一个代码,它将模式表单中的数据插入两个相关的表中,即inventory_order 表和inventory_order_product 表。该代码工作正常,但是当我想将相同的数据取回模态表单进行编辑时,我的问题就来了。 fetch single 的代码仅检索 selectpicker 中第一行的数据,而不检索其余的数据。如果我的问题不清楚,请参考下图,请多多包涵,我是 php、ajax 和 mysql 的新手。

        $(document).on('click', '.update', function(){
            var inventory_order_id = $(this).attr("id");
            var btn_action = 'fetch_single';
            $.ajax({
                url:"order_action.php",
                method:"POST",
                data:{inventory_order_id:inventory_order_id, btn_action:btn_action},
                dataType:"json",
                success:function(data)
                {
                    $('#orderModal').modal('show');
                    $('#inventory_order_name').val(data.inventory_order_name);
                    $('#inventory_order_date').val(data.inventory_order_date);
                    $('#inventory_order_address').val(data.inventory_order_address);
                    $('#span_product_details').html(data.product_details);
                    $('#payment_status').val(data.payment_status);
                    $('.modal-title').html("<i class='fa fa-pencil-square-o'></i> Edit Order");
                    $('#inventory_order_id').val(inventory_order_id);
                    $('#action').val('Edit');
                    $('#btn_action').val('Edit');
                }
            })
        });
    if($_POST['btn_action'] == 'fetch_single')
    {
        $query = "
        SELECT * FROM inventory_order WHERE inventory_order_id = :inventory_order_id
        ";
        $statement = $connect->prepare($query);
        $statement->execute(
            array(
                ':inventory_order_id'   =>  $_POST["inventory_order_id"]
            )
        );
        $result = $statement->fetchAll();
        $output = array();
        foreach($result as $row)
        {
            $output['inventory_order_name'] = $row['inventory_order_name'];
            $output['inventory_order_date'] = $row['inventory_order_date'];
            $output['inventory_order_address'] = $row['inventory_order_address'];
            $output['payment_status'] = $row['payment_status'];
        }
        $sub_query = "
        SELECT * FROM inventory_order_product 
        WHERE inventory_order_id = '".$_POST["inventory_order_id"]."'
        ";
        $statement = $connect->prepare($sub_query);
        $statement->execute();
        $sub_result = $statement->fetchAll();
        $product_details = '';
        $count = '';
        $count = $count++;
        foreach($sub_result as $sub_row)
        {
            $product_details .= '
            <script>
            $(document).ready(function(){
                $("#product_id'.$count.'").selectpicker("val", '.$sub_row["product_id"].');
                $(".selectpicker").selectpicker();
            });
            </script>
            <span id="row'.$count.'">
                <div class="row">
                    <div class="col-md-8">
                        <select name="product_id[]" id="product_id'.$count.'" class="form-control selectpicker" data-live-search="true" required>
                            '.fill_product_list($connect).'
                        </select>
                        <input type="hidden" name="hidden_product_id[]" value="'.$sub_row["product_id"].'" />
                    </div>
                    <div class="col-md-3">
                        <input type="text" name="quantity[]" class="form-control" value="'.$sub_row["quantity"].'" required />
                    </div>
                    <div class="col-md-1">
            ';

            if($count == '')
            {
                $product_details .= '<button type="button" name="add_more" id="add_more" class="btn btn-success btn-xs">+</button>';
            }
            else
            {
                $product_details .= '<button type="button" name="remove" id="'.$count.'" class="btn btn-danger btn-xs remove">-</button>';
            }
            $product_details .= '
                        </div>
                    </div>
                </div><br />
            </span>
            ';
            
        }
        $output['product_details'] = $product_details;
        echo json_encode($output);
    }

【问题讨论】:

    标签: javascript php mysql ajax


    【解决方案1】:

    您的代码中的问题在于变量$count。正如在您的后端代码中,这是在您的foreach.. 循环之外声明的,因此当您的循环第一次运行时,它将具有正确的值,即:0,但您永远不会增加这就是为什么它只为第一个选择器提供正确的值。相反,您需要增加其值以设置第二个值、第三个等的值。即:

    foreach($sub_result as $sub_row)
     {
    //you code html and jquery
    
     $count = $count++;//add this inside for loop
    }
    

    另外,我不明白你为什么给 $count = ''; 。相反,它应该是 $count = 0;

    【讨论】:

    • 我已经进行了你所说的更改,但它仍然只检索第一行。
    • 签入elements tab id="product_id'.$count.'" 这给了什么?您在模态中的选择是否有值id="product_id0"id="product_id1" 等?
    • ` id="product_id0" ` 正在检索我的初始代码中的第一行,但 `id="product_id1" ` 可能不是问题的根源。我该如何排序?
    • 在循环中增加你的计数器,这样它就会将你的值增加1。下次它会打印 1 然后 2..etc 即:$count++;
    猜你喜欢
    • 2014-06-04
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多