在电商网站搭建过程中,前端经常会向后端请求数据,有时候通过HTML、JS和PHP文件的处理来实现数据的连通。通常情况下,用户在HTML中做关键字操作,JS对提交的表单进行数据处理,向后端发起ajax请求对应PHP的api接口,PHP在接收到数据后对连接服务器,服务器再通过PHP中的SQL语句对数据库关键字进行处理返回给PHP,再由PHP返回给前端,前端通过JS处理将数据渲染在HTML中,最终呈现给用户。图1为数据传输流程图:

图1 HTML、JS与PHP之间的数据传输流程图

以加入商品到购物车为例,本例为模拟数据,和实际的数据库的数据不同。

图2 商品列表

加入购物车的点击事件大致步骤为:用户点击"加入购物车"按钮==>页面获取当前商品唯一值(如商品ID:productID)==>JS处理点击事件,将唯一值连同用户信息通过ajax请求传送给PHP===>PHP向服务器请求连接===>数据库语句执行===>服务器将执行结果返回给PHP===>PHP将执行结果传送给前端。

如果数据库语句执行成功,那么数据库中该用户的购物车表就多了一项刚加入的商品数据,同时服务器也会向PHP返回执行成功信息(及一条不为空的数据串),而用户的界面就会显示"成功加入购物车"等字样(如图1-1所示);若执行失败,也会将失败信息(err)传给PHP,用户界面也会显示相应的提示,如图3所示。

图3 成功加入购物车提示

1. HTML中的代码实例,商品列表信息通过引入art-template模块进行渲染,代码如下

{{each product prod}}

{{prod.title}}

¥{{prod.price}}

加入购物车

{{/each}}

2. JS中的数据请求处理实例如下,加入购物车的请求的api文件路径为http://localhost/api/add.php,此时将点击加入的商品ID及操作的用户ID封装为对象,用ajax的post请求传给服务端

$(".productContainer").on("click", ".add", function () {

var productID=$("#prodID").val();//获取到当前商品的ID值

$.post("http://localhost/api/add.php", {productID:productID,userID},

function (data) {

if (data.res_code === 1) { //返回的数据中,data.res_code为1表示加入成功

alert("加入成功");//对用户进行加入成功提示

} else {

alert(data.res_message);//若不为1则表示加入失败,data.res_message为失败信息

}

}, "json");

});

3. PHP中的代码(及JS中所请求的add.php文件)

// CORS跨域

header("Access-Control-Allow-Origin:*");

/* 向购物车添加商品 */

$productID = $_POST["productID"];

$userid = $_POST["userID"];

// 连接数据库服务器

mysql_connect("localhost:3306", "root", "");

// 选择连接数据库的名称

mysql_select_db("cart");

// 读写库编码

mysql_query("set character set utf8");

mysql_query("set names utf8");

// 编写SQL语句

//若该用户未添加该商品,则向cartList表插入该商品,并将数量置为1

$sql1 = "INSERT INTO cartList(productID, userID,count) VALUES ('$productID', '$userID',1)";

//若该用户已添加该商品,再次添加时只在cartList表中让该商品的数量+1

$sql2 = "UPDATE cartList SET count=count+1 WHERE productID= '$productID' AND userid='$userID'";

// 执行SQL语句,首先执行sql1的语句,如果表中有相同的数据,则sql1会执行失败,那么执行sql2

$result = mysql_query($sql1);

if(!$result){

$result = mysql_query($sql2);

}

// 判断

if ($result) { // 执行成功,将res_code的值设为1,并将返回信息设置为"加入成功"

$arr = array("res_code"=>1, "res_message"=>"加入成功");

echo json_encode($arr);

} else { // 执行失败,则将res_code设为0,并将错误信息设置为"加入失败"

$arr = array("res_code"=>0, "res_message"=>"加入失败" . mysql_error());

echo json_encode($arr);

}

// 关闭连接

mysql_close();

?>

4. 当用户进入购物车时,页面要请求该用户在数据库中的购物车表cartList,此时查询结果应该为一个数组,数组里的每一个子元素对应一个唯一的商品对象,数据库查询语句如下:

// 编写SQL语句

//在购物车cartList表中找到该用户已经添加的购物车商品数据的信息

$sql = "SELECT * FROM cartList WHERE userID='$userID'";

// 执行SQL语句

$result = mysql_query($sql);

// 新建一个数组用来存查询出来的结果,每条结果仅有一条商品的信息

$results = array();

// 每次查询成功,将当前查询到的商品结果存入results数组中

while($row = mysql_fetch_row($result))

{

$results[] = $row;

}

if ($results) {//返回数组$results,res_code值设为1

$arr = array("res_code"=>1, "res_message"=>$results);

echo json_encode($arr);

}

else { // 查找失败,返回信息"查找失败",res_code值设为0

$arr = array("res_code"=>0, "res_message"=>"查找失败" . mysql_error());

echo json_encode($arr);

}

关于PHP语法的说明:

mysql_query() 函数执行某个针对数据库的查询,每次查询结果仅有一条数据。

mysql_fetch_row() 从和结果标识 data 关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个数组的单元中,偏移量从 0 开始。依次调用 mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE。

html传输php连接mysql数据库_解析HTML、JS与PHP之间的数据传输相关推荐

  1. ts连接mysql数据库_各种数据库的连接方法

    一.JDBC连接各种数据库 1.Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver"). ...

  2. matlab 连接mysql数据库_【转】matlab 连接 mysql 数据库

    首先要安装mysql驱动程序包,详细步骤如下: Step 1: 将mysql-connector-java-5.1.7-bin.jar文件拷贝到......\MATLAB\R2009a\java\ja ...

  3. 封装连接mysql数据库_封装连接mysql数据库

    封装连接mysql数据库 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越.稳定可靠.弹性扩展的IaaS(Infrastructure as a Servi ...

  4. cmd连接mysql数据库_怎么用cmd连接mysql数据库

    cmd连接mysql数据库的方法:1.按[win+r]打开运行,输入cmd,回车:2.在打开的命令提示符中进入mysql的bin目录下:3.执行[mysql -u root -p]命令并输入密码即可. ...

  5. 0配置EF连接MySql数据库_第八节:EF Core连接MySql数据库

    一. 前提 1.安装EF Core连接MySQL的驱动,这里有两类: (1).Oracle官方出品:MySql.Data.EntityFrameworkCore (版本:8.0.17) (2).其他第 ...

  6. java中class.forname连接mysql数据库_数据库链接与 Class.forName()用法详解

    主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 ...

  7. cad与连接mySQL数据库_跨服务器操作数据库?其实很简单!(下)

    之前一篇文章一步一步的教小伙伴们如何建立SQL Server的数据库链接(DBLINK),详细步骤可查看上篇:跨服务器操作数据库?其实很简单!(上) 今天我们来教大家如何连接MYSQL和Oracle的 ...

  8. sqlalchemy连接mysql数据库_史上超详细的flask_sqlalchemy连接mysql数据库

    Python+Flask安装:https://www.jianshu.com/p/cd1925e90eda Flask路径参数以及请求参数讲解:https://www.jianshu.com/p/54 ...

  9. cmd控制台连接MySQL数据库_如何利用CMD连接本机mysql数据库

    从事数据工作的IT人员,很多人都会与Mysql数据库打交道.因为mysql数据库是一个开源的数据库,利用它来学习数据库的人也有很多.笔者今天就给大家分享一下,安装好mysql之后,怎么利用CMD连接本 ...

最新文章

  1. 单选按钮带文字_计算机二级MS office高级应用历年真题操作题文字解析
  2. arguments.callee()事例 参数检验
  3. 在MFC中通过opencv显示摄像头视频或者文件视频
  4. JAVA转为wasm
  5. 为什么属龙的有二婚命_88属龙的一生婚姻状况详细解析
  6. 用u盘刻录装服务器系统盘,光盘系统刻录到U盘上教程
  7. 千兆网线做法和网线接法注意事项
  8. facebook登陆ios
  9. Win11C盘扩容详细教程
  10. win7_ fiddler 证书安装失败解决方法
  11. ruby_Ruby简介
  12. 写给初中级前端的高级进阶指南
  13. 法线贴图Shader
  14. VMware虚拟机更改静态IP报错Unit network.service entered failed state解决方案
  15. Materials Studio软件常见问题与解决方案(二)
  16. 制作linux只读文件系统,一种Squashfs只读根文件系统的远程升级方法及系统的制作方法...
  17. 舆情监测技术TOOM,web技术实现
  18. 仅将人脑视为预测机器,人类文明会出什么问题
  19. Gronwall 不等式
  20. HTML5学习之路(电影影评网)

热门文章

  1. ios 侧滑返回停顿_iOS push侧滑返回功能实现方法
  2. Linux 日志 klogd,菜鸟学Linux 第038篇笔记 日志系统 syslogd,klogd
  3. deinstall 卸载grid_卸载Oracle 11g的Grid小计
  4. python中cv2库_Python cv2库(人脸检测)
  5. mysql操作常见问题_MySQL:常见使用问题
  6. 怎样设置左右两个区域_消防水炮设置区域高于22米效果怎样
  7. R语言实战-统计分析基础-描述性统计4-psych-describe
  8. Nodejs实现WebSocket通信demo
  9. bitset中_Find_first()与_Find_next()函数
  10. the day of python learning(考试解释)