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.
/* 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]
/* 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]
$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
RANCANGAN DATABASE
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
0 komentar:
Posting Komentar