2017-05-14 77 views
0

我在使用下拉列表選擇第一個下拉列表時,根據第一個下拉列表選擇它將顯示第二個下拉列表。每個下拉菜單都有來自數據庫的數據,問題是我想根據選定的下拉菜單將它插入數據庫的新表中。如何將JSON數組插入到數據庫

所有在同一頁上的代碼,這是php。

<?php 
      $sql= mysql_query("SELECT KodeMapel,NamaTema FROM mapel"); 
      while ($row = mysql_fetch_array($sql)) 
      { 
       $tema[] = array("KodeMapel" => $row['KodeMapel'], "val" => $row['NamaTema']); 
      } 

      $query = mysql_query("SELECT KodeMapel, Subtema FROM subtema"); 

      while ($row = mysql_fetch_array($query)) 
      { 
       $subtema[$row['KodeMapel']][] = array("KodeMapel" => $row['KodeMapel'], "val" => $row['Subtema']); 
      } 

      $jsonTema = json_encode($tema); 
      $jsonSubTema = json_encode($subtema); 
     ?> 

這是窗體,包含javascript的就可以了。在JavaScript裏面有php代碼。

<script type='text/javascript'> 
    <?php 
    echo "var tema = $jsonTema;"; 
    echo "var subtema = $jsonSubTema;"; 
    ?> 
    function loadtema(){ 
    var select = document.getElementById("PilihTema"); 
    select.onchange = updateSubTema; 
    for(var i = 0; i < tema.length; i++){ 
     select.options[i] = new Option(tema[i].val,tema[i].KodeMapel);   
    } 
    } 
    function updateSubTema(){ 
    var PilihTema = this; 
    var idtema = this.value; 
    var PilihSubtema = document.getElementById("PilihSubtema"); 
    PilihSubtema.options.length = 0; //delete all options if any present 
    for(var i = 0; i < subtema[idtema].length; i++){ 
     PilihSubtema.options[i] = new Option(subtema[idtema][i].val,subtema[idtema][i].KodeMapel); 
    } 
    } 
</script> 
<body onload='loadtema()'> 
<select id='PilihTema' name='PilihTema' class='form-control11'> 
</select> 

<select id='PilihSubtema' name='PilihSubtema' class='form-control11'> 
</select> 
<button input class="btn btn-success" id="submit" type="submit" name="add" value="Simpan" onclick="return(submitmapel());"/> 
    <i class="fa fa-save fa-fw"></i> Simpan 

回答

0

到目前爲止,我看到在你的代碼的一些錯誤。

select.onchange = updateSubTema; 

您缺少()該函數。應該是select.onchange = updateSubTema();

我不確定var PilihTema = this;實際上是否會選擇任何東西,我個人會按照以下方式進行操作。

loadTema功能:

var select = document.getElementById("PilihTema"); 
select.onchange = updateSubTema(select.value); 

updateTema功能

function updateTema(pilihTema){ 
    //Your code here 
} 

編輯:如果你的意思是你想通過你的for循環增加每次運行一個項目,我建議做了以下方法(我使用jQuery,因爲它在我看來更容易):

$(document).ready(function(){ 
    <?php 
    echo "var tema = $jsonTema;"; 
    echo "var subtema = $jsonSubTema;"; 
    ?> 

    //Load Tema 
    $.each(tema, function (i, item) { 
    //I am unsure as to what you mean by KodeMapel, though if this is associative arrays encoded as JSON, you will want to use item[val] and item[KodeMapel] 
    $("#PilihTema").append(new Option(item.val, item.KodeMapel)); 
    }); 

    //Called when the first select field is changed. 
    $("#PilihTema").change(function(){ 
    //Get value of first select fields' selected item 
    var pilihValue = $("#PilihTema option:checked").val(); 

    //Remove all the options from the second select field 
    $("#PilihSubtema").html(""); 

    //For each subtema, with first select fields value, add option to second select field 
    $.each(subtema[pilihValue], function (i, item) { 
     //Again, I am unsure as to what you mean by KodeMapel, though if this is associative arrays encoded as JSON, you will want to use item[val] and item[KodeMapel] 
     $("#PilihSubtema").append(new Option(item.val, item.KodeMapel)); 
    }); 

    }); 

}); 
+0

@skobaljic好的,沒有後顧之憂,刪除。沒想到實際上有效。 –

+0

謝謝你的回覆。當我嘗試添加()並刪除var這個時,組合框沒有任何顯示。 –

+0

@ graybullet171通過combobox,你的意思是選擇下拉? –