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.
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ş..
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.
Belki ilerde faydalı geniş çaplı bir uygulama ortaya çıkar neden olmasın :))
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..
formdan gelen bütün değerlere callback fonksiyonunda $this->input->post(‘alinacak_input’) şeklinde ulaşabilirsin. Callback fonksiyonu aşağıdaki gibi olacak.
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 ?
hayır sadece tckimlikno için yapman yeterli.
Çok teşekkür ederim.. Hayırlı günler, iyi çalışmalar..
Teşekkür ederim sana da iyi çalışmalar.
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 ?
apllication->config->config.php içerisindeki $config[‘base_url’] değeri doğru atadığından emin ol.
teşekkür ederim “localhost:80” e “http:// ” ekleyince düzeldi.
rica ederim iyi çalışmalar.
öncelikle çok güzel bir çalışma olmuş.
Ben dosyaları indirip kurdum fakat sayfayı açmaya çalıştığımda boş bir sayfa çıkıyor.galiba tema dosyasına ulaşamıyor.kullanici.php de bir syntax hatası olabilrimi veya ben 2.0 sürümü kullanıyorum ondan olma ihtimali varmı.
Ben ci nin 2.0 dan önceki sürümüne göre yazdığım için hata alıyorsunuz. Kodları güncelledim tekrar indirip kullanabilirsiniz.
KURULUM :
- demo_kullanici.sql dosyasındaki sorguyu çalıştırın.
- application/config/config.php dosyasındaki “encryption_key” değerini atayın.
Merhabalar,
mevcut olan bir view dosyam var ona nasıl entegre edebilirim.
örnegin kullanıcı girişi yapıldıysa view dosyası açılacak eğer kullanıcı girişi yapılmadıysa login ekranı çıkacak nasıl yapabilrim?