2016-10-04 130 views
2

我正在使用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> 
+0

每当您在PHP中运行您的foreach行时,它会使用最新值覆盖数组的相同部分。每次循环时都需要创建一个新数组(或更好的是一个对象),然后将_that_数组/对象添加到$ mainarray的下一个空索引。实际上,'$ mainarray [] = $ temp;'可能就足够了,它看起来像$ temp已经是一个对象。 – ADyson

+0

然后在javascript中,您需要遍历'obj'并为每个返回的对象打印一个新的'

+0

对不起,但我没有得到你可以请你编辑脚本 – Akhil

回答

0

你运行你的foreach每次在PHP中使用最新值覆盖数组的相同部分。例如如果你的DB有10行返回,那么循环运行10次。因此$mainarray[0]被替换10次,最新值为$temp->id;,其他所有字段的值相同。这意味着您只能将最后一个DB行的值存入您的PHP数组中。

尝试像这样(未经测试,道歉对任何小错误):

型号:

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

这将整个$临时对象放入的$mainarray下一个可用指标。其次,您的JavaScript代码没有设置为处理响应中的多个项目,因此即使要返回多个项目,也只会打印一个数据项目。

查看

1)删除这一行:

var obj=jQuery.parseJSON(data); 

应该没有必要为此 - 在你的PHP $json_encode()将已经返回一个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>'; 
相关问题