我正在尝试从不同列中的1个表创建动态下拉菜单,但找不到适合我需求的任何教程
它具有 orang_tua 表,其中具有 n_ibu 和 n_ayah ,但是我不知道如何创建动态下拉列表
这是 orang_tua 表
CREATE TABLE `orang_tua` (
`id` INT(3) NOT NULL AUTO_INCREMENT,
`n_ibu` VARCHAR(100) NOT NULL,
`n_ayah` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`no_tlp` VARCHAR(20) NOT NULL,
`alamat` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=2
;
这是我的视图,但只能在下拉菜单中显示1列值,而该列值仅为 n_ibu
<option value="">-- Pilih dari daftar --</option>
<?php
foreach($all_orang_tua as $orang_tua)
{
$selected = ($orang_tua['id'] == $this->input->post('id_orang_tua')) ? ' selected="selected"' : "";
echo '<option value="'.$orang_tua['id'].'"'.$selected.'>'.$orang_tua['n_ibu'].'</option>';
}
?>
这是模型
<?php
class Siswa_model extends CI_Model
{
function __construct()
{
parent::__construct();
}
/*
* Get siswa by id
*/
function get_siswa($id)
{
return $this->db->get_where('siswa',array('id'=>$id))->row_array();
}
/*
* Get all siswa
*/
function get_all_siswa()
{
$this->db->order_by('id', 'desc');
return $this->db->get('siswa')->result_array();
}
/*
* function to add new siswa
*/
function add_siswa($params)
{
$this->db->insert('siswa',$params);
return $this->db->insert_id();
}
/*
* function to update siswa
*/
function update_siswa($id,$params)
{
$this->db->where('id',$id);
return $this->db->update('siswa',$params);
}
/*
* function to delete siswa
*/
function delete_siswa($id)
{
return $this->db->delete('siswa',array('id'=>$id));
}
/*
* custom function to show index siswa
*/
function get_data_siswa()
{
$this->db->select('sw.id, sw.nama, sw.j_kelamin, sw.tmp_lahir, sw.tgl_lahir, sw.agama, sw.alamat, sw.no_tlp, sw.email, ot.n_ibu, ot.n_ayah, sk.nama_sek');
$this->db->from('siswa sw');
$this->db->join('orang_tua ot', 'ot.id=sw.id_orang_tua');
$this->db->join('sekolah sk', 'sk.id=sw.id_sekolah');
$this->db->distinct('siswa');
return $this->db->get('siswa')->result_array();
}
}
这是控制器
function add()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('email','Email','valid_email|required');
$this->form_validation->set_rules('id_orang_tua','Id Orang Tua','required');
$this->form_validation->set_rules('id_sekolah','Id Sekolah','required');
$this->form_validation->set_rules('nama','Nama','required');
$this->form_validation->set_rules('j_kelamin','J Kelamin','required');
$this->form_validation->set_rules('tmp_lahir','Tmp Lahir','required');
$this->form_validation->set_rules('tgl_lahir','Tgl Lahir','required');
$this->form_validation->set_rules('agama','Agama','required');
$this->form_validation->set_rules('alamat','Alamat','required');
$this->form_validation->set_rules('no_tlp','No Tlp','required');
if($this->form_validation->run())
{
$params = array(
'j_kelamin' => $this->input->post('j_kelamin'),
'id_orang_tua' => $this->input->post('id_orang_tua'),
'id_sekolah' => $this->input->post('id_sekolah'),
'nama' => $this->input->post('nama'),
'tmp_lahir' => $this->input->post('tmp_lahir'),
'tgl_lahir' => $this->input->post('tgl_lahir'),
'agama' => $this->input->post('agama'),
'alamat' => $this->input->post('alamat'),
'no_tlp' => $this->input->post('no_tlp'),
'email' => $this->input->post('email'),
);
$siswa_id = $this->Siswa_model->add_siswa($params);
redirect('siswa/index');
}
else
{
$this->load->model('Orang_tua_model');
$data['all_orang_tua'] = $this->Orang_tua_model->get_all_orang_tua();
$this->load->model('Sekolah_model');
$data['all_sekolah'] = $this->Sekolah_model->get_all_sekolah();
$data['_view'] = 'siswa/add';
$this->load->view('layouts/main',$data);
}
}
这是 orang_tua_model
<?php
class Orang_tua_model extends CI_Model
{
function __construct()
{
parent::__construct();
}
/*
* Get orang_tua by id
*/
function get_orang_tua($id)
{
return $this->db->get_where('orang_tua',array('id'=>$id))->row_array();
}
/*
* Get all orang_tua
*/
function get_all_orang_tua()
{
$this->db->order_by('id', 'desc');
return $this->db->get('orang_tua')->result_array();
}
/*
* function to add new orang_tua
*/
function add_orang_tua($params)
{
$this->db->insert('orang_tua',$params);
return $this->db->insert_id();
}
/*
* function to update orang_tua
*/
function update_orang_tua($id,$params)
{
$this->db->where('id',$id);
return $this->db->update('orang_tua',$params);
}
/*
* function to delete orang_tua
*/
function delete_orang_tua($id)
{
return $this->db->delete('orang_tua',array('id'=>$id));
}
}
我真的想创建2个与 n_ibu 有关联的下拉列表,因此当我选择 n_ibu <时,我可以从同一行 n_ayah 中选择下拉数据/ strong>。我仍然对Codeigniter陌生,希望有人可以帮助我
答案 0 :(得分:0)
在视图页面内的HTML和PHP脚本下方执行以创建动态下拉菜单。
<select>
<option value="">-- Pilih dari daftar --</option>
<?php
if(!empty($all_orang_tua))
{
foreach ($all_orang_tua as $orang_tua)
{
$selectedValue="";
if($orang_tua['id'] == $this->input->post('id_orang_tua'))
{
$selectedValue="selected";
}
?>
<option <?php echo $selectedValue;?> value="<?php echo $orang_tua['id'];?>"><?php echo $orang_tua['n_ibu'];?></option>
<?php
}
}
?>
</select>
我希望使用上面的代码可以解决您的问题。
答案 1 :(得分:0)
据我所知,您必须使用javascript才能实现该功能。
考虑您已经像这样设置了两个select
输入:
<p>
<label for="ibu_select">Nama Ibu</label><br/>
<select name="id_orang_tua" id="ibu_select" >
<option selected>-- Pilih dari daftar --</option>
<?php
foreach($all_orang_tua as $orang_tua)
{
$selected = ($orang_tua['id'] == $this->input->post('id_orang_tua')) ? ' selected="selected"' : "";
?>
<option value="<?= $orang_tua['id'] ?>" data-ayah="<?= $orang_tua['n_ayah'] ?>" <?= $selected ?> ><?= $orang_tua['n_ibu'] ?></option>
<?php
}
?>
</select>
</p>
<p>
<label for="ayah_select">Nama Ayah</label><br/>
<select name="n_ayah" id="ayah_select">
<option id="ayah_select_val">-- Pilih dari daftar --</option>
</select>
</p>
然后,您可以为此使用HTML data-*
属性,因为n_ayah
数据与n_ibu
数据位于同一行,并结合使用onchange
事件监听器在第一个下拉输入上:
<script>
var selection = document.getElementById("ibu_select");
selection.onchange = function(event){
var n_ayah = event.target.options[event.target.selectedIndex].dataset.ayah;
if (n_ayah) {
document.getElementById("ayah_select_val").value = n_ayah;
document.getElementById("ayah_select_val").text = n_ayah;
} else {
document.getElementById("ayah_select_val").value = "";
document.getElementById("ayah_select_val").text = "-- Pilih dari daftar --";
}
};
</script>
脚本将分别根据第一个data-
值分别设置第二个下拉值。
参考文献: