MODUL CI 2.1

21
CAPTCHA CI 2.1.0 CREATE CAPTCHA IN CODEIGNITER 2.1.0 Sumber: http://pwcahyo.blogspot.com Setelah kemaren membuat form login with session di dalam codeigniter 2.1.0, sekarang kita mencoba untuk menambahkan captcha didalam form login tersebut. Untuk generate captcha itu sendiri sudah disediakan helper captcha bawa'an didalam codeigniter 2.1.0 berbeda dengan Codeigniter 1.7.x yang menggunakan captcha dibawah plugin. Ok, Bagi temen - temen yang belum mengikuti langkah dalam membuat form login with session bisa dilihat disini . Karena tutorial berikut ini akan meneruskan dari tutorial yang sebelumnya. 1. Saya anggap temen - temen sudah mengikuti tutorial membuat form login with session sebelumnya. 2. Kita tambahkan tabel captcha didalam database ci : ? 1 2 3 4 5 6 7 8 CREATE TABLE captcha ( captcha_id bigint(13) unsigned NOT NULL auto_increment, captcha_time int(10) unsigned NOT NULL, ip_address varchar(16) default '0' NOT NULL, word varchar(20) NOT NULL, PRIMARY KEY `captcha_id` (`captcha_id`), KEY `word` (`word`) ); 3. Apabila database captcha tersebut sudah dibuat, kita tinggal membuat direktori dimana captcha tersebut akan disimpan sementara, buat folder asset/captcha didalam root ci-nya, struktur seperti ini ci/asset/captcha 4. Set permission folder captcha agar bisa ditulis dan dibaca oleh server, kalau diubuntu sudo chmod -R 777 captcha/ 5. Apabila permission sudah diset, kita tinggal membuat model untuk create captcha, buat file dengan nama m_captcha.php , simpan didalam folder ci/application/models isi model tersebut : ? 1 <?php if (!defined('BASEPATH')) exit('No direct

description

Code Igniter Indonesia

Transcript of MODUL CI 2.1

Page 1: MODUL CI 2.1

CAPTCHA CI 2.1.0

CREATE CAPTCHA IN CODEIGNITER 2.1.0Sumber: http://pwcahyo.blogspot.com

Setelah kemaren membuat form login with session di dalam codeigniter 2.1.0, sekarang kita mencoba untuk menambahkan captcha didalam form login tersebut. Untuk generate captcha itu sendiri sudah disediakan helper captcha bawa'an didalam codeigniter 2.1.0 berbeda dengan Codeigniter 1.7.x yang menggunakan captcha dibawah plugin. Ok, Bagi temen - temen yang belum mengikuti langkah dalam membuat form login with session bisa dilihat disini. Karena tutorial berikut ini akan meneruskan dari tutorial yang sebelumnya.

1. Saya anggap temen - temen sudah mengikuti tutorial membuat form login with session sebelumnya.2. Kita tambahkan tabel captcha didalam database ci :?12345678

CREATE TABLE captcha ( captcha_id bigint(13) unsigned NOT NULL auto_increment, captcha_time int(10) unsigned NOT NULL, ip_address varchar(16) default '0' NOT NULL, word varchar(20) NOT NULL, PRIMARY KEY `captcha_id` (`captcha_id`), KEY `word` (`word`));

3. Apabila database captcha tersebut sudah dibuat, kita tinggal membuat direktori dimana captcha tersebut akan disimpan sementara, buat folder asset/captcha didalam root ci-nya, struktur seperti ini ci/asset/captcha 4. Set permission folder captcha agar bisa ditulis dan dibaca oleh server, kalau diubuntu sudo chmod -R 777 captcha/ 5. Apabila permission sudah diset, kita tinggal membuat model untuk create captcha, buat file dengan nama m_captcha.php , simpan didalam folder ci/application/models isi model tersebut :?12345678910

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class M_captcha extends CI_Model { function __construct() { parent::__construct(); } function setCaptcha() {

Page 2: MODUL CI 2.1

11121314151617181920212223242526272829303132333435363738394041

$this->load->helper('captcha'); $vals = array( 'img_path' => './asset/captcha/', 'img_url' => base_url().'/asset/captcha/', 'expiration' => 3600,// one hour 'font_path' => './system/fonts/georgia.ttf', 'img_width' => '140', 'img_height' => 30, 'word' => random_string('numeric', 6), ); $cap = create_captcha($vals); if ($cap) { $capdb = array( 'captcha_id' => '', 'captcha_time' => $cap['time'], 'ip_address' => $this -> input -> ip_address(), 'word' => $cap['word'] ); $query = $this->db->insert_string('captcha', $capdb); $this->db->query($query); }else { return "Captcha not work" ; } //$data['cap'] = $cap; return $cap['image']; } }

6. Tambahkan script untuk pemanggilan model captcha didalam c_login.php yang telah kita buat pada tutorial sebelumnya, edit c_login.php tersebut sehingga menjadi :?12345678910

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');class C_login extends CI_Controller{ function __construct() { session_start(); //mengadakan session parent::__construct(); $this->load->model('m_captcha'); $this->load->helper('captcha'); } public function index()

Page 3: MODUL CI 2.1

1112131415161718192021222324252627282930313233343536373839404142434445464748495051525354

{ if ( isset($_SESSION['username']) ) { //cek apakah session ada redirect('c_home'); //redirect controller c_home } $data['captcha'] = $this->m_captcha->setCaptcha(); $this->load->library('form_validation'); //load library form_validation $this->form_validation->set_rules('username', 'Username', 'required'); //cek, validasi username $this->form_validation->set_rules('password', 'Password', 'required|min_length[4]'); //cek, validasi password $this->form_validation->set_rules('captcha', 'Captcha', 'trim|required|callback_valid_captcha'); $this->form_validation->set_message('valid_captcha','%s tidak sama'); if ( $this->form_validation->run() == TRUE ) { //apabila validasi true(benar semua) $this->load->model('m_user'); // load model m_user $result = $this->m_user->cek_user_login( //jalankan fungsi cek_user_login dari model m_user $this->input->post('username'), //menangkap username dari form $this->input->post('password') //menangkap password dari form ); if ( $result == TRUE) { //apabila result = true(ada data) $_SESSION['username'] = $this->input->post('username'); //create session redirect('c_home'); // redirect controller c_home } } $this->load->view('login/v_form',$data); //apabila session kosong load login/v_form } function valid_captcha($str) { $expiration = time()-60; // 1 minutes $this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration); // Then see if a captcha exists: $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?"; $binds = array($_POST['captcha'], $this->input->ip_address(), $expiration); $query = $this->db->query($sql, $binds); $row = $query->row(); if ($row->count == 0) { return FALSE; } else { return TRUE; }

Page 4: MODUL CI 2.1

555657585960616263646566676869

} public function logout() //fungsi logout { session_destroy(); //session destroy $this->index();//buka halaman login/v_form }}

7. Tambahkan script pemanggilan captcha didalam v_form.php yang telah kita buat pada tutorial sebelumnya, edit v_form.php sehingga menjadi : ?1234567891011121314151617181920212223242526

<h1>Please Login</h1><?php echo form_open('c_login'); ?><table><tr> <td>Username</td> <td>:</td> <td><?php echo form_input('username') ?></td> <td><font color="#ef4423"><?php echo form_error('username'); ?></font></td></tr><tr> <td>Password</td> <td>:</td> <td><?php echo form_password('password'); ?></td> <td><font color="#ef4423"><?php echo form_error('password'); ?></font></td></tr><tr> <td valign='top'><?php echo $captcha ?></td> <td>:</td> <td valign='top'><input type='text' name='captcha'></td> <td><font color="#ef4423"><?php echo form_error('captcha');?></font></td></tr><tr><td colspan="4" align="middle"><?php echo form_submit('submit', 'Login'); ?></td></tr></table><?php echo form_close(); ?>

Page 5: MODUL CI 2.1

278. Apabila sudah dipanggil didalam form, kita tinggal check aja di browser apakah captcha tersebut sudah berhasil dibuat. check dengan localhost/ci maka akan keluar tampilan seperti ini apabila telah berhasil :

9. Apabila kita memasukan captcha salah. maka akan keluar seperti gambar dibawah ini :

10. Success... Selamat mencoba

Page 6: MODUL CI 2.1

FORM LOGIN WITH SESSION IN CODEIGNITER 2.1.0Sumber: http://pwcahyo.blogspot.com

Ok, pada kali ini saya ingin membuat sedikit tutorial create form login with session, didalam codeigniter 2.1.0, database dan session itu sendiri dibawah libraries codeigniter, sedangkan form berada dibawah helper codeigniter, ok, Langsung saja,.

1. Saya asumsikan temen - temen paham menggunakan xampp, atau lampp, Download Codeigniter 2.1.0 terlebih dahulu2. Extract codeigniter tersebut menjadi ci3. Buat database ci kemudian jalankan syntax create tabel dibawah ini untuk menampung data user :?1234567891011121314

CREATE TABLE IF NOT EXISTS `users` ( `id` int(20) NOT NULL AUTO_INCREMENT, `username` varchar(30) NOT NULL, `password` varchar(34) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; ---- Dumping data for table `users`-- INSERT INTO `users` (`id`, `username`, `password`) VALUES(1, 'cahyo', '772c2161cb7137df9da9d3ad4d57b16f');

4. Apabila ketiga langkah diatas sudah dijalankan, edit config.php yang ada didalam folder ci/application/config/config.php menjadi :?12

$config['base_url'] = 'http://localhost/ci/'; //line 17$config['encryption_key'] = 'c4hy0g4nt3n6b4ng3t'; //line 226

5. Edit konfigurasi autoload.php yang ada didalam satu folder dengan config.php sebelumnya,?12

$autoload['libraries'] = array('database','session'); //line 55$autoload['helper'] = array('form','url'); //line 67

6. Edit konfigurasi database.php yang ada didalam satu folder dengan config.php sebelumnya,?1$db['default']['hostname'] = 'localhost'; //line 51

Page 7: MODUL CI 2.1

234

$db['default']['username'] = 'root'; // username phpmyadmin/mysql$db['default']['password'] = ''; // password phpmyadmin/mysql$db['default']['database'] = 'ci'; // nama database

7. Edit konfigurasi routes.php yang ada didalam satu folder dengan config.php sebelumnya,?1$route['default_controller'] = "c_login"; //line 41

8. Buat model, dengan nama m_user.php simpan kedalam folder ci/application/model isi model :?123456789101112131415161718192021222324252627

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class M_user extends CI_Model{ function __construct() { parent::__construct(); } function cek_user_login($username, $password) { $query = $this ->db ->where('username', $username) // kolom username ->where('password', md5($password)) // kolom password ->limit(1) // pembatasan jumlah select ->get('users'); //table name if ($query->num_rows() == 1) { // jika data = 1 return $query->row_array(); // return data dan nilai TRUE } else { return FALSE; // else mengembalikan FALSE } }}

9. Buat controller c_login untuk mengatur model tersebut simpan kedalam folder ci/application/controller , isi controller :?12345

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');class C_login extends CI_Controller{ function __construct() { session_start(); //mengadakan session

Page 8: MODUL CI 2.1

67891011121314151617181920212223242526272829303132333435363738394041

parent::__construct(); } public function index() { if ( isset($_SESSION['username']) ) { //cek apakah session ada redirect('c_home'); //redirect controller c_home } $this->load->library('form_validation'); //load library form_validation $this->form_validation->set_rules('username', 'Username', 'required'); //cek, validasi username $this->form_validation->set_rules('password', 'Password', 'required|min_length[4]'); //cek, validasi password if ( $this->form_validation->run() == TRUE ) { //apabila validasi true(benar semua) $this->load->model('m_user'); // load model m_user $result = $this->m_user->cek_user_login( //jalankan fungsi cek_user_login dari model m_user $this->input->post('username'), //menangkap username dari form $this->input->post('password') //menangkap password dari form ); if ( $result == TRUE) { //apabila result = true(ada data) $_SESSION['username'] = $this->input->post('username'); //create session redirect('c_home'); // redirect controller c_home } } $this->load->view('login/v_form'); //apabila session kosong load login/v_form } public function logout() //fungsi logout { session_destroy(); //session destroy $this->index();//redirect function index() }}

10. Buat controller c_home.php, simpan kedalam folder ci/application/controller, isi controller :?12345

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class C_home extends CI_Controller { function __construct()

Page 9: MODUL CI 2.1

678910111213141516171819

{ session_start(); parent::__construct(); if ( !isset($_SESSION['username']) ) { redirect('c_login'); } } public function index() { $this->load->view('login/v_home'); } }

11. Buat view v_form.php simpan didalam folder ci/application/views/login (folder login create sendiri), isi view :?123456789101112131415161718

<h1> Please Login</h1><?php echo form_open('c_login'); ?><table><tr> <td>Username</td> <td>:</td> <td><?php echo form_input('username') ?></td> <td><font color="#ef4423"><?php echo form_error('username'); ?></font></td></tr><tr> <td>Password</td> <td>:</td> <td><?php echo form_password('password'); ?></td> <td><font color="#ef4423"><?php echo form_error('password'); ?></font></td></tr><tr> <td colspan="4" align="middle"><?php echo form_submit('submit', 'Login'); ?></td></tr></table><?php echo form_close(); ?>

Page 10: MODUL CI 2.1

1920212212. Buat form v_home.php satu folder dengan v_form.php , v_home.php digunakan untuk redirect apabila login berhasil maka akan dilarikan kedalam halaman tersebut, isi view v_form : ?1234

Hai, <strong><?php echo $_SESSION['username']; ?></strong>! Kamu di area home admin. <?php echo anchor('/c_login/logout/', 'Logout'); ?><h1> Welcome to the Top Secret Section</h1>

13. Apabila sudah jalankan localhost/ci didalam browser, maka akan keluar form login seperti ini :

isikan username : cahyo | password : cahyo14. Apabila isian username dan password benar, maka akan redirect ke halaman admin seperti gambar dibawah ini :

Bagaimana, mudah bukan. apabila ingin menggunakan autentikasi tank_auth bisa lihat disini

Page 11: MODUL CI 2.1

AUTENTIKASI LOGIN DENGAN TANK_AUTH (CI)Sumber: http://pwcahyo.blogspot.com

Persiapan beberapa tool untuk perang1. Download CodeIgniter 2.1.02. Download library framework autentikasi tank_auth 1.0.9Langkah - Langkah :1. Extract Codeigniter, klik kanan pada CodeIgniter_2.1.0.zip Kemudian rename menjadi cilog , Nama cilog bisa diganti menurut keinginan agan2, saya make cilog karena agar mudah ngetiknya diweb browser, kalau sudah masukan folder cilog tersebut didalam folder htdocs LAMPPnya.

2. Apabila langkah pertama sudah dilakukan, Sekarang extract tank_auth.zip. didalam folder tank_auth.zip akan ada 3 jenis file, 1 file database dengan nama schema.sql, 2 direktori dengan nama application dan captcha. atau dapat dilihat seperti gambar dibawah ini.

3. Copykan isi folder application kedalam folder htdocs/cilog/application

4. Copykan folder captcha kedalam folder root cilog atau htdocs/cilog

5. Buatlah database dengan nama cilok didalam phpmyadmin. localhost/phpmyadmin didalam browser, dengan aturan apache dan mysql dalam posisi running.

6. Dump/import database schema.sql kedalam database cilok, cara dumping database bisa cari di google.

7. Apabila database sudah temen2 dump, buka file config.php, tank_auth.php, database.php, autoload.php didalam folder htdocs/cilog/application/config a. edit config.php di line 227, $config['encryption_key'] = ''; ubah menjadi config['encryption_key'] = 'thi5k3yc0nf1gur4t10n'; Mengapa demikian, karena digunakan untuk enskripsi disetiap pemanggilan page di dalam CI (Untuk keamanan kalau masih bingung)

Sedangkan line 251, $config['sess_use_database'] = FALSE; menjadi $config['sess_use_database'] = TRUE;Digunakan agar Session yang diload dari database dapat bekerja didalam Codeigniter.

Page 12: MODUL CI 2.1

b. edit tank_auth.phpdi line 10 dan 11 terdapat :

$config['website_name'] = 'Your project';//isikan http://localhost/cilog/ menjadi $config['website_name'] = 'http://localhost/cilog/';

$config['webmaster_email'] = '[email protected]';//[email protected] ganti alamat email ente

c. edit database.php menjadi seperti ini :?12345

$db['default']['hostname'] = 'localhost';$db['default']['username'] = 'root';$db['default']['password'] = '';$db['default']['database'] = 'cilok';$db['default']['dbdriver'] = 'mysql';

Isikan hostname = localhost, username = username_phpmyadmin(default root), password = password_phpmyadmin(default kosong), database = cilok (nama db yang telah kita buat didalamnya ada hasil dumping dari schema.sql). dbdriver =mysql.

d. edit autoload.php $autoload['libraries'] = array(); menjadi $autoload['libraries'] = array('database','session');Gunanya agar session dan database bisa digunakan, maka harus meload library tersebut.

8. Ubah permission folder /capctha agar server bisa mengenali/membacanya,diterminal ketikan sudo chmod -R 777 direktori_captcha_beradaSemisal : sudo chmod -R 777 /opt/lampp/htdocs/cilog/captcha

Apabila sudah, dilocalhost ketikan localhost/cilog maka akan keluar halaman :

Untuk mendaftar sebagai user, temen2 bisa Klik register, maka akan di suguhi halaman :

Page 13: MODUL CI 2.1

**Note : untuk register, memasukan captcha harap sama, case sensitive

Sudah daftar kok masih belum bisa login, ubah activated user yang telah anda daftarkan menjadi 1 . Cara Mengubah buka database cilok, cari tabel users, dikolom activated (yang semula 0, diganti menjadi 1). kemudian ulangi lagi localhost/cilog

Masukan Username dan Password, apabila sudah berhasil maka temen2 akan dibawa ke halaman home seperti gambar dibawah :

Untuk Mengganti design halaman home, bisa diedit welcome.php didalam folder /htdocs/cilog/application/views didalamnya ada welcome.php silahkan berkreasi...

Maka autentikasi login menggunakan tank_auth sudah bisa digunakan, mudah bukan menggunakan tank_auth, daripada menggunakan cara login manual. kita harus mengetik macem2 kode, yang mana digunakan select data user, dan sebagainya. dengan framework autentikasi kita dimanjakan tinggal menambahkan librarynya saja.