2014-01-24 13:35:39 关键词:zendframework,购物车,贵阳网站建设 毕业设计 贵阳网站建设

《一步一步跟我学PHP》第66讲:PHP中zend framework 实例——购物车

来源: 百优资源网 作者:管理员

核心提示:购物车系统是一个比较综合的系统,主要完成完成购物、下订单和查询订单、 发送电子邮件262928596@qq.com等功能。希望对贵阳网站建设的朋友有所帮助。
已被点击
查看
收藏
  • 开心网
  • 人人网
  • i贴吧
分享
分享

| 服装连锁店ERP管理系统

服装连锁店ERP管理系统可以高效完成物流配送,考勤管理,工资管理,员工管理,报表管理,陈列管理等功能,是服装连锁企业理想的选择。[详细]

手动刷新 更新时间:14:08:37
---------------------------------------------

---------------------------------------------

《一步一步跟我学PHP》第66讲:PHP中zend framework 实例——购物车

描述:购物车系统是一个比较综合的系统,主要完成完成购物、下订单和查询订单、 发送电子邮件262928596@qq.com等功能。希望对贵阳网站建设的朋友有所帮助。

一、zf 版购物车系统-发送电子邮件
    PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括:
  *.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址。
  *.支持多种邮件编码包括:8bit,base64,binary和quoted-printable。
  *.支持SMTP验证。
  *.支持冗余SMTP服务器。
  *.支持带附件的邮件和Html格式的邮件。
  *.自定义邮件头。
  *.支持在邮件中嵌入图片。
  *.调试灵活。
  *.经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等。
  *.可运行在任何平台之上。
二、zf 版 购物车系统介绍
    购物车系统是一个比较综合的系统。 完成购物功能。下订单和查询订单。 发送电子邮件262928596@qq.com
    系统需求分析:
    通过对功能的分析,得出本系统的功能有:系统登录、浏览商品(要考虑分页)、把商品添加到购物车,购物车可以对购买的商品进行CRUD操作,更新(比如更新数量)、删除操作。可以计算出商品总价,下订单,清空购物车等功能。发送电子邮件通知(使用phpmail)。

软件设计,贵阳网站建设


软件设计,PHP教程


软件设计,毕业设计


软件设计,毕业论文

软件设计,贵阳网站建设


软件设计,毕业设计


软件设计,贵阳网站建设



三、zf 版购物车系统-数据库设计
    根据分析,本系统有用户表、商品表(商品类别表)、订单表(通常设计为2张表,1个叫主表,1个叫订单细节表)。
    在命令提示符下,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@qq.com','139454555',1);
insert into  users  values(101,'张学友',md5(123456),'158393237@qq.com','139445452',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)
)

    订单表(有讲究,数据表设计模式,如何减少冗余....)
    订单表分为两个表:
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);
  $db->query('SET  NAMES  UTF8');
  Zend_Db_Table::setDefaultAdapter($db);
 }
 }
(四)配置投票系统虚拟主机ebay.com
     在httpd-vhosts.conf文件中添加。并配置hosts文件中再添加127.0.0.1 ebay.com,设置路径时记得写public目录,将默认文件设置为index.php。配置成功后,重新启动apache。在IE地址栏输入http:// ebay.com/即可看到欢迎页面。
<VirtualHost *:80>
    DocumentRoot "D:/wwwroot/PHP/myenv/Apache2.2/htdocs/votesys/shopping/public"
    ServerName ebay.com
    #这里配置欢迎首页面
    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        ebay.com
(五) 配置数据库
    配置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.'/models/Users.php';
/*
 * 该控制器专门用于响应登录和退出请求
 */
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.'/models/Book.php';
<?php
require_once 'BaseController.php';
require_once APPLICATION_PATH.'/models/Book.php';
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" onclick="goMyCart();" 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++){
    $bookinfo=$res[$i];
    $this->total_price+=$bookinfo['price']*$bookinfo['nums'];
   }
   return $res;
  }
 }
 }
 
(十三) 添加控制器ShoppingController.php
<?php
require_once 'BaseController.php';
require_once APPLICATION_PATH.'/models/MyCart.php';
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="/myshopping/ConfirmInfo.php?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" onclick="" value="清空购物车" />
<input type="button" onclick="confirmOrder();" 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 ="262928596@qq.com";
$mail->IsSMTP(); // 使用SMTP方式发送
$mail->Host = "smtp.qq.com"; // 您的企业邮局域名
$mail->SMTPAuth = true; // 启用SMTP验证功能
$mail->Username = "262928596@qq.com "; // 邮局用户名(请填写完整的email地址)
$mail->Password = "1213456"; // 邮局密码
$mail->Port=25;
$mail->From = "262928596@qq.com "; //邮件发送者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模板中自定义函数
 第60讲:PHP smarty配置文件、常量、变量
 第61讲:PHP smarty方法、高级特性
 第62讲:PHP中zend framework原理分析
 第63讲:PHP中zend framework和数据库整合 
 第64讲:PHP中zend framework实例——投票系统
 第65讲:PHP中zend framework Zend_Db_Table详解
 第66讲:PHP中zend framework 实例——购物车
 第67讲:php数据库编程陷阱详解
 第68讲:php中memcached缓存技术的原理及安装

声明:本站内容凡注明"来源:百优资源网"的所有文字、图片等资料,版权均属百优资源网原创,任何媒体、网站或个人不得转载、链接、转贴或以其他方式复制发布/发表。本网站部分资源来源于网络,如果有侵犯你的权利,请联系本站删除。

网友评论
用户名 密码 自动登录 登录
*网友评论仅供其表达个人看法 发表评论
  • 软件设计 196
    使用VC++加载图片技巧

    软件设计 | 使用VC++加载图片技巧

    在界面添加图片,在VB、delphi等软件设计语言中很简单,但是在VC++中是很难实现,这过程不但要对图片进行导入,还要显示,最后要清除内存。下面小编对这个方法进行了整理,直接复制就可以实现使用VC++加载图片技巧了。

    毕业设计 683
    毕业设计论文智能管理系统设计的意义

    毕业设计 | 毕业设计论文智能管理系统设计的意义

    毕业设计(论文)是高等院校人才培养过程中不可或缺的重要环节,一直受到各高等学校的高度重视。毕业论文网上管理是高校信息化的一个重要体现,本文对毕业设计论文智能管理系统设计的意义进行介绍。

    毕业论文 812
    西昊人体工学椅 重新定义“好椅子”的标准

    毕业论文 | 西昊人体工学椅 重新定义“好椅子”的标准

    高端椅业领导者西昊人体工学电脑椅以其极具人性关怀的产品对好椅子的标准进行了重新定义。西昊人体工学椅创办于1999年,一直专注于人体工学椅的研发、制造和销售,最初产品主要销往欧美

860010-1102010400