PHP は、単純なゲストブックをカプセル化したデータベース クラスを開発します
先ほど、データベースを使用するクラス LyDB の設(shè)定について説明しました
ここでは、すべての SQL 関數(shù)とページング関數(shù)をカプセル化し、後で直接呼び出します:
<?php class LyDB{ var $_host="localhost"; var $_user="root";// var $_password="root"; var $_database="test"; var $page_size=3; var $link; public function __construct(){ //連接數(shù)據(jù)庫 date_default_timezone_set('PRC'); $this->link = mysqli_connect($this->_host,$this->_user,$this->_password,$this->_database); if (!$this->link) { die('Could not connect to MySQL: ' . mysqli_connect_error()); } } public function __destruct(){ mysqli_close($this->link); } public function insert($nickname,$avatar,$message) //添加留言內(nèi)容到數(shù)據(jù)庫 { $message=str_replace ("<" , "<" , $message); //str_replace() 函數(shù)以其他字符替換字符串中的一些字符(區(qū)分大小寫)。 $message=str_replace (">" , ">" , $message); $message=str_replace ("\n" , " " , $message); $message=trim($message); //trim() 函數(shù)移除字符串兩側(cè)的空白字符或其他預(yù)定義字符。 $lytime=date("Y-m-d H:i:s"); $sql="insert into ly (nickname,message,avatar,lytime)values('$nickname','$message','$avatar','$lytime')"; $query=mysqli_query($this->link,$sql); if($query){ return true; } else { return false; } } public function reply($id,$reply){ $message=str_replace ("<" , "<" , $reply); $message=str_replace (">" , ">" , $message); $message=str_replace ("\n" , " " , $message); $message=trim($message); $reply=$message; $retime=date("Y-m-d H:i:s"); $sql="update ly set reply='$reply', retime='$retime' where id=$id"; $query=mysqli_query($this->link,$sql); if($query)return true; else return false; } public function delete_by_id($id){ //刪除留言 $sql="delete from ly where id=$id"; mysqli_query($this->link,$sql); } public function select_page_info(){ //分頁 $sql = "select count(*) as pagecount from ly"; $query = mysqli_query($this->link,$sql); $row = mysqli_fetch_assoc($query); $ly_count=$row["pagecount"]; $page_count=($ly_count%$this->page_size==0)?($ly_count/$this->page_size):($ly_count/$this->page_size+1); $page_info=array("ly_count"=> $ly_count,"page_count"=>(int)$page_count,"page_size"=>$this->page_size); return $page_info; } public function select_all_result(){ //查詢顯示留言 $sql="select * from ly order by id desc"; $query=mysqli_query($this->link,$sql); return $query; } public function select_page_result(&$page_no){ //上一頁,下一頁,首頁,末頁 $page_info=$this->select_page_info(); if(!isset($page_no))$page_no=1; else if($page_no<1)$page_no=1; else if($page_no>$page_info["page_count"])$page_no=$page_info["page_count"]; $first=($page_no-1)*$this->page_size; $sql="select * from ly order by id desc limit $first,$this->page_size "; $query=mysqli_query($this->link,$sql); $page_result=array("page_data"=>$query,"page_info"=>$page_info,"page_no"=>$page_no); return $page_result; } } ?>
このクラス ファイルに名前を付けます: lydb.class.php
Administratorログインと権限の判斷も呼び出しクラスのauthority.class.phpファイルを作成します
<?php class Authority{ static public function check_insert(){ //聲明公共變量 //檢查是否具有添加留言權(quán)限 return true; } static public function check_delete(){ //檢查是否具有delete權(quán)限 if(isset($_SESSION["username"]) && $_SESSION["username"]=="admin") return true; else return false; } } ?> <?php class User{ static public function validate($username,$password){ // static public 聲明公共變量 if("admin"==$username && "12345"==$password){ return true; } else return false; } } ?>
そしてそれをフロントエンドページで直接引用します:
<?php require_once("lydb.class.php");?> <?php require_once("authority.class.php");?>
require_once()ステートメントはスクリプト実行中に指定されたファイルをインクルードして実行します(人気のポイント、括弧內(nèi)のファイルは 1 回実行されます)。この動作は require() ステートメントに似ていますが、唯一の違いは、ファイル內(nèi)のコードが既にインクルードされている場合、再度インクルードされないことです。