PHP学习笔记 用户注册模块用户类以及验证码类
所以,把第一章,可重用类的代码贴出来,便于以后查阅以及供给有需要的朋友。
:User类,包括读取和设置数据库,以及保存更改交互
复制代码 代码如下:
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();
}
}
}
}
?>
如何使用:
复制代码 代码如下:
//create user instance
$u=new User();
$u->username='jack';
$u->password=sha1('gogo');
$u->emailAddr='zjczoo@gmail.com';
$u->save();//save this user
?>
复制代码 代码如下:
$u=User::getByUsername('jack');//update user('jack')
$u->password=sha1('newgogo');
$u->save();//save new jack
?>
:验证码类:这个比较简单,你可以自己加个图片==
复制代码 代码如下:
//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()函数,代码如下:
复制代码 代码如下:
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$text.=array_rand($chars);
}
return $text;
}
?>
连接数据库类:
复制代码 代码如下:
// 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;

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

DeepSeek의 공식 웹 사이트는 이제 사용자에게 쇼핑 경험을 제공하기 위해 여러 할인 활동을 시작하고 있습니다. 신규 사용자는 10 달러짜리 쿠폰을 받기 위해 가입하고 전체 잠재 고객에게 15% 제한된 시간 할인을 즐기십시오. 추천 친구들도 보상을받을 수 있으며 쇼핑 할 때 선물의 구속을 위해 포인트를 축적 할 수 있습니다. 이벤트 마감일은 다릅니다. 자세한 내용은 DeepSeek 공식 웹 사이트를 방문하십시오.
