HTML+CSS实训——Day13——学习MySQL

news2024/12/24 2:24:13

前言

已经过去三周了,现在是第四周,之前所有的数据都是在本地的,还没有学到数据库,这周开始使用数据库了。
我自用的是navicat

连接服务器

我们新建一个连接,写上主机和端口号,再写上用户名和密码就可以了。

server.js

修改登录与注册的信息,要先安装mysql的库

npm i mysql
var mysql = require('mysql')
// 获取数据库连接对象
var pool = mysql.createPool({
  connectionLimit: 15, //连接池大小,可省略
  host: 'yourip', //数据库服务器的主机地址,可省略
  port: yourport, //数据库服务器的端口号,可省略
  user: 'youruser', //登录数据库的用户名,不能省略!!
  password: 'yourpwd', //登录数据库的用户密码,默认值是''
  database: 'yourdb' //要打开哪个数据库,不能省略
})


app.post('/login', (req, res) => {
  // 获取请求参数,因为是post请求,所以用req.body
  var phone = req.body.phone
  var upwd = req.body.upwd
  // 连接数据库做查询操作
  // 要执行的sql命令,?是占位符,根据手机号和密码查询用户
  var sql = 'SELECT * FROM zd_user WHERE phone=? AND upwd=?'
  // 通过数据库链接对象执行sql命令
  pool.query(sql, [phone, upwd], (err, result) => {
    // err 是报错
    console.log(err)
    // result 是执行sql命令的结果
    console.log(result)
    if (result.length == 1) {
      res.send({ code: 200, msg: '登录成功', uid: result[0].uid })
    } else {
      res.send({ code: 201, msg: '账号或密码不正确' })
    }
  })
})

// 数据库:用来存储信息的仓库
// SQLserver  Oracle  MySQL
app.post('/register', (req, res) => {
  var phone = req.body.phone
  var upwd = req.body.upwd
  // 现根据手机查询用户,判断该手机号是否注册过
  var sql = 'SELECT * FROM zd_user WHERE phone=?'
  pool.query(sql, [phone], (err, result) => {
    if (result.length >= 1) {
      res.send({ code: 201, msg: '该手机号已经被注册' })
    } else {
      // 执行sql命令,把用户信息插入到数据库
      var sql =
        'INSERT INTO zd_user VALUES(NULL,?,NULL,?,"img/avatar/default.jpg",NULL)'
      pool.query(sql, [phone, upwd], (err, result) => {
        res.send({ code: 200, msg: '注册成功' })
      })
    }
  })
})

小海豚变成绿色就代表连接成功了

reg.html

再写一个注册的界面

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

  <link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">
  <script>
    document.documentElement.style.fontSize = window.screen.width / 10 + 'px'
  </script>
  <!-- 引入vue文件 -->
  <script src="./js/js/vue.js"></script>
  <title></title>
</head>

<body>
  <div id="app">
    phone:<input type="text" v-model="phone"> <br>
    upwd:<input type="text" v-model="upwd"> <br>
    <button @click="reg()">注册</button>
  </div>

  <script>
    var vm = new Vue({
      el: "#app",
      data: {
        phone: '',
        upwd: ''
      },
      methods: {
        reg() {
          fetch('http://127.0.0.1:3000/register',
            {
              method: 'POST',
              body: JSON.stringify({ phone: this.phone, upwd: this.upwd }),
              headers: { 'Content-Type': 'application/json' }
            }).then(res => res.json()).then(res => {
              console.log(res)
            })
        }
      },
    })
  </script>
</body>

</html>

collect.html

添加一个收藏的界面,可以收藏你选中的歌曲

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">
  <script>
    document.documentElement.style.fontSize = window.screen.width / 10 + 'px'
  </script>
  <!-- 引入vue文件 -->
  <script src="./js/js/vue.js"></script>
  <title></title>
</head>

<body>
  <div id="app">
    <div v-for="(item,i) of collect">
      {{ i+1 }} => {{ item.title }} <button @click="rmCollect(item.sid)">取消收藏</button>
    </div>
  </div>

  <script>
    var vm = new Vue({
      el: "#app",
      data: {
        collect: []
      },
      methods: {
        rmCollect(sid) {
          var uid = localStorage.getItem('uid')
          fetch('http://180.76.143.181:3000/collect/remove?uid=' + uid + '&sid=' + sid)
            .then(res => res.json()).then(res => {
              console.log(res)
              // 刷新页面
              location.reload()
            })
        }
      },
      mounted() {
        var uid = localStorage.getItem('uid')
        fetch('http://180.76.143.181:3000/collect/list?uid=' + uid).then(res => res.json()).then(res => {
          console.log(res)
          this.collect = res.data
        })
      },
    })
  </script>
</body>

</html>

order.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>order</title>
    <link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">
    <link rel="stylesheet" href="css/order.css">
    <script src="./js/js/vue.js"></script>
    <script>
        document.documentElement.style.fontSize = window.screen.width / 10 + 'px'
    </script>
</head>

<body>

    <body>
        <div id="app">

            <div class="top-bar">
                <i class="fa fa-chevron-left"></i>
                <span>排行榜</span>
                <img src="./img/topbar-img.png" alt="">
            </div>

            <div class="bangdan">
                <div class="title">榜单推荐</div>
                <div class="box">
                    <div class="item" v-for="item of recommend">
                        <div>
                            <span>{{ item.lname }}榜</span>
                            <span>每月更新</span>
                        </div>
                        <span>硬地{{ item.lname }}音乐榜</span>
                    </div>
            </div>
                                <div class="guanfang">
                        <div class="title">官方榜</div>
                        <div class="box">
                            <div class="item" v-for="item of official">
                                <div class="left">
                                    <span>{{ item.lname }}榜</span>
                                    <span>每天更新</span>
                                </div>
                                <div class="right">
                                    <div v-for="(song,i) of item.songs">
                                        {{ i+1 }}. {{ song.title }}...
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

        </div>
        <script>
            var vm = new Vue({
                el: "#app",
                data: {
                    recommend: [],
                    official: []
                },
                mounted() {
                    fetch('http://180.76.143.181:3000/list/list').then(res => res.json()).then(res => {
                        console.log(res)
                        this.recommend = res.data.recommend
                        this.official = res.data.official
                    })
                },
            })
        </script>
    </body>

</html>

我们把排行榜和收藏都用到了服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【新版】系统架构设计师 - 计算机系统基础知识【补充】

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 计算机系统基础知识【补充内容】计算机语言多媒体系统工程霍尔的三维结构切克兰德方法并行工程方法综合集成法WSR&#xff08;物理-事理-人理&#xff09;系统方法系统工程生命周期7阶段生命周期方…

23年软件测试前景和出路?新人入行测试怎样走“正确“的路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 现在面试&#xf…

Java IO 学习总结(一)输入流/输出流

前言&#xff1a; 学习IO流&#xff0c;记录并分享。文章如有错误&#xff0c;恳请指正。 Java IO流的类图&#xff1a; 1、什么是 Java IO 流&#xff1f; 数据传输是需要通道的&#xff0c;而IO流就是数据传输的通道。IO流可以形象比喻为运送货物的传输带。运送的货物就是…

电子蜡烛灯单片机开发方案

LED蜡烛灯可以像真正的蜡烛一样发出舒适的闪烁光&#xff0c;具有仿真蜡烛效果&#xff0c;适合在一些聚会或庆祝活动中使用。宇凡微推出的低成本LED蜡烛灯IC方案&#xff0c;根据不同电子蜡烛灯方案&#xff0c;主控芯片推荐使用YF单片机。 LED蜡烛灯是有孩子的家庭很好蜡烛替…

【51单片机疑难杂症】:基于普中科技51单片机-A3型号开发板 ds18b20温度传感器和ds1302时钟芯片(板载)冲突现象的解答

项目场景&#xff1a; 当使用普中科技A3型号&#xff0c;准备开发板载的ds1302和温度ds18b20,出现了两者不能共用的问题&#xff0c;以下是问题记录与解答&#xff0c;大家如果觉得有用&#xff0c;请关注点赞哦。谢谢大家。 问题描述 基于普中科技51单片机-A3型号开发板 ds18b…

js 给图片添加水印

如何在图片上添加水印&#xff1f; 1、把图片或者图片文件转成image元素 2、把转成的image转成canvas 3、在生成的canvas中添加水印 先看效果 1、把图片或者图片文件转成image元素 function urlToImg(url) {return new Promise((resolve, reject) > {const img new Image(…

如何实现在线书签内容替换

书签广泛应用于企业的各种办公自动化业务场景中。例如&#xff1a;在范式合同模板中将甲乙方书签自动替换成具体的公司名称&#xff1b;在红头文件模板中将红头标题书签替换成具体的行政指令&#xff1b;在各种协议模板中将协议日期书签替换为当前日期&#xff1b;等等。 在这…

低代码赛道拥挤 生态聚合成为破局关键

在云计算和移动互联网的强劲推动下&#xff0c;企业数字化转型的步伐正在加速&#xff0c;对于软件应用开发的需求也呈现出爆发式的增长。这样的背景下&#xff0c;低代码平台凭借其独特的优势迅速崛起并引发了业界的广泛关注。 自2020年以来&#xff0c;低代码领域已成为投资…

5年测试岗,自动化测试经验总结(真实)他的测试之路高歌猛进...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 8年测试工程师的自…

软考A计划-2023系统架构师-知识点集锦(2/4)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

26键 or 九宫格?不论哪个都不耽误黑客们窃取你的信息!

我妈找我说&#xff0c;可以邮寄杨梅了。我二话不说&#xff0c;直接开始给她我的邮寄地址。快速输入的地址让我想到一个问题&#xff0c;现在的输入法是不是知道的太多了&#xff1f; 我只要打出“浙江省杭州市”&#xff0c;联想出来的就是我所在的市区和街道&#xff0c;下…

【git切换分支/tag】git stash保存暂不提交的更改

目录 问题git stash使用方法git stash pop 还原修改 git stash使用、修改指定tag的代码 其他git指令 问题 情景&#xff1a;分支1上开发新功能&#xff0c;临时切换到其他分支或tag上修改bug。 1、直接切换&#xff1a;如果没有冲突&#xff0c;分支1的修改会带到要切换的分支…

Python-深入不出的字符串

深入不出的字符串 字符串是由独立字符组成的一个序列&#xff0c;通常包含在单引号&#xff08;‘’&#xff09;双引号 &#xff08;“”&#xff09;或者三引号之中&#xff08;‘’’ ‘’或"“” “”"&#xff0c;两者一样&#xff09;&#xff0c;比如下面几种…

感觉被榨干了,被美团拷打一小时...

普通本科毕业后&#xff0c;进了一家互联网公司&#xff0c;这几年里不断在积累经验&#xff0c;最终选择跳到美团&#xff0c;涨薪了50%&#xff0c;下面分享一下我个人的面经和一些心得建议。 面经 面团一面 自我介绍专业技能一条条核对下来 有软件测试流程、用例设计方法…

Layui项目实战

使用语言&#xff1a;C#&#xff0c;Js&#xff0c;Html 使用框架&#xff1a;MVC&#xff0c;Layui 使用插件&#xff1a;JQuery&#xff0c;Layui 一.Layui父窗体前端代码&#xff1a; 1.Html代码&#xff1a; <div class"layui-col-md12" style"paddin…

如今做泛娱乐出海,你需要融云《社交泛娱乐出海作战地图》

出海需要的从来都不是上头&#xff0c;而是专业。关注【融云全球互联网通信云】了解更多 星期四的下午&#xff0c;笔者收到了一份特殊的“投喂”——一份详实到出乎意料的《社交泛娱乐出海作战地图》&#xff08;下称《作战地图》&#xff09;。 内容上&#xff0c;它覆盖了从…

英语、数学不精,还可以选择IT行业吗?

临近毕业季择校季&#xff0c;又有一群小伙伴面临着无法确定专业选择方向的难题。 就IT行业来说&#xff0c;有很多同学会有这样的疑问&#xff1a; 对计算机专业的不是十分了解&#xff0c;能学吗&#xff1f; 之前数学不太好&#xff0c;怎么学编程&#xff1f; 学编程对…

Python 接口测试之Excel表格数据操作方法封装

引言 我们在做接口测试&#xff0c;经常会用到excel去管理测试数据&#xff0c;对Excel的操作比较频繁&#xff0c;那么使用python如何操作Excel文件的读与写呢&#xff1f;由于之前讲的都是大的框框&#xff0c;没有讲这么小的模块使用&#xff0c;现在就化整为0的讲解。 读…

黑客工具软件大全

黑客工具软件大全100套 给大家准备了全套网络安全梓料&#xff0c;有web安全&#xff0c;还有渗透测试等等内容&#xff0c;还包含电子书、面试题、pdf文档、视频以及相关的网络安全笔记 &#x1f447;&#x1f447;&#x1f447; 《黑客&网络安全入门&进阶学习包》 &a…

深度学习笔记之Seq2seq(三)注意力机制的执行过程

深度学习笔记之Seq2seq——注意力机制的执行过程 引言回顾&#xff1a;经典 Seq2seq \text{Seq2seq} Seq2seq模型中 Context \text{Context} Context向量的缺陷注意力机制的动机 Seq2seq \text{Seq2seq} Seq2seq中的 Attention \text{Attention} Attention结构注意力模型的数学…