phphot

php,linux,mysql,apache

用户操作
[即时聊天] [发私信] [加为好友]
小秘密ID:phphot
1164729次访问,排名25,好友166人,关注者511人。
php,apache,mysql,linux,html,css,javascript
phphot的文章
原创 4719 篇
翻译 1 篇
转载 19 篇
评论 672 篇
小秘密的公告


经典推荐!!!
2008中国记忆

失业七个月,面试六十家公司的深圳体验

魏文王问扁鹊 扁鹊三兄弟的故事 文言文

一篇好文,以在迷茫时阅读

离开公司时留给公司的十句话 与大家分享

史上最全的小白兔的笑话

从一则笑话分析需求的陷阱

本科差点没能毕业,工作五年后年收入过百万

从小公司到500强 80年代人的面试宝典

那些雷得我们如此销魂的台词

老IT人追忆十五年IT从业经历

汶川大地震牛B语录集锦

千百万学子未来几年的出路

大学时代影响我的人生的10件大事-前辈的经验

噩梦的那一年-程序员之路

成功的背后!(给所有IT人)

一部让大学生少奋斗10年的成功宝典

职业生涯中12个最致命的想法

华为面试,第三轮被拒,想哭

一个牛人给java初学者的建议

黑客帝国之PHP与ASP.net不得不说的故事

一个应界毕业生的深圳求职经历。

程序人生:女程序员的求职奋斗史

2008春晚诗朗诵《心里话》之程序员版

最高境界---笑到肚子疼!!!!

是非人生——一个菜鸟程序员的5年人生路

网友10年跳槽经验总结

2008年IT行业10大热门职业调查结果出炉

百度实习经验总结

一点感慨,与诸君共勉,正式告别程序员生涯

程序员V.S.编程语言你上“贼船”了吗

上海IT精英群体某些行为特征被妖魔化

五百强各大行业简介+面试流程及技巧

08年各大公司薪水最新行情全面曝光


XML聚合
feedsky
最近评论
TT:天哪什么苍蝇都来了,
hlm_2008:虽然以前听过这个故事,但没有这么全~
当看到1/3的时候我就开始笑了,看完以后感觉非常的棒,觉这个故事蕴含了很多的道理!如果每个项目的需求都能做到这样,那么客户的满意度会很高的~
值得学习~
hlm_2008:恩,不错~,很有道理!
现在正在看卡耐基的一本书--人性的弱点,讲的就是这个道理~记着别人的好、谈论别人喜欢的话题、安静的倾听别人的述说、站在别人的立场思考等等,如果能做到这些,那么你自己也就备受别人的关注、喜欢、尊敬~
这些无论是在生活中还是事业中都是非常重要的。
fenanr:这篇的观点就有个和谐中国的味道了...

显然是不正确的..

微软做法是多少有点不对,但还没轮到盗版大国china来骂..
fenanr:这篇的观点就有个和谐中国的味道了...

显然是不正确的..

微软做法是多少有点不对,但还没轮到盗版大国china来骂..
文章分类
收藏
    相册
    YY的图(禁)
    绝对精彩
    网上好图(禁)
    我的工作(禁)
    我的作品(禁)
    热门站
    baidu
    google
    yahoo
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 用PHP5进行三层开发收藏

    新一篇: 获取 $_SERVER["REQUEST_URI"] 值的通用解决方案 | 旧一篇: 获取 $_SERVER["REQUEST_URI"] 值的通用解决方案




    此文演示了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:\PHP\PEAR\DB\DataObject>C:\PHP\php.exe createTables.php \
     C:\dataobjects\example.ini

    这将生成User.php文件:
    <?php
    /**
     * Table Definition for user
     * www.itlearner.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 "<scrīpt>location.href='index.php'</scrīpt>";
    11 ?>
    This scrīpt 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"  
               ōnclick="javascrīpt:location.href='insert.php';">
    18    </td>
    19   </tr>
    20   <tr>
    21     <td align="center">
    22      <input type="button" name="view" value="View"
              ōnclick="javascrīpt: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"
                     ōnclick="javascrīpt: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"
                   ōnclick="javascrīpt:location.href='index.php';">
    52       </td>
    53     </tr>
    54   </table>
    55  </body>
    56 </html>
    这个模板显示所有存储在example数据库中的所有数据.
    最后,Return按钮把用户带回到主页.
    所有的这些(*.tpl)文件必须放在templates目录下.
     

    发表于 @ 2008年01月30日 12:29:00|评论(loading...)|编辑

    新一篇: 获取 $_SERVER["REQUEST_URI"] 值的通用解决方案 | 旧一篇: 获取 $_SERVER["REQUEST_URI"] 值的通用解决方案

    评论:没有评论。

    Csdn Blog version 3.1a
    Copyright © 小秘密