2016-10-04 13 views
2

JavaScriptとHTMLを使用して更新しています。値をドロップダウンリストに入れたいと思います。しかし、他のすべてのデータをドロップダウンにループすることはできません。ドロップダウンメニューから他のオプションを選択できるように、すべての値を含むHTMLドロップダウンメニューを作成したいと思います。私はdbから以前の値を取得しています。オプションで残りのカテゴリも取得するにはどうすればよいですか?データベースからデータを取得し、選択リストに入れる

コントローラ

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行を実行するたびに、配列の同じ部分を最新の値で上書きします。 $ main配列の次の空のインデックスに_that_配列/オブジェクトをループして追加するたびに、新しい配列(またはそれでもなおオブジェクト)を作成する必要があります。実際には、 '$ mainarray [] = $ temp;'で十分かもしれませんが、$ tempはすでにオブジェクトのようです。 – ADyson

+0

次にjavascriptで2番目に 'obj'をループし、返された各オブジェクトに対して新しい'

+0

申し訳ありませんが、スクリプトを編集していただけますか? – Akhil

答えて

0

あなたのforeachを実行するたびにPHPでは、配列の同じ部分を最新の値で上書きします。例えばDBから10行が返された場合、ループは10回実行されます。したがって、$mainarray[0]は、最新の値である$temp->id;で10回置き換えられ、他のすべてのフィールドで同じになります。つまり、最後のDB行からPHP配列に値を取得するだけです。

モデル:

がこの(任意の軽微なエラーのテストされていない、謝罪)のようにそれを試してみてください

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

これは$mainarrayの次に使用可能なインデックスに全体の$の一時オブジェクトを配置します。

第2に、JavaScriptコードはレスポンス内の複数のアイテムを処理するように設定されていないため、返されるアイテムが多くても1つのデータアイテムしかプリントされません。

ビュー

1)にこの行を削除します。

var obj=jQuery.parseJSON(data); 

このは必要ないはずです - あなたのPHPで$json_encode()はすでに文字列、JSONオブジェクトではなく返すことになります、あなたはそれを解析する必要はありません。 jQueryはすでにdataをJSONオブジェクトとして認識します。

2)このようなHTML生成コードを更新します(変更は<select>のレンダリング先です)。配列dataをループし、アレイ内の各オブジェクトに対して1つずつ<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>'; 
関連する問題