<?php
/*

 注册类
 
 注意:
 用时要修改insert()函数 这函数是向数据库中插入数据的.因为你用的数据表 字段不一样和我一样.所以用时要注意修改下.
*/class ZhuCe 
{
//用户错误
const ERR_USER = 1;  //用户存在了
const ERR_USER_NAME_SHORT = 2; //用户名长度太短了
const ERR_USER_NAME_LONG = 3 ; //用户名太长了
const ERR_USER_ILLEGAL_CHAR = 4;  //非法字符
//密码错误
const ERR_PASSWORD = 5;
const ERR_PASSWORD_SHORT = 6; //密码长度太短了
const ERR_PASSWORD_LONG = 7 ; //密码太长了
const ERR_PASSWORD_ILLEGAL_CHAR = 8;  //非法字符
//邮箱错误
const ERR_EMAIL = 9;
//数据插入失败
const ERR_SQL_INSERT = 10;  
//用户注册成功
const PASS = 11;   private $name;
private $password;  // 密码
private $email;  // 丢失密码用这取回
private $db;   //数据库连接
private $table; 

//用户密码 长度设置
const MIN = 6;    //最小长度
const MAX = 20; //最大

/*
构造函数
参数:(数据库连接 , 表)
*/
public function __construct($db , $table)
{
$this->db = $db;  //$DB 是一个数据库连接的全局变量. 在db.php文件里
$this->table = $table;
}
/*
注册用户
参数:(用户名,密码,重复密码 ,EMAIL )
返回值: 返回注册信息
*/
public function zhuCeYongHu($name , $passwordA , $passwordB ,$email )
{
$err = $this->is_fields($name ,$passwordA, $passwordB , $email );
$str ='';

if( count($err) )  //判断 是否有错误
{
for($i = 0; $i < count($err) ; $i++)
{
$str .=$this->tiShiXinXi( $err[$i] ).'<br>';
}
}
else 
{
$str .=$this->tiShiXinXi( $this->insert() );
}
return $str ;
}

private function insert()
{
$string = "insert into $this->table values(null,'$this->name',sha1('$this->password') ,'$this->email')";
$result = $this->db->query($string);
if( !$result )
{
return ZhuCe::ERR_SQL_INSERT;
}
return ZhuCe::PASS;
}

//判断字段是否合法 合法就返回 0  如果不合法就返回错误编号
private function is_fields( $name , $PASSWORDA , $PASSWORDB ,$email )    
{
 $array = array();
 
 $var = $this->is_user( $name );  
 if( $var )
 {
 $array[] = $var;
 }
 
 $var = $this->is_PASSWORD( $PASSWORDA ,$PASSWORDB) ;
 if( $var )
 {
 $array[] = $var;
 }
 
 $var = $this->is_email( $email ) ;  
 if( $var )
 {
 $array[] = $var;
 }  
 
 return $array; 
}

private function is_user( $name )
{
//账号判断
$Length = strlen( $name );

$result = $this->db->query("select name from $this->table where name='$name'");

if( $result->num_rows > 0 )
return ZhuCe::ERR_USER;
if( $Length > ZhuCe::MAX )
return ZhuCe::ERR_USER_NAME_LONG;
if( $Length < ZhuCe::MIN )
return ZhuCe::ERR_USER_NAME_SHORT;
if( $Length != preg_match_all('/[a-z0-9]/i', $name ,$arry) )
return ZhuCe::ERR_USER_ILLEGAL_CHAR; //字段中含有非法字符

$this->name = $name;
}

private function is_PASSWORD($PASSWORDA , $PASSWORDB )
{
//密码判断
$LengthA = strlen($PASSWORDA );
$LengthB = strlen($PASSWORDB );

if( $LengthA > ZhuCe::MAX )
return ZhuCe::ERR_PASSWORD_LONG;
if( $LengthA < ZhuCe::MIN )
return ZhuCe::ERR_PASSWORD_SHORT;
if( $PASSWORDA != $PASSWORDB )
return ZhuCe::ERR_PASSWORD;
if( $LengthA != preg_match_all('/[a-z0-9]/i',$PASSWORDA ,$arry) )
return ZhuCe::ERR_PASSWORD_ILLEGAL_CHAR; 

$this->PASSWORD = $PASSWORDA;
}

private function is_email( $email )
{
if( !filter_var($email, FILTER_VALIDATE_EMAIL ) )
    return ZhuCe::ERR_EMAIL; 

$this->email = $email;
}

//信息提示
public function tiShiXinXi( $num )
{
$str = array( ZhuCe::ERR_USER=>'用户已经存在了.重新换个吧!',
     ZhuCe::ERR_USER_NAME_SHORT=>'用户名长度小于6个字符,太短了账号无法得到安全保证,重新设置长一点.',
     ZhuCe::ERR_USER_NAME_LONG=>'用户长度大于20个字符,你得把量减少一下',
     ZhuCe::ERR_USER_ILLEGAL_CHAR=>'用户字段中含有非法字符.',
     ZhuCe::ERR_PASSWORD=>'2次密码输入不一致,你重新输入一次呀!',
     ZhuCe::ERR_PASSWORD_SHORT=>'密码长度小于6个字符,太短了账号无法得到安全保证,重新设置长一点.',
     ZhuCe::ERR_PASSWORD_LONG=>'密码长度大于20个字符,你得把量减少一下.',
     ZhuCe::ERR_PASSWORD_ILLEGAL_CHAR=>'密码字段中含有非法字符.',
     ZhuCe::ERR_EMAIL=>'邮箱不存在啊.你得换个试试.',
     ZhuCe::ERR_SQL_INSERT=>'用户数据添加失败.',
     ZhuCe::PASS=>'用户注册成功.');
  
    return $str[$num];  //返回错误信息
}

}
?>我写了个注册类 大家看看有什么不好的地方啊. 

解决方案 »

  1.   

    不建议在class内使用const,可以使用静态变量,final修饰。
    变量注释得不错,但是方法就欠了
    再次,这里有问题,preg_match_all是匹配内容,并没有返回值的。
    匹配的内容在$array里,可以考虑用 preg_match()!=false
    if( $LengthA != preg_match_all('/[a-z0-9]/i',$PASSWORDA ,$arry) )
                return ZhuCe::ERR_PASSWORD_ILLEGAL_CHAR; 
      

  2.   

    建议你把数据库CRUD这些操作封装到一个单独类中,然后注册这个类继承数据库类。