php生成验证码与验证码验证完整实例

 更新时间:2016年11月25日 17:09  点击:1772
本文章分享一个自己使用的验证码实例,从生成图片验证码到利用使用验证码的实例,有需要学习的同学可以参考一下本文章哦。

hyml页面

 代码如下 复制代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script language="javascript">
 function refresh_code()
 {
  form1.imgcode.src="verifycode.php?a="+Math.random();
 }
</script>
</head>

<body>
<form id="form1" name="form1" method="post" action="checkcode.php">
  <label for="code">验证码:</label>
  <input type="text" name="code" id="textfield" />
  <img id="imgcode" src="VerifyCode.php" alt="验证码" />
  <a href="javascript:refresh_code()">看不清?换一个</a>
  <input type="submit" name="button" id="button" value="提交" />
</form>
</body>
</html>

verifycode.php文件代码如下

 代码如下 复制代码
<?php
 /*
  图片验证码 Powered By KASON
   */
  session_start();
  $num=4;//验证码个数
  $width=80;//验证码宽度
  $height=20;//验证码高度
  $code=' ';
  for($i=0;$i<$num;$i++)//生成验证码
  {
   switch(rand(0,2))
   {
    case 0:$code[$i]=chr(rand(48,57));break;//数字
    case 1:$code[$i]=chr(rand(65,90));break;//大写字母
    case 2:$code[$i]=chr(rand(97,122));break;//小写字母
   }
  }
  $_SESSION["VerifyCode"]=$code;
  $image=imagecreate($width,$height);
  imagecolorallocate($image,255,255,255);
  for($i=0;$i<80;$i++)//生成干扰像素
  {
   $dis_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
   imagesetpixel($image,rand(1,$width),rand(1,$height),$dis_color);
  }
  for($i=0;$i<$num;$i++)//打印字符到图像
  {
   $char_color=imagecolorallocate($image,rand(0,2555),rand(0,255),rand(0,255));
   imagechar($image,60,($width/$num)*$i,rand(0,5),$code[$i],$char_color);
  }
  header("Content-type:image/png");
  imagepng($image);//输出图像到浏览器
  imagedestroy($image);//释放资源
?>   


  

checkcode.php文件如下

 代码如下 复制代码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
ini_set('display_errors', 'Off');
session_start();
  if((strtoupper($_POST["code"])) == strtoupper(($_SESSION["VerifyCode"]))){
 print("验证码正确,");
  }else{
    print("验证码错误,");
  }
  echo "提交的验证码:".strtoupper($_POST["code"]).",正确的验证码:".strtoupper($_SESSION["VerifyCode"]);
?>

生成验证码原理相当简单就是利用mt_rand随机生成一个数字,然后保存到session中用来用户登录时判断输入的验证码与我们生成的是否一致,然后就是把随机数字利用php gd函数生成一张图片,这样就完成了验证码的生成了。
 代码如下 复制代码

<?php
/**
 *
 * @file imgvcode.php
 * @create date 2007-09-25
 * @copyright (c) 2005 - 2007 eifr.com
 * @license http://www.111cn.net/nokia/n97/

 * eifr is free software
 */

session_start();

// main
$vcodes = '';
//generate Number 4
srand((double)microtime()*1000000);
for($i=0;$i<4;$i++){
    $vcodes.=rand(1,9);
}

$_SESSION['eifr_checkvcode'] = $vcodes;

if(function_exists('imagecreate')){
    //generate picture validation code
    Header("Content-type: image/PNG");

    $img = imagecreate(44,18);
    $bg = ImageColorAllocate($img, 245,245,245);
    imagefill($img,0,0,$bg); //background

   
    //generate Number 4
    for($i=0;$i<4;$i++){
        $font = ImageColorAllocate($img, rand(100,255),rand(0,100),rand(100,255));
        $vnum = substr($vcodes, $i, 1);
        imagestring($img, 5, 2+$i*10, 1, $vnum, $font);
    }

    //add interference
    for($i=0;$i<100;$i++)
    {
        $randcolor = ImageColorallocate($img,rand(0,255),rand(0,255),rand(0,255));
        imagesetpixel($img, rand()%70 , rand()%30 , $randcolor);
    }
    ImagePNG($img);
    ImageDestroy($img);
}

?>

注:php生成验证码需要开启php gd图片库哦,要不是不能生成的。

本文章介绍了一个简单的删除数据库的记录时再刷新当前页面,这个不是用ajax实现的而是用了get方式来刷新当前页面,这个方法在实际应用中用户体验不好哦。

功能:

1、在某个页面上显示查询数据,并在每条数据后增加删除功能,点击“删除”,删除掉数据,同时刷新页面

2、用GET方式获得删除条件

数据库连接变量connectvars.php

 代码如下 复制代码
<?php
//服务器
define('DB_HOST', 'localhost');
//用户名
define('DB_USER', 'root');
//密码
define('DB_PASSWORD', 'root');
//数据库
define('DB_NAME','test') ;
?>

记录展示页面display.php,每条记录后有“删除”功能,点击“删除”,可删除该条记录,同时刷新页面

 代码如下 复制代码

<?php
require_once 'connectvars.php';
$dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
//如果调用此页面时,页面链接中有‘DelID’变量,则获得要删除记录的‘ID’号,进行删除
if(isset($_GET['DelID'])){
    $query = "DELETE FROM toyota WHERE ID = ".$_GET['DelID']." LIMIT 1";
    mysqli_query($dbc,$query);
}   
//查出所有记录,并在接下来的表格中进行显示(如果上面的删除代码被执行,此处相当于刷新页面)
$query = "SELECT * FROM toyota ORDER BY ID DESC";
$data = mysqli_query($dbc,$query);
//统计所查询出的记录条数
$count = mysqli_num_rows($data);
?>
<html>
    <head>
        <title>丰田汽车数据查看</title>
    </head>
    <body>
        <table>
        <!-- 表格列名 -->
            <tr>
                <th>标题</th>
                <th>来源</th>
                <th>车型</th>
                <th>主要部件</th>
                <th>操作</th>
            </tr>
            <?php
            //循环输出列表元素:title、source、carType、majorPart,后加一个"删除"链接
              while($row = mysqli_fetch_array($data)){
                  echo '<tr>';
                  echo '<td><a href = '.$row['url'].'>'.$row['title'].'</td>';
                  echo '<td>'.$row['source'].'</td>';
                  echo '<td>'.$row['carType'].'</td>';
                  echo '<td>'.$row['majorPart'].'</td>';
                  //点击"删除"链接,调用自身页面,同时在页面链接上增加‘DelID’变量,赋值为该记录在数据库中的‘ID’号,用于GET方式获得
                  echo '<td><a href = "'.$_SERVER['PHP_SELF'].'?DelID='.$row['ID'].'">删除</a></td>';
                 echo '</tr>';
              }
            ?>
        </table>
    </body>
</html>

本文章先是介绍关于php中的数组定义与数组的销毁,之后再用一个实例来说明一维数据的排序方法,有需要的朋友可以参考一下,希望对大家有用。

PHP数组的定义

 代码如下 复制代码

……
$array = array('one','two','three');
var_dump($array);
……

在本代码片段的第一行,定义了一个一维数组$array,第二行的时候我们格式化输出了这个数组,结果是这样的:

 代码如下 复制代码

array(3) {
[0]=>
string(3) "one"
[1]=>
string(3) "two"
[2]=>
string(5) "three"
}

现在兄弟解释一下这个输出结果,首先这个数组的输出结果的第一行,
array(3)告诉我们这是个有三个元素的数组,
首先0号元素是一个长度为3的字符串(string(3))…
篇幅关系剩下两个就不说了吧,吼吼……,这说明什么呢?这说明在PHP中如果我们不为数组指定下标的话,那么他就自己自作主张的从零开始给我们弄一个下标出来——也就是PHP数组中的键名;再看看下边的例子:

 代码如下 复制代码
……
$array = array('one',”hello”=>'two','three');
var_dump($array);

……这一次我们定义数组的时候,为第二个元素指定了下标(从此以后,在本文中就叫做键名了,下标有点含糊不清!),第二个元素指定了键名(hello),咱们再看看输出结果:

 代码如下 复制代码

array(3) {
[0]=>
string(3) "one"
["hello"]=>
string(3) "two"
[1]=>
string(5) "three"
}

我想你也像我一样看到了一个很智能的现象,第一个元素的键名还是0——这个我们可以理解,因为我们没有指定,而PHP数组必须要有一个键名,PHP就自作主张从零开始创立了一个键名;第二个元素的时候,我们指定了键名,PHP就尊重我们的意见用了这个键名;复杂的事情在第三个元素,

第三个元素,看起来也很简单,我们没有指定键名,PHP自动的把最大整数键名加上1,作为了键名。但是大家想过没有,如果我们把第一个元素的键名修改为“-5”,第二个元素键名不变,结果会是什么呢?我们拭目以待:

 代码如下 复制代码
……
$array = array(-5=>'one',"hello"=>'two','three');
var_dump($array);
……

如果你想当然的认为,第三个元素的键名应该是-4,那么我告诉你在PHP4.3.0之前这个想法是对的,但是之后就错了,现在也就是PHP4.3.0之后的版本你将看到如下结果:

 代码如下 复制代码

array(3) {
[-5]=>
string(3) "one"
["hello"]=>
string(3) "two"
[0]=>
string(5) "three"
}

是的第三个元素是从0开始的,也就是不管你的负数有多小,下一个元素要是让PHP来定义键名的话,那么他就是从0开始——记住这个地方说的是,在现有的键名中如果最大的依然是个负数,不管负数有多小,PHP也是从零开始下一个键名。

PHP数组的销毁很简单,像销毁其他变量一样。
销毁整个数组:unset($array)
销毁数组中的一个元素:unset($array[-5])

不管在现实生活中还是程序世界里,顺序总是很重要——真不敢想象一个没有顺序的世界会什么样子!PHP数组也不例外。PHP提供了四组针对PHP数组进行排序的函数,前三种都是针对一维数组的,我们先说这三种,第四种对多维数组的排序在下一篇文章中说,那个有点复杂。

第一组 :sort 和 rsort ,按照PHP数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引。看一下例程:


 

 代码如下 复制代码

<?php
$a = array("a"=>1,2);
sort($a);
var_dump($a);
 
rsort($a);
var_dump($a);
?>

看一下第一个输出结果,第一个输出:
array(2) {
  [0]=>
  int(1)
  [1]=>
  int(2)
}
第二个输出:
array(2) {
  [0]=>
  int(5)
  [1]=>
  int(4)
}


发现没有我们原来定义的索引a哪里去了?哪里去了?可以肯定的说是被他们无情的删除了,你要是对原来的索引关系并不在意的话,可以使用他们!

第二组函数:asort 和 arsort ,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort 和 rsort 分别用这两个函数替换一下,看运行结果:

 代码如下 复制代码
array(2) {
  ["a"]=>
  int(1)
  [0]=>
  int(2)
}
array(2) {
  [0]=>
  int(2)
  ["a"]=>
  int(1)
}

这个一看就明白的,不用说了吧!

第三组PHP数组排序函数:krsort 和 ksort 这两个不同于以上两组,这两函数是对键名进行排序的,大家可以把上例的函数替换成这两个,看看具体运行结果,这里也不说了,不然这个文章写的就太长了,怕有些兄弟没有耐心看到本文的重点,虽然重点就在下边!

通过自定义函数对PHP数组进行排序,有三个函数分别是:
uasort 通过自定义函数对PHP数组的键值进行排序,并且保留原来的索引关系。
uksort 通过自定义函数对PHP数组的键名进行排序,并且保留原来的索引关系。
usort通过自定义函数对PHP数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。

这个地方当然需要一个例子:


 <!--p
//首先顶一个函数,这个函数需要接受两个参数,并且返回值是一定的
//第一个参数等于第二个参数的时候返回0,小于的时候返回-1,大于返回1
 

 代码如下 复制代码

function cmp($a,$b){
 $a+=1;
 $b+=3;//改变这些值之后进行比较
 
 if($a==$b) return 0;
 return ($a&lt;$b)?-1:1;
}
 
$a =array(1,4,3,5);
uasort($a,'cmp');
var_dump($a);
-->

输出结果:
array(4) {
  [0]=>
  int(1)
  [3]=>
  int(5)
  [1]=>
  int(4)
  [2]=>
  int(3)
}

,呵呵……是不是比不排序还乱呢?我们这里只是演示了使用的方法而已,具体你用到的时候自己搞吧!你要是不对这些数值进行操作之后再比较,例如我们这里:
 $a+=1;
 $b+=3;//改变这些值之后进行比较


在PHP手册中,一共定义了74个数组函数,涵盖了PHP数组的定义,赋值,排序,数值操作,比较,以及对数组的键名,键值反转……等等我们几乎能够想到的所有功能。有需要的同学可以去参考一下啊

本文章主要是讲到了关于魔法常量_FILE_,_LINE_,__FUNCTION__,有需要的同学可以参考一下简单实用的一个实例。


名称
 描述
 
_FILE_
 当前文件名
 
_LINE_
 当前行号
 
_FUNCTION_
 当前函数名
 
_CLASS_
 当前类名
 
_METHOD_
 当前方法名

 

所谓的魔法常量,并不是真的常量,而是根据场合去获取固定值的变量

 代码如下 复制代码

<?php

echo __FILE__;

echo '<br>';
 

echo __LINE__;

echo '<br>';

 
function funcTest()

{

    echo __FUNCTION__;

}

funcTest();

?>
 

output

D:AppServwwwBasic7demo15.php
5
funcTest

[!--infotagslink--]

相关文章

  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • jQuery Real Person验证码插件防止表单自动提交

    本文介绍的jQuery插件有点特殊,防自动提交表单的验证工具,就是我们经常用到的验证码工具,先给大家看看效果。效果图如下: 使用说明 需要使用jQuery库文件和Real Person库文件 同时需要自定义验证码显示的CSS样式 使用实例...2015-11-08
  • JS实现随机生成验证码

    这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
  • php二维码生成

    本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • C#生成随机数功能示例

    这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
  • Jquery插件实现点击获取验证码后60秒内禁止重新获取

    通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能效果图:先到官网(http://plugins.jquery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下:复制代码 代码如下: <!DOCTYPE ht...2015-03-15
  • php生成唯一数字id的方法汇总

    关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
  • PHP自动生成后台导航网址的最佳方法

    经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
  • php实现点击可刷新验证码

    验证码类文件 CreateImg.class.php <&#63;php class ValidationCode { private $width,$height,$codenum; public $checkcode; //产生的验证码 private $checkimage; //验证码图片 private $disturbColor = ''; /...2015-11-08
  • 基于JavaScript实现验证码功能

    这篇文章主要介绍了基于JavaScript实现验证码功能的相关资料...2017-04-03
  • js生成随机数的方法实例

    js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
  • 单击按钮发送验证码,出现倒计时的简单实例

    下面小编就为大家带来一篇单击按钮发送验证码,出现倒计时的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 代码...2017-07-06
  • Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法

    这篇文章主要介绍了Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-06-24
  • PHP验证码生成与验证例子

    验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
  • PHP生成不同颜色、不同大小的tag标签函数

    复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
  • 基于Pytorch版yolov5的滑块验证码破解思路详解

    这篇文章主要介绍了基于Pytorch版yolov5的滑块验证码破解思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-25
  • jQuery实现发送验证码控制按钮禁用功能

    最近接到新需求,需要实现一个点击发送验证码之后,按钮禁用,在5秒之后取消禁用,看似需求很简单,实现起来还真的好好动动脑筋,下面小编把jquery控制按钮禁用核心代码分享给大家,需要的朋友参考下吧...2021-07-24
  • 工信部的ICP备案网站登录时验证码一直输入不正确怎么回事

    工信部的ICP备案网站登录时验证码一直输入不正确怎么回事,为了防止一些机器采集人工信部对于查询验证做得识别度极低,所以许多的朋友都会发现输入验证码一直有问题了,那...2016-10-10