我的php代码中登陆界面加一个验证码,如何实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的php代码中登陆界面加一个验证码,如何实现相关的知识,希望对你有一定的参考价值。
表单
<div id="login">
<form action="login.php" method="post">
账户 <input type="text" name="username" size="20" /><br />
密码 <input type="password" name="password" size="20"/><br />
<input name="yanzhengma" type="yzm" value="验证码"/>
<input type="image" src="image/login_btn.jpg"/>
<input name="input3" type="reset" value="重新输入"/>
<a href="test.php" title="注册" id="zhuce">一键注册</a>
</form>
</div>
登陆的页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题</title>
</head>
<body>
</body>
<?php
session_start();
$nickname=$_POST['username'];
$password=$_POST['password'];
if(empty($nickname) || empty($password))
exit;
$link=mysql_connect('localhost','root','');
mysql_select_db('shop',$link);
mysql_query('set names utf8',$link);
$sql="SELECT id,`password` FROM `user`
WHERE nickname='$nickname'";
$result=mysql_query($sql,$link);
if(mysql_num_rows($result)==1)
$row=mysql_fetch_array($result,MYSQL_ASSOC);
if($password==$row['password'])
echo "<script type='text/javascript'>
if(confirm('用户登陆成功,是否跳转到商城首页?'))
window.location.href='index1.php';</script>";
$_SESSION['id']=$row['id'];
$_SESSION['nickname']=$nickname;
else
echo '密码错误!';
else
echo '用户名错误!';
mysql_close($link);
?>
</html>
php登陆页面+验证码的实现,参考如下:
1、首先新建一个php站点;
2、先新建一个命名为yzm.php文件,双击编辑,清空Dreamweaver自动生成的HTML代码,如下;
<?php
session_start();
header("Content-Type:image/png"); //设置页面的头信息输出为png图片$im=imagecreate(60,20); //创建一个画布
$im_color=imagecolorallocate($im,100,100,100); //填充验证码背景为灰色
for($i=0;$i<4;$i++)
$line_color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imageline($im,rand(0,60),rand(0,20),rand(0,60),rand(0,20),$line_color);
//实用循环画四条随机颜色的干扰线
$n=rand(1000,9999);
$_SESSION["y"]=$n;
$p=0;
for($i=0;$i<4;$i++)
$p=$p+10;
$num=substr($n,$i,1); //把验证码数字一个一个的取出来
$num_color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagettftext($im,rand(10,15),rand(-10,10),$p,rand(10,15),$num_color,"font1.ttf",$num);
//设置每个验证码数字不同的颜色,数字角度偏差和字体。
imagepng($im); //输出验证码
imagedestroy($im); //释放内存
?>
3、新建login.php文件;
用户名文本框昵称为name;
密码文本框为psw;
验证码为yzm;
表单的提交方式为post,提交到check.php。
参考技术A php登陆页面+验证码的实现,参考如下:
1、首先新建一个php站点;
2、先新建一个命名为yzm.php文件,双击编辑,清空Dreamweaver自动生成的HTML代码,如下;
<?php
session_start();
header("Content-Type:image/png");
//设置页面的头信息输出为png图片$im=imagecreate(60,20);
//创建一个画布
$im_color=imagecolorallocate($im,100,100,100);
//填充验证码背景为灰色
for($i=0;$i<4;$i++)
$line_color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imageline($im,rand(0,60),rand(0,20),rand(0,60),rand(0,20),$line_color);
//实用循环画四条随机颜色的干扰线
$n=rand(1000,9999);
$_SESSION["y"]=$n;
$p=0;
for($i=0;$i<4;$i++)
$p=$p+10;
$num=substr($n,$i,1);
//把验证码数字一个一个的取出来
$num_color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagettftext($im,rand(10,15),rand(-10,10),$p,rand(10,15),$num_color,"font1.ttf",$num);
//设置每个验证码数字不同的颜色,数字角度偏差和字体。
imagepng($im);
//输出验证码
imagedestroy($im);
//释放内存
?>
3、新建login.php文件;
用户名文本框昵称为name;
密码文本框为psw;
验证码为yzm;
表单的提交方式为post,提交到check.php。
我做的这个随机数是把这个放在我的login页面下,就可以了,再在表单那个界面做验证
<input type="hidden" name="authnum" value="<?php echo $authnum; ?>"/>
<?php echo $authnum; ?>
可是我的为什么不行,能帮我改下吗?
没明白什么意思。。。。你是想把你生成的随机参数赋值给一个隐藏的input里面然后和用户写入的input的验证码值比较他输入的是否正确吗?
基于selenium实现12306模拟登陆
这里介绍一款强大验证码识别平台:超级鹰
- 超级鹰:http://www.chaojiying.com/about.html
- 注册:普通用户
- 登录:普通用户
- 题分查询:充值
- 创建一个软件(id)
- 下载示例代码
1. 打开url
一打开是扫码登陆的页面,这显然不是我们想要的,因此我们应该先打开账号登陆的界面。
2. 打开账号登陆界面
3.利用超级鹰对当前验证码进行识别
4.思路:模拟登录的思路是很简单的,难点在于验证码的识别与正确选项的定位,如何让浏览器自行选择正确的验证码是我们需要解决的最大问题。
from selenium import webdriver import time from PIL import Image from selenium.webdriver import ActionChains import requests from hashlib import md5 from selenium.webdriver import Chrome from selenium.webdriver import ChromeOptions class Chaojiying_Client(object): """超级鹰源代码""" def __init__(self, username, password, soft_id): self.username = username password = password.encode(‘utf8‘) self.password = md5(password).hexdigest() self.soft_id = soft_id self.base_params = { ‘user‘: self.username, ‘pass2‘: self.password, ‘softid‘: self.soft_id, } self.headers = { ‘Connection‘: ‘Keep-Alive‘, ‘User-Agent‘: ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)‘, } def PostPic(self, im, codetype): """ im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html """ params = { ‘codetype‘: codetype, } params.update(self.base_params) files = {‘userfile‘: (‘ccc.jpg‘, im)} r = requests.post(‘http://upload.chaojiying.net/Upload/Processing.php‘, data=params, files=files, headers=self.headers) return r.json() def ReportError(self, im_id): """ im_id:报错题目的图片ID """ params = { ‘id‘: im_id, } params.update(self.base_params) r = requests.post(‘http://upload.chaojiying.net/Upload/ReportError.php‘, data=params, headers=self.headers) return r.json() # 检测规避 option = ChromeOptions() option.add_experimental_option(‘excludeSwitches‘, [‘enable-automation‘]) driver = Chrome(options=option) bro = webdriver.Chrome(executable_path=‘./chromedriver.exe‘) # 最大化屏幕 bro.maximize_window() # 发送请求 bro.get(‘https://kyfw.12306.cn/otn/resources/login.html‘) # 找到账号的登陆的标签 btn = bro.find_elements_by_xpath(‘/html/body/div[2]/div[2]/ul/li[2]/a‘)[0] btn.click() time.sleep(2) # 将当前页面截屏生成图片 bro.save_screenshot(‘12306.png‘) # 定位到要截取的图片 pic = bro.find_element_by_xpath(‘/html/body/div[2]/div[2]/div[1]/div[2]/div[3]/div/div[4]/img‘) # 得到当前图片的左上角坐标 location = pic.location # 得到图片的长和宽 size = pic.size # 得到图片左上角和右下角的坐标 截图准确度与电脑缩放布局有关 当前为125% rangle = (location[‘x‘] * 1.25, location[‘y‘] * 1.25, (location[‘x‘] + size[‘width‘]) * 1.25, (location[‘y‘] + size[‘height‘]) * 1.25) # 保存生成的验证码图片 i = Image.open(‘./12306.png‘) code_img_name = ‘code.png‘ # 裁剪文件的文件名称 frame = i.crop(rangle) # 根据指定区域进行裁剪 frame.save(code_img_name) # 利用超级鹰识别验证码 chaojiying = Chaojiying_Client(‘用户名‘, ‘密码‘, ‘ 905993‘) im = open(‘./code.png‘, ‘rb‘).read() result = chaojiying.PostPic(im, 9004)[‘pic_str‘] all_list = [] if ‘|‘ in result: # 多个结果 print(result) ret_list = result.split(‘|‘) # 148,102|236,203 for ret in ret_list: # 将一组坐标放入列表 x_y = [] x = ret.split(‘,‘)[0] y = ret.split(‘,‘)[0] x_y.append(x) x_y.append(y) all_list.append(x_y) else: x_y = [] x = result.split(‘,‘)[0] y = result.split(‘,‘)[0] x_y.append(x) x_y.append(y) all_list.append(x_y) for ret in all_list: x = int(ret[0]) y = int(ret[1]) ActionChains(bro).move_to_element_with_offset(pic, x, y).click().perform() # 以图片对象为参考系 将鼠标移动到相对图片x,y处 点击图片 time.sleep(0.5) bro.find_element_by_id(‘J-userName‘).send_keys(‘xxxx‘) bro.find_element_by_id(‘J-password‘).send_keys(‘ssss‘) bro.find_element_by_id(‘J-login‘).click() time.sleep(3) bro.quit()
以上是关于我的php代码中登陆界面加一个验证码,如何实现的主要内容,如果未能解决你的问题,请参考以下文章