Codeigniter ile Kullanıcı Kayıt Formu
Etiketler : userauth, session, model, kullanici kayit, kullanici giris, kullanici, form validation, codeigniter, PHP
Görüntülenme : 2152
Codeigniter ile ilglili örneklerimize devam ediyoruz. Benim gibi hala öğrenme aşamasında olan arkadaşlara fikir vermesi için kullanıcı kayıt ve giriş işlemlerinden oluşan bir örnek yapacağız. Neler yapacığımızı listeleyelim.
- Kullanıcı Girişi
- Kullanıcı Çıkış
- Yeni Kullanıcı Kaydı
Oluşturulacak Dosyalar
Controller Dosyası
- kullanici.php
Model Dosyası
- kullanici_model.php
View Dosyaları
- kullanici_view.php
- kullanici_giris_view.php
- kullanici_kayit_view.php
View dosyalarımızı view->kullanici klasörü altına oluşturuyoruz.

İlk olarak model dosyamızı oluşturuyoruz.
kullanici_model.php
<?php
/**
* Kullanici Model sınıfı
*
* @author Alexander
*/
class kullanici_model extends Model {
public function __construct()
{
parent::Model();
}
function kullanici_ekle($kullanici_adi,$parola,$email)
{
$sql = "INSERT INTO demo_kullanici(kullanici_adi, parola, email) VALUES(?,?,?)";
$this->db->query($sql, array($kullanici_adi,$parola,$email));
if ( $this->db->insert_id() > 0 )
return $this->db->insert_id();
return FALSE;
}
function kullanici_adi_parola_ile_al($kullanici_adi,$parola)
{
$sql = "SELECT * FROM demo_kullanici WHERE kullanici_adi=? AND parola=?";
$query = $this->db->query( $sql, array($kullanici_adi, $parola ));
if( $query->num_rows() > 0 )
return $query->row();
return FALSE;
}
function kullanici_al($ozellik,$deger)
{
$sql = "SELECT * FROM demo_kullanici WHERE $ozellik=?";
$query = $this->db->query( $sql, $deger);
if( $query->num_rows() > 0 )
return $query->result();
return FALSE;
}
}
Model dosyamızda bulunan fonksiyonların açıklamalarını isterseniz controller dosyamızdaki kullanımları ile açıklayalım. Sırada controller dosyamız var.
kullanici.php
İlk olarak index fonksiyonumuzu oluşturuyoruz. Kullanıcı giriş yapmışsa hoşgeldiniz mesajını ekrana yazdırır, eğer kullanıcı giriş yapmamışsa giriş sayfasına yönlendirir.
function index()
{
if( !class_exists('CI_Session') ) $this->load->library('session');
if( $this->session->userdata('giris') )
{
$data['kullanici_adi'] = $this->session->userdata('kullanici_adi');
}
else
{
redirect(site_url('kullanici/kullanici_giris'));
}
$data['icerik'] = $this->load->view('kullanici/kullanici_view', $data, TRUE);
$this->load->view('tema', $data);
}
Kullanıcı giriş formunu ekrana getiren kullanici_giris fonksiyonumuzu ekliyoruz.
function kullanici_giris()
{
$data['icerik'] = $this->load->view('kullanici/kullanici_giris_view', '', TRUE);
$this->load->view('tema', $data);
}
Kullanıcı giriş formundan gelen bilgileri kontrol edip eğer böyle bir kullanıcı veri tabanında varsa hoşgeldin mesajının gösterildiği index fonksiyonuna yönlendiren "giris_yap" fonksiyonuna geçiyoruz. Aksi taktirde ekrana uyarı verir. Parolamızı karşılaştırırken kayıt yaparken parolamızı şifrelediğimiz için kullanıcıdan gelen parola bilgisini aynı şekilde şifreleyip daha sonra model fonksiyonuna gönderiyoruz. "kullanici_adi_parola_ile_al" adlı model fonksiyonumuz gelen kullanıcı adını ve parolayı veri tabanında sorgulayarak eğer böyle bir kullanıcı varsa kullanıcı bilgilerini dönderir, kullanıcı bulunamazsa "FALSE" değerini dönderir.
Giriş yapılamadığında veya bilgiler istediğimiz formatta gelmediği zaman ekrana uyarı vermek için session kütüphanesinin "set_flashdata" fonksiyonu ile sessionda uyarıyı tutup bir sonraki ekranda yazdırırız. Yazdırma kısmı view dosyasında yapılmaktadır.
function giris_yap()
{
$this->load->model('kullanici_model');
$form_kural = array(
array(
'field' => 'kullanici_adi',
'label' => 'Kullanıcı Adı',
'rules' => 'trim|required|min_length[6]|max_length[12]|alpha_numeric|xss_clean'
),
array(
'field' => 'parola',
'label' => 'Parola',
'rules' => 'trim|required|min_length[6]|max_length[12]|alpha_numeric|xss_clean'
)
);
if( !class_exists('CI_Form_validation') )
$this->load->library('form_validation');
$this->form_validation->set_rules($form_kural);
if( $this->form_validation->run() === TRUE )
{
$kullanici_adi = $this->input->post('kullanici_adi');
$parola = md5(sha1($this->input->post('parola')));
$kullanici = $this->kullanici_model->kullanici_adi_parola_ile_al($kullanici_adi, $parola);
if( !$kullanici )
{
$this->session->set_flashdata('hata', 'Giriş başarısız');
redirect(site_url('kullanici/kullanici_giris'));
}
else
{
if( !class_exists('CI_Session') ) $this->load->library('session');
$session_bilgileri = array(
'kullanici_adi' => $kullanici->kullanici_adi,
'giris' => TRUE
);
$this->session->set_userdata($session_bilgileri);
redirect(site_url('kullanici'));
}
}
$this->session->set_flashdata('hata', 'Bilgileri eksiksiz giriniz.');
redirect(site_url('kullanici/kullanici_giris'));
}
Kullanıcı girişinin yapıldığı fonksiyonumuzun neler yaptığını daha iyi anlamanız için giriş formunun ekran çıktısına bakabilirsiniz.

Yukarıdaki resimde de gördüğünüz gibi alt kısımdaki yeni kayıt linkine tıklandığında kullanıcı kayıt sayfasına yönleneceksiniz. Kullanıcı kayıt ekranını "kullanici_kayit" fonkiyonumuz ile ekrana getiriyoruz.
function kullanici_kayit()
{
$data['icerik'] = $this->load->view('kullanici/kullanici_kayit_view', '', TRUE);
$this->load->view('tema', $data);
}
Kullanıcı kayıt formundan gelen bilgileri "form_validation" sınıfı yardımı ile kontrol edip eğer bilgiler doğru girilmişse model fonksiyonumuza bilgieri gönderip kullanıcıyı veri tabanına kaydeden "kullanici_ekle" fonksiyonumuzdur.
function kullanici_ekle()
{
$this->load->model('kullanici_model');
$form_kural = array(
array(
'field' => 'kullanici_adi',
'label' => 'Kullanıcı Adı',
'rules' => 'trim|required|min_length[6]|max_length[12]|alpha_numeric|xss_clean|callback_kullanici_adi_kontrol'
),
array(
'field' => 'parola',
'label' => 'Parola',
'rules' => 'trim|required|min_length[6]|max_length[12]|matches[parola2]|alpha_numeric|xss_clean'
),
array(
'field' => 'parola2',
'label' => 'İkinci parola bilgisi',
'rules' => 'trim|required|min_length[6]|max_length[12]|alpha_numeric'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'trim|required|valid_email|xss_clean|callback_email_kontrol'
)
);
if( !class_exists('CI_Form_validation') )
$this->load->library('form_validation');
$this->form_validation->set_rules($form_kural);
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
$this->form_validation->set_message('required', '%s bilgisini girmelisiniz.');
$this->form_validation->set_message('matches', 'Parolalar eşleşmiyor.');
$this->form_validation->set_message('valid_email', 'Geçerli email adresi giriniz.');
$this->form_validation->set_message('kullanici_kontrol', 'Girdiğiniz kullanıcı adı daha önce kullanılmış!');
if( $this->form_validation->run() === TRUE )
{
$kullanici_adi = $this->input->post('kullanici_adi');
$parola = md5(sha1($this->input->post('parola')));
$email = $this->input->post('email');
if( $this->kullanici_model->kullanici_ekle($kullanici_adi, $parola, $email) )
{
$this->session->set_flashdata('mesaj', 'Kullanıcı kaydı başarıyla gerçekleştirildi.');
redirect(site_url('kullanici/kullanici_kayit'));
}
}
$data['icerik'] = $this->load->view('kullanici/kullanici_kayit_view', '', TRUE);
$this->load->view('tema', $data);
}
Kullanıcıdan gelen bilgiler için kurallar tanımlarken tanımladığımız "callback_kullanici_adi_kontrol" , "callback_email_kontrol" kuralları ile kullanici controller'ın içindeki "kullanici_adi_kontrol" ve "email_kontrol" fonksiyonlarını çağırmış oluyoruz.
Codeigniter ile form kontrol kuralları tanımlarken kendi fonksiyonlarımızı kullanmak istersek fonksiyona adının önüne "callback_" ön adını ekliyerek kural olarak tanımlayabiliriz. Daha detaylı bilgi için tıklayınız
Bu fonksiyonlarımızı ekleyelim.
function kullanici_adi_kontrol($kullanici_adi)
{
if( $this->kullanici_model->kullanici_al('kullanici_adi', $kullanici_adi) )
{
$this->form_validation->set_message('kullanici_adi_kontrol', 'Girdiğiniz kullanıcı adı daha önce kullanılmış.');
return FALSE;
}
return TRUE;
}
function email_kontrol($email)
{
if( $this->kullanici_model->kullanici_al('email', $email) )
{
$this->form_validation->set_message('email_kontrol', 'Girdiğiniz email adresi daha önce kullanılmış.');
return FALSE;
}
return TRUE;
}
Kullanıcı kayıt formunun bulunduğu sayfamızın ekran görüntüsü.

Son olarak kullanıcı çıkış yapacağı zaman çalışacak olan fonksiyonumuzu yazıyoruz.
function cikis_yap()
{
$this->session->sess_destroy();
redirect('kullanici');
}
Kullanıcı başarılı bir şekilde giriş yaptığı zaman ekrana hoş geldin mesajımızı yazdırıyoruz :).

View dosyalarının detayına girmeyeceğim uygulama dosyaları indirip view dosyalarına bakabilirsiniz.
Uygulamanın veri tabanı dosyası indirdiğiniz dosyada mevcuttur.
Uygulamanın sorunsuz çalışması için session, database ve form_validation kütüphaneleri ile url helper'ın otomotik yüklenmesi gerekmektedir.
Sonuç
Sonuç olarak Codeigniter ile kullanıcı kayıt ve giriş işlemlerinden oluşan küçük bir uygulma yaptık faydalı olması dileğiyle iyi çalışmalar.
Paylaş
Benzer Yazılar
Etiketler
userauth, session, model, kullanici kayit, kullanici giris, kullanici, form validation, codeigniter, PHPYorumlar >> (13 Yorum)
Ömer KESLER 21 Şub 2011, Pt 18:27 tarihinde yazılmış.Çok güzel bir çalışmaya imza atmışsınız teşekkürler.. Fork Kontrolleri çok güzel.. Ben 1.7.3 kurulum dosyasında çalıştırmaya çalıştım fakat Message: Undefined property: kullanici::$CI hatası verdi.. autoload.php ye ilgili kütüpheneyi yükletince düzeldi bilginize... Sanırım autoload.php dosyalara eklemeyi unuttunuz.. Emeğine sağlık iyi çalışmalar... sorunsuz süper çalışma olmuş..
alexander 21 Şub 2011, Pt 18:28 tarihinde yazılmış.Öncellikle yorumun için teşekkür ederim Ömer. Sanırım şöyle bir sorun oluşmuş. Ben bu kodları hazırlarken bazı kısımları daha önce yazmış olduğum kodlardan kopyala yapıştır yapmıtım.Controller dosyasıda CI kütüphanelerini yüklediğim satırlarda hata verecektir . "$this->load->library('kutuphane_adi'); " şeklinde yazmam gerekirken "$this->CI->load->library('kutuphane_adi');" şeklinde yazmışım(kopyala yapıştırın zararları. Kütüphaneler bende yüklü olduğu için hata vermedi :)). Kodları düzenleyip tekrar upload ettim. Baştan indirip denersen sorun çıkmayacaktır.Hatayı bildirdiğin için çok teşekkürler.
Ömer KESLER 21 Şub 2011, Pt 18:31 tarihinde yazılmış.CodeIgniter konusunda çalışmalarımızı artırmak belli bir düzeydeki php ciler için standart hale getirmenin çok faydalı olacalığını düşünüyorum.. Belki ilerde faydalı geniş çaplı bir uygulama ortaya çıkar neden olmasın :))
Yiğit 8 Oca 2012, Pa 11:43 tarihinde yazılmış.Diğer form doğrulama makelelerine göre oldukça geniş ve kapsamlı bir yazı olmuş.. Eline koluna sağlık..
Bir konuda yardıma ithiyacım var.. Form kontrölü sırasında tanımladığımız kurallar içinde callback_ ile istediğimiz fonksiyonu çağırıp doğrulama yaptırabiliyoruz.. Benim istediğim; örnek olarak TC kimlik numarasını doğrulatmak.. Bunun için gerekli olanlar TC kimlik no, ad, soyad ve doğum yılı..
$config = array(
array(
'field' => 'tc_kimlik_no',
'label' => 'TC Kimlik No',
'rules' => 'required|trim|numeric|exact_length[11]'
),
array(
'field' => 'ad',
'label' => 'Ad',
'rules' => 'required|trim|min_length[1]|max_length[25]'
),
array(
'field' => 'soyad',
'label' => 'Soyad (Tekrar)',
'rules' => 'required|trim|min_length[1]|max_length[25]'
),
array(
'field' => 'dogum_yili',
'label' => 'Doğum Yılı',
'rules' => 'required|trim|numeric|exact_length[4]'
)
);
Bu dördünü tek bir fonksiyonda mesela callback_tckimlikdogrula ile nasıl doğrulatabilirim ? Herbir değeri aynı anda bir fonksiyona göndermek ve geri döndürmek mümkün mü ?
Şimdiden teşekkürler, iyi çalışmalar..
alexander 8 Oca 2012, Pa 12:07 tarihinde yazılmış.formdan gelen bütün değerlere callback fonksiyonunda $this->input->post(‘alinacak_input’) şeklinde ulaşabilirsin. Callback fonksiyonu aşağıdaki gibi olacak.
function tckimlikdogrula() { $tc = $this->input->post('tc_kimlik_no'); $ad = $this->input->post('ad'); $soyad = $this->input->post('soyad'); $dogum_yili = $this->input->post('dogum_yili'); if(!$tc) { $this->form_validation->set_message('tckimlikdogrula', 'hata mesajı.'); return FALSE; } if(!$ad) { $this->form_validation->set_message('tckimlikdogrula', 'hata mesajı.'); return FALSE; } if(!$soyad) { $this->form_validation->set_message('tckimlikdogrula', 'hata mesajı.'); return FALSE; } if(!$dogum_yili) { $this->form_validation->set_message('tckimlikdogrula', 'hata mesajı.'); return FALSE; } return TRUE; }
Yiğit 8 Oca 2012, Pa 12:36 tarihinde yazılmış.Her değer için “callback_tckimlikdogrula” olarak mı kural tanımlayacağım ?
$config = array(
array(
'field' => 'tc_kimlik_no',
'label' => 'TC Kimlik No',
'rules' => 'required|trim|numeric|exact_length[11]| callback_tckimlikdogrula'
),
array(
'field' => 'ad',
'label' => 'Ad',
'rules' => 'required|trim|min_length[1]|max_length[25]| callback_tckimlikdogrula'
),
array(
'field' => 'soyad',
'label' => 'Soyad',
'rules' => 'required|trim|min_length[1]|max_length[25]| callback_tckimlikdogrula'
),
array(
'field' => 'dogum_yili',
'label' => 'Doğum Yılı',
'rules' => 'required|trim|numeric|exact_length[4]| callback_tckimlikdogrula'
) );Bu şekilde mi olacak ?
alexander 8 Oca 2012, Pa 12:38 tarihinde yazılmış.hayır sadece tckimlikno için yapman yeterli.
Yiğit 8 Oca 2012, Pa 12:46 tarihinde yazılmış.Çok teşekkür ederim.. Hayırlı günler, iyi çalışmalar..
alexander 8 Oca 2012, Pa 12:54 tarihinde yazılmış.Teşekkür ederim sana da iyi çalışmalar.
serkan 1 Şub 2012, Ça 03:24 tarihinde yazılmış.iyi günler.. dediklerinizi yaptım ancak butona tıkladığımda “Tarayıcı bu adresi nasıl açacağını bilmiyor, çünkü bu iletişim kuralı (localhost) herhangi bir programla ilişkilendirilmemiş.”
gibi bir hata ile karşılaşıyorum. Sizce neden olabilir ?
alexander 1 Şub 2012, Ça 11:06 tarihinde yazılmış.apllication->config->config.php içerisindeki $config[‘base_url’] değeri doğru atadığından emin ol.
serkan 2 Şub 2012, Pe 06:21 tarihinde yazılmış.teşekkür ederim “localhost:80” e “http:// ” ekleyince düzeldi.
alexander 2 Şub 2012, Pe 09:22 tarihinde yazılmış.rica ederim iyi çalışmalar.
Yorum Yap
Yorum Yazarken
Basit Html etiketlerini kullanabilirsiniz.
Kodlarınızı <pre></pre> etiketleri arasına yazınız.
