php 验证码实现范例 smarty html

来源:互联网 发布:java布局管理器嵌套 编辑:程序博客网 时间:2024/05/27 20:52
php 验证码实现范例 smarty html

 

   因为是菜鸟所以搞了两个半天才搞定,虽然不尽如人意,但也还凑合-差强人意 O(∩_∩)O~

案情:做一个简单的登录界面,要求有验证码,使用smarty,当验证码不一致时在登录界面提示“验证码错误,请重新输入!”

              在网上找了一个php生成验证码的代码:image.php;

image.php代码如下:

<?php
//checkNum.php
session_start();
function random($len)
{
$srcstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
mt_srand();//配置乱数种子
$strs="";
for($i=0;$i <$len;$i++){
$strs.=$srcstr[mt_rand(0,35)];
}
return strtoupper($strs);
}
$str=random(4); //随机生成的字符串
$width = 100; //验证码图片的宽度
$height = 25; //验证码图片的高度
@header("Content-Type:image/png");
$_SESSION["ses_vcode"] = $str;
//echo $str;
$im=imagecreate($width,$height);
//背景色
$back=imagecolorallocate($im,0xFF,0xFF,0xFF);
//模糊点颜色
$pix=imagecolorallocate($im,187,230,247);
//字体色
$font=imagecolorallocate($im,41,163,238);
//绘模糊作用的点
mt_srand();
for($i=0;$i <1000;$i++)
{
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
}
imagestring($im, 5, 7, 5,$str, $font);
imagerectangle($im,0,0,$width-1,$height-1,$font);
imagepng($im);
imagedestroy($im);
$_SESSION["ses_vcode"] = $str;
//session_destroy();
?>

代码最后有session_destroy();本人将其注释,否则$_SESSION["ses_vcode"] 值取不到。

在模板页index.tpl引入验证码:

      <img src="image.php" >

一开始打算把image.php生成的验证码值$_SESSION["ses_vcode"] 取出传到index.tpl里面

搞了半天也没有成功,网上说用value=<? $var ?>方法,但不知道为啥,smarty实现不了。

最后还是使用了页面跳转header()函数。到另一个页面里面判断,如果验证码不一致就转到登录界面,效果是一样的。

          实现方法:

点击登录的时候,页面转到welcome.php:

--welcome.php代码--

<?php
date_default_timezone_set('Asia/Shanghai');
session_start();
require('./libs/Smarty.class.php');
$smarty = new Smarty;
$name=$_REQUEST["name"];
$code=$_REQUEST["code"];
$vcode=$_REQUEST["vcode"];
$ses_vcode=$_SESSION["ses_vcode"];
//echo $_SESSION["ses_vcode"];

if(strtolower($vcode)==strtolower($ses_vcode))
{
session_destroy();
echo "登录成功:$ses_vcode : $vcode";
}
else
{
$_SESSION["error"]=1;
header("Location: ind
ex.php");
}

……

?>

说明:就是判断如果不一致的话,就将 $_SESSION["error"]赋值为1 然后跳转到登录界面

-----index.php代码:--------

<?php
date_default_timezone_set('Asia/Shanghai');
session_start();  
require('./libs/Smarty.class.php');
$vcwr="";
$color="#000033";
if(isset($_SESSION["error"]))
{
$color="#cddeff";
$vcwr="验证码错误,请重新输入!";
session_destroy();
}

…………

?>

说明

1.在登陆页 先判断是否有session['error'],有则显示,然后清除 session['error']。
2.welcome.php判断验证码与输入是否一致,不一致时存session['error']并赋值为1,然后跳转到index.php页面;

如果index.php里面不加session_destroy(),刷新页面时验证码错误就会一直显示