ถ้าเรื่่องการเขียน Captcha [Php ให้ติดต่อกับแบบฟ

เริ่มโดย lucationjj, 26 เมษายน 2011, 19:48:26

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

lucationjj

ผมเขียนไฟล์ captcha ขึ้นมา 1 ไฟล์ ชื่อ captcha.php
แล้วให้ส่งตัวเลขที่ Random จาก Chaptcha มาที่แบบฟอร์มสมัครสมาชิก


<label>รหัสลับ :</label>
      <img src="captcha.php" /><br/> <<<< ตรงนี้
      <input name="captcha" type="text"><br/> <<<< ตรงนี้เอาไว้กรอกรหัสจาก captcha
      <input type="hidden" name="code_hidden">
      <input name="submit" type="submit" value="ยืนยัน">
      <input type="reset" value="ล้างข้อมูล">

แล้วใ้ห้มันส่งข้อมูลต่อไปที่ ไฟล์ addregister.php โดยตรวจสอบว่ากรอก captcha ถูกหรือผิด
โค้ด addregister.php
<?
session_start();
if(strcmp($_POST['captcha'],$_POST['code_hidden'])==0){
   echo "กรอกรหัสถูกต้อง";
}else{
   echo "รหัสลับไม่ถูกต้อง";
}
?>


พอกด ยืนยันจากแบบฟอร์ม มันแสดงออกมาว่า รหัสลับไม่ถูกต้องในเมื่อผมกรอก รหัสจาก captcha ถูก อยากทราบว่าโค้ดมันผิดตรงไฟล์ไหนครับ รบกวนช่วยดูทีครับ ขอบคุณครับ  :wanwan017:


[direct=][/direct]
วันนี้มี ไม่มีบล็อก index แล้ว

smapan

[direct=http://cp.siamhostweb.com/cart.php?gid=1]จูมล่าโฮส สยามโฮสเว็บ[/direct] [direct=http://www.modty.com]modty.com[/direct]
[direct=http://www.apartment.in.th]รวมที่พัก เช่ารายวัน ที่พักเช่ารายเดือนมากที่สุดแจ่มจริง[/direct]
***Tel 083-757-1515 ติดปัญหา Joomla ตรงไหนรับปรึกษาฟรี โทรมาเถอะครับ ถ้าตอบได้ช่วยแน่นอน ไม่มีกั้ก. ***

lucationjj

อ้างถึงจาก: smapan ใน 26 เมษายน 2011, 20:02:02
ลองตัวหนังสือในช่องใส่รหัสลับว่า true สิ  :wanwan044:
:-X ผิดที่ท่านว่าจริงๆด้วย

ผมเอาออกแล้ว เลยลองใหม่ value="true" ออกแล้ว
แต่เหมือนเดิมครับ
[direct=][/direct]
วันนี้มี ไม่มีบล็อก index แล้ว

marknary

ลอง echo สองตัวนี้ออกมาดูก่อนครับ ว่ามันตรงกันมั้ย

$_POST['captcha']กะ $_POST['code_hidden']

lucationjj

อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 20:19:43
ลอง echo สองตัวนี้ออกมาดูก่อนครับ ว่ามันตรงกันมั้ย

$_POST['captcha']กะ $_POST['code_hidden']

มันขึ้นแบบนี้ครับ Login Success งง  :P
[direct=][/direct]
วันนี้มี ไม่มีบล็อก index แล้ว

marknary

อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 20:25:32
อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 20:19:43
ลอง echo สองตัวนี้ออกมาดูก่อนครับ ว่ามันตรงกันมั้ย

$_POST['captcha']กะ $_POST['code_hidden']

มันขึ้นแบบนี้ครับ Login Success งง  :P

แสดงว่ามันไม่ตรงกัน จีงบอกว่ารหัสลับไม่ถูก

navico

จากโค้ด ผมไม่เห็นว่า code_hidden จะมีค่าอะไรเลยอ่ะครับ
captcha.php เขียนโค้ดเก็บค่า สตริงของ captcha ไว้ด้วยอะไรครับ เท่าที่เคยๆเห็นจะเก็บใส่ session แล้วเอาค่าที่ส่งไปเทียบกับ session ที่เก็บไว้
แต่ส่งผ่านฟอร์มไปทั้งสองตัวนี่ไม่ค่อยเห็นนะครับ

marknary

ลองเอา code ที่ผมเคยเขียนเล่นๆไปศึกษาดูครับ

อันหน้าส่ง add.php
อ้างถึง
<?php         
                  
                  function randomToken($len)
                  {
                        srand( date("s") );
                        $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
                        $chars.= "1234567890"; // กำหนดอักขษะที่จะนำมา random แก้ได้นะ
                        $ret_str = "";
                        $num = strlen($chars);
                        for($i=0; $i < $len; $i++)
                           {
                              $ret_str.= $chars[rand()%$num]; // ใช้ฟังชั่น rand() เข้ามาช่วยในการทำงาน
                           }
                           return $ret_str;
                  }
                  $code = randomToken(5);
                  echo '<INPUT TYPE="hidden" NAME="verify" value="'.$code.'">';
                  echo '<center><FORM method="post" action="register.php">';
                  echo '<TABLE width="350px" bgcolor="#FFCC99">                  
                     <TR>
                        <TD width="40%" bgcolor="#FFFFCC"><font size="2px">code:<font color="red">'.$code.'</font><INPUT TYPE="hidden" NAME="verify" value="'.$code.'"></TD>
                        <TD width="60%" bgcolor="#FFFF99"><INPUT TYPE="text" name="code"></TD>
                     </TR>
                     <TR>
                        <TD width="40%" bgcolor="#FFFFCC"><font size="2px">submit</TD>
                        <TD width="60%" bgcolor="#FFFF99"><INPUT TYPE="submit"><INPUT TYPE="reset"></TD>
                     </TR>
                     </TABLE>';
                  echo '</FORM></center>';   
         
   ?>

อันนี้ตัวรับ regis.php
อ้างถึง
<?php
session_start();
ob_start();

                  $code=$_POST["code"];
                  $ver=$_POST["verify"];
                  if($code==$ver)
                                                 {
echo 'yes';
}
else{
echo 'no';
}
?>


lucationjj

ถ้ามีโค้ด captcha.php อยู่แล้วจะเรียกมายังไงครับ
ต้องเพิ่มโค้ดอะไร ไปในฟอร์ม
[direct=][/direct]
วันนี้มี ไม่มีบล็อก index แล้ว

marknary

อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 20:58:30
ถ้ามีโค้ด captcha.php อยู่แล้วจะเรียกมายังไงครับ
ต้องเพิ่มโค้ดอะไร ไปในฟอร์ม

ไม่รู้สิครับ คุณต้องเอา code มาให้ดูก่อนถึงจะบอกได้ครับ เพราะไม่รู้ว่าใน code มี function อะไรบ้าง

lucationjj

อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 21:07:54
อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 20:58:30
ถ้ามีโค้ด captcha.php อยู่แล้วจะเรียกมายังไงครับ
ต้องเพิ่มโค้ดอะไร ไปในฟอร์ม

ไม่รู้สิครับ คุณต้องเอา code มาให้ดูก่อนถึงจะบอกได้ครับ เพราะไม่รู้ว่าใน code มี function อะไรบ้าง
Captcha.php
<?php
session_start
();
header("Content-type: image/png");
$myseed rand(10000000,99999999);
$string rand(10000000,99999999);
$seedar str_split($myseed,4);
$_SESSION['key'] = hash('sha256',$seedar[0].$string.$seedar[1]);
$_SESSION['seed'] = $myseed;
$simage imagecreatetruecolor(79,22);
$fcolor imagecolorallocate($simage,180,10,10);
imagestring($simage,5,4,3,$string,$fcolor);
imagepng($simage);
imagedestroy($simage);
?>


โค้ดครับ
[direct=][/direct]
วันนี้มี ไม่มีบล็อก index แล้ว

hero-nana


<?php
session_start
();

$RandomStr md5(microtime());// md5 to generate the random string

$ResultStr substr($RandomStr,0,5);//trim 5 digit 

$NewImage =imagecreatefromjpeg("captcha.jpg");//image create by existing image and as back ground 

$LineColor imagecolorallocate($NewImage,51,182,240);//line rgb(175, 207, 228)
$TextColor imagecolorallocate($NewImage2137833);//text color

imageline($NewImage,1,1,40,40,$LineColor);//create line 1 on image 
imageline($NewImage,1,100,60,0,$LineColor);//create line 2 on image 
imageline($NewImage,1,50,50,0,$LineColor);//create line 3 on image 
imageline($NewImage,0,20,100,15,$LineColor);//create line 5 on image 

imagestring($NewImage52010$ResultStr$TextColor);// Draw a random string horizontally 

$_SESSION['1k2j48djh'] = md5($ResultStr);// carry the data through session

header("Content-type: image/jpeg");// out out the image 

imagejpeg($NewImage);//Output image to browser 

?>



code ของ wordpress plugin register plus คับ เผือได้ไอเดีย
เวลาใช้ก็

$number = md5($_POST['captcha']);
if($number!=$key){
echo "<strong>ERROR</strong>: Image Validation does not match.";
unset($_SESSION['1k2j48djh']);
}

รับเขียนโปรแกรม magento module, แก้ไข theme หรืออื่นๆ สนใจ pm มาครับ

marknary

อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 21:11:16
อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 21:07:54
อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 20:58:30
ถ้ามีโค้ด captcha.php อยู่แล้วจะเรียกมายังไงครับ
ต้องเพิ่มโค้ดอะไร ไปในฟอร์ม

ไม่รู้สิครับ คุณต้องเอา code มาให้ดูก่อนถึงจะบอกได้ครับ เพราะไม่รู้ว่าใน code มี function อะไรบ้าง
Captcha.php
<?php
session_start
();
header("Content-type: image/png");
$myseed rand(10000000,99999999);
$string rand(10000000,99999999);
$seedar str_split($myseed,4);
$_SESSION['key'] = hash('sha256',$seedar[0].$string.$seedar[1]);
$_SESSION['seed'] = $myseed;
$simage imagecreatetruecolor(79,22);
$fcolor imagecolorallocate($simage,180,10,10);
imagestring($simage,5,4,3,$string,$fcolor);
imagepng($simage);
imagedestroy($simage);
?>

โค้ดครับ
แหมะอ่าน code แล้วงงๆว่าจะเอาอะไรเทียบดี ถ้าเอาง่ายไม่เข้ารหัสก็ ใช้ $string เอาละกัน
จาก
อ้างถึง<label>รหัสลับ :</label>
     <img src="captcha.php" /><br/> <<<< ตรงนี้
     <input name="captcha" type="text"><br/> <<<< ตรงนี้เอาไว้กรอกรหัสจาก captcha
     <input type="hidden" name="code_hidden">
     <input name="submit" type="submit" value="ยืนยัน">
     <input type="reset" value="ล้างข้อมูล">

แก้เป็น
อ้างถึง
echo '<label>รหัสลับ :</label>
     <img src="captcha.php" /><br/> <<<< ตรงนี้
     <input name="captcha" type="text"><br/> <<<< ตรงนี้เอาไว้กรอกรหัสจาก captcha
     <input type="hidden" name="code_hidden" value="$string">
     <input name="submit" type="submit" value="ยืนยัน">
     <input type="reset" value="ล้างข้อมูล">';



hero-nana

อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 21:25:56
อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 21:11:16
อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 21:07:54
อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 20:58:30
ถ้ามีโค้ด captcha.php อยู่แล้วจะเรียกมายังไงครับ
ต้องเพิ่มโค้ดอะไร ไปในฟอร์ม

ไม่รู้สิครับ คุณต้องเอา code มาให้ดูก่อนถึงจะบอกได้ครับ เพราะไม่รู้ว่าใน code มี function อะไรบ้าง
Captcha.php
<?php
session_start
();
header("Content-type: image/png");
$myseed rand(10000000,99999999);
$string rand(10000000,99999999);
$seedar str_split($myseed,4);
$_SESSION['key'] = hash('sha256',$seedar[0].$string.$seedar[1]);
$_SESSION['seed'] = $myseed;
$simage imagecreatetruecolor(79,22);
$fcolor imagecolorallocate($simage,180,10,10);
imagestring($simage,5,4,3,$string,$fcolor);
imagepng($simage);
imagedestroy($simage);
?>

โค้ดครับ
แหมะอ่าน code แล้วงงๆว่าจะเอาอะไรเทียบดี ถ้าเอาง่ายไม่เข้ารหัสก็ ใช้ $string เอาละกัน
จาก
อ้างถึง<label>รหัสลับ :</label>
     <img src="captcha.php" /><br/> <<<< ตรงนี้
     <input name="captcha" type="text"><br/> <<<< ตรงนี้เอาไว้กรอกรหัสจาก captcha
     <input type="hidden" name="code_hidden">
     <input name="submit" type="submit" value="ยืนยัน">
     <input type="reset" value="ล้างข้อมูล">

แก้เป็น
อ้างถึง
echo '<label>รหัสลับ :</label>
     <img src="captcha.php" /><br/> <<<< ตรงนี้
     <input name="captcha" type="text"><br/> <<<< ตรงนี้เอาไว้กรอกรหัสจาก captcha
     <input type="hidden" name="code_hidden" value="$string">
     <input name="submit" type="submit" value="ยืนยัน">
     <input type="reset" value="ล้างข้อมูล">';



ถ้าแก้โค๊ตของคุณคงประมาณนี้


$myseed=$_SESSION['seed'] ;
$seedar = str_split($myseed,4);
$number = hash('sha256',$seedar[0].$_POST['verify'].$seedar[1]);
$key=$_SESSION['key'];
if($number!=$key){
echo "<strong>ERROR</strong>: Image Validation does not match.";
}
รับเขียนโปรแกรม magento module, แก้ไข theme หรืออื่นๆ สนใจ pm มาครับ

marknary

เห็นใจมือใหม่ :wanwan019:

marknary

สรุป อันนี้เลยครับ ของคุณข้างบน คงใช้ได้
$myseed=$_SESSION['seed'] ;
$seedar = str_split($myseed,4);
$number = hash('sha256',$seedar[0].$_POST['verify'].$seedar[1]);
$key=$_SESSION['key'];
if($number!=$key){
echo "<strong>ERROR</strong>: Image Validation does not match.";
}

lucationjj

อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 21:36:06
สรุป อันนี้เลยครับ ของคุณข้างบน คงใช้ได้
$myseed=$_SESSION['seed'] ;
$seedar = str_split($myseed,4);
$number = hash('sha256',$seedar[0].$_POST['verify'].$seedar[1]);
$key=$_SESSION['key'];
if($number!=$key){
echo "<strong>ERROR</strong>: Image Validation does not match.";
}


ผมเอาไปใส่ใน ไฟล์ addregister.php
แต่มันขึ้นแบบนี้ครับ ERROR: Image Validation does not match.
กรอกถูกก็ขึ้น
  :P
[direct=][/direct]
วันนี้มี ไม่มีบล็อก index แล้ว

hero-nana

อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 21:44:19
อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 21:36:06
สรุป อันนี้เลยครับ ของคุณข้างบน คงใช้ได้
$myseed=$_SESSION['seed'] ;
$seedar = str_split($myseed,4);
$number = hash('sha256',$seedar[0].$_POST['verify'].$seedar[1]);
$key=$_SESSION['key'];
if($number!=$key){
echo "<strong>ERROR</strong>: Image Validation does not match.";
}


ผมเอาไปใส่ใน ไฟล์ addregister.php
แต่มันขึ้นแบบนี้ครับ ERROR: Image Validation does not match.
กรอกถูกก็ขึ้น
  :P

session_start();

ด้วยนะครับเอาไว้บนสุดเลย
รับเขียนโปรแกรม magento module, แก้ไข theme หรืออื่นๆ สนใจ pm มาครับ

lucationjj

อ้างถึงจาก: hero-nana ใน 26 เมษายน 2011, 21:48:34
อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 21:44:19
อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 21:36:06
สรุป อันนี้เลยครับ ของคุณข้างบน คงใช้ได้
$myseed=$_SESSION['seed'] ;
$seedar = str_split($myseed,4);
$number = hash('sha256',$seedar[0].$_POST['verify'].$seedar[1]);
$key=$_SESSION['key'];
if($number!=$key){
echo "<strong>ERROR</strong>: Image Validation does not match.";
}


ผมเอาไปใส่ใน ไฟล์ addregister.php
แต่มันขึ้นแบบนี้ครับ ERROR: Image Validation does not match.
กรอกถูกก็ขึ้น
  :P

session_start();

ด้วยนะครับเอาไว้บนสุดเลย

เติมไว้แล้วครับ แต่ก็เหมือนเดิม
[direct=][/direct]
วันนี้มี ไม่มีบล็อก index แล้ว

hero-nana

อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 21:50:44
อ้างถึงจาก: hero-nana ใน 26 เมษายน 2011, 21:48:34
อ้างถึงจาก: lucationjj ใน 26 เมษายน 2011, 21:44:19
อ้างถึงจาก: marknary ใน 26 เมษายน 2011, 21:36:06
สรุป อันนี้เลยครับ ของคุณข้างบน คงใช้ได้
$myseed=$_SESSION['seed'] ;
$seedar = str_split($myseed,4);
$number = hash('sha256',$seedar[0].$_POST['verify'].$seedar[1]);
$key=$_SESSION['key'];
if($number!=$key){
echo "<strong>ERROR</strong>: Image Validation does not match.";
}


ผมเอาไปใส่ใน ไฟล์ addregister.php
แต่มันขึ้นแบบนี้ครับ ERROR: Image Validation does not match.
กรอกถูกก็ขึ้น
  :P

session_start();

ด้วยนะครับเอาไว้บนสุดเลย

เติมไว้แล้วครับ แต่ก็เหมือนเดิม

ผิดตรงนี้มั้งครับ แก้ตรงสีแดงอะคับ ดู name captcha ที่ส่งมาผิด :wanwan031:
$myseed=$_SESSION['seed'] ;
$seedar = str_split($myseed,4);
$number = hash('sha256',$seedar[0].$_POST['captcha'].$seedar[1]);
$key=$_SESSION['key'];
if($number!=$key){
   echo "<strong>ERROR</strong>: Image Validation does not match.";
}
รับเขียนโปรแกรม magento module, แก้ไข theme หรืออื่นๆ สนใจ pm มาครับ