电商网站搭建(四)

news/2024/5/15 15:56:56/文章来源:https://blog.csdn.net/weixin_46674818/article/details/117716903

电商网站搭建(四)

4 商城页面和商品详情页面设计

4.1 超链接传值

由于商城页面也是为了显示数据库中保存的商品信息,因此和之前的后台查询代码基本相似,但是这里要实现一个特殊功能就是商品名称是一个超链接。

由于每个商品详情页内容均不同,但是又不能每次新增商品就新建一个 jsp 文件,因此这里使用超链接传值的方式,将商品代码传递过去,再通过查询语句将该代码对应的商品信息取出。

对应代码如下,传递参数为 detailid

out.print("<td><a href=\"shopdetail.jsp?detailid=" + rs.getString(1) + "\">" + rs.getString(2) + "</a></td>"); 

同时在 shopdetail.jsp 页面使用如下代码接收值:

String dbid = request.getParameter("detailid");

连接数据库时查询语句如下:

String SQL = "SELECT * FROM shopProducts where proid = " + dbid;

核心代码如下:

try{con = DriverManager.getConnection(url, user, password);sql = con.createStatement();String SQL = "SELECT * FROM shopProducts where proid = " + dbid;rs = sql.executeQuery(SQL);while(rs.next()){out.print("<img src=\"images/" + rs.getString(1) + ".jpg\" height=\"200px\">");out.print("<p>商品名称:" + rs.getString(2) + "</p>"); out.print("<p>商品价格:" + rs.getString(3) + "元</p>");out.print("<p>店铺:" + rs.getString(4) + "</p>");if(rs.getString(5) == null){out.print("<p>详细信息:暂无</p>");}else{out.print("<p>详细信息:" + rs.getString(5) + "</p>");}}con.close();
}
catch(SQLException e){out.print("<h1>"+e);
}

商城页面显示结果如下:

在这里插入图片描述

商品详情页面显示结果如下:

在这里插入图片描述

4.2 购物车页面设计

4.2.1 初步显示

详情页面除了要显示对应的商品信息,还要提供加入购物车等功能。

购物车这里设想就是一张大表,这张表中存储所有用户的订单信息,主键由用户号和商品号组成。

先创建表 userProd ,代码如下:

create table userProd(usrid int,proid int,pronum int NOT NULL,PRIMARY KEY (`usrid`, `proid`));

商品加入购物车时将用户号、商品号和数量传递到购物车页,在购物车页将这些数据插入表中,并且通过 SQL 语句,将该用户的订单信息从订单表中取出,代码如下:

String SQL = "SELECT proname,proprice,stoname,pronum FROM userProd as s1 " + "left join shopproducts as s2 on s1.proid = s2.proid " + "where usrid = " + session.getAttribute("userID");

可以看出,以上 SQL 语句进行了表连接,并且是按照用户号取出数据。

以上就完成了不同用户取出其对应的要购买的商品的功能。

4.2.2 更改数量

这一步如果不使用 js 实现,在我入门 jsp 之后来实现起来相当困难,下面将详细解释我是如何通过繁琐的步骤实现的更改数量。

首先我们要明确,我们更改数量之后,是希望同时将数据库表中的数据进行更新的。

以下将表单部分分成三部分,层层递进解析结构。

  • 第一层:
<!-- 这个表单把整个购物车包住 -->
<form action="" method="post"><!-- Java代码片 --><input type="submit" />
</form>

使用 form 表单将其完全包住的原因是要一次性将里面所有的数值全部提交。

  • 第二层:
// Java代码片// 连接数据库相关操作(省略)
// 多表连接查询
try{con = DriverManager.getConnection(url, user, password);sql = con.createStatement();String SQL = "SELECT s1.proid,proname,proprice,stoname,pronum FROM userProd as s1 " + "left join shopproducts as s2 on s1.proid = s2.proid " + "where usrid = " + session.getAttribute("userID");rs = sql.executeQuery(SQL);int i = 1;while(rs.next()) {out.print("<tr style=\"color:#333333\">");out.print("<td>" + rs.getString(2) + "</td>"); out.print("<td>" + rs.getString(3) + "</td>"); out.print("<td>" + rs.getString(4) + "</td>");// 循环输入框,用于修改数值out.print("</tr>");i = i + 1;}con.close();
}
catch(SQLException e) { out.print("");
}

这里要注意的一点是使用了一个变量 i ,该变量的设置是为了下面循环给 <input> 起名。

  • 第三层:
<!-- 循环输入框内容 -->
<td><input type="text" name="changenum<%= i %>" value="<%= rs.getString(5) %>"/><input type="hidden" name="changeproid<%= i %>" value="<%= rs.getString(1) %>"/></td>

可以看见每次循环都使用不同的命名,这样的话后续提交值的时候就可以和商品一一对应了。

以上三层完成的是将要更改的数据输入并标识出是哪里修改的,下面就要完成连接数据库进行更新的操作。

整体数据库连接代码如下:

// 加载JDBC-MySQL8.0连接器
// 插入记录
try{con = DriverManager.getConnection(url, user, password);sql = con.createStatement();String SQL = "SELECT COUNT(*) FROM userProd as s1 " + "left join shopproducts as s2 on s1.proid = s2.proid " + "where usrid = " + session.getAttribute("userID");  // 1rs = sql.executeQuery(SQL);  // 2String count = "";   // 3while(rs.next()) {count = rs.getString(1);    // 4}int countnum = Integer.parseInt(count);  // 5for(int i=1; i<=countnum; i++){// 6String a = "changenum" + Integer.toString(i);String b = "changeproid" + Integer.toString(i);// 7String changenumg = request.getParameter(a);String changeproidg = request.getParameter(b);String updateSQL = "update userProd " + "set pronum = '" + changenumg + "' where usrid='" + session.getAttribute("userID") + "' and proid='" + changeproidg + "';";int ok = sql.executeUpdate(updateSQL);}con.close();
}
catch(SQLException e) { out.print("");
}
  • 1 使用 COUNT() 聚合函数得到该用户放入购物车的商品总数量。
  • 2 得到结果集。
  • 3 创建 count 用于存放该用户购物车商品总数量。
  • 4 得到该用户购物车商品总数量。
  • 5 为了做循环,将字符串转换成整型
  • 6 构造上述代码中的 name 部分。
  • 7 得到每条记录对应的相关数据,并进行更新操作。

4.2.3 删除商品

删除商品如果在每一个商品后都加上删除按钮,不使用 js 等代码实现起来十分困难,因此这里转换一种思路,通过选中商品,点击确认删除,连接数据库将选中项删除。

这里需要进行修改的地方首先是在每个商品最前面加上单选框,如果单选框选中则传递值 ok 否则为 null

<td><input type="radio" name="choosethis<%= i %>" value="ok"/>
</td>

然后设置提交按钮,由于一个表单中出现两个提交按钮,就需要在进行操作的时候区分这两个提交按钮。

<button type="submit" name="svch" value="1">保存修改</button>
<button type="submit" name="svdl" value="1">确认删除</button>

在下面我们可以通过一段 Java 代码检验程序是否正常运行。

String svchg = request.getParameter("svch");
String svdlg = request.getParameter("svdl");if(svchg==null || svchg.length()==0){svchg = "";
}if(svdlg==null || svdlg.length()==0){svdlg = "";
}out.println("保存修改:" + svchg + "<br />");
out.println("确认删除:" + svdlg + "<br />");String c = "choosethis" + "1";	
String cg = request.getParameter(c);
out.println("单选框1:" + cg + "<br />");String d = "choosethis" + "2";	
String dg = request.getParameter(d);
out.println("单选框2:" + dg);

验证结果如下,程序正常运行,可以标识出选中的提交按钮以及单选框。

在这里插入图片描述

之后的代码基本和上面的相似,也是通过循环将每个值进行相应的操作,核心代码如下:

for(int i=1; i<=countnum; i++){String c = "choosethis" + Integer.toString(i);String d = "changeproid" + Integer.toString(i);String choosethisg = request.getParameter(c);String changeproidg = request.getParameter(d);if(changeproidg==null || changeproidg.length()==0){changeproidg = "";}if(choosethisg.equals("ok")){String updateSQL = "delete from userProd where usrid='" + session.getAttribute("userID") + "' and proid='" + changeproidg + "';";int ok = sql.executeUpdate(updateSQL);}
}

此时本页面所有功能基本实现,但是会发现每次操作之后都需要进行页面的刷新才能保证伪实时更改,因此在这里设置一个标记,该标记的作用是:当表单提交时,重定向回本页面实现页面的刷新。

// 刷新页面使用,伪动态更新数据
String cont = request.getParameter("control");if(cont==null || cont.length()==0){cont = "";
}if(cont.equals("1")){response.sendRedirect("shopcart.jsp");
}

此时页面效果如下:

在这里插入图片描述

4.2.4 结算页面

结算页面的关键是计算消费总额,这里使用 SQL 语句进行计算:

String SQL1 = "SELECT sum(round(proprice*pronum,2)) FROM userProd as s1 " + "left join shopproducts as s2 on s1.proid = s2.proid " + "where usrid = " + session.getAttribute("userID");

其他部分基本上和之前一样,效果如下:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用burp对网站进行简单的漏洞扫描

用burp对网站进行简单的漏洞扫描

建站宝盒——最适合中小企业的免费建站工具

作为一个中小型企业&#xff0c;在如今互联网早已深入人们生活的时代里&#xff0c;无论我们提供的是何种服务亦或某种产品&#xff0c;最先想到的应该就是通过网络进行曝光、宣传&#xff0c;让更多的用户能够在搜索引擎上找到我们的商品。如果我们的预算充足&#xff0c;可以…

找资源烦恼犯难,不如自己做个资源网站

闲话少说&#xff0c;直接放链接 银河系XYGALAXY导航 网址&#xff1a;www.xygalaxy.com 做个推广&#xff0c;好用请支持一下&#xff0c;运营网站不易&#xff0c;头发要没了&#xff0c;春天头顶也很冷

推荐一个堪称神器的资源导航网站

当今互联网时代&#xff0c;网站数量不断爆炸式增长&#xff0c;如何迅速找到自己需要的网站成为了每个人都面对的难题之一。于是&#xff0c;一批网站导航网站应运而生&#xff0c;我也用过不少的导航网站&#xff0c;甚至很多导航链接的插件&#xff0c;有些也挺不错的&#…

取精华、去糟粕!适合iOS开发者的15大网站推荐

iOS开发者若想使技艺达到炉火纯青的地步&#xff0c;就要不断借鉴他人的有益经验&#xff0c;紧跟新兴科技和工具的步伐。除了 Apple的开发者中心&#xff0c;其他网站上的文章和资源也具备参考价值&#xff0c;若能学得一二&#xff0c;必能锦上添花。不过&#xff0c;时间宝…

Asp.Net构建安全网站

摘 要 Asp.Net技术被广泛应用&#xff0c;该技术的安全性越来越受到人们重视。本文介绍黑客对Asp.Net系统的攻击手段以及如何采用Asp.Net技术来避免这些安全漏洞&#xff0c;从而构建安全性的网站系统。 关键字 Asp.Net&#xff1b;安全漏洞&#xff1b;对策 1 引言 Asp.…

安全网站从小做起

我是做asp.net网站开发的&#xff0c;QQ群里一个网友的站被挂马了。他说让我写点安全方面的文章。我就介绍下我的经验吧&#xff0c;各位大牛不要拿砖头砸我。。。以下都以ASP.NET开发网站为例。 1、sql注入漏洞。 解决办法&#xff1a;使用存储过程&#xff0c;参数不要用字…

每分钟访问10万+,11种策略教你保持亿级流量网站稳定性!

稳定性在大型网站运行中至关重要&#xff0c;面对每分钟 10 万次的网络访问&#xff0c;稍有不慎就会引起重大故障。今天这篇文章一起讨论下亿级流量网站在稳定性方面的一些做法&#xff0c;希望对您有帮助。本文已发布在公众号和网站。 基础策略 配置化 配置化就是把很多业务流…

微网站、手机站和APP的区别

因为之前写了一篇微网站的文章&#xff0c;有人问我微网站和手机站之间的区别&#xff0c;那我就在这里总体说一下吧。 首先&#xff0c;手机站和微网站都是移动互联网发展下的产物。这样一天24小时&#xff0c;商家就可以多点机会出现在人们的生活中。由于这样的特性&#xf…

微网站、手机站和APP的区别

因为之前写了一篇微网站的文章&#xff0c;有人问我微网站和手机站之间的区别&#xff0c;那我就在这里总体说一下吧。 首先&#xff0c;手机站和微网站都是移动互联网发展下的产物。这样一天24小时&#xff0c;商家就可以多点机会出现在人们的生活中。由于这样的特性&#xf…

ThinkPHP中使用网页模板快速搭建网站

ThinkPHP中使用网页模板快速搭建网站 公司要建一个网站&#xff0c;我刚接触PHP&#xff0c;还不是很熟悉&#xff0c;了解了一下ThinkPHP框架之后&#xff0c;简单的搭建了一个网站&#xff0c;网站内容目前还是写死的&#xff0c;还没有做具体的功能&#xff0c;想先分享一下…

Linux网站服务-搭建一个论坛

概念 前言 UI的转变&#xff1a;B/S架构 名词 HTMLHyperText Markup Language 超级 文本 标记 语言网页使用HTML,PHP,JAVA语言格式书写的文件。主页网页中呈现用户的第一个页面。网站多个网页组合而成的一台网站服务器URLhttp://www.baidu.com/1.htmlUniform Resource Locator…

Linux网站服务-用云服务器搭建论坛网站

前言 互联网的访问依靠IP地址。但IP地址不好记。 所以使用域名服务&#xff08;DNS&#xff0c;好记名&#xff09;&#xff0c;来替代访问的地址。 基本概念 hosts文件&#xff08;老的&#xff09; 一、hosts文件 作用&#xff1a; 实现名字解析&#xff0c;主要为本地主…

新手搭建网站后视频资源在网站上是如何存储的?

前言 本文的起因是一个学员搭建好了一个视频文章&#xff0c;主要做视频的录制&#xff0c;每个视频在10-20M左右&#xff0c;每月产生10G左右的视频素材&#xff0c;想看看怎么存储。 问题解析 作为个人站&#xff0c;没必要花太多钱&#xff0c; 有几种方案可以实施 免费方式…

网站维护业务

您当前的位置&#xff1a;>>>首页-->网站建设-->网站维护业务 网站维护业务 发布日期&#xff1a;2007年10月1日 来源&#xff1a;中亚网络服务部 网站维护   互联网技术的瞬息万变&#xff0c;决定了网站必须时时更新。一个好的网站&#xff0c;是…

网站部署之--- 起始页错误

An error occurred while starting the application. 1在IIS中找到应用程序池 2点进去找到对应的网站 3有点有个高级设置 4找到加载用户配置文件 设置成TRUE 转载于:https://www.cnblogs.com/mamiyiya777/p/9364752.html

3GPP网站查找协议的使用方法

1.首先打开3GPP网页&#xff0c;选择Specifications>>Specification Numbering 2.可以看到种通信技术的发行版本的序号&#xff0c;4G是36&#xff0c;5G在38里面 3.点开你要查找的协议版本号&#xff0c;就能看到协议下的各个分支的具体内容&#xff0c;有关物理信道的在…

Day04 使用PolarDB和ECS搭建门户网站

一.准备工作 本场景将提供一台基础环境为CentOS的ECS&#xff08;云服务器&#xff09;实例和已经创建好的PolarDB数据库实例。我们将会在这台服务器上安装WordPress&#xff0c;帮助您快速搭建自己的云上博客。 参考&#xff1a;https://developer.aliyun.com/article/773856…

如何才能做到网站高并发访问

文章架构简图&#xff1a; 高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”。 如果把来访用户比作来犯的"敌人"&#xff0c;我们一定要把他们挡在800里地以外&#xff0c;即不能让他们的请求一下打到我们的指挥部&#xff08;指挥部就是数据…

SVN利用钩子中的post-commit同步版本库到网站目录

这些钩子会在不同的点触发事务 # start-commit 提交前触发事务 # pre-commit 提交完成前触发事务 # post-commit 提交完成时触发事务 # pre-revprop-change 版本属性修改前触发事务 # post-revprop-change 版本属性修改后触发事务 svn同步版本库到网站目录就是利用p…