เริ่มแรกง่าย ๆ เลย สุ่มตัวเลขสัก 2 ตัวก่อน แล้วเก็บลง Session ไว้ซะ
session_start();
// เริ่มสร้างตัวเลขสุ่มไว้สองตัว
$_SESSION['rand_x'] = rand(1, 9);
$_SESSION['rand_y'] = rand(1, 9);
// จบการสร้างตัวเลขสุ่ม
แล้วก็เอาค่าที่ได้ไปแสดง แล้วก็ให้กรอกผลของการบวก
<!-- เริ่มส่วนของการบวกเลข -->
กรุณาบวกเลขต่อไปนี้
<?php echo $_SESSION['rand_x']; ?> + <?php echo $_SESSION['rand_y']; ?> = <input type="text" name="rand_ans" size="10">
<!-- จบส่วนของการบวกเลข -->
โค้ดด้านบนก็เอาไปใส่ใน form เพื่อให้เอาคำตอบให้มันส่งค่าไปยังปลายทาง
ส่วนปลายทางที่รับค่าจาก form ซึ่งก่อนทำเรื่องอื่น ๆ ก็เช็คก่อนเลยว่า บวกเลขมาถูกต้องหรือเปล่า โดยเอาค่าที่อยู่ใน session มาบวกและเืทียบค่ามันซะ ถ้าใช่ก็ปล่อยไปทำอย่างอื่น ถ้าไม่ใช่ก็ die มัน หรือจะทำอะไรต่อก็สุดแล้วแต่ครับ
session_start();
// เริ่มตรวจสอบการบวกเลข
if(($_SESSION['rand_x'] + $_SESSION['rand_y']) != $_POST['rand_ans']) {
die("คุณบวกเลขผิด");
}
// จบการตรวจสอบการบวกเลข
แค่นี้ก็พอกัน comment ที่มา spam ได้ อาจจะปรับเปลี่ยนรูปแบบการแสดงผล หรือตำแหน่งในการวาง input form ต่าง ๆ ได้ตามความเหมาะสม หรือจะสุ่มตำแหน่งก็ได้ เพื่อป้องกัน bot ที่สามารถปรับตัวได้ตามลักษณะของการบวกเลขแบบนี้ครับ ซึ่งการ ทำระบบบวกเลขนี้ก็คล้าย ๆ กับการทำ captcha แหละครับ แต่อันนี้จะง่ายและไม่ซับซ้อนมากเท่าครับ
โดยตัวแนวคิดได้มาจากแนวคิดของ Match Captcha ของ Drupal แหละครับ
แล้วถ้าให้มันสุ่มตัว + – x / ละครับ
Priesdelly — ก็เพิ่มตัวแปรสำหรับให้มันสุ่ม +, – , * แล้วก็ / ครับ แล้วก็เข้าไป random ออกค่าพวกนี้มาอีกใส่ลงใน session เวลาคำนวณก็ไปดึงมาทำ if-else แล้วก็คำนวณตามที่มันสุ่มในตัวแปรเท่านั้นเองครับ ไม่ยากครับผม
ขอบคุณมากครับ สั้น กระชับ ใัช้งานได้จริง ^^
แบบนี้ถ้าเกิดว่าเปิดหน้าที่มีช่องให้ comment พร้อมกันทีละหลายๆ หน้า
ก็จะใช้ได้กับเฉพาะหน้าที่เปิดเป็นลำดับสุดท้ายสิครับ
pittaya – ใช่ครับ อันนี้ผมเขียนแบบลวกสุด ๆ แล้วก็เบื้องต้นสุด ๆ ครับ ไม่ได้มีการทำ timer ไว้เพื่อเช็คว่าจะให้เปลี่ยนค่ากี่นาทีครั้งอะไรแบบนี้ หรือเช็คว่ามีค่าอยู่หรือเปล่าครับ เอาไว้เป็นแนวทางพัฒนากันต่อไปครับผม
ซึ่งถ้ามีเวลาจะเอาเขียนเพิ่มเติมที่ใช้ได้หลากหลาย และหลากรูปแบบให้ดูกันครับ
ถ้าเป็น bot เข้ามาแกะสมการ แล้วเอาค่าไปเข้า eval() function ก็สามารถถอดได้แล้ว
แสดงว่าใช้ captcha น่าจะโอเคกว่าอยู่แล้วหรือเปล่าครับ
devspy – ก่อนจะเอา bot มาแกะสมการออกมาเนี่ยคงต้องไล่ทำ parser มันออกมาเป็น สมการเพื่อใส่ใน eval ก่อนหล่ะมั้งครับ ซึ่งเราก็สามารถทำ random ตัว pattern ส่วนของการแจ้งตรงพื้นที่บวกเลขให้มัน dynamic สลับไปมาได้อีก แบบเดียวกับ captcha ครับ ซึ่งอันนี้มันขึ้นอยู่กับว่าจะมีความบ้าพลังในการ random มากน้อยแค่ไหนครับ
โอ้ว จดจดจดจด
คือว่าผมเอาโค้ดไปวางไม่ถูกอะครับ วางยังไงตรงไหนหรอครับ บอกหน่อยครับ
ขอบคุณคร้าบ
ขอบคุณครับ มีประโยชน์แบบนี้ บวก 1 ไปเลยครับ