深入PHP许愿墙模块功能分析(5)


function textCounter(field, countfield, maxlimit) {  //祝福内容限制在150个字符内
  var StrValue  = field.value;
   var ByteCount = 0;
 var StrLength = field.value.length;
 var cutstr = '';
 for (i=0;i<StrLength;i++){   
  ByteCount = (StrValue.charCodeAt(i)<=256) ? ByteCount + 1 : ByteCount + 2; //记算祝福文字个数,英文数字占1个字符,汉字占2个字
        if( ByteCount<=maxlimit){
   cutstr = StrValue.substring(0,i+1); //如果输入字符小于限制长度,截取当前输入字符i+1为输入字符个数
   strtemp = cutstr; 
        } else {
   cutstr=strtemp;  //否则截取最大输入字符长度
  }
 }
 if(ByteCount<=maxlimit){
  document.getElementById('ContentSample').innerHTML = cutstr;  //输出显示内容
  countfield.value = maxlimit - ByteCount;
 }else{
  document.getElementById('content').value = cutstr;  //限制输入框显示内容
  document.getElementById('ContentSample').innerHTML = cutstr;  //输出显示内容
  countfield.value =0; //剩余字节数
 }
}


在上面的代码中,“countfield.value”是用来计算输入字符串剩余的字符数,并将该值赋给textCounter()函数的第2个参数值“this.form.freeLength”,以此来实时计算当前许愿内容所允许输入的字符数量。

4,PHP验证码类当前页面校验验证码输入对与错
当前页面验证输入是否正确的方法Ajax,add.js

复制代码 代码如下:


function codecheck(){
 var getVcode = document.getElementById('checkcode').value; //获取验证码输入框的内容
 xmlhttp.open("get","codeChk.php?code="+getVcode,true);   //将验证码发送到codeChk.php页面检验验证码是否正确
 xmlhttp.onreadystatechange=function(){ 
  if(xmlhttp.readyState==4)
  {
   if(xmlhttp.status==200)
   {
    var msg=xmlhttp.responseText;
    if(msg==1){
     document.getElementById("messageImg").src="images/dui.gif"; //验证码正确,输出显示正确图片
     document.getElementById('txt_hyan').value = getVcode; 
    }else{
     document.getElementById("messageImg").src="images/cuo.gif"; //验证码错误,输出显示错误图片
     document.getElementById('checkcode').focus();
     return false;
    }
   }
  }
 }
 xmlhttp.send(null);
}


codeChk.php验证码检验页面

复制代码 代码如下:


<?php 
 session_start();
 require 'secoder.class.php';  //先把类包含进来,实际路径根据实际情况进行修改。 
 $vcode = new YL_Security_Secoder();      //实例化一个对象 
 $code = $_GET['code'];
 echo $vcode->check($code);  //check($code)函数返回的是true或者false,返回true时,codeChk.php页面输出的是1,否则没有输出    
?>


secoder.class.php验证码类中的check($code)函数

复制代码 代码如下:


public static function check($code) {
 isset($_SESSION) || session_start();
 // 验证码不能为空
 if(empty($code) || empty($_SESSION[self::$seKey])) {
  return false;

 }
 // session 过期
 if(time() - $_SESSION[self::$seKey]['time'] > self::$expire) {
  unset($_SESSION[self::$seKey]);
  return false;
 }
 if(strtoupper($code) == $_SESSION[self::$seKey]['code']) {  //不区分大小写比较
  return true;  
 }
 return false;

}


5,定义生成指定范围的许愿条随机算法
本模块需要生成一个指定范围的随机算法,用来显示许愿字条的显示位置,以使每次展示在读者眼前的都是不同的许愿字条。本模块主要应用rand()函数控制许愿墙纸的显示位置。
rand()函数用于产生一个随机整数
语法:rand(min,max)
参数:min,max可选,规定随机数产生的范围
如果没有提供可选参数 min 和 max,rand() 返回 0 到 RAND_MAX 之间的伪随机整数。在某些平台下(例如 Windows)RAND_MAX 只有 32768。如果需要的范围大于 32768,那么指定 min 和 max 参数就可以生成大于 RAND_MAX 的数了,或者考虑用 mt_rand() 来替代它。
mt_rand() 使用 Mersenne Twister 算法返回随机整数
语法:mt_rand(min,max)
如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 RAND_MAX 之间的伪随机数。很多老的libc的随机数发生器具有一些不确定和未知的特性而且很慢。php的rand()函数默认使用libc随机数发生器。mt_rand()函数是非正式用来替换它的。该函数用了Mersenne Twister中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比libc提供的rand()快四倍。
随机显示许愿墙纸的关键代码如下:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a36cf8cd326a4ac9ed3b48298984555e.html