前后台小程序

1. 前台添加菜单

<!--增加菜单前台页面-->
        <form name="menu" enctype="multipart/form-data" action="php/menu/addmenu.php" method="post">
            菜名: <input type="text" name="menuname" id="menuname" value="" /><br>
            价格: <input type="text" name="price" id="" value="" /><br>
            图片: <input type="file" name="pic" id="pic" value="" /><br>
            <input type="submit" name="submit" value="添加菜单"/>
        </form>

2. �后台接受请求,接受数据并创建menu数据库,将上传的数据存储到menu数据库

<?php
    //判断用户有没有输入
    if(!empty($_POST['submit'])) {
        //判定有没有上传图片
        if(!empty($_FILES['pic'])) {
            //后台需要检查上传类型(放置直接上传PHP文件)
            if($_FILES['pic']['type'] == "image/jpeg" || $_FILES['pic']['type'] == "image/png") {
                $path = "../../uploads/";
                $result = move_uploaded_file($_FILES['pic']['tmp_name'],$path.$_FILES['pic']['name']);
            }
            //比如要求增加菜单时一定要上传图片
            if($result) {
                $menuname = htmlspecialchars($_POST['menuname']);
                $price = floatval($_POST['price']); //转成浮点数
                $pic = $_FILES['pic']['name'];
                include "../common/mysql.php";
                $fields = array(
                    'name' => $menuname,
                    'price' => $price,
                    'picture' => $pic
                );
                insert($link, $fields, "menu");
                mysqli_close($link);
            }
        }
    }
?>
image.png

3. �前台发送数据,向后台请求刚才上传的数据,然后将获取到的数据遍历形成菜单界面

//使用Ajax获得菜单数据
var xhr = new XMLHttpRequest();
xhr.onload = function() {
    var menu = JSON.parse(this.responseText);
    createMenu(menu);
}
xhr.open("get","php/menu/listmenu.php");
xhr.send();
function createMenu(data) {
    line = "";
    for(i in data) {
        line += "<li><input type=\"checkbox\" name=\"menu_id[]\" value=\""+data[i].id+"\" /> <img width='50px' src=\"uploads/"+data[i].picture+"\"> <span id=\""+data[i].id+"\" >"+data[i].name+"</span><span id=\""+data[i].id+"\" >"+data[i].price+"</span>元 订购份数: <input type=\"text\" name=\"num_"+data[i].id+"\"/></li>"
        document.getElementById("menuUl").innerHTML = line;
    }
}

4. ��后台接受请求,打开menu数据库,将数据返回给前段

<?php
    //mysql.php  数据库操作函数库文件
    include "../common/mysql.php";
    $data = getAll($link, "*", "menu", "1=1");
    echo json_encode($data);
?>
image.png

5. ���前台注册界面

<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <body>
        <div id="nav"></div>
        <form action="php/member/register.php" method="post" name="form1">
            密  码: <input type="password" name="member_password" /> <br>
            确认密码: <input type="password" name="member_password_confirm" /> <br>
            用户姓名: <input type="text" name="member_name"/> <br>
            用户电话: <input type="text" name="member_mobile"/> <br>
            用户地址: <input type="text" name="member_address"/> <br>
            <input type="hidden" name="member" value="1" />
            <input type="button" name="btn" value="立即注册"/>
        </form>
    </body>
    <script type="text/javascript">
        $("#nav").load("tpl/nav.html");
        document.form1.btn.onclick = checkdata;
        var isOk = true;
        function checkdata() {
            if(document.form1.member_password.value != document.form1.member_password_confirm.value){
                alert("两次密码输入不一致");
                return false;
            }
                document.form1.submit();
        }
        function checkuser(value) {
            var xhr = new XMLHttpRequest();
            xhr.onload = function() {
                if(this.responseText == "fail") {
                    document.form1.btn.disabled = true;
                    document.form1.member_username.className = "error";
                }else {
                    document.form1.btn.disabled = false;
                    document.form1.member_username.className = "";
                }
            }
            var formData = new FormData();
            formData.append("member_username",value)
            xhr.open("POST","php/member/checkuser.php");
            xhr.send(formData);
        }
    </script>

6. ��注册用户的时候检测该用户名是否已经被注册,如果没被注册,可以注册

<?php
    //验证用户名的合法性
    if(!empty($_POST['member_username'])) {
        include "../common/mysql.php";
        $username = htmlspecialchars($_POST['member_username']);
        //查询该用户名是否已经存在
        $member = getOne($link,"*","member","member_username='".$username."'");
        //如果查询结果为空 表示没有相同的用户注册
        if(empty($member)) {
            echo "ok";
        }else {
            echo "fail";
        }
    }
?>

7. ��将可以注册的用户名即其他信息,插入到member数据表里面

<?php
    //会员注册
    if(!empty($_POST['member'])) {
        //引入数据库函数库
        include "../common/mysql.php";
        foreach($_POST as $key => $val) {
            $_POST[$key] = htmlspecialchars($val);
        }
        $member = array(
            'member_name' => $_POST['member_name'],
            'member_mobile' => $_POST['member_mobile'],
            'member_address' => $_POST['member_address'],
            'member_username' => $_POST['member_username'],
            'member_password' => sha1($_POST['member_password'])
        );
        insert($link, $member, 'member');
    }
?>
会员界面

8. �会员登录页面,将前台输入的用户名和密码传送到后台

<body>
        <div id="nav"></div><br>
        <!--登陆页面-->
        <form action="php/member/login.php" name="form1" method="post">
            用户名: <input type="text" name="username" /><br>
            密 码: <input type="password" name="password" /><br>
            <input type="submit" name="btn" value="立即登录"/>
        </form>
    </body>
    <script type="text/javascript">
        $("#nav").load("tpl/nav.html");
    </script>

9. �将前台输入的信息进行核实,如果信息不符合留在本页,如果符合,跳转到首页。并以此在member表中查找该会员信息,将会员用户名,名称,电话存储到Session里面,备用

<?php
    session_start();
    if(!empty($_POST['username']) && !empty($_POST['password'])) {
        include "../common/mysql.php";
        //对提交的数据进行预处理
        $username = htmlspecialchars($_POST['username']);
        $password = sha1($_POST['password']);
        $member = getOne($link,"*","member","member_username='".$username."' and member_password='".$password."'");
        if(!empty($member['member_username'])) {
            $_SESSION['member']['username'] = $member['member_username'];
            $_SESSION['member']['name'] = $member['member_name'];
            $_SESSION['member']['mobile'] = $member['member_mobile'];
            header("Location: /php/db/index.html");
        }else {
            header("Location: /php/db/login.html");
        }
    }
?>

10. ��判断用户是否登录,如果登录成功返回上述存储在Session里面的数据

<?php
    session_start();
    if(!empty($_SESSION['member'])) {
        //将用户登录信息输出到前台
        echo json_encode($_SESSION['member']);
    }else {
        //nologin  表示用户尚未登录
        echo json_encode(array("no login"));
    }
?>

11. �前台想后台发送请求,如果用户登录,界面显示 欢迎"+data.name+"来到商城 <a href=''>用户中心

<script type="text/javascript">
            $('#nav').load("tpl/nav.html");
            $.get("php/member/member_status.php",{},function(data) {
                console.log(data);
                if(typeof(data.name) != "undefined") {
                    $('#member_status').html("欢迎"+data.name+"来到商城 <a href=''>用户中心</a>");
                }
            },"json");
        </script>

12. �前台将选中的菜品和分数传送到后台

    var xhr = new XMLHttpRequest();
    xhr.onload = function() {
        document.getElementById("tips").innerHTML = this.responseText;
    }
    var formData = new FormData();
    formData.append("menu",JSON.stringify(userSelected));
    xhr.open("POST","php/orders/dingdan.php");
    xhr.send(formData);

13. �后台接受数据,遍历数组,将数据插入到listorder表中

<?php
    session_start();
    //将用户订餐数据记录到数据库
    //接受提交的订单数据
    if(!empty($_POST['menu'])) {
        include "../common/mysql.php";
        //$_POST['menu']是前台传来的JSON串
        //json_decode 将JSON字符串转变成数组
        $menu = json_decode($_POST['menu'],true);
        print_r($menu);
        //用户选择的checkbox - menu_id
        foreach($menu as $key => $val) {
            $menu_id = $val['menu_id'];
            //订购的份数 num_id
            $amount = intval($val['amount']);
            echo "订单的菜单id=".$menu_id."<br>";
            echo "订单的份数amount=".$amount."<br><br>"; 
            $row = getOne($link, "name,price","menu","id=".$menu_id);
            $fields = array(
                "menu_name" => $row['name'],
                "menu_price" => $row['price'],
                'amount' => $amount,
                'createDate' => date("Y-m-d H:i:s"),
                'name' => $_SESSION['member']['name'],
                'number' => $_SESSION['member']['mobile']
            );
            insert($link, $fields, 'orderlist');    
        }
    }
?>
image.png
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容