したがって、将来の参照用と、困っている友人に提供するために、第 1 章の再利用可能なクラスのコードを投稿します。
: データベースの読み取りと設定、変更の保存などのユーザー クラス インタラクション
コードをコピー コードは次のとおりです:
class User{
private $uid;
プライベート $フィールド;
パブリック関数 __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];
}
}
パブリック関数 __set($field,$value){
if(array_key_exists($field,$this->fields)){
$this->fields [$フィールド]=$値;
}
}
//ユーザー名が有効な場合は return format
public static function validateUsername($username){
return preg_match('/^[A-Z0-9]{2, 20}$/i',$ユーザー名);
}
//電子メール アドレスが有効な場合に戻ります。 format
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->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);
$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->ユーザー名、$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-> ;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']);
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('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();
}
}
}
}
?>
复制代码 代码如下:
// ユーザー インスタンスを作成します
$u=new User();
$u->username='jack'; ;password=sha1('gogo');
$u->emailAddr='zjczoo@gmail.com';
$u->save();// このユーザーを保存します
?> ;
コードをコピー コードは次のとおりです:
$ u=User ::getByUsername('jack');//user('jack') を更新
$u->password=sha1('newgogo');
$u->save(); //save new jack
?>
コードをコピーします コードは次のとおりです:
//セッションを開始または継続し、
の $_SESSION に CAPTCHA 文字列を保存する必要があります//他のリクエストでも利用できるようにする
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 座標を決定します
$font=5
$x=imagesx($image)/2-strlen($text)*imagefontwidth($font )/2;
$y=imagesy($image)/2-imagefontheight($font)/2;
//画像にテキストを書き込みます
$fg_color=imagecolorallocate($image,0xFF,0xFF, 0xFF);
imagestring ($image,$font,$x,$y,$text,$fg_color);
//後で比較するために CAPTCHA 文字列を保存します
$_SESSION['captcha']= $text;
/ / 画像を出力します
header('Content-type:image/png');
imagedestroy($image)>; ;
さらに、このクラスはrandom_text() 関数を使用します。コードは次のとおりです:
コードをコピーします
< ;?php functionrandom_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;
データベース クラス:
コードをコピー
コードは次のとおりです:
{
die('エラー: データベース サーバーに接続できません。');
}
if (!mysql_select_db(DB_SCHEMA, $GLOBALS['DB']))
{
mysql_close($GLOBALS) ['DB']);
die('エラー: データベース スキーマを選択できません。');
}
?>
SQL ステートメント:
コードをコピーします
コードは次のようになります:
IS_ACTIVE TINYINT(1) DEFAULT 0、主キー (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 NOT CHAR(10)
CREATED_DATE TIMESTAMP DEFAULT CU RRENT_TIMESTAMP、
FOREIGN KEY (USER_ID)
REFERENCES WROX_USER(USER_ID)
)
ENGINE=MyISAM デフォルト文字セット gb2312
COLLATE gb2312_chinese_ci >