使用PHP创建图像验证码

艾伦·科尔多瓦(Alan Cordova)

嗨,我想用创建一个图片验证码,我的表单有下一个代码。

<form action="" method="POST">
    <div class="label_form">Usuario:</div> <input type="text" name="user"/><br>
    <div class="label_form">Contraseña:</div> <input type="password" name="pass"/><br>  
    <img alt="Numeros aleatorios" src="layouts/captcha.php" />  
    <input class="label_form" type="text" name="num"/><br>
    <input type="submit" value="ENTRAR" name="submit"/>
</form> 

这是发送表单之前进行验证的代码:

if (isset($_POST["submit"])) {
  if ($_SESSION['img_number'] != $_POST['num']) {
    echo "<div class='msg_error'>Los caracteres no se corresponden.</div>";
  } else {
    /*DO STUFF*/
  }
}

在其他文件中,captcha.php我有用于生成图像的代码

header("Content-type: image/png");
$string = "abcdefghijklmnopqrstuvwxyz0123456789";
for ($i = 0; $i < 5; $i++) {
  $pos = rand(0, 36);
  $str. = $string {
    $pos
  };
}
$img_handle = ImageCreate(60, 22) or die("Es imposible crear la imagen");
$back_color = ImageColorAllocate($img_handle, 102, 102, 153);
$txt_color = ImageColorAllocate($img_handle, 255, 255, 255);
ImageString($img_handle, 31, 5, 0, $str, $txt_color);
Imagepng($img_handle);
session_start();
$_SESSION['img_number'] = $str;

这给了一个破碎的图像,显​​示了from的alt img "Numeros aleatorios",所以告诉我的file.php调用很好,img但是生成的代码无法正常工作,任何帮助都是gratefull:D谢谢。

华金·奥

您的代码很好,您唯一想念的就是$str = ""catpcha.php文件顶部声明

这是您的代码的有效捕获:

在此处输入图片说明

更新

您的$string长度为36,因此您应生成一个介于0到35之间的随机位置,如下所示:

$pos = rand(0,35);

如果没有,您有时会得到一个损坏的图像和一个PHP声明。

更新第2期

您未声明$str = ""得到损坏的图像的原因是因为此行

$str .= $string{$pos};

引发PHP通知并损坏图像。(当然,只有在display_errors时,这才可以在@Danny的服务器上正常使用)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章