Pythontr

husonet | Tarih: 15.01.2015

Codeigniter Captcha Yenileme 'Refresh'

Codeigniter Captcha kodunu post etmeden yenileme işlemi

Captcha kodlarının okunabilirliğini arttırması için yenileme butonu ekleyerek çalıştırılması son kullanıcı için kolaylık sağlayacaktır.


Öncelikle controller sayfamızda düzenlemelerimizi yapalım


vim application/controller/test.php
# bu fonksiyon sabit olarak kullanacağımız fonksiyondur bunu direkt html olustururken cagiracaz.
public function get_captcha()
{
$this->load->library('form_validation');
$this->load->helper('captcha');

$vals = array(
'img_path' => './captcha/',
'img_url' => base_url().'captcha/',
'font_path' => './sistemk/fonts/texb.ttf',
'img_width' => '150',
'img_height' => 30,
'expiration' => 7200,
'img_name' => 'img_captcha'
);
return create_captcha($vals);
}

# bu fonksiyon ise jquery ile çağıracağımız kısımdır dinamik olarak oluşturacağımız koddur
public function get_ajax_captcha()
{
$this->load->library('form_validation');
$this->load->helper('captcha');

$vals = array(
'img_path' => './captcha/',
'img_url' => base_url().'captcha/',
'font_path' => './sistemk/fonts/texb.ttf',
'img_width' => '150',
'img_height' => 30,
'expiration' => 7200,
'img_name' => 'img_captcha'
);
$tmp = create_captcha($vals);
# önemli olan nokta daha sonra post işleminde kullanacağımız captcha değerini bir session a atıyoruz.
$this->session->set_userdata('captcha_word',$tmp['word']);
echo $tmp['image'];
}

# controller kısmında captchayı kullanacağımız alandaki açıklamaları kısa yapacağım mantığı anlaşılması yeterli olacaktır.
public function index()
{
$this->load->library('form_validation');
$this->data['cap'] = $this->get_captcha();
$this->form_validation->set_rules('captcha', 'CAPTCHA', 'trim|required|xss_clean|callback_GuvenlikKontrolu');
if ($this->form_validation->run() == FALSE)
{
$this->session->set_userdata('captcha_word',$this->data['cap']['word']);
$this->load->view('temsilci/login',$this->data);
}
else
............
}

# bu kısım ise captcha dogrulugunu yaptigimiz kisimdir.
#------------------------------------------------
# guvenlik kodu kontrolu
function GuvenlikKontrolu($sValue)
{
if($sValue != $this->session->userdata('captcha_word'))
{
$this->form_validation->set_message('GuvenlikKontrolu', 'Girdiğiniz Güvenlik Kodu yanlıştır. Lütfen tekrar deneyiniz.');
return FALSE;
}
}


Şimdi view kısmını düzenleyelim çok karışmaması için gerekli kısımların örneklerini yazacağım


vim aplication/view/test.php

<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
..........
<div style="float:left;width:400px;margin-left:150px;margin-bottom:3px;">
<div id="div_captcha" style="float:left;margin-right:10px;"><?php echo $cap['image'];?></div>
<a id="refresh_captcha" style="float:left;cursor: pointer;">
<img name="image" src="/images/reload.png"/>
</a>
<label for="captcha">Captcha:</label>
<input class="txtInput" id="captcha" name="captcha" size="35" value="" type="text"><br>
<div style="float:left; width:100%;background-color:#CCCCCC;">
<?php echo form_error('captcha'); ?>
</div>
..........
<script>
$('#refresh_captcha').click(function(){
$.get( "/temsilci/get_ajax_captcha", function( data ) {
$( '#div_captcha' ).html( data );
});
});
</script>


İlgili konular: Codeigniter Captcha Ekleme