亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

用PHP5進行三層開發

2024-09-04 11:50:10
字體:
來源:轉載
供稿:網友

此文演示了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_DataObject
PEAR::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 5
By Adam Trachtenberg

Table of Contents
Index
Sample Chapter

Read Online--Safari Search this book on Safari:
    
 Only This Book All of Safari
Code 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 Two
The 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    STATE
Archive_Tar       1.2      stable
Console_Getopt    1.2      stable
DB                1.6.5    stable
DB_DataObject     1.7.1    stable  *(Goal)
Date              1.4.3    stable
Mail              1.1.3    stable
Net_SMTP          1.2.6    stable
Net_Socket        1.0.2    stable
PEAR              1.3.1    stable
PHPUnit           1.0.1    stable
XML_Parser        1.2.0    stable
XML_RPC           1.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> cache
11/10/2004  11:17 a.m.    <DIR> configs
11/10/2004  11:17 a.m.    <DIR> core
11/10/2004  11:17 a.m.    <DIR> plugins
11/10/2004  11:17 a.m.    <DIR> templates
11/10/2004  11:17 a.m.    <DIR> templates_c
07/09/2004  09:48 a.m.  13,105 Config_File.class.php
16/04/2004  03:03 a.m.  5,117 debug.tpl
10/09/2004  02:15 p.m.  65,350 Smarty.class.php
10/09/2004  07:14 p.m.  90,924 Smarty_Compiler.class.php
              4 archivos        174,496 bytes
              8 dirs   6,699,454,464 bytes libres


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


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

configDB.php
<?php
require_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/example
schema_location  = /dataobjects/schema/
class_location   = /dataobjects/
require_prefix   = /dataobjects/
class_prefix     = DataObjects_
extends_location = DB/DataObject.php
extends          = DB_DataObject


自動構建數據庫模式

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

名將成為類成員變量.


創建適當的模式:

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


這將生成User.php文件:

<?php
/**
 * Table Definition for user
 * www.49028c.com
 */
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    = 129
first_Name = 130
last_Name  = 130
email      = 130

[user__keys]
user_Id = N


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

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

include.php
1 <?
2   require('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.php
1 <?
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.php
1  <?
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.php
1   <?
2   require_once('DB/DataObject.php');
3   require('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='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.php
1  <?
2   require_once('DB/DataObject.php');
3   require('configDB.php');
4   require("include.php");
5   $user = DB_DataObject::factory('user');
6   $user->find();
7   while ($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.tpl
1  <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 width="250" border="1" align="center" >
14   <tr>
16     <td align="center">
17       <input type="button" name="insert" value="Insert"   
           onclick="javascript:location.href='insert.php';">
18    </td>
19   </tr>
20   <tr>
21     <td align="center">
22      <input type="button" name="view" value="View"
          onclick="javascript:location.href='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.tpl
1 <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 width="300" border="1" align="center" >
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='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.tpl
1 <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 width="500" 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='index.php';">
52       </td>
53     </tr>
54   </table>
55  </body>
56 </html>

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


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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人午夜激情| 国产精品自产拍高潮在线观看| 日本一欧美一欧美一亚洲视频| 国产激情久久久| 国产成人精品免费久久久久| 最近2019中文字幕一页二页| 欧日韩不卡在线视频| 国产亚洲欧美日韩美女| 精品人伦一区二区三区蜜桃网站| 欧美日韩中国免费专区在线看| 在线观看欧美成人| 国产精品福利片| 日韩av在线影视| 亚洲午夜色婷婷在线| 欧美大片在线免费观看| 日韩成人中文字幕在线观看| 国产精品jvid在线观看蜜臀| 亚洲男人第一网站| 欧美另类老女人| 91性高湖久久久久久久久_久久99| 欧美成人激情图片网| 国产视频精品在线| 国产99久久精品一区二区 夜夜躁日日躁| 狠狠操狠狠色综合网| 国产精品第3页| 日本aⅴ大伊香蕉精品视频| 久久影视电视剧免费网站清宫辞电视| 国产成人在线播放| 欧美精品久久久久久久免费观看| 久久亚洲精品国产亚洲老地址| 日韩欧美在线中文字幕| 成人网在线免费看| 亚洲国产精品推荐| 欧美一区二区大胆人体摄影专业网站| 成人伊人精品色xxxx视频| 国产精品第七十二页| 亚洲国产精品va在线观看黑人| 色噜噜久久综合伊人一本| 日韩成人在线观看| 91精品久久久久久久久久另类| 国产日产亚洲精品| 久久婷婷国产麻豆91天堂| 国产精品丝袜白浆摸在线| 国产91免费看片| 久热精品视频在线观看一区| 久久九九免费视频| 97视频在线观看成人| 亚洲国产97在线精品一区| 国产99久久精品一区二区永久免费| 欧美激情影音先锋| 国产成人免费av| 欧美激情亚洲另类| 日韩一级黄色av| 亚洲国产欧美日韩精品| 国产精品视频一区二区高潮| 亚洲r级在线观看| 成人性生交大片免费观看嘿嘿视频| 精品亚洲一区二区三区在线播放| 日韩av日韩在线观看| 性视频1819p久久| 国产成人91久久精品| 久久精品91久久久久久再现| 亚洲午夜精品久久久久久性色| 日韩av黄色在线观看| 中文字幕久热精品在线视频| 77777亚洲午夜久久多人| 欧美成人黑人xx视频免费观看| 日韩中文字幕在线视频| 91中文字幕在线观看| 国产亚洲欧洲高清一区| 欧美理论电影在线播放| 国产成人亚洲综合青青| 97成人超碰免| 欧美日韩第一页| 亚洲va欧美va国产综合久久| 91麻豆国产精品| 91精品久久久久久久久青青| 欧美视频在线免费看| 一区二区成人av| 亚洲免费人成在线视频观看| 成人免费看黄网站| 色先锋久久影院av| 在线不卡国产精品| 国产精品美女免费看| 国产精品99久久99久久久二8| 九色精品免费永久在线| 国产成人涩涩涩视频在线观看| 日韩成人中文电影| 最近2019年手机中文字幕| 亚州欧美日韩中文视频| 国产一区二区三区在线视频| 91九色精品视频| 萌白酱国产一区二区| 亚洲欧美日韩久久久久久| 中文字幕综合在线| 欧美性猛交xxxx免费看久久久| 国产欧美精品一区二区| 91中文在线观看| 日韩成人在线播放| 国产精品成av人在线视午夜片| 国产成人精品a视频一区www| 欧美成人三级视频网站| 亚洲综合在线播放| 亚洲自拍中文字幕| 欧美国产日韩一区二区| 亚洲精品ady| 亚洲精品国偷自产在线99热| 亚洲综合中文字幕在线| 激情懂色av一区av二区av| 欧美亚洲一级片| 亚洲国模精品一区| 久久久电影免费观看完整版| 欧美性猛交丰臀xxxxx网站| 日韩精品亚洲视频| 国产这里只有精品| 国产成人精品久久二区二区91| 日韩经典第一页| 一本色道久久综合亚洲精品小说| 亚洲一区中文字幕| 亚洲电影免费观看| 欧美韩国理论所午夜片917电影| 久久久久久91香蕉国产| 欧美国产日韩精品| 亚洲欧美在线一区二区| 国产精品美女久久| 91精品国产91久久久久久吃药| 欧美亚洲伦理www| 国产精品av免费在线观看| 国产日韩欧美视频| 欧美激情第6页| 97色在线视频观看| 美女国内精品自产拍在线播放| 在线观看欧美www| 国产成人精品日本亚洲专区61| 91成人在线观看国产| 久久中文字幕在线视频| 国产精品pans私拍| 精品视频中文字幕| 成人免费视频a| 成人黄色免费网站在线观看| 91亚洲精品视频| 在线观看欧美日韩国产| 丝袜一区二区三区| 精品网站999www| 日韩欧美在线网址| 欧美激情第6页| 少妇高潮 亚洲精品| 欧美成人免费小视频| 色与欲影视天天看综合网| 国产精品一区二区三| 91久久国产精品91久久性色| www.久久久久| 久久精品影视伊人网| 日本高清不卡的在线| 91欧美视频网站| 美女久久久久久久久久久| 欧美日韩性生活视频| 538国产精品视频一区二区| 日韩电影中文 亚洲精品乱码| 日韩在线免费视频| 日韩黄色av网站| 97超碰蝌蚪网人人做人人爽| 奇米成人av国产一区二区三区| 国产一区二中文字幕在线看|