Tuesday, July 30, 2013

Wednesday, July 24, 2013

Thursday, July 18, 2013

CodeIgniter: Membina fungsi pengesahan kita sendiri / Your own Validation Functions (Callbacks)

Pada salah satu sistem yang sedang saya bangunkan, user perlu memasukkan tarikh mula dan juga tarikh tamat. Jadi, saya perlu memastikan tarikh mula yang dimasukkan oleh user mestilah lebih kecil atau sama dengan tarikh tamat.

Oleh itu, saya perlu menggunakan callback di dalam form validation tersebut. Ia ada diterangkan di sini http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html#callbacks.

Di dalam controller saya, saya telah menetapkan kedua-dua field iaitu tarikh mula dan tarikh tamat adalah wajib diisi oleh user. Ia kelihatan seperti ini:

$this->form_validation->set_rules('tarikh_mula', 'Tarikh Mula', 'required');
$this->form_validation->set_rules('tarikh_tamat', 'Tarikh Tamat', 'required');


Untuk membuat semakan seperti yang dinyatakan tadi, saya akan memasukkan satu lagi syarat atau rules ke dalam set_rules bagi tarikh tamat di mana saya namakannya dengan callback_tarikh_check.

$this->form_validation->set_rules('tarikh_tamat', 'Tarikh Tamat', 'required|callback_tarikh_check');


Kemudian, tambahkan satu function di dalam controller tersebut dengan nama tarikh_check (tanpa callback). Di dalam function tersebut saya letakkan kod seperti berikut:


function tarikh_check()
{
list($day, $month, $year) = explode('/', $this->input->post('tarikh_mula'));
if(checkdate($month, $day, $year)):
$tarikh_mula = strtotime($year.'-'.$month.'-'.$day); //yyymmdd
else:
$tarikh_mula = strtotime(date('Y-m-d'));
endif;
list($day, $month, $year) = explode('/', $this->input->post('tarikh_tamat'));
if(checkdate($month, $day, $year)):
$tarikh_tamat = strtotime($year.'-'.$month.'-'.$day); //yyymmdd
else:
$tarikh_tamat = strtotime(date('Y-m-d'));
endif;
if($tarikh_tamat >= $tarikh_mula):
return TRUE;
else:
$this->form_validation->set_message('tarikh_check', 'Tarikh Tamat mesti sama atau lebih besar daripada Tarikh Mula.');
return FALSE;
endif;
}

Saya akan terangkan secara ringkas setiap baris kod di atas...

list($day, $month, $year) = explode('/', $this->input->post('tarikh_mula'));

Oleh kerana input tarikh yang user masukkan adalah dalam format dd/mm/yyyy, maka saya perlu pecahkan ia ke dalam bentuk list supaya mudah saya ubah kepada format lain.

if(checkdate($month, $day, $year)):

Kemudian saya semak sekali lagi sama ada tarikh yang diberikan oleh user itu mengikut format yang betul atau tidak. Jik tidak, maka saya setkan semula tarikh tersebut ke tarikh hari ini. Ini terpulang kepada anda..

$tarikh_mula = strtotime($year.'-'.$month.'-'.$day);

Di sini, saya tukarkan tarikh tersebut ke dalam format time dengan menggunakan fungsi php iaitu strtotime().

Perkara yang sama juga dilakukan bagi tarikh tamat.

if($tarikh_tamat >= $tarikh_mula):

Akhir sekali barulah saya semak dan pastikan tarikh tamat mestilah lebih besar atau sama dengan tarikh mula.

$this->form_validation->set_message('tarikh_check', 'Tarikh Tamat mesti sama atau lebih besar daripada Tarikh Mula.');

Jika tidak, saya setkan mesej ralat supaya user betulkan tarikh tersebut.

Ok, hasilnya adalah seperti dalam gambar di bawah...

tanyaphp-callback

Selamat mencuba.
Share:

Wednesday, July 17, 2013

Redirect dengan HTML

Membawa pengunjung secara automatik ke laman yang lain boleh dilakukan dengan menggunakan kaedah redirect dengan HTML. Berikut adalah contoh kod aturcara bagi fail .html di mana <meta http-equiv="refresh" content="1;url=http://contoh.com"> akan berfungsi membawa pengunjung ke URL baru.

<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="1;url=http://contoh.com">
<title>Contoh Redirect</title>
</head>
<body>
<!-- Note: don't tell people to `click` the link, just tell them that it is a link. -->
If you are not redirected automatically, follow the <a href='http://wapps.uthm.edu.my/ppa/tawaran'>link to..</a>
</body>
</html>
Share: