ทำ captcha ไม่ได้ครับ...
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ทำ captcha ไม่ได้ครับ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <span style= "color: rgb(51, 153, 102);" >register1.php </span> <?php session_start(); ?> <head> <link href= "captcha.css" rel= "stylesheet" type= "text/css" /> </head> <body> <h1>:: Register ::</h1> <form method= "post" action= "registerr.php" > <table width= "320" border= "0" cellpadding= "2" cellspacing= "5" > <tr> <td width= "90" height= "23" >Username :</td> <td width= "194" ><input type= "text" name= "user_reg" /> <span style= "color: #F63;" >*</span></td> </tr> <tr> <td width= "90" height= "23" >Password :</td> <td><input type= "password" name= "pass_reg" /> <span style= "color: #F63;" >*</span></td> </tr> <tr> <td height= "120" colspan= "2" style= "text-align: center" > <?php $_SESSION [ 'num_to_check' ][0]=rand(1,9); $_SESSION [ 'num_to_check' ][1]=rand(1,9); ?> <div id= "verify_math" > <span class = "digital" style= "background-position:<?=($_SESSION['num_to_check'][0]*-30)?>px 0px;" ></span> <span>+</span> <span class = "digital" style= "background-position:<?=($_SESSION['num_to_check'][1]*-30)?>px 0px;" ></span> <span>=</span> <span> <input name= "i_verify" type= "text" id= "i_verify" maxlength= "2" /> </span> </div> <br /> <br /></tr> <tr> <td align= "right" ><input type= "submit" value= "สมัคร" /></td> <td align= "left" ><input type= "reset" value= "รีเซ็ต" /></td> </tr> </table> </form> </body> </html> |
1 | <span style= "color: rgb(51, 153, 102);" >registerr.php</span> |
<?
$user_reg=$_POST[user_reg];
$pass_reg=$_POST[pass_reg];
$sex_reg=$_POST[sex_reg];
$email_reg=$_POST[email_reg];
$date_reg=$_POST[date("Y-m-d")];
if($user_reg=='' or $pass_reg==''){
echo'<h3>กรอกข้อมูลไม่ครบ</h3>'; exit();
}
include 'connect.php';
$sql="SELECT * FROM tb_member where username='$user_reg'";
$result=mysql_db_query($dbname,$sql);
$num=mysql_num_rows($result);
if($num>0){
echo'<h3>Username นี้มีผู้ใช้แล้ว</h3>'; exit();
}
$sql="INSERT INTO tb_member
values('','$user_reg','$pass_reg','$sex_reg','$email_reg','".date("Y-m-d")."')";
mysql_query("SET character_set_results=utf8");
mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_connection=utf8");
$result=mysql_db_query($dbname,$sql);
if($result){
echo'<h3>บันทึกข้อมูลเรียบร้อยแล้ว</h3>';
echo"<a href='index.html'>คลิกเพื่อเข้าสู่ระบบสมาชิก</a>";
}else{
echo'<h3>สมัคสมาชิกไม่สำเร็จ</h3>';
}
mysql_close();
?>
1 | <span style= "color: rgb(51, 153, 102);" >chksession.php</span> |
<?
session_start();
$sess_userid=$_SESSION[sess_userid];
$sese_username=$_SESSION[sess_username];
if($_POST['button2']){
if(isset($_POST['i_verify']) && $_POST['i_verify']==@array_sum($_SESSION['num_to_check']) && $_POST['i_verify']>0 && trim($_POST['i_verify'])!=""){
echo "<span style="color:green;">Right</span>";
$_SESSION['num_to_check'][0]=rand(1,9);
$_SESSION['num_to_check'][1]=rand(1,9);
exit;
}else{
echo "<span style="color:red;">Wrong</span>";
$_SESSION['num_to_check'][0]=rand(1,9);
$_SESSION['num_to_check'][1]=rand(1,9);
exit;
}
}
if ($sess_userid<>session_id() or $sess_username==''){
header('Location: index.html'); exit();
}
?>
ผมพิมพ์คำตอบมั่วๆ มันก็ยังให้ผ่านครับ
ผมเลยไม่แน่ใจว่า ผมอาจจะวางโค้ดผิดที่รึป่าว
ไม่แน่ใจว่าต้องวางที่ registerr.php หรือ chksession.php กันแน่
รบกวนด้วยครับ ติดอยู่อันเดียวนี่แหละครับ captcha ทำไม่ได้สักที

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ไม่รู้ว่านำไปใช้แบบไหน แต่เท่าที่ดู น่าจะนำไปใช้ไม่ถูกต้อง
https://www.ninenik.com/ป้องกัน_spam_ด้วย_captcha_คำถาม_ทางคณิตศาสตร์_อย่างง่าย-288.html
PHP Code หน้าตรวจสอบ จะต้องอยู่ในไฟล์ register.php หรือหน้าที่รับข้อมูลตามแต่กรณี เช่น ไฟล์ตรวจสอบล็อกอิน ไฟล์โพสกระทู้ อื่นๆ เป็นตั้น
ตัวอย่างถ้าสมัครสมาชิก register.php รูปแบบโค้ดจะประมาณนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <?php session_start(); if ( $_POST [ 'button2' ]){ if (isset( $_POST [ 'i_verify' ]) && $_POST [ 'i_verify' ]==@ array_sum ( $_SESSION [ 'num_to_check' ]) && $_POST [ 'i_verify' ]>0 && trim( $_POST [ 'i_verify' ])!= "" ){ echo "<span style=\"color:green;\">Right</span>" ; $user_reg = $_POST [user_reg]; $pass_reg = $_POST [pass_reg]; $sex_reg = $_POST [sex_reg]; $email_reg = $_POST [email_reg]; $date_reg = $_POST [ date ( "Y-m-d" )]; if ( $user_reg == '' or $pass_reg == '' ){ echo '<h3>กรอกข้อมูลไม่ครบ</h3>' ; exit (); } include 'connect.php' ; $sql = "SELECT * FROM tb_member where username='$user_reg'" ; $result =mysql_db_query( $dbname , $sql ); $num =mysql_num_rows( $result ); if ( $num >0){ echo '<h3>Username นี้มีผู้ใช้แล้ว</h3>' ; exit (); } $sql ="INSERT INTO tb_member values( '' , '$user_reg' , '$pass_reg' , '$sex_reg' , '$email_reg' , '".date("Y-m-d")."' )"; mysql_query( "SET character_set_results=utf8" ); mysql_query( "SET character_set_client=utf8" ); mysql_query( "SET character_set_connection=utf8" ); $result =mysql_db_query( $dbname , $sql ); if ( $result ){ echo '<h3>บันทึกข้อมูลเรียบร้อยแล้ว</h3>' ; echo "<a href='index.html'>คลิกเพื่อเข้าสู่ระบบสมาชิก</a>" ; } else { echo '<h3>สมัคสมาชิกไม่สำเร็จ</h3>' ; } mysql_close(); $_SESSION [ 'num_to_check' ][0]=rand(1,9); $_SESSION [ 'num_to_check' ][1]=rand(1,9); exit ; } else { echo "<span style=\"color:red;\">Wrong</span>" ; $_SESSION [ 'num_to_check' ][0]=rand(1,9); $_SESSION [ 'num_to_check' ][1]=rand(1,9); exit ; } } ?> |
แต่ถ้าต้องการประยุกต์ไว้ใช้ในหลายๆ หน้า ก็ต้องปรับเพิ่ม ดังนี้ เช่นตั้งเป็นชื่อไฟล์ valid_data.php
1 2 3 4 5 6 7 8 9 10 11 | <?php if (isset( $_POST [ 'i_verify' ]) && $_POST [ 'i_verify' ]==@ array_sum ( $_SESSION [ 'num_to_check' ]) && $_POST [ 'i_verify' ]>0 && trim( $_POST [ 'i_verify' ])!= "" ){ $valid_check =1; $_SESSION [ 'num_to_check' ][0]=rand(1,9); $_SESSION [ 'num_to_check' ][1]=rand(1,9); } else { $valid_check =0; $_SESSION [ 'num_to_check' ][0]=rand(1,9); $_SESSION [ 'num_to_check' ][1]=rand(1,9); } ?> |
พอหน้าตรวจสอบก็จะใช้เป็น ดังนี้
1 2 3 4 5 6 7 8 9 10 11 | <?php session_start(); if ( $_POST [ 'button2' ]){ include ( "valid_data.php" ); if ( $valid_check ==1){ // แทรกโค้ดกรณีผ่านเงื่อนไข captcha } else { // แทรกโค้ดกรณีไม่ผ่านเงื่อนไข captcha } } ?> |

โอวมายก้อด ทำได้แล้วครับ หลังจากงมอยู่นาน
ขอบคุณมากครับ ninenik
