Friday, October 23, 2015

Belajar CodeIgniter (Permainan Tebak Angka)

Kali ini kita akan membuat permainan tebak angka menggunakan CodeIgniter. Yang kita butuhkan adalah sebuah controller dan sebuah view.
Salin kode di bawah ini dan simpa
n sebagai controller dengan nama tebakAngka.php



Keterangan:

1. $choice = rand(1,5); -> ini untuk merandom angka dari 1-5. Variabel ini digunakan untuk merandom operator yang akan ditampilkan.
2. eval('$hasil = ('.$operation.');'); -> ini untuk mengevaluasi secara general syntax php. Digunakan untuk mendapatkan angka dari rumus yang telah kita random.
2. $benar dan $tebakan -> ini digunakan untuk mengecek berapa kali sudah menebak dan berapa kali jumlah jawaban yang benar.

Kemudian kita buat view dengan nama viewTebak.php
Salin kode di bawah ini:

Keterangan:

Semua variabel yang telah kita buat kita masukkan ke dalam hidden input agar dapat dicek oleh function cekJawab dari controller yang sebelumnya kita buat.

Contoh running:


Friday, October 9, 2015

Belajar CodeIgniter (Menggabungkan dari apa yang sudah kita ketahui)

Kali ini kita akan mencoba untuk membangun sebuah sistem pendaftaran mahasiswa baru di mana user mulai dari mendaftar username, e-mail, dan password. Kemudian bagaimana user akan mendapat e-mail notifikasi. Juga apabila data yang diisikan sudah lengkap, maka admin akan mendapat e-mail notifikasi.

Salin kode di bawah dan simpan sebagai controller dengan nama register.php:

<?php
class Register extends CI_Controller{

public function index(){

$this->load->helper(array('url','form'));
$fields = array('username','password','email','nama_depan','nama_belakang');

$data = array();

foreach($fields as $field){
$data[$field] = '';
}

echo "Selamat Datang! Silahkan Daftar";
echo "</br>";
$this->default_page($data);
echo "Sudah punya username? Silahkan ";
echo anchor('register/login','Login');
}

public function default_page($data){

$this->load->helper(array('url','form','email'));

$this->load->view('registration',$data);

}

public function userregister(){
$this->load->helper(array('url','form','email'));

        $this->load->library('form_validation');

$fields = array('username','password','email','nama_depan','nama_belakang');

foreach($fields as $field){
$this->form_validation->set_rules($field, $field, 'required');
}

if ($this->form_validation->run() == FALSE){

$data = array();
foreach ($fields as $field){
$data[$field] = '';
}

$this->load->helper(array('url','form','email'));

$this->load->view('registration',$data);

}

else{

if (valid_email($this->input->post('email')))
{

$recipient = $this->input->post('email');
$subject = "Registrasi Data Mahasiswa (Do not reply)";
$message = 'Registrasi anda berhasil. Silahkan ke localhost/CodeIgniter/index.php/register/login untuk meneruskan pendaftaran.
username anda adalah '.$this->input->post('username').' dan password anda adalah '.$this->input->post('password');

if(send_email($recipient, $subject, $message)){

$columns = array('username','password','email');

$data_mhs = array();
foreach ($columns as $column){
$data_mhs[$column] = $this->input->post($column);
}

$data_mhs['nama_mhs'] = ($this->input->post('nama_depan')).' '.($this->input->post('nama_belakang'));

$this->load->model("Tabel_model", "tabel_model");
$this->tabel_model->save($data_mhs);

echo "Registrasi berhasil! Cek e-mail anda.";
}
}
else
{
echo 'email tidak valid';
$data = array();
foreach ($fields as $field){
$data[$field] = '';
}

$this->load->helper(array('url','form','email'));

$this->load->view('registration',$data);
}


}
}

public function registration($username){
$fields = array('nrp','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] = '';
}
$resultSet = $this->tabel_model->load_user($username);
foreach($resultSet->result() as $row){
$data['nama_mhs'] = $row->nama_mhs;
$data['email'] = $row->email;
}


$data['status'] = 'new';
$data['username'] = $username;

$this->load->helper(array('url','form'));

$this->load->view('form_register',$data);
}

public function login(){
$this->load->helper(array('url','form'));

        $this->load->library('form_validation');

$fields = array('username','password');

foreach($fields as $field){
$this->form_validation->set_rules($field, $field, 'required');
}

if ($this->form_validation->run() == FALSE){
$this->load->helper(array('url','form'));

$this->load->view('login');

}

else{
$this->load->model("Tabel_model", "tabel_model");
$curr_user = $this->input->post('username');
$curr_pass = $this->input->post('password');
$resultSet = $this->tabel_model->load_user($curr_user);
foreach($resultSet->result() as $row){
$username = $row->username;
$password = $row->password;
}

if (($username != $curr_user) || ($password != $curr_pass)){
echo "username atau password salah!";
$this->load->view('login');
}
else{
$this->registration($curr_user);
}

}
}

public function send(){

$config['upload_path'] = './images/';
$config['allowed_types'] = 'gif|jpg|jpeg|png';
$config['max_size'] = '1000';
$config['max_width'] = '2024';
$config['max_heigth'] = '1468';


$this->load->helper(array('url','form'));

        $this->load->library('form_validation');
$this->load->library('upload',$config);

$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','email','username');

$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','jenis_kelamin','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','email');
 

$this->load->model("Tabel_model", "tabel_model");

$data_mhs = array();
foreach($fields as $column){
$data_mhs[$column] = $this->input->post($column);
}

$data_mhs['data_lengkap'] = 1;
 
if($this->upload->do_upload()){
$image['upload_data'] = $this->upload->data();

$config_resize['source_image'] = $image['upload_data']['full_path'];
$config_resize['maintain_ratio'] = TRUE;
$config_resize['width']         = 150;
$config_resize['height']       = 228;
$this->load->library('image_lib', $config_resize);
$this->image_lib->resize();
$data_mhs['image_src'] = $image['upload_data']['full_path'];
}

else{
$data_mhs['image_src'] = '';
}

$recipient = 'admin@mail.com';
$subject = "Registrasi Data Mahasiswa (Do not reply)";
$message = 'Terdapat registrasi baru.
Untuk melihat daftar mahasiswa dengan data lengkap: localhost/CodeIgniter/index.php/register/site_admin/1 .
Untuk melihat daftar mahasiswa dengan data belum lengkap: localhost/CodeIgniter/index.php/register/site_admin/0 .';

if(send_email($recipient, $subject, $message)){

$this->tabel_model->update($this->input->post('username'),$data_mhs);


echo "data tersimpan";
$data['image_src'] = $image['upload_data']['full_path'];
$this->load->helper(array('url','html'));
$this->load->view('form_view',$data);
echo anchor('register','Kembali ke Index');
}
else{
echo "data gagal tersimpan";
$this->load->view('form_register',$data_mhs);
}


}
}

public function view_list($lengkap){
$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($lengkap);
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 site_admin($lengkap){
$this->load->library('pagination');
$this->load->model('Tabel_model','tabel_model');
$resultSet = $this->tabel_model->load();

$config['base_url'] = 'localhost/CodeIgniter/index.php/register/view_list/'.$lengkap;
$config['total_rows'] = $resultSet->num_rows();
$config['per_page'] = 10;

$this->pagination->initialize($config);

echo $this->pagination->create_links();
}

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','username','email');
 
$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();
}


}
?>

Terdapat beberapa function baru, yaitu default_page, userregister, registration, login, serta site_admin. Begitu pula dengan index, juga mengalami perubahan. Default_page ini akan mengarahkan user ke view baru, yaitu untuk meregistrasi e-mail. Sementara userregister ini fungsinya adalah untuk validasi username dan e-mail. Registration bertujuan untuk mengarahkan user ke halaman untuk pelengkapan data. Login untuk login serta site_admin untuk pengaturan data.

Jika kita perhatikan bahwa tabel yang digunakan sama dengan bagian yang lalu. Hanya saja kita menambahkan kolom username, email, image_src, serta password. Masing-masing untuk menyimpan username, e-mail, link untuk foto, dan password.

Kode:
$recipient = $this->input->post('email');
$subject = "Registrasi Data Mahasiswa (Do not reply)";
$message = 'Registrasi anda berhasil. Silahkan ke localhost/CodeIgniter/index.php/register/login untuk meneruskan pendaftaran.
username anda adalah '.$this->input->post('username').' dan password anda adalah '.$this->input->post('password');

if(send_email($recipient, $subject, $message)){

Bertujuan untuk mengirimkan e-mail notifikasi kepada user. Jika pengiriman berhasil, maka data user akan disimpan ke database. Jika tidak, maka user akan melakukan penyimpanan ulang.

Begitu pula kode: 
$recipient = 'admin@mail.com';
$subject = "Registrasi Data Mahasiswa (Do not reply)";
$message = 'Terdapat registrasi baru. Untuk melihat daftar mahasiswa dengan data lengkap: localhost/CodeIgniter/index.php/register/site_admin/1 .
Untuk melihat daftar mahasiswa dengan data belum lengkap: localhost/CodeIgniter/index.php/register/site_admin/0 .';

if(send_email($recipient, $subject, $message)){

Kode ini mengirim e-mail notifikasi pada admin apabila ada user yang melengkapi data.

Kemudian bagian 

$config['upload_path'] = './images/';
$config['allowed_types'] = 'gif|jpg|jpeg|png';
$config['max_size'] = '1000';
$config['max_width'] = '2024';

$config['max_heigth'] = '1468';

$this->load->library('upload',$config);

if($this->upload->do_upload()){
$image['upload_data'] = $this->upload->data();

$config_resize['source_image'] = $image['upload_data']['full_path'];
$config_resize['maintain_ratio'] = TRUE;
$config_resize['width']         = 150;
$config_resize['height']       = 228;
$this->load->library('image_lib', $config_resize);
$this->image_lib->resize();
$data_mhs['image_src'] = $image['upload_data']['full_path'];
}

else{
$data_mhs['image_src'] = '';

}

Adalah untuk upload foto serta menyimpannya dalam server(disk). Kemudian link(path) foto tadi akan disimpan ke dalam database.

public function site_admin($lengkap){
$this->load->library('pagination');
$this->load->model('Tabel_model','tabel_model');
$resultSet = $this->tabel_model->load();

$config['base_url'] = 'localhost/CodeIgniter/index.php/register/view_list/'.$lengkap;
$config['total_rows'] = $resultSet->num_rows();
$config['per_page'] = 10;

$this->pagination->initialize($config);

echo $this->pagination->create_links();
}

Pada dasarnya site_admin adalah untuk melakukan view data mahasiswa, hanya saja dengan parameter kelengkapan data serta dilakukan pagination, membagi maksimal jumlah data yang ditampilkan per-halaman.

Adapun kita akan memerlukan dua view baru, yaitu login.php serta registration.php

Kode untuk registration.php:
<html>
<head>
<title>Pendaftaran Mahasiswa Baru</title>
</head>

<body>
<?php

echo validation_errors();

echo '<h2>Data Calon Mahasiswa</h2>';
echo form_open('register/userregister');
echo form_label('username: ','username');
echo form_input('username',$username);
echo "</br>";
echo form_label('E-Mail: ','email');
echo form_input('email',$email);
echo "</br>";
echo form_label('Password ','password');
echo form_input('password',$password);
echo "</br>";
echo form_label('Nama Depan: ','nama_depan');
echo form_input('nama_depan',$nama_depan);
echo "</br>";
echo form_label('Nama Belakang: ','nama_belakang');
echo form_input('nama_belakang',$nama_belakang);
echo "</br>";
echo form_submit('register_user', 'Daftar!');
echo form_close();

?>
</body>
</html>

Sementara kode untuk login.php:
<html>
<head>
<title>Pendaftaran Mahasiswa Baru</title>
</head>

<body>
<?php

echo validation_errors();

echo '<h2>Data Calon Mahasiswa</h2>';
echo form_open('register/login');
echo form_label('username: ','username');
echo form_input('username','');
echo "</br>";
echo form_label('Password ','password');
echo form_password('password','');
echo "</br>";
echo form_submit('login_user', 'Login');
echo form_close();

?>
</body>

</html>

form_password('password',''); Adalah bentuk inputan berupa password.

Kita juga melakukan modifikasi pada tabel_model.php serta form_view.php dan form_register.php
Pada tabel_model:
<?php
class Tabel_model extends CI_Model{
    
     function __construct()
    {
        parent::__construct();
        
        $this->load->database('akademik');
    }
    
    function save($data)
    {
        $this->db->insert('data_mahasiswa', $data); 
        //echo $this->db->last_query();
    }

function load($lengkap){
$result = $this->db->get_where('data_mahasiswa',array('data_lengkap'=>$lengkap));
return $result;
}

function update($id, $data){
$this->db->set($data);
$this->db->where('username',$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');
}

function load_user($username){
$result=$this>db>get_where('data_mahasiswa',array('username'=>$username);
return $result;
}

}
?>

Pada form_view kita cukup menambahkan echo img($image_src);
Pada form_register kita menambahkan echo form_label('Foto: ','foto_mhs');
echo form_upload('userfile'); setelah membuka form.