手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP学习笔记 用户注册模块用户类以及验证码类
PHP学习笔记 用户注册模块用户类以及验证码类
摘要:所以,把第一章,可重用类的代码贴出来,便于以后查阅以及供给有需要的朋友。:User类,包括读取和设置数据库,以及保存更改交互复制代码代码如下...

所以,把第一章,可重用类的代码贴出来,便于以后查阅以及供给有需要的朋友。

:User类,包括读取和设置数据库,以及保存更改交互

复制代码 代码如下:

<?php

class User{

private $uid;

private $fields;

public function __construct(){

$this->uid=null;

$this->fields=array('username'=>'','password'=>'','emailAddr'=>'','isActive'=>false);

}

public function __get($field){

if($field=='userId'){

return $this->uid;

}else{

return $this->fields[$field];

}

}

public function __set($field,$value){

if(array_key_exists($field,$this->fields)){

$this->fields[$field]=$value;

}

}

//return if username is valid format

public static function validateUsername($username){

return preg_match('/^[A-Z0-9]{2,20}$/i',$username);

}

//return if email address is valid format

public static function validateEmailAddr($email){

return filter_var($email,FILTER_VALIDATE_EMAIL);

}

//return an object populated based on the record‘s user id

public static function getById($user_id){

$user=new User();

$query=sprintf('SELECT USERNAME,PASSWORD,EMAIL_ADDR,IS_ACTIVE '.

'FROM %sUSER WHERE USER_ID=%d',DB_TBL_PREFIX,$user_id);

$result=mysql_query($query,$GLOBALS['DB']);

if(mysql_num_rows($result)){

$row=mysql_fetch_assoc($result);

$user->username=$row['USERNAME'];

$user->password=$row['PASSWORD'];

$user->emailAddr=$row['EMAIL_ADDR'];

$user->isActive=$row['IS_ACTIVE'];

ChromePhp::log($user_id);

$user->uid=$user_id;

}

mysql_free_result($result);

return $user;

}

//return an object populated based on the record's username

public static function getByUsername($username){

$user=new User();

$query=sprintf('SELECT USER_ID,PASSWORD,EMAIL_ADDR,IS_ACTIVE '.

'FROM %sUSER WHERE USERNAME="%s"',DB_TBL_PREFIX,mysql_real_escape_string($username,$GLOBALS['DB']));

$result=mysql_query($query,$GLOBALS['DB']);

if(mysql_num_rows($result)){

$row=mysql_fetch_assoc($result);

$user->username=$username;

$user->password=$row['PASSWORD'];

$user->emailAddr=$row['EMAIL_ADDR'];

$user->isActive=$row['IS_ACTIVE'];

$user->uid=$row['USER_ID'];

}

mysql_free_result($result);

return $user;

}

//save the record to the database

public function save(){

//update existing user's information

if($this->uid){

$query = sprintf('UPDATE %sUSER SET USERNAME = "%s", ' .

'PASSWORD = "%s", EMAIL_ADDR = "%s", IS_ACTIVE = %d ' .

'WHERE USER_ID = %d',

DB_TBL_PREFIX,

mysql_real_escape_string($this->username, $GLOBALS['DB']),

mysql_real_escape_string($this->password, $GLOBALS['DB']),

mysql_real_escape_string($this->emailAddr, $GLOBALS['DB']),

$this->isActive,

$this->userId);

return mysql_query($query, $GLOBALS['DB']);

}else{

//create a new user

$query=sprintf('INSERT INTO %sUSER(USERNAME,PASSWORD,' .

'EMAIL_ADDR,IS_ACTIVE) VALUES ("%s","%s","%s",%d)',

DB_TBL_PREFIX,

mysql_real_escape_string($this->username,$GLOBALS['DB']),

mysql_real_escape_string($this->password,$GLOBALS['DB']),

mysql_real_escape_string($this->emailAddr,$GLOBALS['DB']),

$this->isActive);

if(mysql_query($query,$GLOBALS['DB'])){

$this->uid=mysql_insert_id($GLOBALS['DB']);

return true;

}else{

return false;

}

}

}

//set the record as inactive and return an activation token

public function setInactive(){

$this->isActive=false;

$this->save();

$token=random_text(5);

$query=sprintf('INSERT INTO %sPENDING (USER_ID,TOKEN)' .

'VALUES (%d,"%s")',DB_TBL_PREFIX,$this->uid,$token);

return (mysql_query($query,$GLOBALS['DB']))?$token:false;

}

//clear the user's pending status and set the record as active

public function setActive($token){

$query=sprintf('SELECT TOKEN FROM %sPENDING WHERE USER_ID=%d ' .

'AND TOKEN="%s"',DB_TBL_PREFIX,$this->uid,mysql_real_escape_string($token,$GLOBALS['DB']));

$result=mysql_query($query,$GLOBALS['DB']);

if(!mysql_num_rows(($result))){

mysql_free_result($result);

return false;

}else{

mysql_free_result($result);

$query=sprintf('DELETE FROM %sPENDING WHERE USER_ID=%d ' .

'AND TOKEN="%s"',DB_TBL_PREFIX,$this->uid,mysql_real_escape_string($token,$GLOBALS['DB']));

if(!mysql_query($query,$GLOBALS['DB'])){

return false;

}else{

$this->isActive=true;

return $this->save();

}

}

}

}

?>

如何使用:

复制代码 代码如下:

<?php

//create user instance

$u=new User();

$u->username='jack';

$u->password=sha1('gogo');

$u->emailAddr='zjczoo@gmail.com';

$u->save();//save this user

?>

复制代码 代码如下:

<?php

$u=User::getByUsername('jack');//update user('jack')

$u->password=sha1('newgogo');

$u->save();//save new jack

?>

:验证码类:这个比较简单,你可以自己加个图片==

复制代码 代码如下:

<?php

//must start or continue session and save CAPTCHA string in $_SESSION for

//it to be available to other requests

if(!isset($_SESSION)){

session_start();

header('Cache-control:private');

}

//create a 65*20 pixel image

$width=65;

$height=20;

$image=imagecreate(65,20);

//fill the image background color

$bg_color=imagecolorallocate($image,0x33,0x66,0xFF);

imagefilledrectangle($image,0,0,$width,$height,$bg_color);

//fetch random text

$text=random_text(5);

//determine x and y coordinates for centering text

$font=5;

$x=imagesx($image)/2-strlen($text)*imagefontwidth($font)/2;

$y=imagesy($image)/2-imagefontheight($font)/2;

//write text on image

$fg_color=imagecolorallocate($image,0xFF,0xFF,0xFF);

imagestring($image,$font,$x,$y,$text,$fg_color);

//save the CAPTCHA string for later comparison

$_SESSION['captcha']=$text;

//output the image

header('Content-type:image/png');

imagepng($image);

imagedestroy($image);

?>

另外,该类用到了random_text()函数,代码如下:

复制代码 代码如下:

<?php

function random_text($count,$rm_similar=false){

$chars=array_flip(array_merge(range(0,9),range('A','Z')));

if($rm_similar){

unset($chars[0],$chars[1],$chars[2],$chars[5],$chars[8],$chars['B'],$chars['I'],$chars['O'],$chars['Q'],$chars['S'],$chars['V'],$chars['Z']);

}

for($i=0,$text='';$i<$count;$i++){

$text.=array_rand($chars);

}

return $text;

}

?>

连接数据库类:

复制代码 代码如下:

<?php

// database connection and schema constants

define('DB_HOST', 'localhost');

define('DB_USER', 'username');

define('DB_PASSWORD', 'yourpassword');

define('DB_SCHEMA', 'WROX_DATABASE');

define('DB_TBL_PREFIX', 'WROX_');

// establish a connection to the database server

if (!$GLOBALS['DB'] = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD))

{

die('Error: Unable to connect to database server.');

}

if (!mysql_select_db(DB_SCHEMA, $GLOBALS['DB']))

{

mysql_close($GLOBALS['DB']);

die('Error: Unable to select database schema.');

}

?>

sql语句:

复制代码 代码如下:

DROP TABLE IF EXISTS WROX_PENDING;

DROP TABLE IF EXISTS WROX_USER;

CREATE TABLE WROX_USER (

USER_ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

USERNAME VARCHAR(20) NOT NULL,

PASSWORD CHAR(40) NOT NULL,

EMAIL_ADDR VARCHAR(100) NOT NULL,

IS_ACTIVE TINYINT(1) DEFAULT 0,

PRIMARY KEY (USER_ID)

)

ENGINE=MyISAM DEFAULT CHARACTER SET gb2312

COLLATE gb2312_chinese_ci AUTO_INCREMENT=0;

CREATE TABLE WROX_PENDING (

USER_ID INTEGER UNSIGNED PRIMARY KEY NOT NULL,

TOKEN CHAR(10) NOT NULL,

CREATED_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (USER_ID)

REFERENCES WROX_USER(USER_ID)

)

ENGINE=MyISAM DEFAULT CHARACTER SET gb2312

COLLATE gb2312_chinese_ci;

【PHP学习笔记 用户注册模块用户类以及验证码类】相关文章:

PHP学习之PHP表达式

PHP生成带有雪花背景的验证码

一个目录遍历函数

用PHP实现登陆验证码(类似条行码状)

PHP实现分页的一个示例

用PHP实现验证码功能

PHP的十个高级技巧(上中下)第1/3页

php使用cookie实现记住用户名和密码实现代码

如何对PHP程序中的常见漏洞进行攻击(下)

php生成图片验证码

精品推荐
分类导航