日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

用PHP5進行三層開發

瀏覽:102日期:2024-01-31 17:58:48

原文:http://www.onlamp.com/pub/a/php/2004/12/09/three_tier.htmlThree-Tier Development with PHP 5by Luis Yordano Cruz12/09/2004

此文演示了PHP三層開發的強大功能,PEAR::DB_DataObject用于業務邏輯,Smarty用于顯示邏輯,這里假設你熟

悉了HTML,Smarty,PEAR::DB_DataObject,Mysql和PHP5.如果你需要補充知識,下面的文章解釋了一些原理:

用PHP DataObject簡化業務邏輯Smarty簡介:一個PHP模板引擎PHP可伸縮性:Myth

你應該已安裝和配置好了Apache,MySQL,和PHP5(或者IIS,MySQL5和PHP)

PEAR::DB_DataObjectPEAR::DB_DataObject 是一個用戶數據庫訪問的抽象API.它是一個基于PEAR::DB的SQL構建器和數據建模層.它

把數據庫表映射到PHP類并且提供像SELECT,INSERT,UPDATE,和DELETE這樣的公共SQL函數.這使即使不了

解SQL的開發者也可以寫出好的數據庫訪問代碼,并且鼓勵演示邏輯和業務邏輯有一個清晰的分離.

(DB_OO已經移動到的PEAR,現在是DB_DataObject,如果你有老的代碼要更新,查看關于從老的db_oo代碼更新到

DB_DataObjects的注釋).

相關閱讀Upgrading to PHP 5By Adam Trachtenberg

Table of ContentsIndexSample Chapter

Read Online--Safari Search this book on Safari: Only This Book All of SafariCode Fragments only; DataObject performs two tasks. First, it builds SQL statements based on the object's variables and the builder

methods. Second, it acts as a datastore for a table row. There's a core class, which you extend for each of

your tables so that you put the data logic inside the data classes. There's also an included Generator to make

your configuration files and your base classes.

DataObject 執行兩個任務.第一,它構建基于對象變量的SQL語句和構建器方法.第二,它作為數據庫表的數據存

儲.這里有個核心類,對于每個表繼承它,以使你把數據邏輯放入數據類中.這里還包括一個生成器,

DataObject 極大的簡化了數據庫訪問代碼,它使開發大型的,數據驅動的站點更加容易.

At present, Alan Knowles, the lead developer of PEAR::DB_DataObject, is working on a new project called DBDO,

a C implementation of the PEAR package DB_DataObjects, based on libgda. His goal is to create the next

generation of PEAR::DB_DataObjects.

SMARTY

Smarty是一個從web頁演示中分離內容的PHP模板引擎.它使用GPL許可.

Large projects commonly separate the role of the graphic designer from that of the programmer. However,

programming in PHP has the tendency to combine those two roles in a person and inside the code. This can bring

difficulties when it comes time to change some part of the page's design. If the page mixes content and

presentation, the developer has to crawl through the program to find the presentation. Smarty helps to solve

this problem.

Combining the TwoThe first thing to do when starting this project is to create a workspace in which to store the project's code.

Then it's time to configure PEAR::DB_DataObject to connect to the MySQL database MySQL (name: example),

map the database tables to PHP classes, and then configure Smarty for the presentation tier for the user. Here

are those steps in more detail:

創建工作環境

創建一個叫做dataobjects的目錄.

從命令行安裝PEAR::DB_DataObject,鍵入:>pear install Date>pear install DB_DataObject>pear list

INSTALLED PACKAGES:===================PACKAGE VERSION;STATEArchive_Tar;;;;1.2;;;stableConsole_Getopt;1.2;;;stable DB;;;;;1.6.5;stableDB_DataObject;;1.7.1;stable; *(Goal)Date;;;1.4.3;stableMail;;;1.1.3;stableNet_SMTP; 1.2.6;stableNet_Socket;;;;;1.0.2;stablePEAR;;;1.3.1;stablePHPUnit1.0.1;stableXML_Parser;;;;;1.2.0;stableXML_RPC1.1.0;stable

安裝和配置Smarty

從下載開始,(我使用2.6.5版的Smarty)解壓到你自己的目錄.從它的libs目錄中把Smarty.class.php,

Smarty_Compiler.class.php, Config_File.class.php, and debug.tpl文件復制到dataobjects目錄中.

還要復制core和plugins目錄和其中所有的內容.創建幾個新的目錄,命名為templates, templates_c, configs,

和cache.

最后dataobjects目錄包含:

|---- cache|---- configs|---- core|---- plugins|---- templates|---- templates_c

11/10/2004; 11:17 a.m.;<DIR> .11/10/2004; 11:17 a.m.;<DIR> ..11/10/2004; 11:17 a.m.;<DIR> cache11/10/2004; 11:17 a.m.;<DIR> configs11/10/2004; 11:17 a.m.;<DIR> core11/10/2004; 11:17 a.m.;<DIR> plugins11/10/2004; 11:17 a.m.;<DIR> templates11/10/2004; 11:17 a.m.;<DIR> templates_c07/09/2004; 09:48 a.m.; 13,105 Config_File.class.php16/04/2004; 03:03 a.m.; 5,117 debug.tpl10/09/2004; 02:15 p.m.; 65,350 Smarty.class.php10/09/2004; 07:14 p.m.; 90,924 Smarty_Compiler.class.php 4 archivos;;;;;174,496 bytes 8 dirs6,699,454,464 bytes libres

創建數據庫創建一個名為example的數據庫,它包含一個名為User的表,不必擔心模式,稍后我們會創建.

配置PEAR::DB_DataObject要構建數據對象,創建下面的文件

configDB.php<?phprequire_once 'DB/DataObject.php';$config = parse_ini_file('example.ini',TRUE);

foreach($config as $class=>$values) { $options = &PEAR::getStaticProperty($class,'options'); $options = $values;}?>

此腳本基于example配置文件中的值創建一個到數據庫的連接,顯示如下.

example.ini[DB_DataObject]database = mysql://root:@localhost/exampleschema_location; = /dataobjects/schema/class_location= /dataobjects/require_prefix= /dataobjects/class_prefix;;= DataObjects_extends_location = DB/DataObject.phpextends; = DB_DataObject

自動構建數據庫模式

包含兩個過程,構建數據庫的對象-關系映射,和從example數據庫user表中自動創建一個類.在表中的所有字段

名將成為類成員變量.

創建適當的模式:

C:PHPPEARDBDataObject>C:PHPphp.exe createTables.php C:dataobjectsexample.ini

這將生成User.php文件:

<?php/*** Table Definition for user* www.mypchelp.cn*/require_once 'DB/DataObject.php';

class DataObjects_User extends DB_DataObject { ###START_AUTOCODE

/* the code below is auto generated do not remove the above tag */ var $__table = 'user';;;;;// table name var $user_Id // int(11); not_null primary_key auto_increment var $first_Name;;;// string(30); not_null var $last_Name;;;;// string(40); not_null var $email// string(100); not_null

/* Static get */ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_User',$k,$v);}

/* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE}?>

它還會為user表模式生成example.ini配置文件:

[user]user_Id;= 129first_Name = 130last_Name; = 130email;;;= 130

[user__keys]user_Id = N

Smarty filesIt's time to create several files for Smarty:

Smarty文件現在是創建幾個Smarty文件的時候了:

include.php1 <?2require('Smarty.class.php');3$smarty = new Smarty;4$smarty->template_dir = 'templates/';5$smarty->compile_dir; = 'templates_c/';6$smarty->config_dir= 'configs/';7$smarty->cache_dir;=; 'cache/';?>

此腳本實例化了一個新Smarty對象.設置Smarty屬性.

index.php1 <? 2; require('include.php');3; $smarty->assign('TITLE','ACCESS MySQL DATABASE IN THREE TIERS WITH PHP');4; $smarty->assign('HEADER','WHAT WISH DO ?');5; $smarty->display('index.tpl');?>

給Smarty模板分配變量.

insert.php1; <? 2; require('include.php'); 3; $smarty->assign('TITLE','INSERT DATA'); 4; $smarty->assign('HEADER','Insert Data'); 5; $smarty->assign('data1','First Name');6; $smarty->assign('data2','Last Name');7; $smarty->assign('data3','email');8; $smarty->display('insert.tpl'); ?>

添加將在insert.tpl 使用的變量.調用模板insert.tpl .

save.php1<?2require_once('DB/DataObject.php');3require('configDB.php');4$user = DB_DataObject::factory('user');5$user->first_Name = $x;6$user->last_Name; = $y;7$user->email;;;= $z;8$user_Id = $user->insert();9$user->update();10; echo '<script>location.href='http://m.b3g6.com/bcjs/index.php'</script>';11 ?>

This script saves data by using a PEAR::DataObject for the user table. Line 2 loads the class DataObject, and

line 3 calls configdb.php to connect to the database. Line 4 creates an instance of a user object (see User.php).

Lines 5 through 7 pass the variables collected from the form in insert.tpl ($x, $y, and $z) in order to save the

data in the database. The primary key of the table is an autoincrement column, so it doesn't need a value there.

Line 8 inserts the object, and line 9 carries out an update.

view.php1; <? 2require_once('DB/DataObject.php');3require('configDB.php');4require('include.php');5$user = DB_DataObject::factory('user');6$user->find();7while ($user->fetch()) {8;;;$smarty->append('users', array( 'ID';;;;;=> $user->user_Id, 'FIRSTNAME' => $user->first_Name,;; 'LASTNAME'; => $user->last_Name,;; 'EMAIL';;=> $user->email,;; )); }9$smarty->assign('TITLE','List Users');10; $smarty->assign('HEADER','List User');11; $smarty->assign('data0','User_Id');12; $smarty->assign('data1','First Name');13; $smarty->assign('data2','Last Name');14; $smarty->assign('data3','email');15; $smarty->display('view.tpl');16; ?>

此腳本顯示所有存儲在user表中的數據.它加載PEAR::DataObject 和include.php文件(給smarty模板分配變量).第5行創建一個user對象的工廠.第6行執行find()方法.SELECT * FROM user從數據庫中檢索出了數據,通

過fetch()方法為模板保存數據,一次返回一條記錄.

9 到14行是分配其他的變量給Smarty.

這些文件都應當放在dataobjects目錄中.

對于模板,這里有index.tpl,list.tpl,和save.tpl.這里是他們的代碼:

index.tpl1; <html>2<head>3;<title>{$TITLE}</title>4;;<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>5</head>6<table align='center'>;7;<tr> 8;;<td>9;;;;<b>{$HEADER}</b>10;</td>11</tr>12; </table>;13; <table border='1' >14<tr> 16;;<td align='center'>17;;;;<input type='button' name='insert' value='Insert'; onclick='javascript:location.href='http://m.b3g6.com/bcjs/insert.php';'>18;</td>19</tr>20<tr> 21;;<td align='center'>22;;;<input type='button' name='view' value='View' onclick='javascript:location.href='http://m.b3g6.com/bcjs/view.php';'>23</td>24</tr>25; </table>26; </body>27 </html>

站點主頁,它在的3行和第9行分別顯示$TITLE 和$HEADER,這些變量值是從index.php傳遞過來的.

這個腳本在web瀏覽器上生成兩個按鈕,Insert和View,他們有相應的行為.如果用戶點擊Insert,系統將調

用Insert.php.如果用戶點擊View,那么view.php將被調用

insert.tpl1 <html>2; <head>3;<title>{$TITLE}</title>4;;<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>5; </head>6; <body>7;;<form name='form1' action='save.php' method='post'>8;;;;<table border='1' >9;;;;;<tr>10; <td align='center'>11;<b>{$HEADER}</b>12 </td>13;;;;</tr>14;;;;<tr>15 <td>16{$data1}17;<input type='text' name='x'>18 </td>19;;;;</tr>20;;;;<tr>21 <td>22{$data2}23;<input type='text' name='y'>24 </td>25;;;;</tr>26;;;;<tr>27 <td>28{$data3}29;<input type='text' name='z'>30 </td>31;;;;</tr>32;;;;<tr>33; <td align='center'>34;<input type='submit' name='Submit' value='Add'>35;<input type='button' name='Reset' value='Return/Cancel' onclick='javascript:location.href='http://m.b3g6.com/bcjs/index.php';'>36; </td>37;;;;;</tr>38;;;</table>39;</form>40; </body>41 </html>

這個模板有一個表單和兩個按鈕,Add 和Return/Cancel.

用戶輸入數據,first name,last name 和電子郵件字段.insert.php期望在名為x,y,z的變量中接收這些信息,用戶點

擊Add按鈕將運行save.php.如果用戶點擊Return/Cancel,將會執行index.php.

view.tpl1 <html>2; <head>3;<title>{$TITLE}</title>4; </head>5; <body>6<table align='center'>7;;;<tr>8 <td align='center'>9 <b>{$HEADER}</b>10;;;;</td>11;;</tr>12;;</table>13<table border='1' align='center'>14<tr>16;;;;;<td align='center'>17 <b>{$data0}</b>18;;;;</td>19;;;;;<td align='center'>20 <b>{$data1}</b>21;;;;</td>22;;;;;<td align='center'>23 <b>{$data2}</b>24;;;;</td>25;;<td align='center'>26 <b>{$data3}</b>27;;;;</td>28;;</tr>29; {section name=display loop=$users}30;;<tr>31;;;;<td>32 {$users[display].ID}33;;;;</td>34;;;;<td>35 {$users[display].FIRSTNAME}36;;;;</td>37;;;;<td>38 {$users[display].LASTNAME}39;;;;</td>40;;;;<td>41 {$users[display].EMAIL}42;;;;</td>43;;</tr>44;;{/section}45;;<br>46</table>47<br>48;<table align='center'>49;;<tr>50;;;;;<td align='center'>51; <input name='vol' type='button' value='Return'; onclick='javascript:location.href='http://m.b3g6.com/bcjs/index.php';'>52;;;;</td>53;;</tr>54</table>55; </body>56 </html>

這個模板顯示所有存儲在example數據庫中的所有數據.

最后,Return按鈕把用戶帶回到主頁.

所有的這些(*.tpl)文件必須放在templates目錄下.

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久香蕉精品| 亚洲福利一区| 欧美日韩国产高清| 欧美日韩国产一区二区三区不卡| 高清av一区| 精品中文字幕一区二区三区| 欧美激情一区| 久久免费精品| 久久久久久久欧美精品| 日韩欧美综合| 久久天堂成人| 久久久久欧美精品| 不卡专区在线| 欧美午夜精品一区二区三区电影| 欧美日韩水蜜桃| 午夜久久黄色| 亚洲综合国产| 亚洲69av| 青青草国产精品亚洲专区无| 国产精品v日韩精品v欧美精品网站| 麻豆高清免费国产一区| 风间由美中文字幕在线看视频国产欧美| 精品国产乱码久久久| 成人小电影网站| 欧美亚洲国产激情| 免费看欧美美女黄的网站| 视频在线在亚洲| 日韩欧美高清一区二区三区| 国产美女精品视频免费播放软件| 国产精品3区| 日本蜜桃在线观看视频| 亚洲男女av一区二区| 伊人久久一区| 国产精品二区影院| 欧美日韩免费看片| 国产免费成人| 日本午夜免费一区二区| 欧美激情国产在线| 亚洲精品电影| 国产精品中文字幕亚洲欧美| 国产66精品| 免费国产自久久久久三四区久久 | 国产免费av国片精品草莓男男| 成人在线黄色| 亚洲综合丁香| 美女久久99| 免费毛片在线不卡| 日韩精品一区二区三区中文| 精品一区二区三区中文字幕在线| 亚洲成人va| 日本不卡一区二区| 成人小电影网站| 亚洲综合图色| 荡女精品导航| 亚洲精品a级片| 国产麻豆一区二区三区精品视频| 婷婷精品视频| 国产精品亚洲人成在99www| 日韩在线高清| 亚洲精品看片| 日韩伦理在线一区| 日韩精品欧美成人高清一区二区| 国产精品13p| 亚洲区第一页| 久久天堂成人| 国产精品夜夜夜| 婷婷六月综合| 免费在线播放第一区高清av| 性欧美69xoxoxoxo| 国产精品亚洲综合色区韩国| 中文欧美日韩| 亚洲精品成人图区| 日韩欧美高清一区二区三区| 99精品国产一区二区三区| 日韩av黄色在线| 婷婷成人基地| 国产精选在线| 日本中文字幕不卡| 亚洲午夜精品久久久久久app| 国产麻豆一区二区三区精品视频| 亚洲精华国产欧美| 日韩国产一区二区| 国产精品激情| 日韩欧乱色一区二区三区在线| 日韩欧美午夜| 国内精品亚洲| 久久国产精品免费精品3p| 午夜久久影院| 日韩电影二区| 麻豆视频一区二区| 深夜日韩欧美| 丝袜亚洲另类欧美| 欧美日韩在线播放视频| 精品美女视频 | 日韩电影二区| 欧美国产极品| 国产精品资源| 欧美日本三区| 日韩精品一区二区三区中文字幕| 亚洲综合不卡| jiujiure精品视频播放| 日韩不卡在线| 国产盗摄——sm在线视频| 国产精品主播| 久久狠狠久久| 91精品国产一区二区在线观看 | 久久国产尿小便嘘嘘| 美国三级日本三级久久99| 免费国产自久久久久三四区久久 | 亚洲一区二区小说| 91高清一区| 天堂网在线观看国产精品| 99tv成人| 不卡一区2区| 免费av一区二区三区四区| 色偷偷色偷偷色偷偷在线视频| 国产欧美自拍| 国产剧情一区| 久久久久观看| 国产精品亚洲综合久久| 亚洲日本国产| 久久超级碰碰| 999久久久亚洲| 一区久久精品| 久久蜜桃av| 日韩高清不卡在线| 日韩精品诱惑一区?区三区| 免费精品一区| 国产乱人伦精品一区| 国产成人精品一区二区三区在线| 丝袜美腿高跟呻吟高潮一区| 三级一区在线视频先锋| 99国产精品视频免费观看一公开| 六月丁香综合在线视频| 国产亚洲精品v| 超级白嫩亚洲国产第一| 中文字幕一区二区三区日韩精品| 日韩在线a电影| 国产精品麻豆久久| 麻豆精品视频在线| 夜鲁夜鲁夜鲁视频在线播放| 精品视频亚洲| 国产精品13p| 一本大道色婷婷在线| 国模 一区 二区 三区| 日韩有码av| 在线看片福利| 欧美有码在线| 综合激情网站| 欧美亚洲国产精品久久| 国产麻豆精品| 欧美成人高清| 国产精品chinese| 国产日韩精品视频一区二区三区| 国产字幕视频一区二区| 欧美激情福利| 国产美女高潮在线观看| 午夜一级在线看亚洲| 亚洲免费精品| 亚洲二区三区不卡| 久久久久国产| 高清av一区| 日韩久久99| 在线精品亚洲| 欧洲毛片在线视频免费观看| 少妇久久久久| 精品香蕉视频| 日本综合视频| 国产激情精品一区二区三区| 亚洲大全视频| 国产亚洲毛片| 成人日韩在线观看| 黄色日韩精品| 日韩精品欧美大片| 国产在线不卡一区二区三区 | 久久99久久久精品欧美| 国产极品模特精品一二| 久久久久久一区二区| 91精品二区| 欧美精品三级在线| 亚洲黄色免费av| 老司机精品久久| 国产精品天堂蜜av在线播放| 新版的欧美在线视频| 蜜桃视频一区二区| 日本久久黄色| 国产日韩欧美在线播放不卡| 妖精视频成人观看www| 国产一区二区中文| 爽好久久久欧美精品| 欧美日韩xxxx| 久久久人人人| 日韩国产在线一| 精品国产第一福利网站| 麻豆精品视频在线| 免播放器亚洲| 成人在线免费观看网站| 亚洲综合电影一区二区三区| 麻豆久久一区二区| 免费看欧美美女黄的网站|