Cheyuz’s CSS Generator: Update to v2.0
Tips Menulis Kode Program PHP yang Baik
Daripada ga ada kerjaan malem2 gini, lebih baik saya update blog ini ah…
Sebelum kita beranjak ke CI lagi, alangkah baiknya kita seling dulu dengan tulisan ini.. Yups, Tips menulis kode program PHP yang baik dan benar, hehe..
Penulisan kode yang baik akan sangat berguna jika program buatan kita akan diteruskan oleh programmer lain. Dengan kode yang baik dan rapi, kode dapat lebih enak dilihat dan orang lain (yang mau meneruskan pengetikan isi program) akan lebih mengerti dan memahami isi program. Jika kode dibuat acak-acakan alias ‘seenaknya saja’, maka orang yang melihat pun akan cenderung malas untuk melihat isi program dan bahkan tidak memahami struktur program yang dibuat.
OK, berikut ini adalah beberapa aturan bagaimana cara pengetikan kode program pada PHP yang mana peraturan ini sudah terstandarisasi, jadi semua orang akan sepakat untuk menuruti aturan ini. Catatan: setiap aturan pada setiap framework mungkin berbeda
Penamaan Class
SALAH:
class superclassBENAR:
class Super_class class SuperClass
CONTOH:
class Super_class { function __construct() { } }
class SuperClass { function __construct() { } }
Penamaan Function
SALAH:
function fileproperties() // tidak deskriptif, membutuhkan underscore function fileProperties() // tidak deskriptif dan menggunakan CamelCase function getfileproperties() // Lebih baik! Tetapi masih menggunakan underscore function getFileProperties() // menggunakan CamelCase function get_the_file_properties_from_the_file() // Terlalu banyak kata (njelimet)
BENAR:
function get_file_properties() // Deskriptif, ada pemisahan dengan underscore, dan huruf kecil semua
Penamaan Variable
SALAH:
$j = 'foo'; // satu huruf lebih baik digunakan untuk variable yang digunakan pada pengulangan $Str // ada huruf yang kapital, ini bukan objek! $bufferedText // menggunakan CamelCasing, dan dapat dipendekkan tanpa menghilangkan maksud semantik $groupid // dua kata tapi tidak memakai underscore, tidak deskriptif $name_of_last_city_used // terlalu njelimet lagi ???
BENAR:
for ($j = 0; $j < 10; $j++) $str $buffer $group_id $last_city
Constants
SALAH:
myConstant // tidak ada underscore dan tidak full kapital N // Jangan ada constant yang menggunakan satu karakter S_C_VER // tidak deskriptif
BENAR:
MY_CONSTANT NEWLINE SUPER_CLASS_VERSION
TRUE, FALSE, dan NULL
Harus menggunakan full karakter kapital (uppercase)
SALAH:
if ($foo == true) $bar = false; function foo($bar = null)
BENAR:
if ($foo == TRUE) $bar = FALSE; function foo($bar = NULL)
Operator Logika
SALAH:
if ($foo || $bar) if ($foo AND $bar) // OK tapi tidak direkomendasikan untuk IDE yang mengandung syntax highlighting if (!$foo) if (! is_array($foo))
BENAR:
if ($foo OR $bar) if ($foo && $bar) // recommended if ( ! $foo) if ( ! is_array($foo))
Whitespace
Jangan ada ‘spasi’ sebelum tag
SALAH:
<?php // ...ada whitespace sebelum php dibuat ?>
—
BENAR:
<?php // ...Tidak ada whitespace sebelum php dibuat ?>
—
Code Indenting
Tabulasi pada penulisan kode program
KURANG BAIK:
function foo($bar) { // ... } foreach ($arr as $key => $val) { // ... } if ($foo == $bar) { // ... } else { // ... } for ($i = 0; $i < 10; $i++) { for ($j = 0; $j < 10; $j++) { // ... } }
BAIK:
function foo($bar) { // ... } foreach ($arr as $key => $val) { // ... } if ($foo == $bar) { // ... } else { // ... } for ($i = 0; $i < 10; $i++) { for ($j = 0; $j < 10; $j++) { // ... } }
Bracket dan Parenthetic Spacing
SALAH:
$arr< $foo > = 'foo'; //ada spasi di dalam bracket
BENAR:
$arr<$foo> = 'foo'; // tidak ada spasi di dalam bracket
SALAH:
function foo ( $bar ) { }
BENAR:
function foo($bar) // tidak ada spasi di dalam parameter { }
SALAH:
foreach( $query->result() as $row )
BENAR:
foreach ($query->result() as $row)
Private dan Public Method
convert_text() // public method _convert_text() // private method
Short Open Tags
SALAH:
<? echo $foo; ?> <?=$foo?>
BENAR:
<?php echo $foo; ?>
Satu Statemen pada Satu Baris
SALAH:
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
BENAR:
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
Strings
SALAH:
"My String" // tidak ada variable yang diparsing, lebih baik satu tanda kutip "My string $foo" // membutuhkan kurung kurawal 'SELECT foo FROM bar WHERE baz = \'bag\'' // jelek
CORRECT:
'My String' "My string {$foo}" "SELECT foo FROM bar WHERE baz = 'bag'"
Query SQL
SALAH:
$query = mysql_query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from exp_pre_email_addresses where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100"); //susah dibaca
BENAR:
$query = mysql_query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz FROM exp_pre_email_addresses WHERE foo != 'oof' AND baz != 'zab' ORDER BY foobaz LIMIT 5, 100"); //lebih mudah dibaca
Fiuh.. akhirnya selesai juga.. :)
Itulah beberapa aturan2 standar yang dipakai untuk programmer PHP.. ;)
Silakan komentar dan tanggapannya ;D
~ Cheyuz
Sebenarnya ini adalah salah satu permintaan dari pembaca, yaitu membuat tutorial bagaimana membuat penanganan akun di dalam CI.. Kali ini kita menggunakan Codeigniter versi 2.x ke atas… (bukan untuk CI 1.7.x), lihat perbedaan CI 2.x dengan CI v1.7.x di sini
Sebelum kita mengenal lebih jauh, sebaiknya kita mengenal pemahaman dari segi konsep bagaimana akun dibuat.. Mulai dari konsep session, register, login, dan logout..
Baik, kita jelaskan satu persatu ya.. Dengan bahasa saya sendiri, mudah2an temen2 mengerti ya… hehe..
Session
Session adalah sebuah varibel yang diletakkan di server. Dengan begitu, PHP bisa mengambil nilai yang tersimpan di dalam variable tersebut meskipun kita membuka halaman baru di browser. Biasanya session akan hilang jika anda menutup browser atau dengan time out yang ditentukan. Session sangat diperlukan untuk penanganan login user/pengguna, yang mana nantinya beberapa data penting pengguna disimpan di dalam variable session, seperti status login, id user, nama user, dan nama group (group = kategori user). Oleh karena itu, ketika tab baru dibuka pun kita masih bisa mengakses data kita dengan asumsi kita sudah login ke dalam aplikasi tersebut.
Register
Register adalah bagaimana kita mendaftarkan user ke dalam database. Database mempunyai data user yang sewaktu2 dapat dipakai untuk login user. Proses dari register hanyalah penambahan data user ke dalam database dari form registrasi yang nanti kita buat.
Login
Login adalah proses di mana proses pengecekan user dilakukan. Pengecekan dilakukan untuk memeriksa apakah username dan password cocok atau tidak, jika ada dalam database dan cocok maka data akan dimasukkan ke dalam session, status login diset menjadi TRUE, dan data session lainnya akan diisikan dengan data user yang ada di dalam database.
Logout
Logout adalah sebaliknya dari Login. Logout adalah proses penghancuran data di variable session, yang berarti data2 di variable session dihapus. Jika data session dihapus, maka statusnya sekarang adalah tidak login, jadi bisa disebut ‘keluar dari sistem’.
OK, langsung saja kita berangkat ke CI…
Buat Table
Sebelum ke pembuatan model, controller, dan view tentu saja yang harus dilakukan pertama kali adalah pembuatan database, dalam hal ini kita akan membuat sebuah table user yang berisi id_user, nama_lengkap, username, password, dan group… Saya kasih contoh sederhana seperti ini, yang mana sebetulnya masih bisa dikembangkan, misalnya penambahan status, verifikasi email, reset password, dan sebagainya… Tapi berhubung tidak memungkinkan dan terlalu rumit, maka saya buat contoh sederhana aja..
Buat table user dengan mengcopy syntax SQL berikut ke PhpMyAdmin kamu beserta data sample:
CREATE TABLE `user` ( `id_user` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `nama_lengkap` VARCHAR( 100 ) NOT NULL , `username` VARCHAR( 50 ) NOT NULL , `password` VARCHAR( 50 ) NOT NULL , `group` VARCHAR( 20 ) NOT NULL ) ENGINE = INNODB; INSERT INTO `user` ( `id_user` , `nama_lengkap` , `username` , `password` , `group` ) VALUES (NULL , 'Cecep Yusuf', 'cheyuz', MD5('cheyuz') , 'admin'), (NULL , 'Ayu Dwi S', 'ayue', MD5('ayue') , 'operator');
Buat Model Account
Sebelum kita membuat controller dan view untuk registrasi, login, dan logout, pertama2 kita harus membuat modelnya terlebih dahulu.. model apakah itu? Yup, model untuk account nya… kita buat account_model.php di direktori /application/models/
account_model.php
<?php /** * @author cheyuz */ class Account_model extends CI_Model { private $table = 'user'; //isi nama table user di sini function __construct() { parent::__construct(); } }
Di dalam class Account_model terdapat variable private $table, yang nantinya function2 di bawah akan mengakses variable itu, dari table mana data didapatkan.
Setelah class dibuat, maka harus dibuat fungsi2 dalam class tersebut. Fungsi2 yg perlu kita buat adalah function register, login, dan logout, juga ada fungsi2 tambahan lainnya.
Tambahkan function register di dalam class tersebut:
... function register($data) { } ...
di dalam function register terdapat parameter $data. Parameter ini adalah berupa array yang mana nantinya data dari form registrasi dimasukkan ke dalam database, maka di dalam function register() ditambahkan kode berikut ini:
... function register($data) { $this->db->insert($this->table, $data); } ...
Setelah function register dibuat, maka selanjutnya tambahkan function login di dalam class tersebut:
... function login($username, $password) { } ...
Di atas terlihat bahwa ada dua parameter, yaitu $username dan $password. Ini berguna buat nanti kita cek apakah usernamenya ada atau tidak, cocok atau tidak dengan passwordnya. Dan setelah itu isi function tersebut dengan kode di bawah ini:
... function login($username, $password) { $data = $this->db ->where(array('username' => $username, 'password' => md5($password))) ->get($this->table); } ...
$data adalah seleksi dari syntax SQL:
SELECT * FROM `user` WHERE `username`= $username AND `password` = md5($password)
Kemudian hasil tersebut dicek apakah ada dan cocok username dengan passwordnya atau tidak, ada berarti jika banyak baris lebih dari 0 (nol menyatakan bahwa tidak ada yang terseleksi).
Nah di bawah ini cara ngeceknya memakai if…
.... if ($data->num_rows() > 0) { $user = $data->row(); //data hasil seleksi dimasukkan ke dalam $session $session = array( 'logged_in' => 1, 'id_user' => $user->id_user, 'group' => $user->group, 'username' => $user->username ); //data dari $session akhirnya dimasukkan ke dalam session (menggunakan library CI) $this->session->set_userdata($session); return true; } else { $this->session->set_flashdata('notification', 'Username dan Password tidak cocok'); return false; } ....
berikut ini adalah function login() secara lengkap:
... function login($username, $password) { $data = $this->db ->where(array('username' => $username, 'password' => md5($password))) ->get($this->table); //dicek if ($data->num_rows() > 0) { $user = $data->row(); //data hasil seleksi dimasukkan ke dalam $session $session = array( 'logged_in' => 1, 'id_user' => $user->id_user, 'group' => $user->group, 'username' => $user->username ); //data dari $session akhirnya dimasukkan ke dalam session (menggunakan library CI) $this->session->set_userdata($session); return true; } else { $this->session->set_flashdata('notification', 'Username dan Password tidak cocok'); return false; } } ...
Nah, kemudian setelah itu dibuat function logoutnya…
Ingat bahwa logout adalah menghapus session, maka scriptnya sederhana, cukup dengan function $this->session->sess_destroy();
... function logout() { $this->session->sess_destroy(); } ...
Sehingga kode PHP lengkapnya untuk class Account_model adalah sebagai berikut:
<?php /** * @author cheyuz */ class Account_model extends CI_Model { private $table = 'user'; //isi nama table user di sini function __construct() { parent::__construct(); } function register($data) { $this->db->insert($this->table, $data); } function login($username, $password) { $data = $this->db ->where(array('username' => $username, 'password' => md5($password))) ->get($this->table); //dicek if ($data->num_rows() > 0) { $user = $data->row(); //data hasil seleksi dimasukkan ke dalam $session $session = array( 'logged_in' => 1, 'id_user' => $user->id_user, 'group' => $user->group, 'username' => $user->username, 'nama_lengkap' => $user->nama_lengkap, ); //data dari $session akhirnya dimasukkan ke dalam session (menggunakan library CI) $this->session->set_userdata($session); return true; } else { $this->session->set_flashdata('notification', 'Username dan Password tidak cocok'); return false; } } function logout() { $this->session->sess_destroy(); } }
Untuk menggunakannya, caranya cukup dengan meload model tersebut, kemudian masukkan variable post dari form login ke dalam parameter dari function login() di model account_model…
Salah satu contoh penggunaan di controller:
... function masuk() { $post = $this->input->post('login'); if($post==NULL) { $this->load->view('login'); } else { if($this->account_model->login($post['username'], $post['password'])) { redirect('member'); } else { redirect('member/login'); } } } ... }
Kode di atas hanya contoh saja, contoh lengkapnya akan dilanjutkan pada tutorial ini juga (part II)… cape hehe mau lanjut kerja dulu.. ![]()
Pada tutorial selanjutnya saya lanjut lengkap dengan form registrasi, form login, controller: daftar, masuk, dan keluar sistem….
coming soon ya..
~ Cheyuz
Baru update lagi nih ….
Ada waktu kosong pas lagi ngerjain skripsi, ya udah saya update aja ni blog… hehehe..
Kali ini saya akan membeberkan beberapa perubahan pada Framework Codeigniter v2.x dengan versi sebelumnya, versi 1.7.x (yg berakhir di v1.7.3)
CI merupakan sebuah framework PHP yang sudah banyak digunakan oleh perusahaan profesional untuk membangun sebuah aplikasi web. Ada banyak tutorial yang ada di internet yang bisa kita lihat dan lakukan untuk pengembangan aplikasi web, dan salah satunya adalah di situs ini hehe. Namun apakah tutorial tersebut sesuai dengan versi CI yang kita pakai? soalnya ada beberapa tutorial yang masih menggunakan CI versi 1.7.x ke bawah, sedangkan mulai dari versi 2.0 CI mengalami banyak perubahan.
Berikut ini adalah beberapa perubahan yang penting diketahui pada CI versi 2.x dengan versi 1.7.x:
- Sudah tidak mendukung PHP 4, minimal membutuhkan PHP 5.1
- Direktori “Plugins” dihapus, sepenuhnya dibuat di Helpers. Beberapa plugins yg ada sebelumnya sudah dijadikan helper.
- Ditambah library baru, yaitu Drivers
- Terdapat Application Packages
- Mendukung full query string
- Pada model dan controller, ada awalan CI_[nama_class], yaitu CI_Model dan CI_Controller
- Folder Application sudah berada di luar system
- Ditambahkan library Security, untuk keamanan dan filter
- Base_url sudah otomatis jika dikosongkan
- Terdapat kompatibilitas Command line untuk cron jobs
Dan masih banyak lagi.. yg di atas hanya sebagian besar yang memang patut diketahui, hehe…
Versi terakhir CI saat ini adalah versi 2.0.2..
Untuk lebih lengkapnya temen2 bisa lihat di sini:
http://codeigniter.com/user_guide/changelog.html