Получить данные из базы данных и поместить их в список выбора

#javascript #php #html

#javascript #php #HTML

Вопрос:

Я делаю обновление с использованием JavaScript и HTML. Я хочу поместить значения в выпадающий список. Но я не могу зациклить все остальные данные в выпадающем списке. Я хочу создать в нем выпадающее меню HTML со всеми значениями, чтобы я мог выбирать другие параметры из выпадающего меню. Я получаю предыдущие значения из базы данных. Как я могу получить остальные категории, а также в опциях?

Контроллер

 public function productlist($product_id)
{
    $this->load->model('Productmodel');
    $response=array();
    $response = $this->Productmodel->getproductlistbyid($product_id);
    echo json_encode($response);
}
  

Модель

 public function getproductlistbyid($product_id)
{
    $returnarray = array();

    $sql = "select id, product_name, image,  b.name as bname, c.name as cname, a.category_id as acategory_id, a.subcat_id as asubcat_id, description, qty, color, orginal_price, offer_price from tbl_product as a inner JOIN category as b on a.category_id = b.category_id inner JOIN category as c on a.category_id = c.fk_parent_id where id = ?";

    $query = $this->db->query($sql, array($product_id));

    if($query->num_rows())
    {
        $rows = $query->result();

        foreach($rows as $temp)
        {
            $returnarray[0] = $temp->id;
            $returnarray[1] = $temp->product_name;
            $returnarray[2] = $temp->image;
            $returnarray[3] = $temp->bname;
            $returnarray[4] = $temp->cname;
            $returnarray[5] = $temp->description;
            $returnarray[6] = $temp->qty;
            $returnarray[7] = $temp->color;
            $returnarray[8] = $temp->orginal_price;
            $returnarray[9] = $temp->offer_price;
            $returnarray[10] = $temp->acategory_id;
            $returnarray[11] = $temp->asubcat_id;
        }

    }

    return $returnarray;

}
  

Просмотр (сценарий)

  <script>
 function editproduct(product_id)
 {
 var myurl="<?php echo base_url();?>index.php?/Product/productlist/" product_id;

//alert(myurl);

  $.post(myurl).done(function (data)
  {
     //alert(data);

      var obj=jQuery.parseJSON(data);
    //alert(obj);

      //alert(myhtml);
      var myhtml='<form role="form" id="formedit" action="#">' 
                 '<div class="box-body">' 
                 '  <div class="form-group">' 
                 '  <label for="exampleInputName">Product Name</label>' 
                 '  <input type="hidden"  id="upmyid" name="editid" value="' obj[0] '">' 
                 '  <input type="text" class="form-control" id="upname" placeholder="Product Name" name="editpname" value="' obj[1] '">' 
                 '  </div>' 
                 '</div>' 
       '<div class="box-body">' 
       '<div class="form-group">' 
       '<label for="exampleInputImage">Image</label>' 
       '<input type="file" class="form-control" id="upimage" placeholder="Image" name="editpimage" value="' obj[2] '">' 
       '</div>' 
       '</div>' 
       '<div class="box-body">' 
       '<div class="form-group">' 
       '<label for="exampleInputCategory">Category</label>' 
       '<select class="form-control select category" style="width: 100%;" name="option2" id="option2">' 
       '<option value="0">Main Menu </option>' 
       '<option value="' obj[9] '" selected>' obj[3] '</option>' 
       '</div>' 
       '</div>' 
                 '</form>';

                 swal({ title: "Edit <small>this</small>!",
                        text: myhtml,
                        html: true,
                        type: "",   showCancelButton: true,   confirmButtonColor: "#3c8dbc",
                        confirmButtonText: "Update Now",
                        closeOnConfirm: false },
                        function()
                        { 
                            var id=$('#upmyid').val();
                            var name=encodeURIComponent($('#upname').val());
                            var myurl="index.php/Product/updateProduct/" id "/" name;

                            $.post(myurl).done(function(data)
                            {
                                //alert(data);

                                var obj = jQuery.parseJSON(data);

                                //alert(obj);

                                if(obj[0]==100)
                                {

                                    swal({      title: "Updated Successfully",
                                    text: "Click on ok now!",
                                    type: "success",   showCancelButton: false,   confirmButtonColor: "#3c8dbc",
                                    confirmButtonText: "OK",
                                    closeOnConfirm: false },

                                    function()
                                    { 
                                        location.reload(); 
                                    });
                                }

                                else
                                {
                                    swal("Sorry!",
                                    "Unable to Update now.",
                                    "warning");
                                }

                            });

                        }
                    );
  });
  }
  </script>  
  

Комментарии:

1. каждый раз, когда вы запускаете свою строку foreach в PHP, она перезаписывает одни и те же части массива с последними значениями. Вам нужно создавать новый массив (или, что еще лучше, объект) каждый раз, когда вы выполняете цикл, а затем добавлять этот массив / объект в следующий пустой индекс $mainarray . На самом деле, $mainarray[] = $temp; может быть достаточно, похоже, что $temp уже является объектом.

2. затем, во-вторых, в javascript вам нужно выполнить цикл obj и распечатать новый <option> для каждого возвращаемого объекта. И я сомневаюсь, что вам нужен jQuery.parseJSON() , потому что PHP уже должен возвращать объект JSON, а не строку, поскольку вы использовали $json_encode() .

3. Извините, но я вас не понимаю, не могли бы вы отредактировать скрипт

4. Я опубликовал ответ, который, я думаю, должен работать

Ответ №1:

Каждый раз, когда вы запускаете свою строку foreach в PHP, она перезаписывает одни и те же части массива с последними значениями. например, если у вас есть 10 строк, возвращенных из вашей базы данных, цикл выполняется 10 раз. Поэтому $mainarray[0] заменяется 10 раз на последнее значение $temp->id; , и то же самое для всех остальных полей. Это означает, что вы будете получать значения только из последней строки базы данных в свой PHP-массив.

Попробуйте это так (непроверенный, извинения за любые незначительные ошибки):

Модель:

     foreach($rows as $temp)
    {
        $returnarray[] = $temp;
    }
  

Это поместит весь объект $temp в следующий доступный индекс $mainarray .

Во-вторых, ваш код JavaScript не настроен на обработку нескольких элементов в ответе и, следовательно, будет печатать только один элемент данных, даже если должно было быть возвращено много элементов.

Вид

1) Удалите эту строку:

   var obj=jQuery.parseJSON(data);
  

В этом не должно быть необходимости — $json_encode() в вашем PHP уже будет возвращен объект JSON, а не строка, поэтому вам не нужно его анализировать. jQuery уже будет восприниматься как data объект JSON.

2) Обновите свой код генерации HTML следующим образом (изменения указаны там, где он отображается <select> ). Необходимо выполнить цикл по data массиву и создать по одному <option> для каждого объекта в массиве.

       var myhtml='<form role="form" id="formedit" action="#">' 
             '<div class="box-body">' 
             '  <div class="form-group">' 
             '  <label for="exampleInputName">Product Name</label>' 
             '  <input type="hidden"  id="upmyid" name="editid" value="' obj[0] '">' 
             '  <input type="text" class="form-control" id="upname" placeholder="Product Name" name="editpname" value="' obj[1] '">' 
             '  </div>' 
             '</div>' 
   '<div class="box-body">' 
   '<div class="form-group">' 
   '<label for="exampleInputImage">Image</label>' 
   '<input type="file" class="form-control" id="upimage" placeholder="Image" name="editpimage" value="' obj[2] '">' 
   '</div>' 
   '</div>' 
   '<div class="box-body">' 
   '<div class="form-group">' 
   '<label for="exampleInputCategory">Category</label>' 
   '<select class="form-control select category" style="width: 100%;" name="option2" id="option2">'  
   '<option value="0">Main Menu </option>';
$.each(data, function(index, obj) {
  myhtml  = '<option value="'   obj.acategory_id   '">'   obj.cname   '</option>';
});
 myhtml  = '</select>'  
   '</div>' 
   '</div>' 
'</form>';