Codeigniter ile Form Kontrolü
Burada anlatıldığı üzere form kontrolleri codeigniter'da oldukça basit. Yapmanız gereken aslında 2 önemli unsur var. Bunlardan birincisi
$this->load->library("validation");
$this->load->library('form_validation');
kodu ile form_validation kütüphanesini çağırmak, ikincisi ise application/config/ dizininde form_validation.php adında bir dosya oluşturmak. Peki form_validation.php dosyası bizim ne işimize yarayacak. form_validation.php dosyası bizim formlarımız için oluşturacağımız kuralları arrayler içinde tanımlama yapacağımız yer aslında. Örnek form_validation.php dosyası aşağıdaki gibi olmalıdır.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
'newuser'=>array(
array(
'field' => 'namesurname',
'label' => 'Ad Soyad',
'rules' => 'required'
),
array(
'field' => 'username',
'label' => 'Kullanıcı adı',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Şifre',
'rules' => 'required|matches[passwordconfirm]|min_lenght[4]|max_length[12]'
),
array(
'field' => 'passwordconfirm',
'label' => 'Şifre doğrulama',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required|valid_email'
)
),
"forgetpassword"=>array(
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required|valid_email'
)
)
);
/* End of file form_validation.php */
/* Location: ./system/application/config/form_validation.php */
Yukarda verilmiş olan örnek form_validation.php dosyasında iki form kontrolü yapılmıştır. Bu formlardan biri yeni kayıt, diğeri ise şifremi unuttum formlarıdır. Yeni kayıtta namesurname, username, password,passwordconfirm ve email adlarında inputlar, şifremi unuttum formunda ise email alanı bulunmaktadır. En iç array'de bulunan field, input tağının adını, label input tağının etiketini, rules ise kuralları tanımlayacağınız değişkendir. Kurallar arasına | işareti konularak birden fazla kural tanımlayabilirsiniz.
Örnek kontroller dosyamız aşağıdaki gibi olursa;
class Yeniuye extends Controller {
function index()
{
$data['title'] = 'Yeni Üye';
$this->load->view('newuser',$data);
}
function kaydet()
{
if($this->form_validation->run('newuser') == FALSE)
{
$data['title'] = 'Yeni Üye';
$this->load->view('newuser',$data);
}
else
{
$data['title'] = 'Tebrikler';
$this->load->view('formsuccess',$data);
}
}
}
Ve formların bulunduğu view(örnekte newuser) dosyası aşağıdaki gibi olacaktır.
<?php
echo form_open('/yeniuye/kaydet');
echo validation_errors('<div>', '</div>');
?>
<p><label>Ad Soyad:</label><br />
<input type="text" name="namesurname" value="<?php echo set_value('namesurname'); ?>"/><br /> <br />
<label>Kullanıcı Adı:</label><br />
<input type="text" name="username" value="<?php echo set_value('username'); ?>"/> <br /> <br />
<label>Şifre:</label><br />
<input type="password" name="password" value="<?php echo set_value('password'); ?>"/> <br /> <br />
<label>Şifre Tekrarı:</label><br />
<input type="password" name="passwordconfirm" value="<?php echo set_value('passwordconfirm'); ?>"/> <br /> <br />
<label>Email: </label><br />
<input type="text" name="email" value="<?php echo set_value('email'); ?>"/> <br /> <br />
<div><input type="submit" value="Ekle" /></div>
</p>
Özetle anlatacak olursak, form_validation dosyasına formda kullanılan alanların adları ile arraylist oluşturulmakta ve bu arraylist içinde bulunan kurallar kontrol edilmekte. Formu post edince $this->form_validation->run('newuser') ile form kurallarına uyup uymadığı kontrol ediliyor. Eğer kurallara uymuyorsa false değer dönmektedir. False değer döner ise yapılması gereken sadece form sayfasını tekrar çağırmaktır. Tabi form sayfasında
echo validation_errors('<div>', '</div>');
yazmanız nerede hata verdiğini gösterecektir. Örneğin geçersiz e-mail adresi gibi. Tabi bu hatalar ingilizce görünecektir. Türkçe görünmesi için buradan türkçe dil dosyasını indirmeniz ve system/language dizinine taşımanız gerekmektedir. config.php içinde de $config['language'] = "english"; yerine $config['language'] = "turkish"; yazmanız yetecektir. Ben ilk aşamada türkçe karakter sorunu ile karşılaştım. Çözüm olarak dil dosyalarının başına
header('Content-Type: text/html; charset=utf-8');
yazdım. Sizde karşılaşırsanız bu şekilde çözüme gidebilirsiniz.
Olayı özetledikten sonra tek anlatılması gereken konu kuralların ne olduğudur. En çok kullanacağınız kurallar kısaca şunlardır;
required: Doldurulması zorunlu alanlar,
matches: Eşleşmesi gereken alanı gösterir. Örneğin şifre doğrulama ile şifre alanının bir biri ile aynı olması gibi. Kullanımı matches[passwordconfirm], şeklindedir.
min_length: Girilen parametrenin minimum uzunluk kontrolü yapılır,
numeric: Girilen değer nümerik olmak zorundadır.
integer: Girilen değer tam sayı olmak zorundadır.
valid_email: Girilen email adresinin geçerli olup olmadığını kontrol eder.
valid_emails: Girilen email adreslerinin geçerli olup olmadığını kontrol eder.
Ayrıca;
md5: Girilen değerin md5 karşılığını üretir.
xss_clean : Girilen değer kötü amaçlı veri bulunduruyorsa temizler.
Diğer kurallara ve özel kuralların nasıl oluşturulduğuna burada bakabilirsiniz.
Not: xss_clean default olarak true yaptığımdan buradaki örneklerde bahsedilmedi. Güvenlik için xss_clean'i defaultta true yapmıyacaksanız kurallara xss_clean eklemeniz gerekecektir.
Codeigniter ve Database (Query helper)

Codeigniter ve database ayarları için gerekli ayarların yapılmasını ve Codeigniter ve Standart Database İşlemlerini önceki yazılarımda anlatmıştım. Bu yazımda ise query helper fonksiyonlarını ve Active record classını anlatmaya çalışacağım.
Query helper bir çok kişinin zaman zaman aradığı ve bulamadığı fonksiyonlardan bazılarını içermesi açıkcası beni mutlu etti. Query helper ile en son eklenen kaydın ID numarasını, bir önceki sorguda etkilenen satır sayısını, bir tablodaki kayıt sayısını, database platformunu, versiyonu, son sorgu sql satırını, tabloya veri ekleme ve verileri update etmenize olanak sağlamaktadır.
Codeigniter ve Standart Database İşlemleri

Codeigniter için database ayarlarının nasıl yapılacağını önceki yazımızda anlatmıştım. Bu yazımda ise database bağlantısının nasıl sağlanacağını, database işlemlerini anlatmaya çalışacağım.