2017-06-24 10 views
1

データベースから選択値を変更しようとしていますが、返却フォームはForeachの1つしかありません。私はこの場合の正しい方法を知らない。 私はhttp://jsfiddle.net/YPsqQ/のような結果が欲しいですが、データはデータベースからです。問題は、すべてのデータを解析して表示する方法です。ただ一つではありません。たぶん、Jqueryのループですか?しかし私はそれをする方法を知らない。 ここにコードがありますが、私はCodeigniterを途中で使用しています。あなたはこのコードを使用して、必要に応じて変更することができますAJAXデータベースから選択値を変更する方法

コントローラ

public function prodi_pindah() 
    { 

    if (!$this->login and !$this->admin){ 
     redirect('akademik/logout'); 
    } 
    else 
    { 
     $this->load->model('mahasiswa_model'); 
     $this->mahasiswa_model->prodi_pindah(); 
} 

ビュー

<input type="text" name="ptasal" id="ptasal" class="addresspicker" /> // this input has jquery Autocomplete , 
<input type="hidden" name="id_pt_asal" id="id_pt_asal" /> // this input has ID that sent to model, this ID change whenever ptasal change too 
<select name="id_prodi_asal" id="id_prodi_asal" style=""> 
<option value="">-- Pilih Program Studi--</option> 
</select> 

<script> 
     $(document).ready(function(){ 
    $("#id_prodi_asal").click(function(event){ 
    var formData = { 
      'id_pt_asal': $('input[name=id_pt_asal]').val() 
     }; 
     $.ajax({ 
      type: 'POST', 
      url: '<?=base_url()?>akademik/prodi_pindah', 
      data: formData, 
      dataType: 'json', 
      encode: true 
     })  
     .done(function(data) { 
      console.log(data); 



     if (data.hasil_prodi==true) 
      { 


      } 

     if (data.hasil_prodi==false) 
      { 


      } 
     }) 
    event.preventDefault(); 

    }); 
}); 
</script> 

モデル

public function prodi_pindah() 
    { 


     $id_pt_asal = $this->input->post('id_pt_asal'); 

      $kue_prodi = $this->db->query("SELECT 
      ps.nama_perguruan_tinggi, 
      ps.nama_program_studi, 
      ps.`status`, 
      rjp.nm_jenj_didik, 
      ps.nama_jenjang_pendidikan, 
      ps.id_prodi 
      from ref_prodi ps 
      INNER JOIN ref_jenjang_pendidikan rjp ON ps.id_jenjang_pendidikan=rjp.id_jenj_didik 
      WHERE status = 'A' AND id_perguruan_tinggi = '$id_pt_asal' 

      "); 

     foreach ($kue->result() as $row){ 
     $value = $row->id_prodi; 
     $isi = $row->nama_jenjang_pendidikan.' - '.$row->nama_program_studi;         
     $has = '<option value='.$value.'>'.$isi.'</option>'; 

     } 

     $data['html']="<option value=''>-- Pilih Program Studi--</option>$has"; // I want $has had all result, not just one. Here the problem. 
     $data['hasil_prodi']=TRUE; 
     echo json_encode($data); 

    } 

答えて

2

[OK]をPHP関数から動的にHTMLオプションのリストを返したいです。私は以下で明確にします。

モデル:データベースロジックを扱うため、多くのコントローラで1つのモデルを共有できます。
ビュー:あなたのhtmlはどこにありますか(jsを使用していない場合はphp変数を含む可能性があります)。
コントローラ:あなたのPHPのロジックはどこですか。例えばあなたのビューの配列をマッピングして、別のページに行くなど。

私はあなたのコントローラとモデルコードを正しい場所に置くようあなたのコードを変更しました。また、以前のオプション文字列にオプション文字列を追加していないという問題もありました。私はどこでコードを変更したのかコメントしました。

コントローラ

public function prodi_pindah() 
{ 

if (!$this->login and !$this->admin){ 
    redirect('akademik/logout'); 
} 
else 
{ 
    $this->load->model('mahasiswa_model'); 
    $kue = $this->mahasiswa_model->prodi_pindah(); 

    //Set the $has variable first so that we can append to it. 
    $has = ''; 
    foreach ($kue as $row){ 
     $value = $row->id_prodi; 
     $isi = $row->nama_jenjang_pendidikan.' - '.$row->nama_program_studi; 
     // Now correctly appends $has variable        
     $has .= '<option value='.$value.'>'.$isi.'</option>'; 
    } 
    // Now correctly adds $has 
    $data['html']="<option value=''>-- Pilih Program Studi--</option>" . $has; 
    $data['hasil_prodi']=TRUE; 
    echo json_encode($data); 
    } 
} 

モデル

public function prodi_pindah() 
{ 
    $id_pt_asal = $this->input->post('id_pt_asal'); 

    $kue_prodi = $this->db->query("SELECT 
     ps.nama_perguruan_tinggi, 
     ps.nama_program_studi, 
     ps.`status`, 
     rjp.nm_jenj_didik, 
     ps.nama_jenjang_pendidikan, 
     ps.id_prodi 
     from ref_prodi ps 
     INNER JOIN ref_jenjang_pendidikan rjp ON 
     ps.id_jenjang_pendidikan=rjp.id_jenj_didik 
     WHERE status = 'A' AND id_perguruan_tinggi = '$id_pt_asal' 
    ")->result(); 
    return $kue_prodi; 
}` 
+0

ありがとう、完璧に動作します。私は追加について何も知らなかった。 –

2

。あなたの例を使ってこのコードを作った。あなたは自分の混乱に貢献しているあなたがここにいくつかのMVCのルールを破っているよう

$(document).ready(function(){ 
 
    $('#type').on('change',function(){ 
 
     var itemId = $(this).val(); 
 
     if(itemId){ 
 
      $.ajax({ 
 
       type:'POST', 
 
       url:'<?=base_url()?>akademik/prodi_pindah', 
 
       data:'itemId='+itemId, 
 
       success:function(response){ 
 
       var html= response.html; 
 
        html= '<option value="">Select state</option><option value="543">Alger</option><option value="544">Annaba</option><option value="546">Béchar</option><option value="547">Béjaïa</option><option value="545">Batna</option><option value="548">Biskra</option><option value="549">Blida</option><option value="550">Chlef</option><option value="551">Constantine</option><option value="552">Ghardaïa</option><option value="553">Mostaganem</option><option value="554">Oran</option><option value="555">Sétif</option><option value="556">Sidi Bel Abbès</option><option value="557">Skikda</option><option value="558">Tébessa</option><option value="559">Tiaret</option><option value="560">Tlemcen</option>' 
 
        
 
        $('#size').html(html); 
 
        
 
       } 
 
      }); 
 
     }else{ 
 
      $('#item').html('<option value="">Select Item first</option>'); 
 
      $('#size').html('<option value="">Select Size</option>'); 
 
     } 
 
    }); 
 
    
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="type"> 
 
    <option value="item1Id">item1</option> 
 
    <option value="item2Id">item2</option> 
 
    <option value="item3Id">item3</option> 
 
</select> 
 

 
<select id="size"> 
 
    <option value="">-- select one -- </option> 
 
</select>

1

下記のソリューションを微調整してください。これにより、jQueryでループを学習し、データベースからHtmlへデータを操作します。

コントローラの機能は以下のようになります。

public function prodi_pindah() { 
    if (!$this->login and ! $this->admin): 
     redirect('akademik/logout'); 
    else: 
     $this->load->model('mahasiswa_model'); 
     $kue = $this->mahasiswa_model->prodi_pindah(); 
     if ($kue): 
      $data['status'] = true; 
      $data['records'] = $kue; 
     else: 
      $data['status'] = false; 
     endif; 
     echo json_encode($data); 
    endif; 
} 

あなたのモデルは、以下のもののようになります。

public function prodi_pindah() 
{ 
    $id_pt_asal = $this->input->post('id_pt_asal'); 
    $this->db->select('ps.nama_perguruan_tinggi,ps.nama_program_studi,ps.status,rjp.nm_jenj_didik,ps.nama_jenjang_pendidikan,ps.id_prodi'); 
    $this->db->from('ref_prodi as ps'); 
    $this->db->join('ref_jenjang_pendidikan as rjp','ps.id_jenjang_pendidikan = rjp.id_jenj_didik'); 
    $this->db->where('ps.status','A'); 
    $this->db->where('ps.id_perguruan_tinggi',$id_pt_asal); 
    $query = $this->db->get('ref_prodi as ps'); 
    return $query->result() 
} 

そして最後に、あなたの視野の一部は以下の記述好きになるでしょう。

$(document).on('#id_pt_asal', 'change', function() { 
    var id = $('#id_pt_asal').val(); 
    $.ajax({ 
     type: 'POST', 
     url: '<?=base_url('akademik/prodi_pindah')?>', 
     data: {id_pt_asal: id}, 
     dataType: "json", 
     beforeSend: function() { 
      $('#id_prodi_asal') 
        .empty() 
        .append('<option selected="selected">-- Pilih Program Studi--</option>'); 
     }, 
     success: function(data) { 
      if (data.status) { 
       $.each(data.records, function(i, item) { 
        $('#id_prodi_asal').append($('<option>', { 
         value: item.id_prodi, 
         text: item.nama_jenjang_pendidikan + item.nama_program_studi 
        } 
        )); 
       }); 
      } else { 
       $('#id_prodi_asal') 
        .empty() 
        .append('<option selected="selected">-- Pilih Program Studi--</option>'); 
      } 
     } 
    }); 
}); 

だからここにあなたの条件のための最終的なコードです。それが動作しない場合私に教えてください。

関連する問題