したがって、将来の参照用と、困っている友人に提供するために、第 1 章の再利用可能なクラスのコードを投稿します。
: データベースの読み取りと設定、および変更の保存の操作を含むユーザー クラス
コードをコピー コードは次のとおりです:
class User{
private $uid;
プライベート$フィールド;
パブリック関数 __construct(){
$this->uid=null;
$this->fields=array('username'=>'','password'=>'','emailAddr'=>'','isActive'=>false);
}
パブリック関数 __get($field){
if($field=='userId'){
return $this->uid;
}else{
return $this->fields[$field];
}
}
パブリック関数 __set($field,$value){
if(array_key_exists($field,$this->fields)){
$this->fields[$field]=$value;
}
}
//ユーザー名が有効な形式であればreturn
public static function validateUsername($username){
return preg_match('/^[A-Z0-9]{2,20}$/i',$username) ;
}
//メールアドレスが有効な形式の場合に戻ります
public static function validateEmailAddr($email){
return filter_var($email,FILTER_VALIDATE_EMAIL);
}
//レコードのユーザー 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);
$user を返します;
}
//レコードのユーザー名に基づいて設定されたオブジェクトを返します
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->password=$row['PASSWORD'];
$user->emailAddr=$row['EMAIL_ADDR'];
$user->isActive=$row['IS_ACTIVE'];
$user->uid=$row['USER_ID'];
}
mysql_free_result($result);
$user を返します;
}
//レコードをデータベースに保存
public function save(){
//既存のユーザー情報を更新
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->パスワード、$GLOBALS['DB'])、
mysql_real_escape_string($this->emailAddr、$GLOBALS['DB'])、
$this ->isActive、
$this->userId);
return mysql_query($query, $GLOBALS['DB']);
}else{
//新しいユーザーを作成します
$query=sprintf('INSERT INTO %sUSER(USERNAME,PASSWORD,' .
'EMAIL_ADDR,IS_ACTIVE) VALUES ("%s","%s","%s) ",%d)'、
DB_TBL_PREFIX、
mysql_real_escape_string($this->ユーザー名,$GLOBALS['DB'])、
mysql_real_escape_string($this->パスワード,$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']);
true を返します。
}else{
false を返す;
}
}
}
//レコードを非アクティブとして設定し、アクティベーション トークンを返します
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;
}
//ユーザーの保留ステータスをクリアし、レコードをアクティブとして設定します
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);
false を返します。
}else{
mysql_free_result($result);
$query=sprintf('%s から削除保留中 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();
}
}
}
}
?>
使用方法:
复制代码代码如下:
// ユーザー インスタンスを作成
$u=new User();
$u->username='jack';
$u->password=sha1('gogo'); u->emailAddr='zjczoo@gmail.com';
$u->save();// このユーザーを保存します
コードをコピーします
< ;?php
$u=User::getByUsername('jack');//user('jack') を更新
$u->password=sha1('newgogo'); ;save() ;//save new jack
?>
: 確認コードの種類: これは比較的簡単です。自分で画像を追加できます ==
コードをコピーします
コードは次のとおりです。 / /セッションを開始または継続し、
//他のリクエストで使用できるように CAPTCHA 文字列を $_SESSION に保存する必要があります
if(!isset($_SESSION)){
session_start(); header('Cache-control:private' );
//65*20 ピクセルの画像を作成します
$width=65;
$image=imagecreate(65,20);画像の背景色
$bg_color=imagecolorallocate ($image,0x33,0x66,0xFF);
imagefilledrectangle($image,0,0,$width,$height,$bg_color);
//ランダムなテキストを取得します
$text= random_text(5);
//テキストを中央に配置するための x 座標と y 座標を決定します
$x=imagesx($image)/2-strlen($text)*imagefontwidth($font)/2; y=imagesy($image)/2 -imagefontheight($font)/2;
//画像にテキストを書き込みます
$fg_color=imagecolorallocate($image,$font, $x,$y,$text, $fg_color);
//後で比較するために CAPTCHA 文字列を保存します
$_SESSION['captcha']=$text;
//画像を出力します
header('Content-type:image /png');
imagepng($image);
?>
さらに、このクラスは次のようになります。
コードは次のとおりです:
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; ?>
データベースクラスを接続します:
コードをコピーします
コードは次のとおりです:
// データベース接続とスキーマ定数
define('DB_HOST', 'localhost') ;
define('DB_USER', 'ユーザー名');
define('DB_SCHEMA', 'WROX_'); // データベースサーバーへの接続を確立します
if (!$GLOBALS['DB' ] = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD))
{
die('エラー: データベースサーバーに接続できません。');
if (!mysql_select_db(DB_SCHEMA, $GLOBALS['DB']))
{
mysql_close($GLOBALS['DB'])
die('エラー: データベース スキーマを選択できません。'); >
SQL ステートメント:
コードをコピーします:
DROP TABLE IF EXISTS WROX_PENDING;
CREATE TABLE WROX; _USER (
USER_ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT 、
USERNAME VARCHAR(20) NOT NULL、
PASSWO RD CHAR(40) NOT NULL、
EMAIL_ADDR VARCHAR (100) 注保留中 (
USER_ID INTEGER UNSIGNED PRIMARY KEY NOT NULL、
TOKEN CHAR(10) NOT NULL、
CREATED_DATEタイムスタンプDEFAULT CURRENT_TIMESTAMP、
FOREIGN KEY (USER_ID)
REFERENCES WROX_USER(USER_ID)
)
ENGINE=MyISAM DEFAULT CHARACTER SET gb2312
COLLATE gb2312_chinese_ci
;
http://www.bkjia.com/PHPjc/324215.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/324215.html技術記事したがって、将来の参照用と、困っている友人に提供するために、第 1 章の再利用可能なクラスのコードを投稿します。 : データベースの読み取りと設定、変更の保存などのユーザー クラスのインタラクション...