一、引言

实现京东的账户项目,功能模块之一,用户登录。要用到的是Apach环境,Mysql、PHP以及Ajax。

二、依据功能创建库、表、记录

  • 创建库:jd
  • 创建表:登录表

  • 添加三条记录
CREATE DATABASE jd CHARSET=UTF8;
USE jd; CREATE TABLE t_login(
uid INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(32),
upwd VARCHAR(32)
);
INSERT INTO t_login VALUES
(10,'zhangsan',''),
(20,'lisi',''),
(30,'wangwu','');

三、创建php

      ①jd.sql  ②init.php  ③login_do.php

  • 获取参数  uname/upwd
  • 查询数据库

  • 如果用户输入{uname/upwd}
  • 返回值   -1  -2  -3       1      判断成功/失败
  • //login_do.php
    <?php
    header("Content-Type:text/plain;charset=utf-8");
    @$uname = $_REQUEST['uname']or die("-1");
    @$upwd = $_REQUEST['upwd']or die("-2");
    require('init.php');
    $sql = "SELECT*FROM t_login WHERE uname = '$uname' AND upwd = '$upwd'";
    $result = mysqli_query($conn,$sql);
    $row = mysqli_fetch_assoc($result);
    if($row===NULL){//满足所有条件,只有一个用户;不满足,一个都没有,所以,只抓取一条记录
    echo "-3";
    }else{
    echo "1";
    }
    ?>
    //init.php
    <?php
    $conn = mysqli_connect("127.0.0.1","root","","jd",3306);
    mysqli_query($conn,"SET NAMES UTF8");
    ?>

测试:地址栏输入    http://127.0.0.1/jd_store/data/login_do.php?uname=zhangsan&upwd=123456        返回 1

三、创建js{分析html/css}

      ①productlist.html

②js/productlist.js

③js

  • 为登录按钮“提交登录信息”绑定点击事件

  • 获取用户名密码
  • 发送ajax请求login_do.php
  • -1  -2  -3      1
  • 登录成功->隐藏登录框和半透明背景
  • 登录失败->提示框{用户名或密码有误}
<!--模态登录对话框-->
<div class="modal">
<div class="modal-dialog">
<div class="modal-content">
<h4>用户登录</h4>
<p class="alert">
请在此处输入您的注册信息。
</p>
<form id="login-form">
<input type="text" placeholder="请输入登录用户名" id="uname" name="uname" value="zhangsan">
<input type="password" placeholder="请输入登录密码" id="upwd" name="upwd" value="123456">
<input type="button" value="提交登录信息" id="bt-login">
</form>
</div>
</div>
</div>
/***用户登录***/
$(function(){
var uname = null;
var upwd = null;
$("#bt-login").click(function(){
var u = $("#uname").val();
var p = $("#upwd").val();
$.ajax({
type:'GET',
url:'data/login_do.php',
data:{uname:u,upwd:p},//参数
success:function(data){
var rs = parseInt(data);
if(rs<0){
$("p.alert").html("用户名或密码有误")
}else{
$(".modal").hide();
}
},
error:function(){
alert("响应消息有错!请检查网络");
}
});
});
});

四、遇到的bug

错误(HY000/1045):

<b>Warning</b>: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: NO) in <b>C:\xampp\htdocs\jd_store\data\init.php</b> on line <b>2</b><br />

原因:电脑mysql与apach没有配置好环境变量path

解决方法:选择xampp目录下mysql和apach的bin文件夹的绝对路径,分别添加到path后面,再重新启动xampp,先在cmd中用-mysql -uroot检查mysql能否进入,库,表,记录等是否还在。

错误:php代码错误

原因:sql查询语句,分开写,“.=” 拼接起来的语句少了中间的空格

解决方法:在后面两个$sql.=的语句前先加上空格,或者合并所有,写一个整句。这样不容易出错。


五、升级cookie

login_do_02.php

<?php
header("Content-Type:text/plain;charset=utf-8");
@$uname = $_REQUEST['uname']or die("-1");
@$upwd = $_REQUEST['upwd']or die("-2");
require('init.php');
$sql = "SELECT*FROM t_login WHERE uname = '$uname' AND upwd = '$upwd'";
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);
//如果用户名或密码有误返回NULL
if($row===NULL){
echo "-3";
}else{
echo "$row[uid]";
}
?>

productlist_02.js

$(function(){
/***用户登录***/
var uname = null;
var upwd = null;
$("#bt-login").click(function(){
var u = $("#uname").val();
var p = $("#upwd").val();
$.ajax({
type:'GET',
url:'data/login_do_02.php',
data:{uname:u,upwd:p},//参数
success:function(data){
console.log(data);
var rs = parseInt(data);
if(rs<0){
$("p.alert").html("用户名或密码有误")
}else{
$(".modal").hide();
//升级增加cookie保存uid uname
document.cookie = 'uid='+data;
document.cookie = 'uname='+u;
}
},
error:function(){
alert("响应消息有错!请检查网络");
}
});
}); /***产品列表显示***/
loadPage(1);
function loadPage(page){
$.ajax({
url:'data/product_list.php?pageNo='+page,
success:function(data){
var html = "";
for(var i=0;i<data.length;i++){
var obj = data[i];
html += `
<li>
<a href=""><img src="${obj.pic}" alt=""/></a>
<p>${obj.price}</p>
<h1><a href="">${obj.pname}</a></h1>
<div>
<a href="#" class="contrast"><i></i>对比</a>
<a href="#" class="p-operate"><i></i>关注</a>
<a href="${obj.pid}" class="addcart"><i></i>加入购物车</a>
</div>
</li>
`;
}
$("#plist ul").html(html);
},
error:function(){
alert("请求商品列表出错,请检查网络!");
}
});
} /***加载头文件 header.php***/
/***加载脚文件 footer.php***/
$("#header").load("data/header.php");
$("#footer").load("data/footer.php"); /***添加购物车***/
$("#plist").on('click','a.addcart',function(e){
e.preventDefault();
var pid = $(this).attr("href");
//发送ajax请求给服务器,执行添加操作
$.ajax({
'type':'POST',
'url':'data/add_cart.php',
data:{uid:getCookieVal("uid"),pid:pid},
success:function(data){
if(data>0){
alert("添加成功!该商品已购买"+data);
}else{
alert("添加失败");
}
},
error:function(){
alert("添加商品出错,请检查网络!");
}
});
}); /***去购物车结算**/
$(document.body).on('click','#my_js',function(e){
e.preventDefault();
location.href = 'shoppingcart.html';
}); /***分页处理***/
$("ol.pager a").click(function(e){
e.preventDefault();
var p = $(this).html();
loadPage(p);
}) });
//读取cookie
function getCookieVal(key){
var rs = null;
var line = document.cookie;
var arr = line.split("; ");
for(var i=0;i<arr.length;i++){
var kv = arr[i];
//第二次拆分
var option = kv.split("=");
var k = option[0].trim();//去除字符串前后的空格
var v = option[1];
if(key===k){
return v;
}
}
return rs;
}

shoppingcart.js

$(function(){
/***加载头文件 header.php***/
/***加载脚文件 footer.php***/
$("#header").load("data/header.php");
$("#footer").load("data/footer.php"); /***页面加载后,异步请求当前登录用户购物车中商品信息***/
$.ajax({
url:"data/cart_list.php",
data:{uid:getCookieVal("uid")},
success:function(data){
var html = "";
for(var i=0;i<data.length;i++){
var obj = data[i];
html +=`
<tr>
<td>
<input type="checkbox"/>
<input type="hidden" value="${obj.pid}" />
<div><img src="${obj.pic}" alt=""/></div>
</td>
<td><a href="">${obj.pname}</a></td>
<td>${obj.price}</td>
<td>
<button>-</button><input type="text" value="${obj.count}"/><button>+</button>
</td>
<td><span>¥${obj.price*obj.count}</span></td>
<td><a href="${obj.id}">删除</a></td>
</tr>
`;
}
$("#cart tbody").html(html);
},
error:function(){
}
}); /***删除购物车选项***/
$("#cart tbody").on("click","a:contains('删除')",function(e){
e.preventDefault();
var did = $(this).attr("href");
//留存this-->a 后面会变
var that = this;//that -->a
$.ajax({
type:"POST",
url:"data/cart_del.php",
data:{id:did},
success:function(data){
if(data.code<0){
alert("删除失败:原因"+data.msg);
}else{
alert("删除成功");
$(that).parent().parent().remove();
}
},
error:function(){
alert("删除失败,请检查网络");
}
});
}); }); //读取cookie
function getCookieVal(key){
var rs = null;
var line = document.cookie;
var arr = line.split("; ");
for(var i=0;i<arr.length;i++){
var kv = arr[i];
//第二次拆分
var option = kv.split("=");
var k = option[0].trim();//去除字符串前后的空格
var v = option[1];
if(key===k){
return v;
}
}
return rs;
}

zhangsan登录     购物车列表

lisi登录     购物车列表

数据库     查询数据


注:转载请注明出处

【京东账户】——Mysql/PHP/Ajax爬坑之用户登录的更多相关文章

  1. 【京东账户】——Mysql/PHP/Ajax爬坑之添加购物车

    一.引言 做京东账户项目中的购物车模块,功能之一就是添加购物车.要用到的是Apach环境,Mysql.PHP以及Ajax. 预计效果:用户点击->"加入购物车"  添加成功 ...

  2. 【京东账户】——Mysql/PHP/Ajax爬坑之购物车列表显示

    一.引言 做京东账户项目中的购物车模块,功能之二是购物车列表显示.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.小功能-点击“去购物车结算” 小坑:Ajax动态生成的不能直接绑定,因 ...

  3. 【京东账户】——Mysql/PHP/Ajax爬坑之购物车删除选项

    一.引言 做京东账户项目中的购物车模块,功能之三就是删除购物车中的选项.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.依据功能创建库.表.记录 创建库:jd 创建表:购物车表  jd ...

  4. 【京东账户】——Mysql/PHP/Ajax爬坑之购物车列表分页

    一.引言 做京东账户项目中的购物车模块,功能之四就是购物车列表的分页显示.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.查询数据 mysql: SELECT * FROM jd_pr ...

  5. 【京东账户】——Mysql/PHP/Ajax爬坑之页头页尾加载

    一.引言 实现京东的账户项目,有一个小功能,页头页尾加载.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.实现 原理: 用php文件分别写一个的页头和一个页尾,放在前后两个div里. ...

  6. 【京东账户】——Mysql/PHP/Ajax爬坑之产品列表显示

    一.引言 实现京东的账户项目,功能模块之一,产品列表显示.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.依据功能创建库.表.记录 创建库:jd 创建表:产品表 添加多条记录 /**产 ...

  7. 【唯星宠物】——BootStrap/Mysql/PHP/Ajax爬坑之正则验证登录注册子页

    前言:唯星宠物产品官网的登录注册,单独一个子页,页面使用BootStrap实现响应式,PHP提供服务端,利用Ajax技术,从Mysql中获取JSON数据,并对表单信息进行正则验证.项目github地址 ...

  8. 【魅族Pro7】——BootStrap/JQuery/Canvas/PHP/MySQL/Ajax爬坑之项目总结(一)

    前言:这个项目是我们小组团体合作完成的学习项目,项目使用魅族GUI设计和图片素材,响应式重构Pro7官网的首页.子页.商城及购物车,并加入一些创新.我主要负责的是[画屏子页]的项目,这里作为温故知新, ...

  9. 【魅族Pro7】——BootStrap/JQuery/Canvas/PHP/MySQL/Ajax爬坑之项目总结

    前言:这个项目是我们小组团体合作完成的学习项目,项目使用魅族GUI设计和图片素材,响应式重构Pro7官网的首页.子页.商城及购物车,并加入一些创新.我主要负责的是[画屏子页]的项目,这里作为温故知新, ...

随机推荐

  1. 利用Xtrabackup在不停机的情况下备用数据库迁移

    什么是Xtrabackup?答:Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. 下 ...

  2. 数据结构之合并链表STL

    #include <iostream> #include <list> using namespace std; int main() { int n, m; while (c ...

  3. JS函数参数

    1.js不是面向对象,不可以重载函数.如果两个函数方法名相同,参数不同,那么js加载时后面的函数会覆盖前面的函数. 所以调用函数时只会调用后面的方法. 2.js设置可变参数时,可以用arguments ...

  4. java内存区域分析及java对象的创建

    java虚拟机在执行java程序的过程中会将它管理的内存区域加分为若干个的不同的数据区域. 主要包括以下几个运行时数据区域,这里就只介绍经常会用到的 1:java虚拟机栈:我们常说的堆栈,栈就是指的j ...

  5. 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能

    Ajax文件上载 利用 FormData 对象和 Spring MVC 配合可以实现Ajax文件上载功能: 步骤 导入组件并准备静态脚本 <dependency> <groupId& ...

  6. POI操作Excel的API注意点总结

    本篇是关于POI.jar操作Excel的API注意事项 基数问题 说明:我使用的是POI 3.15版本的,在版本问题上建议大家,在版本稳定的基础上尽量使用高版本的 看过很多帖子在问一个问题:假设原来有 ...

  7. Spark 贝叶斯分类算法

    一.贝叶斯定理数学基础 我们都知道条件概率的数学公式形式为 即B发生的条件下A发生的概率等于A和B同时发生的概率除以B发生的概率. 根据此公式变换,得到贝叶斯公式:  即贝叶斯定律是关于随机事件A和B ...

  8. 浏览器console的用法

    Leo_wlCnBlogs 自由.创新.研究.探索 Linux/Windows Mono/DotNet [ Open Source .NET Development/ 使用开源工具进行DotNet软件 ...

  9. 游戏平台代表--PS4【推荐】

    目前市上专业的游戏主机三足鼎立,分别是任天堂的wii,微软的xbox,已经索尼的PlayStation系列,这其中的老大当然是索尼PS4啦,因为即使美国佬也是优选ps4而不是自家的Xbox.小编历经千 ...

  10. [转载]Web前端和后端之区分,以及面临的挑战【转】

    原文地址:Web前端和后端之区分,以及面临的挑战[转]作者:joyostyle 在我们实际的开发过程中,我们当前这样定位前端.后端开发人员. 1)前端开发人员:精通JS,能熟练应用JQuery,懂CS ...