วิธีใช้งาน reCaptcha ร่วมกับ Codeignitor

457px-RecaptchaLogo.svg_1

สวัสดีครับ ไม่ได้เจอกันหลายอาทิตย์เลยครับ วันนี้ผมได้มีโอกาสใช้ reCaptcha กับตัว framework คู่ใจผมนั่นก็คือ Codeigniter นั่นเองครับ เลยอยากจะมาแชร์ให้เพื่อนๆ ที่กำลังหาวิธีทำครับ

โดยตัวของ Codeigniter (ขอเรียก CI นะครับ) นั้นได้มี helper ทีช่วยจัดการในเรื่องของ Captcha อยู่แล้ว เพียงแต่ว่าด้วยเหตุผลทางด้านทรัพยากรและอื่นๆ แล้วผมขอเลือกที่จะใช้ reCaptcha ของ Google ดีกว่าครับ ซึ่งเหตุผลที่เลือกใช้ reCaptcha หลักๆ แล้วคือ 1. เราไม่ต้องยุ่งวุ่นวายกับฐานข้อมูลของเราเลยครับ 2.การใช้บริการ reCaptcha นั้นยังเป็นการช่วยให้แปลหนังสือดิจิตอลได้ด้วยนะครับ :) เอาหล่ะมาดูกันเลยครับ

ก่อนอื่นให้เพื่อนๆ ไปสร้าง Key จากที่นี่ก่อนครับ ลงทะเบียนขอใช้ reCaptcha หลังจากนั้นก็จะได้คีย์มาครับให้เราเก็บไว้ให้ดีครับ

recaptcha
หลังจากนั้นจะเป็นการ implement ให้เราสามารถเรียกใช้จาก CI ได้สะดวกๆ นะครับ โดยให้โหลดไฟล์ Recaptcha.php จากด้านล่างไปนะครับ

Download: Recaptcha.php

หลังจากนั้นให้นำไปไว้ที่ “application/library/” ครับ หลังจากนั้นเราจะต้องการเซ็ต public key และ private key ให้กับตัว captcha ก่อนนะครับ โดยการเปิดไฟล์ config.php ขึ้นมาครับ แล้วให้ทำการเพิ่มตัวแปรสองตัวนี้ลงไปในไฟล์ครับ

[code lang=”php”]

/*
|————————————————————————–
| reCaptcha
|————————————————————————–
|
| to assign private key and public key
|
*/
$config[‘reCaptcha_public_key’] = ‘PLEASE_CHANGE_TO_YOUR_PUBLIC_KEY';
$config[‘reCaptcha_private_key’] = ‘PLEASE_CHANGE_TO_YOUR_PRIVATE_KEY';

[/code]

ให้ทำการแก้ PLEASE_CHANGE_TO_YOUR_PUBLIC_KEY และ PLEASE_CHANGE_TO_YOUR_PRIVATE_KEY เป็น key ของคุณเองนะครับ เรียบร้อยกดเซฟครับ

เอาหล่ะครับ หลังจากนี้จะวิธีการเรียนใช้งานแล้วครับ สำหรับวิธีการใช้ก็ไม่ยากครับ แบ่งออกเป็นสองส่วนคือ ส่วนของ form และส่วนของการ submit form ครับ

สำหรับในส่วนของ form นั้นให้เราใช้ code ได้ตามนี้เลยครับ

[code lang=”php”]
$this->load->library(‘recaptcha’);
$data[‘recaptcha_html’] = $this->recaptcha->recaptcha_get_html();
$this->load->view(form,$data);
[/code]

หลังจากนั้นในส่วนของ view ก็แค่ไปสั่ง echo ตัวแปร recaptcha_html ออกมาแค่นั้นเองครับ

[code lang=”php”]<?php echo $recaptcha_html; ?>[/code]

หลังจากนั้นเมื่อเรากด submit form เข้ามาใน controller นั้น ก่อนอื่นเลยเราต้องเช็คก่อนว่าเค้ากรอก captcha ถูกรึปล่าว ด้วยโค๊ดนี้ครับ

[code lang=”php”]

$this->recaptcha->recaptcha_check_answer(
$_SERVER[‘REMOTE_ADDR’],
$this->input->post(‘recaptcha_challenge_field’),
$this->input->post(‘recaptcha_response_field’));

[/code]

เมื่อรันโค๊ดนี้แล้วทางตัวไลบรารี่จะส่งข้อมูลไปยัง Google เพื่อเช็คว่าถูกต้องหรือไม่ แล้วจะส่งค่ากลับมา แต่เราต้องเช็คจาก property อีกตัวครับ ดังนี้

[code lang=”php”]$this->recaptcha->is_valid[/code]

ค่าที่ได้จะคือกลับมาเป็น BOOLEAN นะครับ ถ้าผู้ใช้กรอก captcha ได้ถูกต้องจะคืนกลับมาเป็นจริง แต่ถ้าไม่ก็เป็นเท็จครับ หลังจากนั้นเราใช้ if() เช็คเอาได้เลยครับว่าจะให้ทำอะไรต่อไป

ถือว่าง่ายมากเลยครับ ง่ายกว่าใช้ helper ของ CI เองอีกครับ แถมไม่ต้องมากังวลเรื่องทรัพยากรอีกด้วยครับ เพราะ captcha มีการสร้าง record และ รูปภาพเพิ่มมากขึ้นเรื่อยๆ (ไม่แน่ใจเพราะไม่เคยใช้ครับ) เอาเป็นว่าใครสงสัยตรงไหนก็ฝากคำถามไว้ได้เลยครับ ผมเข้ามาดูทุกวันครับ หากตอบได้ก็จะตอบให้ทันที หากตอบไม่ได้ก็จะไปหาคำตอบมาให้ครับ

Thapakorn
Follow me

Thapakorn

Programmer / Startup Owner at Phuketinnova Col., Ltd.
โปรแกรมเมอร์ที่ชอบถ่ายภาพและปั่นจักรยาน(แต่ไม่มีจักรยาน) ชอบทุกอย่างที่เกี่ยวกับเครื่องบินและคอมพิวเตอร์ ใฝ่ฝันอยากเป็นนักบินแต่ได้เป็นโปรแกรมเมอร์ :P
Thapakorn
Follow me

Leave a Reply