php用户注册登录系统之验证码制作
验证码的分析
登录注册页面设置验证码主要是为了防止暴力破解、恶意注册等情况的发生,是属于网站的标配内容,到今天已经发展成将验证码直接发送到用户手机或者邮箱进行验证,本节只做最简单的图片验证码的验证,大家可以通过本节,了解验证码验证的原理
生成验证码的简单流程图
具体的实现见下面的内容
生成验证码背景图
1.开启php的GD扩展
打开php.ini文件,将extension=php_gd2.dll这一项的注释去掉,开启它,如果本来是开启的则不需要改动
接下来,我们来制作一个60X15的白色背景图片
2.创建画布
画布,一种资源型数据。可以操作的图像资源。
- 创建新画布(新建)
ImageCreate(宽,高),创建基于调色板的画布。
imageCreateTrueColor(宽,高);创建真彩色的画布。
- 基于图片创建画布(打开)
imageCreateFromJPEG(图片地址);
imageCreateFromPNG(图片地址);
imageCreateFromGIF(图片地址);
我们创建一个真彩色的画布:
*$width=60;
$height=15;
//创建画布
$img=imageCreateTrueColor($width,$height);*
大家可以尝试使用var_dump();
将$img
输出查看其类似是不是资源型
3.操作画布
分配颜色:如果需要在画布上使用某个颜色,应该先将颜色分配到画布上。
使用函数:
颜色标识 = imageColorAllocate(画布,R,G,B);
*//分配颜色
$white = imageColorAllocate($img,0xff,0xff,0xff);*
填充画布:将填充点,连续并且颜色相同的点进行填充(替换)
使用函数:
imageFill(画布, 填充位置x, 填充位置Y,颜色标识)完成
位置采用坐标进行管理:
原点:0,0,画布的左上角。
向右,x轴增加,向下Y轴增加。
*//填充颜色到画布
imageFill($img,0,0,$white);*
4.输出画布
将画布中处理好的图样信息,输出出来。
典型的:
输出到图片文件。
直接输出。
使用函数:
imagePNG(画布[, 文件地址])://在指定地址生成文件
imageJPEG();//在网页上直接输出,我们的验证码采用这种方式
imageGIF();//同上一个
如果没有第二个参数,表示直接输出。
直接输出到浏览器,需要告知浏览器,响应数据的类型应该是PNG格式的图片:
使用指令Content-type
*//直接输出*
*header('Content-Type:image/jpeg;');*
*imageJPEG($img);*
注:一个画布可以输出多次,输出为各种格式!
5.销毁画布资源
使用函数:imageDestroy();
*imageDestroy($img);*
生成验证码的值
1.首先必须定义所以可能出现的字符,获取所有字符的总长度以及我们要生成的验证码的长度
代码如下:
*//生成验证码的值
$chars = '1234567890';//所以可能出现的字符
$chars_len=strlen($chars);
$code_len=4;//验证码的长度
$code='';//初始化验证码字符串*
2.分四次,每次从所有可能出现的字符中取出一个数字,最后将四位数字链接在一起,生成验证码的值
*for($i=1;$i<=$code_len;++$i){
$rand=mt_rand(0,$chars_len-1);//随机取0-9中的任意一个数字
$code.=$rand;//将取出来的数字连接在一起
}*
3.开启session,将验证码值存入session中,用于验证
*//存入session中,用于验证-------------------------
session_start();
$_SESSION[' ver_code']=$code;*
将验证码值放入验证码背景图片中
1.给验证码值分配随机颜色
*//随机分配字符串颜色
$str_color=imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));*
2.使验证码值居中写在背景图上面
*//计算字符串的居中
//字符串大小
$font=5;
//画布尺寸
$img_w=imageSX($img);
$img_h=imageSY($img);
//字体的尺寸
$font_w=imagefontwidth($font);
$font_h=imagefontheight($font);
//字符串的尺寸
$code_w=$font_w*$code_len;
$code_h=$font_h;
$x=($img_w-$code_w)/2;
$y=($img_h-$code_h)/2;
//把验证码输出到画布上----------------------------
imageString($img,$font,$x,$y,$code,$str_color);*
3.输出验证码
*//直接输出
imageJPEG($img);
imageDestroy($img);*
完整代码如下
php用户注册登录系统之数据库搭建
创建数据库分析
本版本数据库在前一个版本id 、username 、userpwd 的基础上增加了createtime(创建时间)和createip(创建时的ip),密码采用md5加密之后存入数据库
字段详细信息如下:
| 字段名 | id | username | userpwd | createtime | createip |
| 字段类型 | int | varchar | varchar | int | int |
| 字段长度 | 11 | 30 | 32 | 11 | 11 |
| 字段描述 | 编号 | 用户名 | 密码 | 创建时间 | Ip地址 |
在命令提示符窗口下运行 mysql
安装好MySQL,我们可以通过cmd连接mysql
点击桌面右下角开始按钮(以我的window7为例)
点击进入,输入cmd,点确定
进入命令行界面,首先我们需要找到我们的MySQL程序,命令行默认在C盘,我们输入D:进入D盘
(因为我的MySQL安装在D盘,安装路径为D:\phpStudy\MySQL\bin)
注:命令行模式下想要粘贴的话只能使用鼠标右键,不能使用使用Ctrl+V
接下来输入cd D:\phpStudy\MySQL\bin点击回车,进入MySQL安装文件的bin文件夹
输入mysql -hlocalhost -uroot -proot ,回车后,会显示成功
这时候,我们就能在里面输入sql语句了
注:每一行指令结束都有一个“;”
创建数据库的语句
我们已经写好了创建数据库的语句,大家只要将其复制,粘贴进命令提示符窗口中mysql>的后面,点击回车即创建成功:
输入show tables;显示我们创建的user表:
输入desc user;则显示user表的结构
创建数据库的完整语句
DROP DATABASE IF EXISTS userdb;
CREATE DATABASE userdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE userdb;
CREATE TABLE user(
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(30) DEFAULT NULL,
userpwd varchar(32) DEFAULT NULL,
createtime int(11) NOT NULL,
createip int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
insert into user(username,userpwd) values('admin','admin');
语句详解:
1.判断是否存在数据库userdb,存在则删除
2.创建userdb数据库,设定编码方式为utf8
3.选择创建的userdb库
4.创建一个user表,表里面有五个字段,分别是id编号、用户名、密码、创建事件、创建时使用的ip
5.定义存储引擎为MyISAM,user表的编码为utf8。
6.插入一条语句用于开始测试登录使用
php用户注册登录系统之登录注册页面
登录页面
代码如下:
登陆