Smarty程序應(yīng)用范例:留言簿(Guestbook)第四節(jié)
/web/www.example.com/smarty/guestbook/libs/guestbook.lib.php
<?php
/**
* Project: Guestbook Sample Smarty Application
* Author: Monte Ohrt <monte [AT] ohrt [DOT] com>
* Date: March 14th, 2005
* File: guestbook.lib.php
* Version: 1.0
*/
/**
* guestbook application library
*
*/
class Guestbook {
// database object
var $sql = null;
// smarty template object
var $tpl = null;
// error messages
var $error = null;
/**
* class constructor
*/
function Guestbook() {
// instantiate the sql object
$this->sql =& new GuestBook_SQL;
// instantiate the template object
$this->tpl =& new Guestbook_Smarty;
}
/**
* display the guestbook entry form
*
* @param array $formvars the form variables
*/
function displayForm($formvars = array()) {
// assign the form vars
$this->tpl->assign('post',$formvars);
// assign error message
$this->tpl->assign('error', $this->error);
$this->tpl->display('guestbook_form.tpl');
}
/**
* fix up form data if necessary
*
* @param array $formvars the form variables
*/
function mungeFormData(&$formvars) {
// trim off excess whitespace
$formvars['Name'] = trim($formvars['Name']);
$formvars['Comment'] = trim($formvars['Comment']);
}
/**
* test if form information is valid
*
* @param array $formvars the form variables
*/
function isValidForm($formvars) {
// reset error message
$this->error = null;
// test if "Name" is empty
if(strlen($formvars['Name']) == 0) {
$this->error = 'name_empty';
return false;
}
// test if "Comment" is empty
if(strlen($formvars['Comment']) == 0) {
$this->error = 'comment_empty';
return false;
}
// form passed validation
return true;
}
/**
* add a new guestbook entry
*
* @param array $formvars the form variables
*/
function addEntry($formvars) {
$_query = sprintf(
"insert into GUESTBOOK values(0,'%s',NOW(),'%s')",
mysql_escape_string($formvars['Name']),
mysql_escape_string($formvars['Comment'])
);
return $this->sql->query($_query);
}
/**
* get the guestbook entries
*/
function getEntries() {
$this->sql->query(
"select * from GUESTBOOK order by EntryDate DESC",
SQL_ALL,
SQL_ASSOC
);
return $this->sql->record;
}
/**
* display the guestbook
*
* @param array $data the guestbook data
*/
function displayBook($data = array()) {
$this->tpl->assign('data', $data);
$this->tpl->display('guestbook.tpl');
}
}
?>
guestbook.lib.php 是我們這個(gè)程序的應(yīng)用類(lèi)。它包含了整個(gè)程序的實(shí)現(xiàn)邏輯。讓我們看看每一個(gè)方法。
類(lèi)方法: Guestbook() /** * class constructor */ function Guestbook() {
// instantiate the sql object $this->sql =& new GuestBook_SQL; // instantiate the template object $this->tpl =& new Guestbook_Smarty; }
構(gòu)造函數(shù)。每次我們使用這個(gè)留言簿對(duì)象時(shí)都執(zhí)行。它把SQL語(yǔ)句和Smarty對(duì)象作為自己的屬性,我們以后可以通過(guò)這個(gè)對(duì)象的方法來(lái)訪問(wèn)和使用它們(SQL語(yǔ)句和Smarty對(duì)象)。
類(lèi)方法: displayForm() /** * display the guestbook entry form * * @param array $formvars the form variables */ function displayForm($formvars = array()) {
// assign the form vars $this->tpl->assign('post',$formvars); // assign error message $this->tpl->assign('error', $this->error); $this->tpl->display('guestbook_form.tpl');
}
displayForm() 該方法用于顯示留言書(shū)寫(xiě)表單。它指派了模板文件中留言書(shū)寫(xiě)表單的變量和驗(yàn)證表單時(shí)的出錯(cuò)提示,然后把這個(gè)表單顯示出來(lái)。
類(lèi)方法: mungeFormData() /** * fix up form data if necessary * * @param array $formvars the form variables */ function mungeFormData(&$formvars) {
// trim off excess whitespace $formvars['Name'] = trim($formvars['Name']); $formvars['Comment'] = trim($formvars['Comment']);
}
mungeFormData() 該方法刪掉來(lái)自表單輸入內(nèi)容開(kāi)頭和結(jié)尾的空白部分。這個(gè)方法在驗(yàn)證表單輸入內(nèi)容時(shí)最先調(diào)用。注意,表單信息是通過(guò)引用的辦法傳入本方法的,所以任何改變都會(huì)導(dǎo)致原始的數(shù)組內(nèi)容(表單內(nèi)容)發(fā)生改變。
類(lèi)方法: isValidForm() /** * test if form information is valid * * @param array $formvars the form variables */ function isValidForm($formvars) {
// reset error message $this->error = null;
// test if "Name" is empty if(strlen($formvars['Name']) == 0) { $this->error = 'name_empty'; return false; }
// test if "Comment" is empty if(strlen($formvars['Comment']) == 0) { $this->error = 'comment_empty'; return false; }
// form passed validation return true; }
isValidForm() 該方法驗(yàn)證表單的輸入。這里僅僅簡(jiǎn)單地驗(yàn)證表單的‘Name’和‘Comment’控件是否為空。如果是空的,對(duì)應(yīng)的出錯(cuò)代碼將被指派為本類(lèi)錯(cuò)誤屬性的值。(這些錯(cuò)誤代碼接下來(lái)將被模板文件使用用以顯示對(duì)應(yīng)的錯(cuò)誤提示。)
類(lèi)方法: addEntry() /** * add a new guestbook entry * * @param array $formvars the form variables */ function addEntry($formvars) {
$_query = sprintf( "insert into GUESTBOOK values(0,'%s',NOW(),'%s')", mysql_escape_string($formvars['Name']), mysql_escape_string($formvars['Comment']) );
return $this->sql->query($_query);
}
addEntry 該方法將向數(shù)據(jù)庫(kù)中插入一條新的留言簿條目。注意,插入數(shù)據(jù)庫(kù)的值已經(jīng)進(jìn)行必要操作,以避免SQL語(yǔ)法沖突和注入攻擊。
類(lèi)方法: getEntries() /** * get the guestbook entries */ function getEntries() {
$this->sql->query( "select * from GUESTBOOK order by EntryDate", SQL_ALL, SQL_ASSOC );
return $this->sql->record; }
getEntries() 該方法將以“field => value”(效果同使用SQL_ASSOC參數(shù))的格式讀出數(shù)據(jù)庫(kù)中所有的留言簿條目。
類(lèi)方法: displayBook() /** * display the guestbook * * @param array $data the guestbook data */ function displayBook($data = array()) {
$this->tpl->assign('data', $data); $this->tpl->display('guestbook.tpl');
}
displayBook() 該方法將顯示出留言簿的條目。數(shù)組$data即存儲(chǔ)留言簿條目的數(shù)組,將用來(lái)指派給模板文件并在模板文件中顯示出來(lái)。
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁(yè) Smarty程序應(yīng)用范例 [3] 下一頁(yè) Smarty程序應(yīng)用范例 [5]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|