วิธีการใช้งาน Captcha Helper ของ Codeigniter

การป้องกันการสแปมที่ได้รับความนิยมในปัจจุบันเห็นทีจะต้องยกให้ CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) ซึ่งจะเป็นการให้ผู้ใช้ (user) กรอกรหัสที่แสดงเป็นรูปภาพ เช่น

ตัวอย่าง CAPTCHAทำความรู้จักกันแล้วก็มาเข้าเรื่องกันเลยดีกว่าครับ บทความนี้จะพูดถึงวิธีการใช้งาน Captcha Helper ของ CI (Codeigniter) ซึ่งขั้นตอนการใช้งานก็มีดังนี้ครับ

1. สร้างเทเบิล (Table) ชื่อ captcha โดยมีโครงสร้างดังนี้ครับ

CREATE TABLE captcha (
 captcha_id bigint(13) unsigned NOT NULL auto_increment,
 captcha_time int(10) unsigned NOT NULL,
 ip_address varchar(16) default '0' NOT NULL,
 word varchar(20) NOT NULL,
 PRIMARY KEY `captcha_id` (`captcha_id`),
 KEY `word` (`word`)
);

2. สร้างโฟลเดอร์ captcha สร้างไว้ที่ Document root และกำหนด permission เป็น 666 หรือ 777

/
    /application
    /system
    /captcha

3. ตัวอย่างการใช้งาน

$this->load->helper('captcha');
$vals = array(
    'img_path'	 => './captcha/',
    'img_url'	 => 'http://example.com/captcha/'
    );

$cap = create_captcha($vals);

$data = array(
    'captcha_time'	=> $cap['time'],
    'ip_address'	=> $this->input->ip_address(),
    'word'	 => $cap['word']
    );

$query = $this->db->insert_string('captcha', $data);
$this->db->query($query);

echo 'พิมพ์ตัวอักษรที่เห็นในรูปด้านล่าง:
';
echo $cap['image'];
echo '<input type="text" name="captcha" value="" />';

จากนั้นที่หน้าที่เรา submit form ไปก็ทำการตรวจสอบค่าดังนี้ครับ

// First, delete old captchas
$expiration = time()-7200; // Two hour limit
$this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration); // Then see if a captcha exists: $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?";
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();

if ($row->count == 0)  //ถ้าหากผลการค้นหามีค่ามากกว่า 0 แสดงว่าผู้ใช้พิมพ์อักษรถูกต้องครับ
{
    echo "พิมพ์ตัวอักษรไม่ถูกต้อง";
}

เท่านี้ก็เรียบร้อยครับ ซึ้งถ้าหากเพื่อนๆ ต้องการกำหนดรูปแบบของตัวอักษรหรือตั้งค่าอื่นเพิ่มเติมก็สามารถเข้าไปศึกษาข้อมูลต่อได้ที่นี่เลยครับ