2018夏季小学期项目聚客外卖核心功能的实现思路

By | 2019年9月18日

@版权声明 本文为博主原创文章,未经博主允许不得转载 https://www.cnblogs.com/dontang-blog/p/9687356.html 

撰写目的:演示聚客外卖核心程序:提交订单的整个流程;

编写商家展示商品页面和顾客提交订单页面有两个思路:

思路一:有多少个商家商品就写多少个相对应的页面,以及相对应的提交订单页面。

思路二:因为这两个页面的框架基本相同,即页面模板是一样的,所以完全可以通过后台MySQL数据库创建出商家页面和商品页面,通过数据库查询语句展示不同的商品和商家页面。

 

很显然,思路一不仅浪费资源,需要创建出大量的重复页面,而且一旦商家修改删除或增加商品,工作量巨大,难以实现,可以说完全行不通。

思路二灵活易变,只需要两个网页模板以及相对应的数据库便可以实现展示销售大量商品,而且商家操作商品完全不用维护这两个页面,因为后台数据库才是数据的来源。

 

下面逐步介绍具体流程:

第一步:创建商品和订单数据库

 

                                                                               图 1 创建的商品数据库

 

 

                                                                                        图 2创建订单数据库

 

第二步:搭建商品展示和订单提交页面框架

 

                          图 3 商品展示框架图

 

                           图  4订单展示框架图

 

说明:图3 4中打红箭头部分的数据不是写死在网页上的,而是通过后台数据库查询操作展示在上面的。意思就是说,利用商品独有的ID 主码传输到商品展示页面,再利用连表查询SQL语句即可实现不同商家展示销售不同商品并接收订单的功能。

 

 

第三步  后台关键技术代码实现

 

1 //1:使用数据库连表查询完成商品相关信息的获取
2 #这里编写数据库语句
3 $query="SELECT * from goodsinfo join bussnessinfo on  goodsinfo.bussnessID= bussnessinfo.bussnessID and goodsId='1'";
4 //2:将相关信息通过商家模板页面输出展示给客户
5 $result1=mysql_query($query);
6 //将数据转化为数组
7 $goodsArr=mysql_fetch_array($result1);

 

上面的代码实现了id1的商品的相关信息的获取,用到了连表查询,因为要获取商品所属的商家

 

 1     <div class="goods_View_img">
 2     <div class="goods_View_left">
 3     <img src="<?php echo $goodsArr["goodsImgSrc"]?>"  onmousemove="bigImg(this)" onmouseout="normalImg(this)" width="551px" height="350px"/>
 4 </div>
 5 <div class="goods_View_right">
 6     <h2 style="margin-top: 0px;"><?php echo $goodsArr["goodsName"] ?></h2>
 7     <table width="100%" height="333px" style="color: black;margin-top:-28px">
 8     <tr><td colspan="3" bgcolor=""  style=" border: 2px;  color: orangered;text-align: left;font-size: 39px"><?php echo $goodsArr["goodsPrice"] ?></td></tr>
 9         <tr><td bgcolor="white" style="color: #A9A9A9"><?php echo $goodsArr["salesNum"] ?>人已购买</td><td bgcolor="white" style="color: dimgrey" colspan="2">好评人数:<?php echo $result2[0] ?></td></tr>
10         <tr valign='bottom'><td bgcolor='white' style='font-size: small;color: #A9A9A9'>销售起始日期:<?php echo $goodsArr["goodsdate"]  ?></td><td bgcolor="white" style="color: dimgrey" colspan="2">中评人数:<?php echo$result3[0]?></td></tr>
11         <tr valign='top'><td bgcolor='white' style='font-size: small;color: #A9A9A9'>
12                月销量:<?php echo $goodsArr["salesNum"] ?><br>
13                 <h4>剩余库存量: <?php echo $goodsArr["goodsKuCunliang"] ?></h4>
14             </td><td bgcolor="white" style="color: dimgrey"><div style="margin-top: 18px">差评人数:<?php echo$result4[0]?></div></td></tr>
15         <tr><td valign="bottom" bgcolor="white">
16     <a href="../actions/userSelfCollectAction.php?goodsID=<?php echo $goodsArr["goodsId"]?>"><button style=" height: 40px; margin-top: 20px;  float: left" type="button" class="buy_butn_S">收藏商品</button></a>
17         </td>
18             <td valign="bottom" bgcolor="white">
19                 <a href="../goodsView/orderformView.php?goodsNum=<?php echo $goodsArr["goodsId"]?>"><button style=" height: 40px; margin-top: 20px;  float: right" type="button" class="buy_butn_S">立刻抢购</button></a></td></tr>
20     </table>
21 </div>
22 </div>

 

上面的代码实现了向客户展示商品内容的功能。

HTML通过表单传输数据时,经常会有一些数据必须传输到表单,但是不需要展示给用户看,这时候有一个小技巧非常管用:定义一个input标签,type=”hidden” 这句话的意思是隐藏该标签,并设置其name value值。以便将数据这些隐藏数据传输到后台。

第四步  用户点击提交后进行的操作

 

 1 <?php
 2 header("Content-type: text/html; charset=utf-8");
 3 include 'mySQL_connectAction.php';
 4 session_start();
 5 @$userName=$_SESSION['user'];//订单用户
 6 @$goodId=$_POST["goodsId"];//商品ID
 7 
 8 @$orderDate=date('Y-m-d H:i:s',time()+6*60*60);//订单时间为当前时间
 9 
10 @$orderNum=$_POST["goodnum"];//订购数量
11 @$SumPrice=$_POST["Sum_Pri"];//合计价格
12 
13 $orderState="待付款";
14 @$flagState=$_POST["orderState"];

 

用户一旦点击提交订单,后台就会获取订单的相关信息,其中订单日期是直接用获取时间函数得到的。当然,这里要进行一个判断,用户是否登陆,若没有,则无法进行订单信息插入数据库操作。

 

 

if(!$userName){
    echo "<script language=\"JavaScript\">alert(\"您还未登陆,请先登陆,再来购买商品\");</script>";
    echo "<script>;location.href='" . $_SERVER["HTTP_REFERER"] . "';</script>";

}else {
if ($flagState == "立即付款") {// 代表用户打算立即付款
    $sql = "select userMoney from jukeuserinfo where username='$userName'";
    $result1 = mysql_query($sql);
    $arr = mysql_fetch_array($result1);
    if ($arr['userMoney'] < $SumPrice) {//如果用户钱不够
        echo "<script language=\"JavaScript\">alert(\"抱歉!您的余额不足,无法付款\");</script>";
        echo "<script>;location.href='" . $_SERVER["HTTP_REFERER"] . "';</script>";
    } else {
        $goodsSql = "select * from goodsinfo where goodsId='$goodId'";
        $goodsresult = mysql_query($goodsSql);
        $goodsarr = mysql_fetch_array($goodsresult);
        if ($goodsarr['goodsKuCunliang'] < $orderNum) {
            echo "<script language=\"JavaScript\">alert(\"抱歉!商品库存量不足,无法付款!\");</script>";
            echo "<script>;location.href='" . $_SERVER["HTTP_REFERER"] . "';</script>";
        } else {

                $orderState = "已付款";
                $exec = "insert into goodsorderinfo(username,goodsId,orderDate,orderNum,sumPrice,orderState) 
                values('$userName','$goodId','$orderDate','$orderNum','$SumPrice','$orderState')";
                $result = mysql_query($exec);
            if ($result) {
                $newMoneyS = (double)$arr['userMoney'] - (double)$SumPrice;
                $newMoney = (string)$newMoneyS;
                $sqlMoney = "update jukeuserinfo set userMoney='$newMoney' where username='$userName'";
                $resultSmoney = mysql_query($sqlMoney);

                $newKucunLiang=(int)$goodsarr['goodsKuCunliang']-(int)$orderNum;//库存量减少
                $NewKuCunLiang=(string)$newKucunLiang;
                $sqlgoods="update goodsinfo set goodsKuCunliang='$NewKuCunLiang' where goodsId='$goodId'";
                $resultKucunliang=mysql_query($sqlgoods);



                $sqlSals="select salesNum from goodsinfo where goodsId='$goodId'";
                $salsResult=mysql_query($sqlSals);
                $salsArr=mysql_fetch_array($salsResult);

                $newSalsNum=(int)$salsArr["salesNum"]+(int)$orderNum;//销量增加
                $NewSalsNum=(string)$newSalsNum;
                $sqlSalsNum="update goodsinfo set salesNum='$NewSalsNum' where goodsId='$goodId'";
                $resulSalsNum=mysql_query($sqlSalsNum);

                if ($resultSmoney&&$resultKucunliang&&$resulSalsNum) {
                    echo "<script language=\"JavaScript\">alert(\"恭喜您已经成功付款\");</script>";
                    echo "<script>;location.href='" . $_SERVER["HTTP_REFERER"] . "';</script>";
                } else {
                    echo "<script language=\"JavaScript\">alert(\"抱歉,付款失败\");</script>";
                    echo "<script>;location.href='" . $_SERVER["HTTP_REFERER"] . "';</script>";
                }
            }
        }
    }
}else {//默认状态阀值为0,当用户点击了取消,订单只能被提交,而不会扣除用户余额
$exec = "insert into goodsorderinfo(username,goodsId,orderDate,orderNum,sumPrice,orderState) 
values('$userName','$goodId','$orderDate','$orderNum','$SumPrice','$orderState')";
        $result = mysql_query($exec);
        if ($result) {
            echo "<script language=\"JavaScript\">alert(\"提交订单成功\");</script>";
            echo "<script>;location.href='" . $_SERVER["HTTP_REFERER"] . "';</script>";
        }else{
            echo "<script language=\"JavaScript\">alert(\"提交订单失败\");</script>";
            echo "<script>;location.href='" . $_SERVER["HTTP_REFERER"] . "';</script>";
        }
    }
}
?>

总结

整个流程可以简化为:用户点击相关商品进入商品展示页面  —->      

后台获取该商品的ID进行数据库连表查询展示该商品的信息给用户    —>     

用户看到商品信息点击立即购买   —>     后台获取到用户购买的商品ID 购买数量,购买总价并将数据传输到addOrderAction后台页面       

 

后台进行数据库插入操作。

Category: PHP

发表评论