Saturday, October 3, 2015

Belajar CodeIgniter (bagian: Model & Database (2))

Pada bagian ini, kita akan melanjutkan form pendaftaran mahasiswa yang telah kita buat. Pertama-tama kita konfigurasi database.php:

$db['akademik'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'akademik',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

Perlu diperhatikan, di sini saya menggunakan database pada b lokal dengan nama database 'akademik' serta driver mysqli. Jika anda memiliki konfigurasi yang berbeda silahkan menggunakan konfigurasi anda sendiri, terutama pada username serta password. Lalu buat sebuah database dengan nama akademik. Setelah itu buat tabel dengan nama data_mahasiswa.


Harap diperhatikan, nama kolom pada tabel harus disesuaikan dengan nama input pada view yang sudah pernah kita buat.

Jika sudah selesai konfigurasi database, kita akan membuat model baru. Di sini saya akan membuat model dengan nama tabel_model.php. File php ini nanti akan disimpan di (folder CodeIgniter)/application/models. Berikut kode-nya:

<?php
class Tabel_model extends CI_Model{
    
     function __construct()
    {
        parent::__construct();
        
        $this->load->database('akademik');
    }
    
    function save($data)
    {
        $this->db->insert('data_mahasiswa', $data); 
    }

    function load(){
$result = $this->db->get('data_mahasiswa');
return $result;
    }

    function update($id, $data){
$this->db->set($data);
$this->db->where('nrp',$id);
$this->db->update('data_mahasiswa');
    }

    function load_single($id){
$query = $this->db->get_where('data_mahasiswa', array('nrp' => $id));
return $query;
     }

    function delete_record($id){
$this->db->where('nrp', $id);
$this->db->delete('data_mahasiswa');
     }
}
?>

Dapat anda lihat, bahwa model ini merupakan 4 fungsi dasar pada database: Insert, Update, Select dan Delete. function insert untuk inserting data, load adalah untuk menampilkan seluruh isi tabel, load_single untuk menampilkan satu record, update untuk melakukan perubahan data, serta delete_record untuk menghapus data. Perlu diperhatikan $data dan $id merupakan sebuah paramater. $data merupakan parameter berbentuk array.

Untuk melakukan insert:  $this->db->insert('data_mahasiswa', $data);
Untuk melakukan select:   $this->db->get('data_mahasiswa'); (perlu variabel penampung)
Untuk kondisi:                   $this->db->where('nrp', $id);
Untuk melakukan delete:  $this->db->delete('data_mahasiswa');
Untuk melakukan update: $this->db->update('data_mahasiswa');
Untuk melakukan set nilai (bisa untuk insert maupun update): $this->db->set($data);

Selanjutnya kita modifikasi controller yang kita buat dahulu. Berikut seluruh line:

<?php
class Register extends CI_Controller{
public function index(){
$fields = array('nrp','nama_mhs','anak_urutan','jumlah_saudara','tempat_lahir','tanggal_lahir',
 'bulan_lahir','tahun_lahir','warga_negara','agama','nama_sma','alamat_sma',
 'prov_sma','jur_sma','nilai_uan','no_telp_mhs',
 'nama_ortu','alamat_ortu','prov_ortu','krj_ayah','krj_ibu','ket_ayah','ket_ibu',
 'alamat_mlg','prov_alamat','no_telp_ortu');
$data = array();
foreach ($fields as $field){
$data[$field] = '';
}
$data['status'] = 'new';
$this->load->helper(array('url','form'));
$this->load->view('form_register',$data);
echo anchor('register/view_list','List Mahasiswa');
}
public function send(){
$this->load->helper(array('url','form'));

        $this->load->library('form_validation');
$this->form_validation->set_rules('nama_mhs', 'Nama Mahasiswa', 'required');
$this->form_validation->set_rules('tempat_lahir', 'Tempat Lahir', 'required');
$this->form_validation->set_rules('tanggal_lahir', 'Tanggl Lahir', 'required');
$this->form_validation->set_rules('bulan_lahir', 'Bulan Lahir', 'required');
$this->form_validation->set_rules('tahun_lahir', 'Tahun Lahir', 'required');
$this->form_validation->set_rules('nama_sma', 'Nama SMA Asal', 'required');
$this->form_validation->set_rules('alamat_sma', 'Alamat SMA Asal', 'required');
$this->form_validation->set_rules('jur_sma', 'Jurusan SMA', 'required');
$this->form_validation->set_rules('nilai_uan', 'Nilai UAN', 'required');
$this->form_validation->set_rules('no_telp_mhs', 'No Telp/HP Mahasiswa', 'required');
$this->form_validation->set_rules('nama_ortu', 'Nama Orang Tua/Wali', 'required');
$this->form_validation->set_rules('alamat_ortu', 'Alamat Orang Tua/Wali', 'required');
if ($this->form_validation->run() == FALSE){
$fields = array('nrp','status','nama_mhs','anak_urutan','jumlah_saudara','tempat_lahir','tanggal_lahir',
 'bulan_lahir','tahun_lahir','warga_negara','agama','nama_sma','alamat_sma',
 'prov_sma','jur_sma','nilai_uan','no_telp_mhs',
 'nama_ortu','alamat_ortu','prov_ortu','krj_ayah','krj_ibu','ket_ayah','ket_ibu',
 'alamat_mlg','prov_alamat','no_telp_ortu');
$data = array();
foreach ($fields as $field){
$data[$field] = $this->input->post($field);
}
$data['nrp'] = '';
$this->load->view('form_register',$data);
}
else{
$data = array();
$data['tabel_mhs'] = array(
    array('Nama',$this->input->post('nama_mhs')),
array('Jenis Kelamin',$this->input->post('jenis_kelamin'),
  'Anak ke',$this->input->post('anak_urutan'),'Jumlah Saudara',$this->input->post('jumlah_saudara')),
array('Tempat/Tanggal Lahir',($this->input->post('tempat_lahir')).'/'.
  ($this->input->post('tanggal_lahir')).' '.($this->input->post('bulan_lahir')).' '.($this->input->post('tahun_lahir'))),
array('Warga Negara',$this->input->post('warga_negara'),'Agama',$this->input->post('agama')),
array('SMA/SMK Asal',$this->input->post('nama_sma')),
array('Alamat SMA/SMK',$this->input->post('alamat_sma')),
array('Provinsi SMA/SMK',$this->input->post('prov_sma')),
array('Jurusan di SMA/SMK',$this->input->post('jur_sma'),'Total Nilai UAN',$this->input->post('nilai_uan')),
array('No. Telp/HP',$this->input->post('no_telp_mhs'))
);
$data['tabel_ortu'] = array(
array('Nama Orang Tua/Wali',$this->input->post('nama_ortu')),
array('Alamat Orang Tua/Wali',$this->input->post('alamat_ortu')),
array('Kota Provinsi',$this->input->post('prov_ortu')),
array('Pekerjaan Ayah',$this->input->post('krj_ayah'),'Pekerjaan Ibu',$this->input->post('krj_ibu')),
array('Keterangan Pekerjaan Ayah',$this->input->post('ket_ayah')),
array('Keterangan Pekerjaan Ibu',$this->input->post('ket_ibu')),
array('Alamat di Malang',$this->input->post('alamat_mlg')),
array('Provinsi',$this->input->post('prov_alamat')),
array('No. Telp/HP:',$this->input->post('no_telp_ortu'))
);
 
$fields = array('nama_mhs','anak_urutan','jumlah_saudara','tempat_lahir','tanggal_lahir',
 'bulan_lahir','tahun_lahir','warga_negara','agama','nama_sma','alamat_sma',
 'prov_sma','jur_sma','nilai_uan','no_telp_mhs',
 'nama_ortu','alamat_ortu','prov_ortu','krj_ayah','krj_ibu','ket_ayah','ket_ibu',
 'alamat_mlg','prov_alamat','no_telp_ortu');
 
$data_mhs = array();
foreach($fields as $column){
$data_mhs[$column] = $this->input->post($column);
}
$this->load->model("Tabel_model", "tabel_model");
if($this->input->post('status')=='new')
{
$this->tabel_model->save($data_mhs);
}
else
{
$this->tabel_model->update($this->input->post('nrp'),$data_mhs);
}
echo "data tersimpan";
$this->load->view('form_view',$data);
$this->load->helper('url');
echo anchor('register','Kembali ke Index');
}
}
public function view_list(){
$this->load->helper('url');
$this->load->model('Tabel_model','tabel_model');
$fields = array('nrp','nama_mhs','anak_urutan','jumlah_saudara','tempat_lahir','tanggal_lahir',
 'bulan_lahir','tahun_lahir','warga_negara','agama','nama_sma','alamat_sma',
 'prov_sma','jur_sma','nilai_uan','no_telp_mhs',
 'nama_ortu','alamat_ortu','prov_ortu','krj_ayah','krj_ibu','ket_ayah','ket_ibu',
 'alamat_mlg','prov_alamat','no_telp_ortu');
$resultSet = $this->tabel_model->load();
foreach($resultSet->result() as $row){
foreach($fields as $column){
echo $row->$column."|";
}
echo anchor("register/edit_mahasiswa/".$row->nrp,'Edit Mahasiswa');
echo " ";
echo anchor("register/delete_mahasiswa/".$row->nrp,'Hapus Mahasiswa');
echo "<br />";
}
}
public function edit_mahasiswa($nrp){
$fields = array('nrp','nama_mhs','anak_urutan','jumlah_saudara','tempat_lahir','tanggal_lahir',
 'bulan_lahir','tahun_lahir','warga_negara','agama','nama_sma','alamat_sma',
 'prov_sma','jur_sma','nilai_uan','no_telp_mhs',
 'nama_ortu','alamat_ortu','prov_ortu','krj_ayah','krj_ibu','ket_ayah','ket_ibu',
 'alamat_mlg','prov_alamat','no_telp_ortu');
 
$this->load->model('Tabel_model','tabel_model');
$resultSet = $this->tabel_model->load_single($nrp);
$data = array();
foreach($resultSet->result() as $row){
foreach($fields as $column){
$data[$column] = $row->$column;
}
}
$data['status'] = 'old';
$this->load->helper(array('form'));
$this->load->view('form_register',$data);
}
public function delete_mahasiswa($nrp){
$this->load->model('Tabel_model','tabel_model');
$this->tabel_model->delete_record($nrp);
echo "Data berhasil dihapus!";
$this->index();
}
}
?>

Untuk memudahkan setiap kali kita akan memanggil form, maka kita akan menambahkan variabel 'nrp' serta 'status' untuk dipass ke dalam form. Guna nrp dan status adalah untuk mendapatkan nrp dari tabel (jika sudah terisi) sementara status untuk mengetahui apakah kita akan mendaftar baru atau mengubah data yang sudah ada.Kita juga menambahkan url link untuk menampilkan data pada tabel, editing, deleting, serta untuk kembali ke index.

Lalu bagaimana kah untuk menampilkan hasil query ke database?
Line berikut akan menghandle cara menampung data hasil query:

$resultSet = $this->tabel_model->load_single($nrp);
$data = array();
foreach($resultSet->result() as $row){
foreach($fields as $column){
$data[$column] = $row->$column;
}
}

Di mana setiap row dalam resultSet akan dibaca berdasarkan kolomnya.

Jika sudah, kita akan memodifikasi untuk menampilkan form. Berikut kode lengkapnya: 

<!DOCTYPE html>
<html>
<head>
<title>Pendaftaran Mahasiswa Baru</title>
</head>
<body>
<?php
echo validation_errors();
echo '<h2>Data Calon Mahasiswa</h2>';
echo '<div>';
$hidden = array('nrp'=>$nrp, 'status'=>$status);
echo form_open('register/send','',$hidden);
echo form_label('Nama: ','nama_mhs');
echo form_input('nama_mhs',$nama_mhs);
echo '<br></br>';
echo form_label('Jenis Kelamin: ','jk');
echo form_radio('jenis_kelamin','laki-laki',TRUE);
echo form_label('Laki-laki','laki-laki');
echo form_radio('jenis_kelamin','perempuan',FALSE);
echo form_label('Perempuan','perempuan');
echo '<br></br>';
echo form_label('Anak ke: ','anak_urutan');
echo form_input('anak_urutan',$anak_urutan);
echo form_label('Jumlah Saudara: ','jumlah_saudara');
echo form_input('jumlah_saudara',$jumlah_saudara);
echo '<br></br>';
echo form_label('Tempat Lahir: ','tempat_lahir');
echo form_input('tempat_lahir',$tempat_lahir);
echo '<br></br>';
echo form_label('Tanggal Lahir: ','tanggal_lahir');
$tanggal = array(
'1' => '1','2' => '2','3' => '3',
'4' => '4','5' => '5','6' => '6',
'7' => '7','8' => '8','9' => '9',
'10' => '10','11' => '11','12' => '12',
'13' => '13','14' => '14','15' => '15',
'16' => '16','17' => '17','18' => '18',
'19' => '19','20' => '20','21' => '21',
'22' => '22','23' => '23','24' => '24',
'25' => '25','26' => '26','27' => '27',
'28' => '28','29' => '29','30' => '30',
'31' => '31'
);
echo form_dropdown('tanggal_lahir', $tanggal, $tanggal_lahir);
$bulan = array(
'Januari' => 'Januari',
'Februari' => 'Februari',
'Maret' => 'Maret',
'April' => 'April',
'Mei' => 'Mei',
'Juni' => 'Juni',
'Juli' => 'Juli',
'Agustus' => 'Agustus',
'September' => 'September',
'Oktober' => 'Oktober',
'November' => 'November',
'Desember' => 'Desember'
);
echo form_dropdown('bulan_lahir', $bulan, $bulan_lahir);
$tahun = array(
'1990' => '1990', 
'1991' => '1991', 
'1992' => '1992', 
'1993' => '1993', 
'1994' => '1994', 
'1995' => '1995', 
'1996' => '1996', 
'1997' => '1997', 
'1998' => '1998', 
'1999' => '1999', 
'2000' => '2000', 
'2001' => '2001'
);
echo form_dropdown('tahun_lahir', $tahun, $tahun_lahir);
echo '<br></br>';
echo form_label('Warga Negara: ','wn');
$nation = array(
'Indonesia' => 'Indonesia',
'Asing' => 'Asing');
echo form_dropdown('warga_negara',$nation,$warga_negara);
$religion = array(
'Islam' => 'Islam',
'Kristen' => 'Kristen',
'Katolik' => 'Katolik',
'Hindu' => 'Hindu',
'Budha' => 'Budha',
'Kong Hu Cu' => 'Kong Hu Cu');
echo form_label('Agama: ', 'agama');
echo form_dropdown('agama',$religion,$agama);
echo '<br></br>';
echo form_label('Nama SMA/SMK: ','nama_sma');
echo form_input('nama_sma',$nama_sma);
echo '<br></br>';
echo form_label('Alamat SMA/SMK: ','alamat_sma');
echo form_input('alamat_sma',$alamat_sma);
echo '<br></br>';
$provinsi = array(
'Nangroe Aceh Darussalam' => 'Nangroe Aceh Darussalam',
'Sumatera Utara' => 'Sumatera Utara',
'Riau' => 'Riau',
'Kepulauan Riau' => 'Kepulauan Riau',
'Kepulauan Bangka Belitung' => 'Kepulauan Bangka Belitung',
'Sumatera Barat' => 'Sumatera Barat',
'Bengkulu' => 'Bengkulu',
'Jambi' => 'Jambi',
'Lampung' => 'Lampung',
'Sumatera Selatan' => 'Sumatera Selatan',
'DKI Jakarta' => 'DKI Jakarta',
'Jawa Barat' => 'Jawa Barat',
'Banten' => 'Banten',
'Jawa Tengah' => 'Jawa Tengah',
'DI Yogyakarta' => 'DI Yogyakarta',
'Jawa Timur' => 'Jawa Timur',
'Bali' => 'Bali',
'Nusa Tenggara Barat' => 'Nusa Tenggara Barat',
'Nusa Tenggara Timur' => 'Nusa Tenggara Timur',
'Kalimantan Barat' => 'Kalimantan Barat',
'Kalimantan Tengah' => 'Kalimantan Tengah',
'Kalimantan Selatan' => 'Kalimantan Selatan',
'Kalimantan Timur' => 'Kalimantan Timur',
'Kalimantan Utara' => 'Kalimantan Utara',
'Sulawesi Utara' => 'Sulawesi Utara',
'Sulawesi Barat' => 'Sulawesi Barat',
'Sulawesi Tengah' => 'Sulawesi Tengah',
'Sulawesi Tenggara' => 'Sulawesi Tenggara',
'Sulawesi Selatan' => 'Sulawesi Selatan',
'Gorontalo' => 'Gorontalo',
'Maluku' => 'Maluku',
'Maluku Utara' => 'Maluku Utara',
'Papua Barat' => 'Papua Barat',
'Papua' => 'Papua',
'Luar Negeri' => 'Luar Negeri'
);
echo form_label('Provinsi SMA/SMK: ', 'prov_sma');
echo form_dropdown('prov_sma',$provinsi,$prov_sma);
echo '<br></br>';
echo form_label('Jurusan di SMA/SMK: ', 'jur_sma');
echo form_input('jur_sma',$jur_sma);
echo form_label('Total Nilai UAN: ', 'nilai_uan');
echo form_input('nilai_uan',$nilai_uan);
echo '<br></br>';
echo form_label('No. Telp/HP: ','no_telp_mhs');
echo form_input('no_telp_mhs',$no_telp_mhs);
echo '<br></br>';
echo '</div>';
echo '<br></br>';
echo '<h2>Data Orang Tua</h2>';
echo '<div>';
echo form_label('Nama Orang Tua/Wali: ','nama_ortu');
echo form_input('nama_ortu',$nama_ortu);
echo '<br></br>';
echo form_label('Alamat Orang Tua/Wali: ','alamat_ortu');
echo form_input('alamat_ortu',$alamat_ortu);
echo '<br></br>';
echo form_label('Provinsi: ', 'prov_ortu');
echo form_dropdown('prov_ortu',$provinsi,$prov_ortu);
echo '<br></br>';
$pekerjaan = array(
'Pegawai Negeri Sipil' => 'Pegawai Negeri Sipil',
'Pegawai Swasta' => 'Pegawai Swasta',
'TNI/POLRI' => 'TNI/POLRI',
'Lainnya' => 'Lainnya');
echo form_label('Pekerjaan Ayah: ','krj_ayah');
echo form_dropdown('krj_ayah',$pekerjaan,$krj_ayah);
echo form_label('Pekerjaan Ibu: ','krj_ibu');
echo form_dropdown('krj_ibu',$pekerjaan,$krj_ibu);
echo '<br></br>';
echo form_label('Keterangan Pekerjaan Ayah: ','ket_ayah');
echo form_input('ket_ayah',$ket_ayah);
echo '<br></br>';
echo form_label('Keterangan Pekerjaan Ibu: ','ket_ibu');
echo form_input('ket_ibu',$ket_ibu);
echo '<br></br>';
echo form_label('Alamat di Malang: ','alamat_mlg');
echo form_input('alamat_mlg',$alamat_mlg);
echo '<br></br>';
echo form_label('Provinsi: ', 'prov_alamat');
echo form_dropdown('prov_alamat',$provinsi,$prov_alamat);
echo form_label('No. Telp/HP: ','no_telp_ortu');
echo form_input('no_telp_ortu',$no_telp_ortu);
echo '<br></br>';
echo form_submit('register_mhs', 'Simpan');
echo form_close();
echo '</div>';
?>
</body>
</html>

Perbedaannya terletak pada $hidden = array('nrp'=>$nrp, 'status'=>$status); serta  echo form_open('register/send','',$hidden); Ini berguna untuk menyembunyikan kedua variabel ini namun tetap bisa diberikan ke controller.

Berikut video contoh jalannya web:


No comments:

Post a Comment