制作点餐系统中的点餐功能
点餐功能和购物差不多,把选中的商品存到session内,然后再显示,下单
先看一下操作的样式
首先登陆
点击任何一个都可以弹出这个窗口,这个窗口的制作在前几篇博客中有它的源代码,稍作更改就可以
登陆后是这样的
点击几样餐品
可以通过删除,来减数量
点击下单
点餐的详情便在另一个网页显示
再来看代码,
桌号是通过数据库遍历显示的,已点餐桌号为黄色,未点餐的桌号为灰色,所以数据库内它还有个状态
来看输出桌号的部分代码
然后为其添加样式
#canzhuo{ font-size:40px; color:#FFF; font-weight:bold;width:150px; height:150px; float:left; margin:5px; background-image:url(../%E5%9B%BE%E7%89%87/QQ%E5%9B%BE%E7%89%8720170216123120.jpg); background-repeat:no-repeat; background-size:150px 150px; text-align:center; vertical-align:middle; line-height:150px;} #canzhuo1{ font-size:24px;width:150px; height:150px; float:left; margin:5px; background-color:#FC3; text-align:center; vertical-align:middle; line-height:150px;} .aa{ width:200px; height:50px; font-size:16px; float:left; margin:5px; background-color:#3F6;text-align:center; vertical-align:middle; line-height:50px} #aa:hover{ background-color:#9FC; cursor:pointer} .aa1{ width:200px; height:50px; font-size:16px; float:left; margin:5px; background-color:#999;text-align:center; vertical-align:middle; line-height:50px}
js部分
<script type="text/javascript"> //弹出登录框 $(document).ready(function(e) { $('.aaa').click(function(){ var zh = $(this).text(); var html = "<br><form action='./diancanchuli.php' method='post'><input type='text' hidden='hidden' name='zhuohao' value='"+zh+"'/><div style='color:#000; font-size:20px'><b>工 号:</b> <input type='text' name='code' /></div><br/><div style='color:#000; font-size:20px'><b>服务员:</b><input type='text' name='mz' /></div><br/><div><input type='submit' value='登录' /></div></form>"; var button ="<input hidden='hidden' value='确定' /><input hidden='hidden' value='取消' />"; var win = new Window({ width : 400, //宽度 height : 300, //高度 title : '点餐登录', //标题 content : html, //内容 isMask : false, //是否遮罩 buttons : button, //按钮 isDrag:true, //是否移动 }); }) }); $(document).ready(function(e) { $('.aaaa').click(function(){ var zh = $(this).text(); var html = "<br><form action='./diancanchulia.php' method='post'><input type='text' hidden='hidden' name='zhuohao' value='"+zh+"'/><div style='color:#000; font-size:20px'><b>工 号:</b><input type='text' name='code' /></div><br/><div style='color:#000; font-size:20px'><b>服务员:</b><input type='text' name='mz' /></div><br/><div><input style='width:50px; height:30px' type='submit' value='登录' /></div></form>"; var button ="<input hidden='hidden' value='确定' /><input hidden='hidden' value='取消' />"; var win = new Window({ width : 400, //宽度 height : 300, //高度 title : '点餐登录', //标题 content : html, //内容 isMask : false, //是否遮罩 buttons : button, //按钮 isDrag:true, //是否移动 }); }) });
当然在body标签上面还要引入jquery、已经关于弹出框的样式以及js文件,在前几篇博客中有讲
完成后,便可以做第二个页面,出现了两个处理页面
一个是diancanchuli.php,还有一个是diancanchulia.php
一个是给空桌点餐,一个是加餐,要连接的网页不一样,所以要分着执行
今天先讲空桌点餐
处理页面的源代码
<?php session_start(); //用的session来储存数据 include("DBDA.php"); $db = new DBDA(); $yh = $_POST["code"]; $mz = $_POST["mz"]; $sql = "select name from users where code = '{$yh}'"; $attr = $db->Query($sql); $name = $attr[0][0]; $zhuohao=$_POST["zhuohao"]; if(!empty($mz) && $mz==$name) //这里是密码非空,并且密码等于用于输入的密码 { $_SESSION["zh1"]=$zhuohao; $_SESSION["code"] = $yh; //session中存的用户名等于用户输入的用户名 header("location:diancan2.php"); } else { echo "登录失败!"; }
接下来做登陆后出现的点餐页面
先来看点餐页面已点餐部分的php代码
<form action="xiadan.php" method="post"> <?php session_start(); $yh = $_SESSION["code"]; $zh1=$_SESSION["zh1"]; include("DBDA.php"); $db = new DBDA(); $sql= "select name from users where code='{$yh}'"; $attr = $db->Query($sql); echo "<h3>桌号:$zh1 服务人员:{$attr[0][0]}<h3>"; ?> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>名称</td> <td>单价</td> <td>数量</td> <td>删除</td> </tr> <?php //session_start(); //include ("DBDA.php "); //$db = new DBDA(); if(!empty($_SESSION["gwc"])) { $attr = $_SESSION["gwc"]; foreach($attr as $k=>$v) { $sql = "select * from caidan where code='{$v[0]}'"; //执行 $attra = $db->Query($sql); //var_dump ($attra); echo "<tr> <td>{$attra[0][2]}</td> <td>{$attra[0][0]}</td> <td>{$v[1]}</td> <td><a href='canpinshanchu.php?sy={$k}'>删除</a></td> </tr>"; } //var_dump($_SESSION["gwc"]); } ?> </table> <input id="f1" type="submit" value="下单" /> </form>
通过session来传,以及储存数据
餐品也是通过遍历数据库来显示出来的
引用了bootstrap的标签页,那里的代码就不显示了,主要打一下php部分的
<?php //include("DBDA.php"); //$db = new DBDA(); $sql = "select * from caidan where fcode =('1101')"; $attr = $db->Query($sql); foreach($attr as $v) { $v1 = $v[4]; $sql1 = "select isok from caidan "; $attr1 = $db->StrQuery($sql1); if($attr1=$v1) { echo "<div id='aa1'>{$v[2]}</div>"; } else { echo "<div id='aa'><a href='gwc.php?code={$v[1]}'>{$v[2]}</a></div>"; } } ?>
只展示了一种餐品,所有的餐品都在一张表中,所以使用的code和fcode来给它们分类
再来看gwc.php代码
<?php session_start(); //将传过来的水果加到购物车 $code = $_GET["code"]; //$_SESSION["gwc"]; //1.如果是第一次点击加购物车,做一个二维数组扔到SESSION里 //2.如果不是第一次点击加购物车并且该水果第一次点击,做一个该水果的一维数组扔到SESSION的二维数组里面 //3.如果不是第一次点击加购物车并且该水果不是第一次点击,将SESSION数组里面该水果的数量加1 if(empty($_SESSION["gwc"])) { //1.如果是第一次点击加购物车,做一个二维数组扔到SESSION里 $attr = array( array($code,1) ); $_SESSION["gwc"] = $attr; } else { //判断该水果代号是否在SESSION数组里面出现 $attr = $_SESSION["gwc"]; if(PanDuan($code,$attr)) { //3.如果不是第一次点击加购物车并且该水果不是第一次点击,将SESSION数组里面该水果的数量加1 /*foreach($attr as $v) { if($code == $v[0]) { $v[1] = $v[1]+1; } }*/ for($i=0;$i<count($attr);$i++) { if($code == $attr[$i][0]) { $attr[$i][1]++; } } $_SESSION["gwc"]=$attr; } else { //2.如果不是第一次点击加购物车并且该水果第一次点击,做一个该水果的一维数组扔到SESSION的二维数组里面 $arr = array($code,1); $attr[] = $arr; $_SESSION["gwc"]=$attr; } } //判断v是不是在arr里面出现 function PanDuan($v,$arr) { $n = 0; foreach($arr as $a) { if($v == $a[0]) { $n++; } } if($n==0) { return false; } else { return true; } } header("Location:diancan2.php");
这个处理页面是可以通用的,第一次使用它,是做的一个购买水果网,中间的内容是不需要改的,只需要改最后一句就好了
点餐页面的核心代码都说了,其余的就是一些样式,还有要引入bootstrap的一些文件,在之前的博客中也有提到
再来看处理页面,也就是下单页面
<?php session_start(); $yh = $_SESSION["code"]; include("DBDA.php"); $db = new DBDA(); $sqlo= "select name from users where code='{$yh}'"; $attro = $db->Query($sqlo); //session_start(); //include("DBDA.php"); //$db = new DBDA(); $zh1=$_SESSION["zh1"]; $attr = $_SESSION["gwc"]; $sqlv = "delete from yidiancan where code = '{$zh1}' "; $db->Query($sqlv,0); foreach($attr as $v) { $sql = "select * from caidan where code='{$v[0]}'"; // ////执行 $attra = $db->Query($sql); $danjia = "{$attra[0][0]}"; $fuwuyuan = "{$attro[0][0]}"; //发送人,也就是取得用户的姓名 $shijian = date('Y-m-d H:i:s'); //当前时间 // ////造连接对象 //$db = new MySQLi("localhost","root","726","test4"); ////写SQL语句 // $sqll = "update caidan set number=number+{$v[1]} where code='{$v[0]}' "; $db->Query($sqll,0); //执行语句 $sqli = "insert into yidiancan values('','{$zh1}','{$v[0]}','{$danjia}','{$v[1]}','{$fuwuyuan}','{$shijian}')"; $db->Query($sqli,0); $sql = "update diancan set isok='1' where name='{$zh1}'"; $db->Query($sql,0); //执行语句 } header("Location:yidiancan.php");
session开启把所有的数据整理好,交给每一个变量
然后转到yidiancan.php
<table width="80%" border="1" cellpadding="0" cellspacing="0" style="margin-left:10px"> <tr> <td>餐品</td> <td>单价</td> <td>数量</td> <td>服务员</td> <td>时间</td> </tr> <?php session_start(); $zh1=$_SESSION["zh1"]; include("DBDA.php"); $db = new DBDA(); $sql =" select * from yidiancan where code='$zh1'"; $attr = $db->Query($sql); foreach( $attr as $v) { $cha="select name from caidan where code='{$v[2]}'"; $cp=$db->Query($cha); echo " <tr> <td>{$cp[0][0]}</td> <td>{$v[3]}</td> <td>{$v[4]}</td> <td>{$v[5]}</td> <td>{$v[6]}</td> </tr>"; } //session_start(); //include("DBDA.php"); //$db = new DBDA(); $attr = $_SESSION["gwc"]; $sum =0; foreach($attr as $v) { $sql = "select * from caidan where code='{$v[0]}'"; // ////执行 $attra = $db->Query($sql); //var_dump($attra); $danjia = "{$attra[0][0]}"; //var_dump($v[1]); $sum=$sum+($danjia*$v[1]); } echo "<div id='s1' style='margin-left:10px'>总金额:{$sum}元</div>"; ?> </table>
样式自己去加上就ok了!
因为要连接数据库,所以在尝试前先把表建好
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?