Jumat, 29 Mei 2015

Latihan c++

Latihan-Latihan

1. Buatlah program dengan menggunakan define untuk menghitung volume Tabung
(Rumus Volume Tabung : phi x jari-jari x jari-jari x tinggi) dan Luas Tabung (Rumus
Luas tabung : 2 x phi x jari-jari x tinggi )dimana jari-jari 7 dan tinggi 24.
jawaban:

//dengan menggunakan for
#include<iostream.h>
#include<conio.h>
void main()
{
int i;
for(i=10;i>=1;i--)//menentukan bilangan terbesar ke terkecil
cout<<"  "<<i;
getch();
}

2. Buatlah program untuk mencatat data mahasiswa yang terdiri dari field nama, nim dan
nilai.
jawaban:

#include<iostream.h>
#include<conio.h>
void main ()
{
char nama[20]; //jangan lupa masukan batas char"[]
int nim, nilai;
cout<<"Masukan nama mahasiswa : "<<endl;
cin>>nama; //input nama oleh user
cout<<"Masukan NIM mahasiswa : "<<endl;
cin>>nim;//input nim oleh user
cout<<"Masukan nilai mahasiswa : "<<endl;
cin>>nilai;//input nilai oleh user
cout<<"Nama : "<<nama<<endl;
cout<<"Nim : "<<nim<<endl;
cout<<"Nilai : "<<nilai<<endl;
getch();
}
3. Buatlah program untuk menghitung luas bangunan geometri (bujursangkar,
lingkaran, segitiga dan trapesium). Data masukkan dibaca dari piranti masukkan
dan luas bangun ditampilkan sebagai keluaran.
jawaban:
#include<iostream.h>
#include<conio.h>
#define phi 3.14 //menggunakan define
void main()
{
int kode;
int luas_bujur_sangkar, sisi;
float luas_lingkaran, jari_jari;
int luas_segitiga, alas_segitiga, tinggi_segitiga;
int luas_trapesium, sisi_panjang, sisi_pendek, tinggi_trapesium;
cout<<"Pilih program yang di ingin jadikan !"<<endl;
cout<<"1. Luas Bujur sangkar"<<endl;
cout<<"2. Luas Lingkaran"<<endl;
cout<<"3. Luas Segitiga"<<endl;
cout<<"4. Luas Trapesium"<<endl;
cout<<"\n masukan kode program yang ingin di jalankan = ";cin>>kode;
if (kode==1)
{
cout<"\n masukan sisi bujur sangkar= ";
cin>>sisi;
luas_bujur_sangkar=sisi*sisi;
cout<<"Luas Bujur Sangkar = "<<luas_bujur_sangkar<<endl;
}
else if (kode==2)
{
cout<"\n masukan jari-jari lingkaran = ";
cin>>jari_jari;
luas_lingkaran=phi*jari_jari*jari_jari;
cout<<"Luas Lingkaran = "<<luas_lingkaran<<endl;
}
else if (kode==3)
{
cout<"\n masukan tinggi segitiga = ";
cin>>tinggi_segitiga;
cout<"\n masukan panjang alas segitiga = ";
cin>>alas_segitiga;
luas_segitiga=(tinggi_segitiga*alas_segitiga)/2;
cout<<"Luas segitiga =  "<<luas_segitiga<<endl;
}
else if (kode==4)
{
cout<"\n masukan sisi panjang trapesium = ";
cin>>sisi_panjang;
cout<"\n masukan sisi pendek trapesium = ";
cin>>sisi_pendek;
cout<"\n masukan tinggi trapesium = ";
cin>>tinggi_trapesium;
luas_trapesium=(sisi_panjang-sisi_pendek*tinggi_trapesium)/2;
cout<<"Luas trapesium =  "<<luas_trapesium<endl;
}
else cout<<"\n Kode yang anda masukan salah!";
getch;
}

4. Buatlah program untuk menghitung harga total suatu barang, dimana jumlah
barangnya 5, harga perunit 5203.02.
jawaban:
#include<iostream.h>
#include<conio.h>
#define harga 5203.02
void main ()
{
float jumlah, total;
cout<<"Masukan jumlah barang = ";cin>>jumlah;
total = harga * jumlah;
cout<<"\n yang harus di bayar = "<<total;
getch();
}

5. Buatlah program untuk penggunaan operasi aritmatika yaitu penjumlahan,
pembagian, perkalian, dan pengurangan dengan variabel yang diinputkan.
jawaban:
//program pengurangan operasi aritmatika
#include<iostream.h>
#include<conio.h>
void main ()
{
int kode;
int a,b,c;
float a1,b1,c1;//variabel untuk pembagian
cout<<"Program Operasi Aritmatika"<<endl;
cout<<"1. Penjumlahan"<<endl;
cout<<"2. Pengurangan"<<endl;
cout<<"3. Perkalian"<<endl;
cout<<"4. Pembagian"<<endl;
cout<<"\n Masukan angka kode program = ";cin>>kode;
if(kode==1)
{
cout<<"\n Masukan angka pertama anda = ";cin>>a;
cout<<" Masukan angka kedua anda = ";cin>>b;
c=a+b;
cout<<" Hasil Penjumlahan = "<<c;
}

else if(kode==2)
{
cout<<"\n Masukan angka yang ingin anda kurangi = ";cin>>a;
cout<<" Masukan angka pengurang = ";cin>>b;
c=a-b;
cout<<" Hasil Pengurangan = "<<c;
}

else if(kode==3)
{
cout<<"\n Masukan angka pertama = ";cin>>a;
cout<<" Masukan angka kedua = ";cin>>b;
c=a*b;
cout<<" Hasil Perkalian = "<<c;
}

else if(kode==4)
{
cout<<"\n Masukan angka pertama = ";cin>>a1;
cout<<" Masukan angka kedua = ";cin>>b1;
c1=a1/b1;
cout<<" Hasil Pembagian = "<<c1;
}
else cout<<"\n Kode yang anda masukan salah !";
getch();
}

6. Mencetak sejumlah deret bilangan ganjil antara 1 sampai N, dimana N
dimasukkan oleh user.

jawaban:

//program mencetak deret bilangan ganjil
#include<iostream.h>
#include<conio.h>
void main ()
{
int a,i;
cout<<"Masukan batas bilangan yang ingin di tampilkan = ";cin>>a;
for(i=1;i<=a;i++)//menampilkan angka brurutan lebih kecil sama dengan a
if (i%2!=0)//memilih bagian ganjil atau bukan
cout<<i<<" ";
getch();
}
7. Buatlah program untuk mencari apakah bilangan tersebut ganjil atau genap,
dimana bilangan merupakan piranti masukkan
jawaban:
//program mencetak deret bilangan ganjil
#include<iostream.h>
#include<conio.h>
void main ()
{
int bil;
cout<<"Masukan bilangan = ";cin>>bil;
if(bil%2!=0)//menentukan bilangan yang di masukan ganjil atau genap
cout<<"\n Bilangan Ganjil";
else
cout<<"\n Bilangan Genap";
getch();
}

8. Buatlah program untuk menseleksi suatu bilangan dengan ketentuan sebagai
berikut : 0<=nilai <30 : Nilai rendah
30<=nilai < 60 : Nilai sedang
60<=nilai<=100 : Nilai tinggi
jawaban:
#include<iostream.h>
#include<conio.h>
void main ()
{
int nilai;
cout<<"Masukan nilai = ";cin>>nilai;
if(nilai>0&& nilai<= 30)//&& logika and
cout<<"\n Nilai Rendah" ;
else if(nilai>30 && nilai<= 60)
cout<<"\n Nilai Sedang" ;
else if(nilai>60 && nilai<=100)
cout<<"\n Nilai Tinggi" ;
else
cout<<"\n Salah memasukan nilai !";
getch();
}

9. Buatlah program dalam bentuk menu yang mampu menghitung :
a. Luas dan Keliling Bujur sangkar
b. Luas dan Keliling persegi panjang
c. Luas dan keliling lingkaran

jawaban:

#include<iostream.h>
#include<conio.h>
#define phi 3.14152965
void main ()
{
int kode;
int luas_bj, keliling_bj,sisi;
int panjang_persegi, lebar_persegi, luas_persegi, keliling_persegi;
float luas_lingkaran,keliling_lingkaran,jari;
cout<<"Program menghitung luas dan keliling bangun geometri"<<endl;
cout<<" \n 1.menghitung luas dan keliling bujur sangkar"<<endl;
cout<<" 2.menghitung luas dan keliling persegi panjang"<<endl;
cout<<" 3.menghitung luas dan keliling lingkarang"<<endl;
cout<<"\n Masukan kode program = ";cin>>kode;
if (kode==1)
{
cout<<"masukan panjang sisi Bujur sangkar = ";cin>>sisi;
luas_bj=sisi*sisi;
keliling_bj=4*sisi;
cout<<"\n Luas Bujur Sangkar = "<<luas_bj;
cout<<"\n Kelilingbujur sangkar = "<<keliling_bj;
}
else if(kode==2)
{
cout<<"\n masukan panjang = ";cin>>panjang_persegi;
cout<<" masukan lebar = ";cin>>lebar_persegi;
luas_persegi = panjang_persegi*lebar_persegi;
keliling_persegi= 2*(panjang_persegi+lebar_persegi);
cout<<"\n luas persegi panjang = "<<luas_persegi;
cout<<"\n keliling persegi panjang = "<<keliling_persegi;
}
else if(kode==3)
{
cout<<"\n masukan nilai jari-jari = ";cin>>jari;
luas_lingkaran = phi *jari*jari;
keliling_lingkaran = 2*phi*jari;
cout<<"\n Luas Lingkaran = "<<luas_lingkaran<<endl;
cout<<" Keliling Lingkaran = "<<keliling_lingkaran<<endl;
}
else cout<<"\n kode yang anda masukan salah !";
getch();
}
10. Buatlah program untuk mencetak deret 10 9 8 7 6 5 4 3 2 1
jawaban:
//dengan menggunakan for
#include<iostream.h>
#include<conio.h>
void main()
{
int i;
for(i=10;i>=1;i--)//menentukan bilangan terbesar ke terkecil
cout<<"  "<<i;
getch();
}
//dengan menggunakan while
#include<iostream.h>
#include<conio.h>
void main()
{
int i;
i=10;
while(i>0)
{cout<<i<<endl;
i--;}
getch();
}
11. Buatlah program untuk mencetak (gunakan perulangan while atau for)
* * * *
* * *
* *
*
jawaban:
//dengan menggunakan for
#include<iostream.h>
#include<conio.h>
void main()
{
int i,j;
for(i=1;i<=4;i++){ //"i<=4" harus lebih besar dari"j"
for(j=4;j>=i;j--)
cout<<'*';
cout<<endl;
}
getch();
}
// dengan menggunakan while
#include<iostream.h>
#include<conio.h>
void main()
{
int i,j;
i=1;
while(i<=4)
{j=4;
while(j>=i)
{cout<<'*';
j--;}
cout<<endl;
i++;
}
getch();
}
12. Buatlah program yang menampilkan 5 buah bilangan, yaitu mulai dari bilanagn ke
5 sampai bilangan ke 1 dengan nilai awal bilangan 8. Tampilan bilangan tersebut
adalah menurun dan contohnya adalah : bilangan ke 5, i=3 (diperoleh dari 8-5)dan
seterusnya sampai bilangan 1, i=7 (diperoleh dari 8-1=7)
//dengan menggunakan for
#include<iostream.h>
#include<conio.h>
void main()
{
int a,i,x, hasil;
x=8;
for(a=5;a>=1;a--)//menentukan perulangan menurun
{
hasil = x-a;//rumus menentukan hasil
cout<<x<<" - "<<a<<" = "<<hasil;
cout<<endl;}
getch();
}
//dengan menggunakan while
#include<iostream.h>
#include<conio.h>
void main()
{
int x,y,i, hasil;
x=8;
y=5;
while(y>=1)
{hasil=x-y;
cout<<x<<" - "<<y<<" = "<<hasil<<endl;
y--;}
getch();
}
13. Buatlah fungsi untuk menghitung luas segitiga?
j#include<iostream.h>
#include<conio.h>
float luas_segitiga(int a,int b);
void main()
{
float tinggi,alas,hasil;
cout<<"masukan nilai tinggi = ";cin>>tinggi;
cout<<"masukan nilai alas = ";cin>>alas;
hasil=luas_segitiga(tinggi,alas);
cout<<"Luas SEgitiga = "<<hasil;
getch();
}
float luas_segitiga(int a, int b)
{
return (0.5*a*b);
}
awaban:

2. Buatlah program rekursi untuk mencari Nilai n faktorial
jawaban:
//program rekursi
#include<iostream.h>
#include<conio.h>
long int fak(int n);
void main()
{
int x, nilai;
cout<<"masukan nilai = ";
cin>>nilai;
x=fak(nilai);
cout<<"nilai faktorial = "<<x<<endl;
getch();
}
long int fak (int n) //fungsi faktorial
{
if(n==1||n==0)return 1;//menentukan titik n=1 dan n=0
return n*fak(n-1);//menentukan faktorial

}
14.Buatlah program yang menghitung jumlah elemen dalam suatu array(larik) dengan
array(larik) 1 dimensi { 1,3,5,4,7,2,99,16,45,67,89,45}
jawaban:
#include<stdio.h>
#define SIZE 12
main()
{
int a[SIZE] = {1,2,5,4,7,2,99,16,45,67,89,45};
int indeks,total=0;
for(indeks=0;indeks<=SIZE-1;indeks ++)
total + = a [indeks];
printf ("\n Total setiap elemen array adalah %d",total);
return 0 ;
}
16.misalkan anda diminta membuat algoritma dan pemograman untuk menampilkan bilangan dari 1 sampai 10, dengan pangkatnya masing-masing,. Ada pembatas nilai maksimal yang di simpan adalah 100 sesuai yang telah anda pelajari bahwa bilangan 1 pangkatnya adalah 1 hasil yang di peroleh dari 1*1 kemudian bilangan 2 pangkatnya adlah 4, hasil dari 2*2 sampai bilangan 10 yang pangkatnya adalah 100, hasil ini diperoleh dari 10*10 
jawaban:
/* Program array2.cpp*/
#include<stdio.h>
int main()
{
int square [100];
int i;/*loop index */;
int k;/* the intenger */;
/* calculate the squares */
for(i=0;i<10;i++)
{
k=i+1;
square[i]=k*k;
printf("\n Pangkat dari %d adalah %d",k,square[i]);
}
return 0;

VARIABEL, TIPE DATA

PENGENALAN C++

Setiap program C++ mempunyai bentuk umum seperti di bawah, yaitu:
# prepocessor directive
void main()
{
// Batang Tubuh Program Utama
}
Penjelasan :
1. Include
Adalah salah satu pengarah prepocessor directive yang tersedia pada C++.
Preprocessor selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi. Bentuk
umumnya :
# include <nama_file>
tidak diakhiri dengan tanda semicolon, karena bentuk tersebut bukanlah suatu bentuk
pernyataan, tetapi merupakan prepocessor directive. Baris tersebut menginstrusikan
kepada kompiler yang menyisipkan file lain dalam hal ini file yang berakhiran .h(file
header) yaitu file yang berisi sebagai deklarasi contohnya:
- # include <iostream.h> : diperlukan pada program yang melibatkan objek
cout
- # include <conio.h> : diperlukan bila melibatkan clrscr(),yaitu perintah
untuk membersihkan layar.
- # include <iomanip.h> : diperlukan bila melibatkan setw() yang bermanfaat
untuk mengatur lebar dari suatu tampilan data.
- # include <math.h> : diperlukan pada program yang menggunkan operasi
sqrt () yang bermanfaat untuk operasi matematika
kuadrat.
2.Fungsi main ()
Fungsi ini menjadi awal dan akhir eksekusi program C++. main adalah nama
judul fungsi. Melihat bentuk seperti itu dapat kita ambil kesimpulan bahwa batang tubuh
program utama berada didalam fungsi main( ). Berarti dalam setiap pembuatan program
utama, maka dapat dipastikan seorang pemrogram menggunakan minimal sebuah fungsi.
Pembahasan lebih lanjut mengenai fungsi akan diterangkan kemudian. Yang sekarang
coba ditekankan adalah kita menuliskan program utama kita didalam sebuah fungsi
main().
3. Komentar
Komentar tidak pernah dicompile oleh compiler. Dalam C++ terdapat 2 jenis
komentar, yaitu:
Jenis 1 : /* Komentar anda diletakkan di dalam ini
Bisa mengapit lebih dari satu baris */
Jenis 2 : // Komentar anda diletakkan disini ( hanya bisa perbaris )
4.Tanda Semicolon
Tanda semicolon “ ; ” digunakan untuk mengakhiri sebuah pernyataan. Setiap
pernyataan harus diakhiri dengan sebuah tanda semicolon.
5. Mengenal cout(dibaca : C out)
Pernyataan cout merupakan sebuah objek di dalam C++, yang digunakan untuk
mengarahkan data ke dalam standar output (cetak pada layar)
Contoh :
Tanda “ << “ merupakan sebuah operator yang disebut operator “penyisipan/peletakan”

Langkah menuliskan program dalam C++

Langkah-langkahnya :
1. Bukalah software Turbo C++, akan terlihat tampilan awal Turbo C++
sebagai berikut :


2. Tulis source code program bahasa C++.
Source code C++ dapat ditulis pada text editor Turbo C++.
3. Kompile file dengan (ALT + C atau pilih submenu Compile)
Kompile file dijalankan Untuk mengubah source code menjadi sebuah program,
kita gunakan compiler. Setelah source code tercompile, terbentuklah sebuah file
objek dengan ekstension “ .obj “. File “ .obj “ ini belum merupakan sebuah
program executable.
4. Jalankan Program dengan (CTRL+F9 atau pilih submenu Run)
Setelah kita kompile file yang berisi source code, maka sebagai hasil kompilasi
tersebut kita akan mendapatkan suatu file yang bisa dijalankan (executable file).
Menjalankan program yang kita buat berarti menjalankan file hasil proses
kompilasi tersebut.
5. Untuk menyimpan pilih menu Save As

DASAR ALGORITMA DAN PEMOGRAMAN I

Algoritma adalah urutan aksi-aksi yang dinyatakan dengan jelas dan tidak rancu
untuk memecahkan suatu masalah dalam rentang waktu tertentu. Setiap aksi harus dapat
dikerjakan dan mempunyai efek tertentu.
Algoritma dapat dituliskan dengan banyak cara, mulai dari menggunakan bahasa
alami yang digunakan sehari-hari, simbol grafik bagan alir, sampai menggunakan bahasa
pemograman seperti bahasa C atau C++.

Berbicara tentang C++ biasanya tidak lepas dari C, sebagai bahasa pendahulunya.
Pencipta C adalah Brian W. Kerninghan dan Dennis M. Ritchie pada sekitar tahun 1972,
dan sekitar satu dekade setelahnya diciptakanlah C++, oleh Bjarne Stroustrup dari
Laboratorium Bell, AT&T, pada tahun 1983. C++ cukup kompatibel dengan bahasa
pendahulunya C. Pada mulanya C++ disebut “ a better C “. Nama C++ sendiri diberikan
oleh Rick Mascitti pada tahun 1983, yang berasal dari operator increment pada bahasa C.
Keistimewaan yang sangat berari dari C++ ini adalah karena bahasa ini mendukung
pemrograman yang berorientasi objek ( OOP / Object Oriented Programming).

Kamis, 28 Mei 2015

Tutorial PHP : Membuat Aplikasi dengan CodeIgniter Part-6 (Aplikasi Travel)

Tutorial PHP : Membuat Aplikasi dengan CodeIgniter Part-6 (Aplikasi Travel)

Membuat Aplikasi CRUD menggunakan CodeIgniter pasti sudah bertebaran dimana-mana, disini  kita coba membuat aplikasi CRUD dengan 3 kriteria besar dalam studi kasus aplikasi travel (Pengelolaan Data Manufaktur).
  1. Bagaimana cara membuat stored procedure pada mysql
  2. Penerapan Audit Log pada aplikasi (Contoh Dasar Lihat Disini)
  3. Penggunaan jqGrid pada CodeIgniter. (Fungsi-fungsi Terkait JQGrid Dilihat disini)

TAMPILAN APLIKASI

Aplikasi Crud Dengan Code Igniter
Aplikasi Crud Dengan Code Igniter

Inisialisasi Library JQGRID

Untuk inisialisasi sebetulnya dapat kita lihat pada artikel sebelumnya, yakni saat kita membuat template. Buka file  /application/views/layout_dashboard/import-doctype.php
[php] // Bagian jQuery + JQueryUI
<style type="text/css">@import url("<?php echo base_url().C_CSS; ?>themes/smoothness/jquery.ui.all.css");</style>
<style type="text/css">@import url("<?php echo base_url().C_CSS; ?>themes/smoothness/jquery-ui-1.8.17.custom.css");</style> <script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery-ui-1.8.17.custom.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/external/jquery.bgiframe-2.1.2.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.effects.core.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.dialog.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.position.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.button.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.datepicker.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.tabs.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.autocomplete.js"></script>
<link rel="stylesheet" href="<?php echo base_url().C_CSS; ?>all.setting.css" type="text/css" media="screen" />
<!-- CSS + JS PLUGIN - GRID //-->
<link rel="stylesheet" type="text/css" media="screen" href="<?php echo base_url().C_JS; ?>jquery/grid/css/ui.jqgrid.css"/>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/grid/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/grid/js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/grid/js/jquery.jqGrid.min.js"></script>
[/php]

Pembuatan Menu Berdasarkan HakAkses

Untuk membuat menu berdasarkan hak akses dapat dilihat dibagian Login User. Dimana bila dijelaskan table-table yang terkait diantaranya :
  • Table conf_modul
  • Table conf_submodul
  • Table user
  • Table hakses
  • Table LOG
Kita ambil salah satu contoh satu untuk pengelolaan data master, yakni master manufaktur mobil atau produsen mobil.

DATABASE : TABLE, STORED PROCEDURE / FUNCTION

Untuk langkah pertama kita buat 1 paket kebutuhan untuk audit log, dimana ini berfungsi untuk mencatat seluruh kegiatan Proses INSERT/UPDATE/DELETE

TABLE TLOG

[sql] DROP TABLE IF EXISTS `t_log`;
CREATE TABLE IF NOT EXISTS `t_log` (
`logID` varchar(64) NOT NULL DEFAULT '',
`logAktivitas` enum('INSERT','UPDATE','DELETE') NOT NULL DEFAULT 'INSERT',
`logTable` varchar(50) DEFAULT NULL,
`logPenjelasan` text,
`logKomputer` varchar(64) DEFAULT NULL,
`logTerakhir` datetime DEFAULT NULL,
`logUser` varchar(50) DEFAULT NULL,
PRIMARY KEY (`logID`,`logAktivitas`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
[/sql]

PROCEDURE INSERT TLOG

[sql] DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_tlog_insert`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tlog_insert`(IN `i_aktivitas` varchar(15), IN `i_table` varchar(50), IN `i_penjelasan` text, IN `i_alamatIP` varchar(150), IN `i_user` varchar(50))
BEGIN
#Routine body goes here...
DECLARE logid VARCHAR(150);
SET logid = UUID(); INSERT INTO t_log
(logID, logAktivitas, logTable, logPenjelasan, logKomputer, logTerakhir, logUser)
VALUES
(logid, i_aktivitas, i_table,i_penjelasan,i_alamatIP,SYSDATE(),i_user);
END$$
[/sql] Selesai dengan urusan Loging. kita buat Fungsionalitas aplikasi untuk mengolah data Manufaktur 😀

FUNCTION fn_trefmanufaktur_insert

Fungsi ini kita akan butuhkan untuk proses insert data manufaktur
[sql] DELIMITER $$
DROP FUNCTION IF EXISTS `fn_trefmanufaktur_insert`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_trefmanufaktur_insert`(`i_manufakturID` varchar(50),`i_manufakturNama` varchar(50), `i_alamatIP` varchar(64),`i_user` varchar(64)) RETURNS int(11)
MODIFIES SQL DATA
BEGIN
/* Declare Boolean-like variables as FALSE. */
DECLARE lv_return_value INT DEFAULT FALSE;
DECLARE lv_error_value INT DEFAULT FALSE;
DECLARE sqlStatement VARCHAR(2500);
/* Declare a generic exit handler to reset error control variable to true. */
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET lv_error_value := TRUE;
/* Insert statement with auto commit enabled. */
INSERT INTO tref_manufaktur (tref_manufaktur.manufakturID,tref_manufaktur.manufakturNama) VALUES (i_manufakturID,i_manufakturNama);
/* inisialisasi nilai log */
SET sqlStatement = CONCAT('manufakturID','=',i_manufakturID,'|','manufakturNama','=',i_manufakturNama);
/* catat log */
CALL sp_tlog_insert('INSERT','TREF_MANUFAKTUR',sqlStatement,i_alamatIP,i_user);
/* True unless the CONTINUE HANDLER disables the error control variable. */
IF lv_error_value = FALSE THEN
SET lv_return_value := TRUE;
END IF;
/* Return local variable. */
RETURN lv_return_value;
END$$
[/sql]

STORED PROCEDURE sp_manufaktur_insert

Fungsi ini kita akan butuhkan untuk proses insert data manufaktur serta log
[sql] DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_manufaktur_insert`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_manufaktur_insert`(IN `i_manufakturID` varchar(50),IN `i_manufakturNama` varchar(50), IN `i_alamatIP` varchar(150),IN `i_user` varchar(50))
BEGIN
#Routine body goes here...
/* Declare a control variable that manages transaction
success or failure. */
DECLARE lv_success_value INT DEFAULT FALSE;
/* Start a transaction context. */
START TRANSACTION;
/* Set a SAVEPOINT in the transaction context. */
SAVEPOINT before_transaction;
/* Call the function. */
SET lv_success_value := fn_trefmanufaktur_insert(i_manufakturID,i_manufakturNama,i_alamatIP,i_user);
/* Check the status of the control variable, and commit
or rollback the transaction. */
IF lv_success_value = TRUE THEN
COMMIT;
SELECT 'OK' AS HASIL;
ELSE
ROLLBACK TO before_transaction;
SELECT 'NOK' AS HASIL;
END IF;
END$$
[/sql]

FUNCTION fn_trefmanufaktur_update

Fungsi ini kita akan butuhkan untuk proses perubahan data manufaktur
[sql] DELIMITER $$
DROP FUNCTION IF EXISTS `fn_trefmanufaktur_update`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_trefmanufaktur_update`(`i_manufakturID` varchar(50),`i_manufakturNama` varchar(50), `i_alamatIP` varchar(64),`i_user` varchar(64)) RETURNS int(11)
BEGIN
/* Declare Boolean-like variables as FALSE. */
DECLARE lv_return_value INT DEFAULT FALSE;
DECLARE lv_error_value INT DEFAULT FALSE;
DECLARE sqlStatement VARCHAR(2500);
/* Declare a generic exit handler to reset error control variable to true. */
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET lv_error_value := TRUE;
/* Update statement with auto commit enabled. */
UPDATE tref_manufaktur SET manufakturNama=i_manufakturNama WHERE manufakturID=i_manufakturID;
/* inisialisasi nilai log */
SET sqlStatement = CONCAT('manufakturID','=',i_manufakturID,'|','manufakturNama','=',i_manufakturNama);
/* catat log */
CALL sp_tlog_insert('UPDATE','TREF_MANUFAKTUR',sqlStatement,i_alamatIP,i_user);
/* True unless the CONTINUE HANDLER disables the error control variable. */
IF lv_error_value = FALSE THEN
SET lv_return_value := TRUE;
END IF;
/* Return local variable. */
RETURN lv_return_value;
END$$
[/sql]

STORED PROCEDURE sp_manufaktur_update

Fungsi ini kita akan butuhkan untuk proses perubahan data manufaktur serta log
[sql] DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_manufaktur_update`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_manufaktur_update`(IN `i_manufakturID` varchar(50),IN `i_manufakturNama` varchar(50), IN `i_alamatIP` varchar(150),IN `i_user` varchar(50))
BEGIN
#Routine body goes here...
/* Declare a control variable that manages transaction
success or failure. */
DECLARE lv_success_value INT DEFAULT FALSE;
/* Start a transaction context. */
START TRANSACTION;
/* Set a SAVEPOINT in the transaction context. */
SAVEPOINT before_transaction;
/* Call the function. */
SET lv_success_value := fn_trefmanufaktur_update(i_manufakturID,i_manufakturNama,i_alamatIP,i_user);
/* Check the status of the control variable, and commit
or rollback the transaction. */
IF lv_success_value = TRUE THEN
COMMIT;
SELECT 'OK' AS HASIL;
ELSE
ROLLBACK TO before_transaction;
SELECT 'NOK' AS HASIL;
END IF;
END$$
[/sql]

FUNCTION fn_trefmanufaktur_delete

Fungsi ini kita akan butuhkan untuk proses penghapusan data manufaktur
[sql] DELIMITER $$
DROP FUNCTION IF EXISTS `fn_trefmanufaktur_delete`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `fn_trefmanufaktur_delete`(`i_manufakturID` varchar(50),`i_manufakturNama` varchar(50), `i_alamatIP` varchar(64),`i_user` varchar(64)) RETURNS int(11)
BEGIN
/* Declare Boolean-like variables as FALSE. */
DECLARE lv_return_value INT DEFAULT FALSE;
DECLARE lv_error_value INT DEFAULT FALSE;
DECLARE sqlStatement VARCHAR(2500);
/* Declare a generic exit handler to reset error control variable to true. */
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET lv_error_value := TRUE;
/* DELETE statement with auto commit enabled. */
DELETE FROM tref_manufaktur WHERE manufakturID=i_manufakturID;
/* inisialisasi nilai log */
SET sqlStatement = CONCAT('manufakturID','=',i_manufakturID,'|','manufakturNama','=',i_manufakturNama);
/* catat log */
CALL sp_tlog_insert('DELETE','TREF_MANUFAKTUR',sqlStatement,i_alamatIP,i_user);
/* True unless the CONTINUE HANDLER disables the error control variable. */
IF lv_error_value = FALSE THEN
SET lv_return_value := TRUE;
END IF;
/* Return local variable. */
RETURN lv_return_value;
END$$
[/sql]

STORED PROCEDURE sp_manufaktur_delete

Fungsi ini kita akan butuhkan untuk proses penghapusan data manufaktur serta log
[sql] DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_manufaktur_delete`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_manufaktur_delete`(IN `i_manufakturID` varchar(50),IN `i_manufakturNama` varchar(50), IN `i_alamatIP` varchar(150),IN `i_user` varchar(50))
BEGIN
#Routine body goes here...
/* Declare a control variable that manages transaction
success or failure. */
DECLARE lv_success_value INT DEFAULT FALSE;
/* Start a transaction context. */
START TRANSACTION;
/* Set a SAVEPOINT in the transaction context. */
SAVEPOINT before_transaction;
/* Call the function. */
SET lv_success_value := fn_trefmanufaktur_delete(i_manufakturID,i_manufakturNama,i_alamatIP,i_user);
/* Check the status of the control variable, and commit
or rollback the transaction. */
IF lv_success_value = TRUE THEN
COMMIT;
SELECT 'OK' AS HASIL;
ELSE
ROLLBACK TO before_transaction;
SELECT 'NOK' AS HASIL;
END IF;
END$$
[/sql]

^_^ Seteleah kita persiapkan semua kebutuhan akses data sekarang kita beralih ke sisi aplikasi namun masih dalam sisi server

CONTROLLER (application/controllers/Trefmanufaktur.php)

Controller ini kita gunakan untuk memproses semua data manufaktur. untuk penjelasan bisa dilihat setiap baris comment pada baris perintah
Pertama kita buat kerangka seperti dibawah :
[php] class Trefmanufaktur extends CI_Controller {
private $nomor_manufaktur_baru; /* untuk generate nomor baru */
private $table; /* mendefinisikan table */
private $primaryKey; /* mendefinisikan promary Key */
private $username; /* menampung user yang login untuk kebutuhan log */
private $conn; /* menampung variable koneksi */
function __construct(){} /* menginisialisasi nilai awal pada class */
public function index(){} /* event index */
/* mendapatkan data record dari berdasarkan record yang dipilih pada grid */
public function getDataManufaktur(){}
/* menghapus record */
public function delete()
/* merubah data */
public function update()
/* memasukan data baru */
public function entry()
/* menampilkan data */
public function gridManufaktur(){}
[/php]

__construct

[php] function __construct(){ parent::__construct();
/* mendeklarasikan, meng-inisialisasi variable usernip sebagai penampun session nip */
$this->usernip = $this->session->userdata('nip');
/* membangun koneksi dengan melakukan panggilan class citdbase */
$this->conn = new Citdbase();
/* pengecekan, apakah sudah ada yang login atau belum */
if (($this->usernip == '') || (!isset ($this->usernip)))
{
/* jika belum login, halaman akan terlempar ke halaman login */
redirect('home', 'refresh');
/* jika tidak berhasil tukarkan dengan perintah ini */
// $this->load->view('login_form');
}
else{
/* inisialisasi sql statement untuk memanggil stored procedure */
$sql = "call sp_GetUserByNIP(?)";
/* ekseskusi stored procedure */
$result = $this->db->query($sql, array(mysql_escape_string($this->usernip)),TRUE)->result();
/* retrieve nilai/hasil dari hasil eksekusi stored procedure */
foreach ($result as $row) {
$this->username = $row->username;
}
}
/* inisialisasi nama table dan primarykey dari table */
$this->table = "tref_manufaktur";
$this->primaryKey = "manufakturID";
/* inisialisasi nomor manufaktur baru */
$this->nomor_manufaktur_baru= $this->conn->CIT_AUTONUMBER($this->table, $this->primaryKey, 'M', '2');
}
[/php]

Action Index

[php] public function index(){
/* inisialisasi variable yang dibutuhkan pada template dan form utama admin */
$view = array(
'mainview'=>'view_tref_manufaktur'
,'namaform'=>'FORM MANUFAKTUR'
,'information_message'=>'REFERENSI MANUFAKTUR'
,'title'=>'DASHBOARD '.APP_NAME); /* inisialisasi nilai textbox */
$textbox = array('manufakturID'=> $this->nomor_manufaktur_baru
, 'manufakturNama'=>'');
/* merge array */
$data = array_merge($view,$textbox);
/* render */
$this->load->view('view_tref_manufaktur',$data);
}
[/php]

Action Entry/Insert Data

[php] /* memasukan data baru */
public function entry(){
/* mendapatkan variabel post dari text-box nama manufaktur pada view */
$manufakturNama = $_POST["manufakturNama"]; /* mendapatkan variabel post dari text-box id manufaktur pada view */
/* $manufakturID = $_POST["manufakturID"]; */
/* karena proses insert, dan menghindari duplikasi entry pada kolom manufakturID, generate ulang untuk ID Manufaktur */
$manufakturID = $this->conn->CIT_AUTONUMBER($this->table, $this->primaryKey, 'M', '2');
/* deklarasi nilai balik proses penyimpanan */
$return = array();
/* jika nama manufaktur tidak kosong, maka eksekusi stored procedure penyimpanan manufaktur */
if((isset($manufakturNama)) && (trim($manufakturNama)!="")){
/* inisialisasi sql statement untuk memanggil stored procedure */
$sql = "call sp_manufaktur_insert(?,?,?,?)";
/* ekseskusi stored procedure, dengan memberikan parameter yang dibutuhkan oleh stored procedure */
$result = $this->db->query($sql
, array(
mysql_escape_string($manufakturID)
, mysql_escape_string($manufakturNama)
, $_SERVER["REMOTE_ADDR"] , $this->username
),TRUE)->result();
/* inisialisasi hasil kembalian pemanggilan stored procedure */
$hasil = 0;
foreach ($result as $row) {
$hasil = $row->HASIL;
}
if($hasil == 'OK'){
/* jika OK, maka tampilkan pesan berhasil */
$return = array('alert'=>'<h4 class="alert_success">DATA BERHASIL DISIMPAN</h4>');
}else{
/* jika NOK, maka tampilkan pesan gagal */
$return = array('alert'=>'<h4 class="alert_error">DATA GAGAL DISIMPAN</h4>');
}
}else{
/* jika nama manufaktur kosong, maka tampilkan pesan error */
$return = array('alert'=>'<h4 class="alert_error">A Success Message</h4>');
}
/* render pesan sebagai nilai balik */
echo json_encode($return);
}
[/php]

Action Update Data

[php] /* merubah data */
public function update(){
/* mendapatkan variabel post dari text-box nama manufaktur pada view */
$manufakturNama = $_POST["manufakturNama"]; /* mendapatkan variabel post dari text-box id manufaktur pada view */
$manufakturID = $_POST["manufakturID"];
/* deklarasi nilai balik proses penyimpanan */
$return = array();
/* jika nama manufaktur tidak kosong, maka eksekusi stored procedure penyimpanan manufaktur */
if((isset($manufakturNama)) && (trim($manufakturNama)!="")){
/* inisialisasi sql statement untuk memanggil stored procedure */
$sql = "call sp_manufaktur_update(?,?,?,?)";
/* ekseskusi stored procedure, dengan memberikan parameter yang dibutuhkan oleh stored procedure */
$result = $this->db->query($sql
, array(
mysql_escape_string($manufakturID)
, mysql_escape_string($manufakturNama)
, $_SERVER["REMOTE_ADDR"] , $this->username
),TRUE)->result();
/* inisialisasi hasil kembalian pemanggilan stored procedure */
$hasil = 0;
foreach ($result as $row) {
$hasil = $row->HASIL;
}
if($hasil == 'OK'){
/* jika OK, maka tampilkan pesan berhasil */
$return = array('alert'=>'<h4 class="alert_success">DATA BERHASIL DISIMPAN</h4>');
}else{
/* jika NOK, maka tampilkan pesan gagal */
$return = array('alert'=>'<h4 class="alert_error">DATA GAGAL DISIMPAN</h4>');
}
}else{
/* jika nama manufaktur kosong, maka tampilkan pesan error */
$return = array('alert'=>'<h4 class="alert_error">A Success Message</h4>');
}
/* render pesan sebagai nilai balik */
echo json_encode($return);
}
[/php]

Action Delete Data

[php] /* menghapus record */
public function delete(){ /* mendapatkan variabel post dari text-box id manufaktur pada view */
$manufakturID = $_POST["manufakturID"];
$manufakturNama = $_POST["manufakturNama"];
/* deklarasi nilai balik proses penyimpanan */
$return = array();
/* inisialisasi sql statement untuk memanggil stored procedure */
$sql = "call sp_manufaktur_delete(?,?,?,?)";
/* ekseskusi stored procedure, dengan memberikan parameter yang dibutuhkan oleh stored procedure */
$result = $this->db->query($sql
, array(
mysql_escape_string($manufakturID)
, mysql_escape_string($manufakturNama)
, $_SERVER["REMOTE_ADDR"] , $this->username
),TRUE)->result();
/* inisialisasi hasil kembalian pemanggilan stored procedure */
$hasil = 0;
foreach ($result as $row) {
$hasil = $row->HASIL;
}
if($hasil == 'OK'){
/* jika OK, maka tampilkan pesan berhasil */
$return = array('alert'=>'<h4 class="alert_success">DATA BERHASIL DIHAPUS</h4>');
}else{
/* jika NOK, maka tampilkan pesan gagal */
$return = array('alert'=>'<h4 class="alert_error">DATA GAGAL DIHAPUS</h4>');
}
/* render pesan sebagai nilai balik */
echo json_encode($return);
}
[/php]

Action SELECT Data dalam grid

[php] /* menampilkan data */
public function gridManufaktur(){
/* inisialisasi variable index untuk melakukan sorting pada grid */
$sidx = $_REQUEST['sidx']; /* inisialisasi metode sorting pada grid */
$sord = $_REQUEST['sord'];
/* inisialisasi halaman yang sedang diakses pada grid */
$page = $_REQUEST['page'];
/* inisialisasi jumlah row yang diakses setiap kali tampil grid */
$limit = $_REQUEST['rows'];
/* inisialisasi koneksi */
// $cn = new Citdbase(); jika tidak menggunakan variable global
$data = $this->conn->CIT_JQGRID('tref_manufaktur');
/* mendapatkan jumlah data */
$count = count($data);
/* jika data > 0 , total halaman adalah hasil pembulatan dari jumlah data dibagi batas data yang tampil */
/* jika data = 0 , total halaman adalah 0 */
if( $count > 0 ) {
$total_pages = ceil($count/$limit);
} else {
$total_pages = 0;
}
/* jika halaman > jumlah halaman , halaman = jumlah halaman*/
if ($page > $total_pages) $page=$total_pages;
/* mendapatkan nilai awal untuk query */
$start = $limit*$page - $limit;
/* jika nilai awal < 0 , maka nilai awal di set menjadi 0*/
if ($start<0) $start=0;
/* membentuk queri dengan limit dan start*/
$row = $this->conn->CIT_JQGRID('tref_manufaktur',$sidx, $sord, $start, $limit);
$responce->page = $page;
$responce->total = $total_pages;
$responce->records = $count;
$i=0;
$rowId = 1;
/* extract data hasil eksekusi dan tempelkan pada array untuk dimasukan kedalam grid*/
foreach ($row as $val => $r) {
$responce->rows[$i]['manufakturID']=$r['manufakturID'];
$responce->rows[$i]['cell']=array(
$r['manufakturID'],
$r['manufakturNama'] );
$i++;
}
/* encode array kedalam bentuk json */
echo json_encode($responce);
}
[/php]

Action mendapatkan nilai berdasarkan ID

[php] public function getDataManufaktur(){
/* mendapatkan variabel post manufakturID */
$manufakturID = $_POST["manufakturID"]; /* mendapatkan nilai yang dibutuhkan berdasarkan variabel yang dikirim */
$manufakturNama = $this->conn->CIT_GETSOMETHING('manufakturNama', $this->table, array($this->primaryKey=>$manufakturID));
/* simpan nilai yang dibutuhkan berdasarkan variabel yang dikirim kedalam variabel array untuk diencode kedalam bentuk jSon */
$return = array('manufakturNama'=>$manufakturNama);
echo json_encode($return);
}
[/php]

Setelah kita membuat bagian back-end, kita beranjak ke bagian View
.

view_tref_manufaktur

[php] <div id="notif"></div>
<article class="module width_full">
<header><h3><?php echo $namaform; ?></h3></header>
<div class="module_content">
<a class="ui-state-default ui-corner-all" id="new" href="javascript:void(0)"><span class="ui-icon ui-icon-gear"></span>Baru/Batal</a>
<a class="ui-state-default ui-corner-all" id="save" href="javascript:void(0)"><span class="ui-icon ui-icon-disk"></span>Simpan</a>
<a class="ui-state-default ui-corner-all" style="display: none;" id="update" href="javascript:void(0)"><span class="ui-icon ui-icon-disk"></span>Update</a>
<a class="ui-state-default ui-corner-all" id="delete" href="javascript:void(0)"><span class="ui-icon ui-icon-trash"></span>Hapus</a>
<a class="ui-state-default ui-corner-all" id="edit" href="javascript:void(0)"><span class="ui-icon ui-icon-pencil"></span>Edit</a>
<fieldset>
<label>ENTRY / EDIT MANUFAKTUR</label>
<input type="hidden" name="t-manufakturID" id="t-manufakturID" value="<?php echo $manufakturID;?>"/>
<input type="text" name="t-manufakturNama" id="t-manufakturNama" value="<?php echo $manufakturNama;?>"/>
</fieldset>
<div class="clear"></div>
</div>
</article><!-- end of stats article -->
<article class="module width_full">
<header><h3>DATA MANUFAKTUR</h3></header>
<div class="module_content">
<table align="center" style="text-align: center;" id="gManufaktur"></table>
<div id="pManufaktur"></div>
<div class="clear"></div> <div class="clear"></div>
</div>
</article><!-- end of stats article -->
<script type="text/javascript" src="<?php echo base_url().C_JS;?>application/grid-manufaktur.js"></script>
[/php]

Kemudian langkah terakhir kita membuat file Javascript untuk pemrosesan tombol dan grid. buat 1 file difolder _assets/js/application/

grid-manufaktur.js

[javascript] $(function(){
var lastsel;
jQuery("#gManufaktur").jqGrid({
url:'Trefmanufaktur/gridManufaktur',
datatype: "json",
colNames:['ID', 'NAMA'],
colModel:[
{name :'manufakturID',index:'manufakturID',width : 50},
{name :'manufakturNama',index:'manufakturNama',editable:true,width:150}
],
rownumbers : true,
rowNum : 10,
autowidth : true,
height : '100%',
multiselect : true,
rowList : [10,20,30],
pager : jQuery('#pManufaktur'),
sortname : 'manufakturID',
viewrecords : true,
sortorder : "ASC",
loadComplete:function(){
$("#gManufaktur").hideCol('manufakturID');
},onSelectRow:function(id){
var id = $("#gManufaktur").getRowData(id)['manufakturID'];
var name = $("#gManufaktur").getRowData(id)['manufakturNama'];
$("#delete").show('fast');
//jQuery(this).editRow(id, true);
}
}).navGrid('#pManufaktur',{edit:true,add:true,del:false});
});
/* tombol penyimpanan */
$("#save").click(function(){
$.post("Trefmanufaktur/entry",{
manufakturID : $("#t-manufakturID").val()
, manufakturNama : $("#t-manufakturNama").val()
},function(e){
$("#notif").html(e.alert);
$("#gManufaktur").trigger('reloadGrid');
},'json');
});
/* tombol perubahan data */
$("#update").click(function(){
$.post("Trefmanufaktur/update",{
manufakturID : $("#t-manufakturID").val()
, manufakturNama : $("#t-manufakturNama").val()
},function(e){
$("#notif").html(e.alert);
$("#gManufaktur").trigger('reloadGrid');
},'json');
});
/* tombol baru */
jQuery("#new").click( function() {loadUrl('Trefmanufaktur');});
/* tombol edit */
jQuery("#edit").click( function() {
var s = $("#gManufaktur").jqGrid('getGridParam','selarrrow');
if (s.length > 1 || s.length < 1){
alert('Select one for editing');
}else{
var id = $("#gManufaktur").getRowData(s)['manufakturID'];
$.post("Trefmanufaktur/getDataManufaktur", {
manufakturID : id
}, function(e){
$("#t-manufakturID").val(id);
$("#t-manufakturNama").val(e.manufakturNama);
$("#update").show();
$("#save").hide();
}, 'json')
}
});
/* tombol hapus */
jQuery("#delete").click( function() {
var s = $("#gManufaktur").jqGrid('getGridParam','selarrrow');
if (s.length < 1){
alert('Select one for Delete');
}else{
var i =0;
var splitter = s.toString().split(',');
alert(splitter[0]);
for (i=0;i<$("#gManufaktur").jqGrid('getGridParam','selarrrow').length;i++){
var id = $("#gManufaktur").getRowData(splitter[i])['manufakturID'];
$.post('Trefmanufaktur/delete', {
manufakturID : id
,manufakturNama : $("#gManufaktur").getRowData(splitter[i])['manufakturNama'] }, function(e){
$("#notif").html(e.alert);
$("#gManufaktur").trigger('reloadGrid');
},'json');
}
}
});
[/javascript] Sampai dengan disini, aplikasi crud CodeIgniter sudah beres. Untuk data master sesuai dengan rancangan database yang pernah kita buat, silahkan untuk dicoba 😀

Tutorial PHP : Membuat Aplikasi dengan CodeIgniter Part-4 (Template)

Sebelum kita benar-benar membuat Aplikasi, kita persiapkan terlebih dahulu konsep template dari aplikasi yang akan kita buat. Gambaran umum kita akan membuat aplikasi dengan template seperti ini :
management-travel-1
Form Login
management-travel-1
Form Administrasi / Dashboard
Dengan Struktur Folder yang akan kita buat seperti gambar dibawah :

Yang pertama kita lakukan adalah, Merubah sedikit file konfigurasi pada file index.php
[php] define('APP_NAME', "C-ITSTAR TRAVEL");
define('TM_PREFIX', "citstudio_");
define('ASSETS', TM_PREFIX."assets/");
define('C_CSS', ASSETS."css/");
define('C_JS', ASSETS."js/");
define('C_IMAGES', ASSETS."images/");
define('ADMIN_LAYOUT', "layout_dashboard/");
define('ENVIRONMENT', 'development');
[/php] Kemudian buat 1 File, view_login, yang kita akan gunakan sebagai form Login saat pertama kali aplikasi dibuka.
[php] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="<?php echo base_url().'images/fav_icon.png';?>" />
<style type="text/css">@import url("<?php echo base_url() . C_CSS.'reset.css'; ?>");</style>
<style type="text/css">@import url("<?php echo base_url() . C_CSS.'login.css'; ?>");</style>
<title>Login</title>
<script src="<?php echo base_url().C_JS.'jquery-1.7.2.min.js';?>"></script>
<script>
// var auto_refresh = setInterval(
// function()
// {
// $('#load_tweets').load('reminder/reminder_kontrak');
// }, 2000);
</script>
</head> <body bgcolor="#f3f3f3">
<div id="main_box">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="70%">
<div align="center">
<img src="<?php echo base_url().C_IMAGES.'logo2.png';?>" />
</div>
</td>
<td width="30%">
<div align="center">
<img src="<?php echo base_url().C_IMAGES.'logo_cit.png';?>" />
</div>
</td>
</tr>
<tr>
<td width="70%">
<div id="reminder_box">
<center><br />
<div id="load_tweets"></div>
</center>
</div>
</td>
<td width="30%">
<div id="login_box">
<h1>Login</h1>
<?php
$attributes = array('name' => 'login_form', 'id' => 'login_form');
echo form_open('login/proses_login', $attributes);
?>
<?php
$message = $this->session->flashdata('message');
echo $message == '' ? '' : '<p id="message">' . $message . '</p>';
?>
<p>
<label for="username">Username:</label>
<input type="text" name="username" size="20" class="form_field"
value="<?php echo set_value('username');?>"/>
</p>
<?php echo form_error('username', '<p class="field_error">', '</p>');?>
<p>
<label for="password">Password:</label>
<input type="password" name="password" size="20" class="form_field"
value="<?php echo set_value('password');?>"/>
</p>
<?php echo form_error('password', '<p class="field_error">', '</p>');?>
<p>
<br><input type="submit" name="submit" id="submit" value="Login" />
</p>
</form>
</div>
</td>
</tr>
</table>
</div>
<div id="footer" align="center">
Copyright &copy; 2012 CITSTUDIO<br />
<a href="http://www.citstudio.com">www.citstudio.com</a>
</div>
</body>
</html>
[/php]
Kemudian buat 1 folder dibawah folder application/views beri nama layout_dashboard. Setelah itu buat beberapa File didalamya
  • header.php, Berfungsi sebagai potongan halaman pada pagian header template
  • import-doctype.php, Berfungsi sebagai potongan halaman pada pagian header template yang berisi definisi-definisi dari penggunaan javascript dan css
  • info-breadcumbs.php, Berfungsi sebagai potongan halaman pada pagian informasi umum mengenai user, dan nama halaman yang diakses
  • sidebar.php
  • maintemplate.php, Merupakan Template Utama aplikasi.

application/views/layout_dashboard/header.php

[php] <hgroup>
<h1 class="site_title"><a href="index.html">C-ITSTAR TRAVEL</a></h1>
<h2 class="section_title">DASHBOARD</h2>
</hgroup>
[/php]

application/views/layout_dashboard/import-doctype.php

[php] <head>
<meta charset="utf-8"/>
<title>{title}</title>
<link rel="stylesheet" href="<?php echo base_url().ASSETS; ?>administrator/css/layout.css" type="text/css" media="screen" /> <!--[if lt IE 9]>
<link rel="stylesheet" href="css/ie.css" type="text/css" media="screen" />
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style type="text/css">@import url("<?php echo base_url().C_CSS; ?>themes/smoothness/jquery.ui.all.css");</style>
<style type="text/css">@import url("<?php echo base_url().C_CSS; ?>themes/smoothness/jquery-ui-1.8.17.custom.css");</style>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery-ui-1.8.17.custom.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/external/jquery.bgiframe-2.1.2.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.effects.core.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.dialog.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.position.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.button.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.datepicker.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.tabs.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/ui/jquery.ui.autocomplete.js"></script>
<!-- CSS + JS PLUGIN - GRID //-->
<link rel="stylesheet" type="text/css" media="screen" href="<?php echo base_url().C_JS; ?>jquery/grid/css/ui.jqgrid.css"/>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/grid/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/grid/js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="<?php echo base_url().C_JS; ?>jquery/grid/js/jquery.jqGrid.min.js"></script>
<title>{title}</title>
<style type="text/css">
.ui-datepicker {z-index:1200;}
</style>
<script src="<?php echo base_url().ASSETS; ?>administrator/js/hideshow.js" type="text/javascript"></script>
<script src="<?php echo base_url().ASSETS; ?>administrator/js/jquery.tablesorter.min.js" type="text/javascript"></script>
<script type="text/javascript" src="<?php echo base_url().ASSETS; ?>administrator/js/jquery.equalHeight.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$(".tablesorter").tablesorter();
}
);
$(document).ready(function() {
//When page loads...
$(".tab_content").hide(); //Hide all content
$("ul.tabs li:first").addClass("active").show(); //Activate first tab
$(".tab_content:first").show(); //Show first tab content
//On Click Event
$("ul.tabs li").click(function() {
$("ul.tabs li").removeClass("active"); //Remove any "active" class
$(this).addClass("active"); //Add "active" class to selected tab
$(".tab_content").hide(); //Hide all tab content
var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content
$(activeTab).fadeIn(); //Fade in the active ID content
return false;
});
});
</script>
<script type="text/javascript">
$(function(){
$('.column').equalHeight();
});
</script>
</head>
[/php]

application/views/layout_dashboard/info-breadcumbs.php

[php] <div class="user">
<p>Administrator (<a href="#">3 Messages</a>)</p>
<!-- <a class="logout_user" href="#" title="Logout">Logout</a> -->
</div>
<div class="breadcrumbs_container">
<article class="breadcrumbs">
<a href="index.html">Website Admin</a> <div class="breadcrumb_divider"></div> <a class="current">Dashboard</a></article>
</div>
[/php]

application/views/layout_dashboard/sidebar.php

[php] <script type="text/javascript">
function loadUrl(url){
$("#main").load(url);
}
$(function(){
$("#accordion").accordion({
autoHeight: false,
navigation: true
});
});
</script>
<form class="quick_search">
<input type="text" value="Quick Search" onfocus="if(!this._haschanged){this.value=''};this._haschanged=true;">
</form>
<hr/>
<h3>Admin</h3>
<ul class="toggle">
<li class="icn_settings"><a href="#">Options</a></li>
<li class="icn_security"><a href="#">Security</a></li>
<li class="icn_jump_back"><a href="#">Logout</a></li>
</ul>
<footer>
<hr />
<p><strong>Copyright &copy; 2012 C-ITSTUDIO</strong></p>
</footer>
[/php]

application/views/layout_dashboard/maintemplate.php

[php] <!doctype html>
<html lang="en">
<?php $this->load->view(ADMIN_LAYOUT.'1_docheader'); ?>
<body>
<header id="header">
<?php $this->load->view(ADMIN_LAYOUT.'2_header'); ?>
</header> <!-- end of header bar --> <section id="secondary_bar">
<?php $this->load->view(ADMIN_LAYOUT.'4_info-breadcumbs'); ?>
</section><!-- end of secondary bar -->
<aside id="sidebar" class="column">
<?php $this->load->view(ADMIN_LAYOUT.'3_sidebar'); ?>
</aside><!-- end of sidebar -->
<section id="main" class="column">
<h4 class="alert_info">{information_message}</h4>
<?php $this->load->view($mainview); ?>
<div class="spacer"></div>
</section>
</body>
</html>
[/php]

Tutorial PHP : Membuat Aplikasi dengan CodeIgniter Part-5 (Aplikasi Travel)

Tutorial PHP : Membuat Aplikasi dengan CodeIgniter Part-5 (Aplikasi Travel)

Sebelumnya kita membuat template untuk aplikasi yang akan kita buat, yaitu studio kasus aplikasi Travel. Sekarang kita coba untuk membuat rancangan database, membuat stored procedure untuk login.

RANCANGAN DATABASE

Relasi Database Travel Management System
Relasi Database Travel Management System
Jika melihat tutorial sebelumnya disini, serta mendowloadaplikasi yang disertakan, template dan aplikasi sebetulnya sudah jadi. Sekarang kita mencoba bahas apa yang ditambahkan untuk membuat login user. Pertama kita akan coba dari sisi Aplikasi terlebih dahulu, pembuatan database nya cukup panjang :D.

/citstudio_application/controllers/home.php

[php] <!--?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Home extends CI_Controller { function __construct(){ parent::__construct();} public function index(){ /* mendeklarasikan, meng-inisialisasi variable usernip sebagai penampun session nip */ $usernip = $this--->session->userdata('nip');
/* pengecekan, apakah sudah ada yang login atau belum */
if (($usernip == '') || (!isset ($usernip)))
{
/* jika belum login, halaman akan terlempar ke halaman login */
$this->load->view('login_form');
}
else
{
/* jika sudah login, maka akan terlempar ke halaman admin*/
redirect('dashboard');
}
}
}
[/php]

/citstudio_application/controllers/dashboard.php

[php] <!--?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Dashboard extends CI_Controller { function __construct() { parent::__construct(); /* mendeklarasikan, meng-inisialisasi variable usernip sebagai penampun session nip */ $usernip = $this--->session->userdata('nip');
/* pengecekan, apakah sudah ada yang login atau belum */
if (($usernip == '') || (!isset ($usernip)))
{
/* jika belum login, halaman akan terlempar ke halaman login */
$this->load->view('login_form');
}
else{ }
}
public function index(){
/* inisialisasi variable yang dibutuhkan pada template dan form utama admin */
$data = array(
'mainview'=>'dashboard/view_dashboard'
,'information_message'=>'SELAMAT DATANG DI HALAMAN ADMINISTRATOR'
,'title'=>'DASHBOARD '.APP_NAME);
$this->parser->parse('layout_dashboard/maintemplate',$data);
}
}
[/php]

/citstudio_application/controllers/login.php

[php] <!--?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Login extends CI_Controller { function __construct() { parent::__construct(); $this--->load->helper(array('form', 'url'));
$this->load->library('upload');
} public function index(){ $this->load->view('view_home'); }
public function proses_login(){
/* menampung variable textbox dari view login */
$username = $_REQUEST["username"];
$password = $_REQUEST["password"];
/* pemanggilan stored procedure */
$sql = "call sp_GetUserByUserNameAndPassword(?,?)";
$result = $this->db->query($sql, array(mysql_escape_string($username),mysql_escape_string($password)),TRUE)->result();
/* jika hasil eksekusi memberikan jumlah record minimal 1, maka extract data, dan masukan kedalam session*/
if (count($result) > 0){
/* definisi dan inisialisasi array */
$sessionUserData = array();
/* extract data */
foreach($result as $row){
$sessionUserData = array(
'uname' => $row->username
, 'nip' => $row->nip
);
}
$this->session->set_userdata($sessionUserData);
redirect('dashboard', 'refresh');
}else{
redirect('home', 'refresh');
}
}
}
[/php]
OK. untuk kebutuhan controller, kita hanya melakukan perubahan pada 3 Controller diatas, sekarang kita buat Stored-procedure serat 1 Scalar function. Lalu mana databasenya ? Struktur table yang akan dibuat, karena cukup banyak, kita bisa download disini. Sementara untuk Pembuatan function, kita buat script seperti berikut.
FUNCTION MENDAPATKAN NAMA KOTA BERDASARKAN IDKOTA
[sql] DELIMITER $$
DROP FUNCTION IF EXISTS `fnKotaByID`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `fnKotaByID`(`kotaID` int) RETURNS varchar(50) CHARSET latin1
BEGIN
#Routine body goes here...
SET @namaKota = '';
SELECT kotaNama AS kota INTO @namaKota FROM tref_kota WHERE kotaID = kotaID LIMIT 1;
RETURN @namaKota;
END$$
[/sql] STORED PROCEDURE PENGECEKAN USER UNTUK LOGIN :
[sql] DELIMITER $$
--
-- Procedures
--
DROP PROCEDURE IF EXISTS `sp_GetUserByUserNameAndPassword`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_GetUserByUserNameAndPassword`(IN `i_username` varchar(50),IN `i_password` varchar(50))
BEGIN
#Routine body goes here...
SELECT DISTINCT
tref_leveluser.levelID,
tref_user.nip,
tref_user.username,
tref_user.`password`,
tref_leveluser.levelName,
tref_leveluser.levelSlug,
tref_user.userID,
tref_karyawan.namalengkap,
tref_kota.kotaNama,
tref_propinsi.propinsiNama,
tref_karyawan.namapanggilan,
tref_karyawan.alamat,
tref_karyawan.nomortelepon,
tref_karyawan.tanggalmasuk,
tref_karyawan.tanggallahir,
fnKotaById(tref_karyawan.tempatlahir) as kotalahir ,
tref_karyawan.noregistrasikaryawan
FROM
tref_user
INNER JOIN tref_leveluser ON tref_leveluser.levelID = tref_user.levelID
INNER JOIN tref_karyawan ON tref_karyawan.nip = tref_user.nip
INNER JOIN tref_kota ON tref_karyawan.kotaID = tref_kota.kotaID
INNER JOIN tref_propinsi ON tref_propinsi.provinsiID = tref_kota.propinsiID AND tref_propinsi.provinsiID = tref_karyawan.propinsiID
WHERE
tref_user.username = username AND tref_user.`password` = i_password;
END$$
[/sql] Pada stored procedure yang kita buat diatas, kita membutuhkan 2 parameter. yaitu username dan password, Sementara untuk pemanggilan ada di bagian controller login->proses_login();
contoh lain pemanggilan stored procedure dalam Code Igniter, klik disini
[php] $sql = "call sp_GetUserByUserNameAndPassword(?,?)";
$result = $this->db->query($sql, array(mysql_escape_string($username),mysql_escape_string($password)),TRUE)->result();
[/php] Kasus Pertama yaitu Login, dapat kita download pada link diatas. Perlu diketahui, bahwa pada CodeIgniter versi 2.1.2 terdapat sedikit perbedaan konfigurasi, dimana jika kita tidak perbaiki akan menimbulkan error :
Commands out of sync; you can't run this command now
entah itu bug atau perbaikan yang belum selesai. Bagi yang gemar menggunakan Driver mysqli dan Stored Procedure, CodeIgniter Versi Wiro Sableng (2.1.2) bisa dikatakan lebih ketat dibanding dengan yang 2.1.0. Lalu apa yang perlu kita lakukan.
Pada baris 174 di file /system/database/drivers/mysqli/mysqli_driver.php
yang awal nya :
[php] function _execute($sql)
{
$sql = $this->_prep_query($sql);
$result = @mysqli_query($this->conn_id, $sql);
return $result;
}
[/php] menjadi :
[php] function _execute($sql)
{
$sql = $this->_prep_query($sql);
$result = @mysqli_query($this->conn_id, $sql);
@mysqli_next_result($this->conn_id); // return $result;
}
[/php] Dengan demikian aplikasi login untuk kasus Aplikasi Travel, sudah kita bereskan. Happy Coding 😀