《一步一步跟我学PHP》第六6讲:PHP中zend framewo

2021-02-12 04:13 admin
《一步一步跟我学PHP》第六6讲:PHP中zend framework 案例——买东西车

来源于: 百优資源网 创作者:管理方法员

关键提醒:买东西车系统软件是一个较为综合性的系统软件,关键进行进行买东西、下定单和查寻定单、 推送电子器件电子邮件等作用。期待对贵阳市企业网站建设的朋友有一定的协助。

《一步一步跟我学PHP》第六6讲:PHP中zend framework 案例——买东西车

叙述:买东西车系统软件是一个较为综合性的系统软件,关键进行进行买东西、下定单和查寻定单、 推送电子器件电子邮件等作用。期待对贵阳市企业网站建设的朋友有一定的协助。

一、zf 版买东西车系统软件-推送电子器件电子邮件
  PHPMailer是一个用以推送电子器件电子邮件的PHP涵数包。它出示的作用包含:
*.在推送邮时特定好几个收货人,密送详细地址,暗送详细地址和回应详细地址。
*.适用多种多样电子邮件编号包含:8bit,base64,binary和quoted-printable。
*.适用SMTP认证。
*.适用数据冗余SMTP网络服务器。
*.适用带配件的电子邮件和Html文件格式的电子邮件。
*.自定电子邮件头。
*.适用在电子邮件中置入照片。
*.调节灵便。
*.经检测适配的SMTP网络服务器包含:Sendmail,qmail,Postfix,Imail,Exchange等。
*.可运作在一切服务平台以上。
二、zf 版 买东西车系统软件详细介绍
  买东西车系统软件是一个较为综合性的系统软件。 进行买东西作用。下定单和查寻定单。 推送电子器件电子邮件。
  系统软件要求剖析:
  根据对作用的剖析,得到本系统软件的作用有:系统软件登陆、访问产品(要考虑到分页查询)、把产品加上到买东西车,买东西车能够对选购的产品开展CRUD实际操作,升级(例如升级总数)、删掉实际操作。能够测算出产品总价格,下定单,清除买东西车等作用。推送电子器件电子邮件通告(应用phpmail)。

手机软件设计方案,贵阳市企业网站建设


手机软件设计方案,PHP实例教程


手机软件设计方案,大学毕业设计方案


手机软件设计方案,大学毕业毕业论文

手机软件设计方案,贵阳市企业网站建设


手机软件设计方案,大学毕业设计方案


手机软件设计方案,贵阳市企业网站建设



三、zf 版买东西车系统软件-数据信息库设计方案
  依据剖析,本系统软件有效户表、产品表(产品类型表)、定单表(一般设计方案为2张表,一个叫主表,一个叫定单关键点表)。
  在指令提醒符下,create database shopping;
Set names gbk;
Use shopping;
  根据下列编码建立客户表。并插进几个数据信息供检测。
create table  users
(
id  int  primary key,
name varchar(64) not null default '',
pwd char(32)  not null default  '',
email  varchar(128)  not null default  '',
tel varchar(32) not null default  '',
grade tinyint unsigned  not null default 1 
)

insert into  users  values(100,'刘德华',md5(123456),'aligoods','',1);
insert into  users  values(101,'张学友',md5(123456),'','',1);
  md5  校检,储存标识符为32位。定长用char是较为理想化的。
  Grade客户级別,便捷对产品折扣。不一样的客户级別打折不一样。
  根据下列编码建立产品表。(产品类型表-一级二级三级)并插进几个数据信息供检测。
create table  book
(
id  int  primary key  auto_increment,
name varchar(64) not null default '',
author varchar(64)  not null default  '',
publishHouse varchar(128)  not null default  '',
price float  not null default  0,
nums int not null default 10 
)
Insert into book(name, author, publishHouse, price, nums) values(‘PHP language’,’guojl’,’beijingdaxue’,56,1000);
Insert into book(name, author, publishHouse, price, nums) values(‘VC++  language’,’guojl’,’guizhoudaxue’,550,1000);

  根据下列编码建立买东西车表。用以储放客户提前准备选购的产品的ID和总数。
create table  mycart
(
id  int  primary key  auto_increment,
userid int,
bookid int,
nums int  unsigned,
cartDate int  unsigned ,
foreign key(userid)  references users(id) ,
foreign key(bookid)  references book(id)
)

  定单表(有注重,数据信息表设计方案方式,怎样降低数据冗余....)
  定单表分成2个表:
create table orders
(
id int primary key auto_increment, /*定单的序号*/
userId int not null, /*下定单的客户序号*/
totalPrice float not null default 0,/*该定单的总价格格*/
orderDate int unsigned not null,/*该定单的時间*/
foreign key (userId) references users(id)
)
  --定单关键点(该定单到底买来甚么产品)
create table ordersItem
(
id int primary key auto_increment, /*提高的序号*/
ordersId  int,/*外键约束,偏向orders表的定单号*/
bookId int, /*书号多少钱*/
bookNum int default 0 not null, /*产品的总数*/
foreign key (ordersId) references orders(id),
foreign key (bookId) references book(id)
)


  应用架构图设计制作大家的网站和有关文档和启用关联。

手机软件设计方案,PHP实例教程

四、zf 版买东西车系统软件-编程设计步骤剖析
(一)建立新项目
  进到操纵台cmd,进到到zf.bat所属文件目录,cd D:\wwwroot\PHP\myenv\Apache2.2\htdocs\MYZF\ZendFramework-1.11.10\bin
在指令提醒符下运作zf.bat create project d:/ebay
(二)在zend studio中建立空新项目
  在zend studio中建立空新项目,名叫ebay,随后把d:/ebay下的文档拷贝以往。把zend lib拷贝到library文件目录中。
(三)页面设计方案
  设计方案一个BaseController类,用以数据信息库原始化。能够过去面拷贝回来。建立一个LoginCoutroller操纵器。用以操纵客户登陆。
BaseController编码为:
?php
//做一个父类,专业供其他的Controller来承继
class  BaseController  extends Zend_Controller_Action{
  public function init(){
  //原始化大家的数据信息库兼容器
  $url=constant("APPLICATION_PATH").DIRECTORY_SEPARATOR.'configs'.DIRECTORY_SEPARATOR.'application.ini';
  $dbconfig=new  Zend_Config_Ini($url,"mysql");
  $db=Zend_Db::factory($dbconfig-
  $db- query('SET  NAMES  UTF8');
  Zend_Db_Table::setDefaultAdapter($db);
 }
 }

  在httpd-vhosts.conf文档中加上。并配备hosts文档中再加上127.0.0.,设定相对路径时还记得写public文件目录,将默认设置文档设定为index.php。配备取得成功后,再次起动apache。在IE详细地址栏键入就可以见到热烈欢迎网页页面。
VirtualHost *:80
  DocumentRoot "D:/wwwroot/PHP/myenv/Apache2.2/htdocs/votesys/shopping/public"
 
  #这儿配备热烈欢迎面
  DirectoryIndex index.php
  Directory /
  Options FollowSymLinks
  #不准可他人改动大家的网页页面
  AllowOverride None
  #设定浏览管理权限
  Order allow,deny
  Allow from all
  /Directory
/VirtualHost
在C:\Windows\System32\drivers\etc\hosts文档中加上以下內容:
  127.0.0.1 
(五) 配备数据信息库
  配备application.ini中配备数据信息库,加上db.params.dbname=shopping
(六) 加上scripts文件目录内设计index.phtml
  Index.phtml是系统软件登陆的主通道,在其中完成键入客户名和登陆密码以后,认证是不是法,假如合理合法则开展入系统软件买东西服务厅。
  Index.phtml编程设计编码为:
html
head
title 客户登陆 /title
/head
body
h1 登陆通道 /h1
form action="/login/login" method="post"
table
tr
td 客户id: /td
td input type="text" name="id"/ /td
/tr
tr
td 客户登陆密码: /td
td input type="password" name="pwd"/ /td
/tr
tr
td input type="submit" value="登陆" / /td
td input type="reset" value="再次填好" / /td
/tr
/table
/form
?php echo $this- err?
/body
/html
(七)在models文件目录中加上表实体模型users.php。
?php
 class Users extends  Zend_Db_Table {
 protected $_name='users';
 
 }
?
(八) 加上controller文件目录中加上操纵器loginController.php
  loginController.php该操纵器用以响运用户登陆和销户恳求。
?php
require_once 'BaseController.php';
require_once APPLICATION_PATH.'/';
/*
 * 该操纵器专业用以响应登陆和撤出恳求
 */
class LoginController extends BaseController
{
  public function loginAction()
  {
  //启用表实体模型
 $userModel=new Users();
 //获得客户的id和登陆密码
 $id=$this- getRequest()- getParam("id","");
 $pwd=$this- getRequest()- getParam("pwd","");
 $db=$userModel- getAdapter();
 $where=$db- quoteInto("id=?",$id)
 .$db- quoteInto(" AND pwd=?",md5($pwd));
 $loginuser=$userModel- fetchAll($where)- toArray();
 if(count($loginuser)==1){
 //取下这一客户信息内容,储存到session
 session_start();
 $_SESSION['loginuser']=$loginuser[0];
 $this- _forward('gohallui','hall');
 }else{
 //不成功
 $this- view- err=" font color='red' 您的客户名或登陆密码不正确 /font
 $this- _forward('index','index');
 } 
  }
  public function logoutAction(){
   
  }

}

(九) 加上models文件目录中加上表实体模型book.php
?php
 class Book extends  Zend_Db_Table {
 protected $_name='book';
 
 }
(十) 加上controller文件目录中加上操纵器HallController.php
  先引进表实体模型book.php, require_once APPLICATION_PATH.'/';
?php
require_once 'BaseController.php';
require_once APPLICATION_PATH.'/';
class HallController extends BaseController
{
 /*到买东西在厅去
  * */
  public function gohalluiAction()
  {
  //建立
 $bookModel=new Book();
 $this- view- books=$bookModel- fetchAll()- toArray();
 session_start();
 $this- view- loginuser=$_SESSION['loginuser'];
  //$this- render $this- _forward $this- _redirect
   $this- render('hall');
  }

}

(十一) 加上scripts文件目录中加上hall文件目录和hall.phtml
  在application\views\scripts中加上hall文件目录。并在这其中建立hall.phtml。
內容为:
html
head title 买东西服务厅 /title
script language="javascript"
!--
 function goMyCart(){
 window.location.href="/shopping/showcart";
 }
//--
/script
/head
body
h1 热烈欢迎 ?php echo $this- loginuser['name']? 光顾买东西服务厅 /h1
table width="700px"
tr
td 书名 /td
td 价钱 /td
td 出版发行社 /td
td 选购 /td
/tr

?php foreach ($this- books as $book){?
tr
td ?php echo $book['name']? /td
td ?php echo $book['price']? /td
td ?php echo $book['publishHouse']? /td
td a href='/shopping/addproduct?bookid= ?php echo $book['id']? ' 选购 /a /td
/tr
?php }?
td colspan="4" input type="button" value="查询买东西车"/ /td
/tr
/table
/body
/html
  留意:区别尺寸写。

(十二) 加上表实体模型MyCart.php
?php
 /**
  * 这一类的一个目标案例表明一个买东西四目标,因而理应出示一些CRUD方式.
  */
 class MyCart extends  Zend_Db_Table {
 protected $_name='mycart';
 var $total_price=0;
 //加上产品到买东西车(把登录客户选定的产品储存到mycart表)
 function addProuduct($userId,$productId,$nums=1){
 $where="userid=$userId AND bookid=$productId";
 $res=$this- fetchAll($where)- toArray();
 if(count($res) 0){
 //表明该客户的买东西车纪录中,早已选购过这一产品,因而这儿大家必须升级总数
 $old_nums=$res[0]['nums'];
 $data=array(
 'nums'= $old_nums+1
 );
 $where="userid=$userId AND bookid=$productId";
 $this- update($data,$where);
 return true;
 }else{
 $now=time();
 $data=array(
 'userid'= $userId,
 'bookid'= $productId,
 'nums'= $nums,
 'cartDate'= $now
 );
 if($this- insert($data) 0){
 return true;
 }else{
 return false;
 }
 }
 }
 //从买东西车删掉产品
 function delProduct($userId,$id){
 if($this- delete("userid=$userId AND bookid=$id") 0){
 return true;
 }else{
 return false;
 }
 }
 //改动产品
 function updateProduct($userId,$id,$newNums){
 $set=array(
 'nums'= $newNums
 );
 $where="userid=$userId AND bookid=$id";
 
 $this- update($set,$where);
 }
 //测算买东西车的总价格
// function getTotalPrice(){
//
// }
 //显示信息买东西车
 function showMyCart($userId){
 $sql="select b.id,b.name,b.price,b.publishHouse,m.nums from book b,mycart m where b.id=m.bookid AND m.userid=$userId";
 $db=$this- getAdapter();
 $res=$db- query($sql)- fetchAll();
 //顺便把小结测算出去.
 for($i=0;$i count($res);$i++){
 $=$res[$i];
 $this- total_price+=$['price']*$['nums'];
 }
 return $res;
 }
 }
 }
 
(十三) 加上操纵器ShoppingController.php
?php
require_once 'BaseController.php';
require_once APPLICATION_PATH.'/';
class ShoppingController extends BaseController
{
  public function showcartAction(){
   $mycart=new MyCart();
   session_start();
   $this- view- books=$mycart- showMyCart($_SESSION['loginuser']['id']);
   $this- view- total_price=$mycart- total_price;
   $this- render('mycart');
  }
 
  public function updatecartAction(){
   $bookids=$this- getRequest()- getParam('bookids');
   $booknums=$this- getRequest()- getParam('booknums');
   $myCart=new MyCart();
   session_start();
   $userId=$_SESSION['loginuser']['id'];
   for($i=0;$i count($bookids);$i++){
   //echo $bookids[$i].'--'.$booknums[$i].' br/
   $myCart- updateProduct($userId,$bookids[$i],$booknums[$i]);
   }
   $this- view- info='产品从买东西车中升级ok';
   $this- view- gourl="/shopping/showcart";
   $this- _forward('ok','global');
  }
 
  //响应删掉产品的恳求
  public function delproductAction(){
   //获得$id
   $id=$this- getRequest()- getParam("id");
   $mycart=new MyCart();
   session_start();
   if($mycart- delProduct($_SESSION['loginuser']['id'],$id)){
   $this- view- info='产品从买东西车中删掉ok';
   $this- view- gourl="/shopping/showcart";
   $this- _forward('ok','global');
   }else{
   $this- view- info='产品从买东西车中删掉err';
   $this- view- gourl="/shopping/showcart";
   $this- _forward('err','global');
   }
   
  }
  public function addproductAction()
  {
   //获得产品id
   $bookid=$this- getRequest()- getParam('bookid');
   //建立mycart表实体模型
   $mycart=new MyCart();
   session_start();
   if($mycart- addProuduct($_SESSION['loginuser']['id'],$bookid)){
   $this- view- info='加上产品 ok';
   $this- view- gourl="/hall/gohallui";
   $this- _forward('ok','global');
   }else{
   $this- view- info='加上产品err';
   $this- _forward('err','global');
   }
  }
}


(十四) 加上查寻买东西车作用
  查询买东西四归属于选购个人行为,沒有结帐。因此恳求能够放到ShoppingController.php操纵器。
  在hall.phtml文档中的“查询买东西车”按键的goMyCart敲代码以下:
script language="javascript"
!--
 function goMyCart(){
 window.location.href="/shopping/showcart";
 }
//--
/script
(十五) 在views\scripts中加上文件目录Shopping
  并在这其中建立文档mycart.phtml,內容以下:
html
body
head
script language="javascript"
!--
 function confirmOrder()
 {
 window.location.href="/?type=confirmInfo";
 }
//--
/script
/head
h1 我的买东西车 /h1
form action="/shopping/updatecart" method="post"
table width="700px"
tr
td id /td
td 书名 /td
td 价钱 /td
td 出版发行社 /td
td 总数 /td
td 是不是删掉 /td
/tr
?php foreach ($this- books as $book){?
tr
td ?=$book['id']? /td
td ?=$book['name']? /td
td ?=$book['price']? /td
td ?=$book['publishHouse']? /td
input type='hidden' name='bookids[]' value= ?=$book['id']? /
td input type='text' name='booknums[]'  value=' ?=$book['nums']? ' /td
td a href='/shopping/delproduct?id= ?=$book['id']? ' 是不是删掉 /a /td
/tr
?php }?

tr
td colspan="6"
input type="submit" value="升级总数"/
买东西车总价格: ?=$this- total_price? 元
nbsp; a href='/hall/gohallui' 回到买东西服务厅 /a
/td
/tr
tr
td colspan="6"
input type="button" 清除买东西车" /
input type="button" value="转化成定单" /
/td
/tr
/table
/form
/body
/html

(十六) 删掉买东西车作用
  在mycart.phtml文档中加上是不是删掉的超级链接接,偏向 a href='/shopping/delproduct?id= ?php echo $book['id']? ' 是不是删掉 /a
  在实体模型mycart.php中加上以下编程设计编码。
 //从买东西车删掉产品
 function delProduct($userId,$id){
 if($this- delete("userid=$userId AND bookid=$id") 0){
 return true;
 }else{
 return false;
 }
 }
并在ShoppingController中加上个人行为:
//响应删掉产品的恳求
  public function delproductAction(){
   //获得$id
   $id=$this- getRequest()- getParam("id");
   $mycart=new MyCart();
   session_start();
   if($mycart- delProduct($_SESSION['loginuser']['id'],$id)){
   $this- view- info='产品从买东西车中删掉ok';
   $this- view- gourl="/shopping/showcart";
   $this- _forward('ok','global');
   }else{
   $this- view- info='产品从买东西车中删掉err';
   $this- view- gourl="/shopping/showcart";
   $this- _forward('err','global');
   }
  }

(十七) 电子邮件推送
  PHPMailer是一个用以推送电子器件电子邮件的PHP涵数包。
免费下载一个phpmailer的涵数包。
引进class.phpmailer.php class.pop3.php class.smtp.php
在必须推送电邮的编码中,添加以下编码 :

?php
require("class.phpmailer.php"); //免费下载的文档务必放到该文档所属文件目录
$mail = new PHPMailer(); //创建电子邮件推送类
//$mail- CharSet = "UTF-8";
$address ="";
$mail- IsSMTP(); // 应用SMTP方法推送
$mail- Host = ""; // 您的公司邮局网站域名
$mail- SMTPAuth = true; // 开启SMTP认证作用
$mail- Username = " "; // 邮局客户名(请填好详细的email详细地址)
$mail- Password = "1213456"; // 邮局登陆密码
$mail- Port=25;
$mail- From = " "; //电子邮件推送者email详细地址
$mail- FromName = "123456";
$mail- AddAddress("$address", "a");//收货人详细地址,能够更换成一切要想接受电子邮件的email邮箱,文件格式是AddAddress("收货人email","收货人名字")
//$mail- AddReplyTo("", "");

//$mail- AddAttachment("/var/tmp/file.tar.gz"); // 加上配件
//$mail- AddAttachment("d:/aa.txt"); // 加上配件
//$mail- IsHTML(true); // set email format to HTML //是不是应用HTML文件格式

$mail- Subject = "PHPMailer33贵阳市企业网站建设"; //电子邮件题目
$mail- Body="hello,world";
//$mail- Body = " h1 hello,shunping, 贵阳市企业网站建设您好! /h1 font color='red' this is content /font //电子邮件內容
//$mail- AltBody = "This is the body in plain text for non-HTML mail clients"; //额外信息内容,能够省去
if(!$mail- Send())
{
echo "电子邮件推送不成功. p
echo "不正确缘故: " . $mail- ErrorInfo;
exit;
}
echo "电子邮件推送取得成功4";
?

【强烈推荐阅读文章】
 手机软件设计方案和企业网站建设对策剖析
 第54讲:PHP smarty模版內建涵数
 第55讲:PHP smarty模版自定涵数
 第56讲:PHP smarty模版內部留言板留言本的完成
 第57讲:PHP smarty模版中自变量实际操作和自变量调整器
 第58讲:PHP smarty模版中內建涵数
 第59讲:PHP smarty模版中自定涵数
 第六0讲:PHP smarty配备文档、变量定义、自变量
 第六1讲:PHP smarty方式、高級特点
 第六2讲:PHP中zend framework基本原理剖析
 第六3讲:PHP中zend framework和数据信息库融合 
 第六4讲:PHP中zend framework案例——网络投票系统软件
 第六5讲:PHP中zend framework Zend_Db_Table详细说明
 第六6讲:PHP中zend framework 案例——买东西车
 第六7讲:php数据信息库程序编写圈套详细说明
 第六8讲:php中memcached缓存文件技术性的基本原理及安裝