跳蚤市场之商品发布功能

一   商品类别和小类的联动

以下是一个示例代码,展示了如何实现商品类别中大类和小类的联动。

商品大类选择框、小类选择框 的设计

        html部分

<form id="category-form"><label for="major-category">大类:</label><select id="major-category" name="major_category"><option value="" disabled selected>请选择大类</option><option value="clothing">服装</option><option value="electronics">电子产品</option><option value="furniture">家具</option></select><label for="minor-category">小类:</label><select id="minor-category" name="minor_category"><option value="" disabled selected>请选择小类</option></select>
</form>

商品大类和小类的联动

        JavaScript部分:

// 大类和小类的对应关系
const categoryMapping = {clothing: ["衣服", "鞋子", "包包"],electronics: ["手机", "电脑", "相机"],furniture: ["沙发", "床", "桌子"]
};// 获取大类和小类的select元素
const majorCategorySelect = document.getElementById("major-category");
const minorCategorySelect = document.getElementById("minor-category");// 监听大类select的变化
majorCategorySelect.addEventListener("change", function() {const selectedMajorCategory = majorCategorySelect.value;// 根据大类的选择更新小类的optionsupdateMinorCategoryOptions(selectedMajorCategory);
});// 根据大类的选择更新小类的options
function updateMinorCategoryOptions(selectedMajorCategory) {// 清空小类的optionsminorCategorySelect.innerHTML = "";// 获取对应的小类数组const minorCategories = categoryMapping[selectedMajorCategory];// 创建小类的optionsminorCategories.forEach(function(minorCategory) {const option = document.createElement("option");option.value = minorCategory;option.textContent = minorCategory;minorCategorySelect.appendChild(option);});
}

        上述代码中,我们首先定义了一个大类和小类的对应关系`categoryMapping`,然后通过JavaScript获取到大类和小类的select元素,并监听大类select的变化。当大类发生变化时,我们根据所选的大类来更新小类的options。

        在`updateMinorCategoryOptions`函数中,我们首先清空小类的options,然后根据所选的大类获取对应的小类数组,并通过遍历创建小类的options。最后,将创建好的options添加到小类的select元素中。

二    图片的上传

        下面是一个简单的PHP图片上传的示例代码:

<!DOCTYPE html>
<html>
<head><title>图片上传</title>
</head>
<body><h1>图片上传</h1><?php// 检查是否有文件上传if(isset($_FILES['image'])){$errors = array();$file_name = $_FILES['image']['name'];$file_size = $_FILES['image']['size'];$file_tmp = $_FILES['image']['tmp_name'];$file_type = $_FILES['image']['type'];$file_ext = strtolower(end(explode('.', $_FILES['image']['name'])));$extensions = array("jpeg", "jpg", "png");// 检查文件类型和大小if(in_array($file_ext, $extensions) === false){$errors[] = "扩展名不被支持,请选择 JPEG 或 PNG 文件.";}if($file_size > 2097152){$errors[] = '文件大小不能超过 2MB.';}// 如果没有错误,则上传文件if(empty($errors) == true){move_uploaded_file($file_tmp, "uploads/" . $file_name);echo "文件上传成功!";}else {print_r($errors);}}?><form action="" method="POST" enctype="multipart/form-data"><input type="file" name="image" /><input type="submit"/></form>
</body>
</html>

  这个示例代码有以下部分:

  1. <form>标签里设置enctype="multipart/form-data",这样表单可以上传文件。
  2. 在PHP代码中,$_FILES变量用于获取上传的文件信息。
  3. 检查文件的扩展名和大小,如果不符合要求则添加错误信息到$errors数组中。
  4. 如果没有错误,则使用move_uploaded_file()函数将文件从临时位置移动到指定的文件夹中。
  5. 如果有错误,使用print_r()函数输出错误信息。

        请注意,这只是一个简单的示例,未包含对文件的安全性验证。在实际应用中,你可能需要进一步验证文件类型和大小,以及限制上传文件的扩展名和大小。

三   确定客户是否登录

以下是一个示例代码,用于在PHP中检查客户是否登录:

代码如下:

<?php
session_start();// 判断用户是否已经登录
if(isset($_SESSION['is_logged_in']) && $_SESSION['is_logged_in'] === true) {// 用户已经登录echo "用户已经登录";
} else {// 用户未登录echo "用户未登录";
}
?>

        在这个示例中,我们使用了`session_start()`函数来启动会话,并通过`$_SESSION`超全局数组来访问会话数据。

        如果用户已经登录,并且会话中的`is_logged_in`键的值为`true`,则输出"用户已经登录"。否则,输出"用户未登录"。

        注意:在检查登录状态之前,确保已经设置了正确的会话变量和值。这通常在用户登录时完成,例如在验证用户凭据后设置`$_SESSION['is_logged_in'] = true;`。

四  跳蚤市场商品发布功能实例

1.  商品发布(出售)效果

2. 商品发布(出售) 代码 

publish_sell.php代码 如下:

<?php 
session_start();
if($_SESSION['id']==''){echo "<script>alert('你尚未登录,请登录!');</script>";echo "<script>location.href='login.php'</script>";
}include_once 'conn.php'; //引入数据库文件
if(isset($_POST['product_name'])){//获取商品发布信息$product_name=$_POST['product_name'];$large_id=$_POST['large_type'];$small_id=$_POST['small_type'];$manufacturer=$_POST['manufacturer'];$model=$_POST['model'];$specification=$_POST['specification'];$product_unit=$_POST['product_unit'];$product_number=$_POST['product_number'];$original_price=$_POST['original_price'];$current_price=$_POST['current_price'];$illustrate=$_POST['illustrate'];$new_old=$_POST['new_old'];$year=$_POST['year'];$month=$_POST['month'];$day=$_POST['day'];$purchase_date=$year.'-'.$month.'-'.$day;$publish_date=date("Y-m-d");$in_out='进';$custom_id=$_SESSION['id'];$sql="insert into product(large_id,small_id,custom_id,product_name,product_model,specification,product_unit,product_number,originial_price,current_price,manufacturer,illustrate,purchase_date,new_old,publish_date,in_out) values ('$large_id','$small_id','$custom_id','$product_name','$model','$specification','$product_unit','$product_number','$original_price','$current_price','$manufacturer','$illustrate','$purchase_date','$new_old','$publish_date','$in_out')";if($conn->query($sql)){echo "<script>alert('出售商品增加成功,请上传商品图片');</script>";echo "<script>location.href='upload.php'</script>";} else {echo "<script>alert('出售商品发布不成功');</script>";echo "<script>location.href='publish_sell.php'</script>";}	
}?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>发布出售商品信息</title>
<link rel="stylesheet" type="text/css" href='css/sell.css'>
<style>
.select1{width:200px;font-size:16px;padding:5px;border:1px solid blue;}
.select2{font-size:16px;padding:5px;border:1px solid blue;}	   	
</style>
<script>
var s=new Array();
<?php$i=0;$sql='select * from small_type';$result=$conn->query($sql);if($result->num_rows>0){while($row=$result->fetch_assoc()){
?>s[<?php echo $i; ?>]=new Array(<?php echo $row['large_id'] ?>,<?php echo $row['small_id'] ?>,<?php echo "'".$row['small_name']."'" ?>);
<?php $i=$i+1; }}?>
</script>
<script src="js/publish.js"></script>
</head>
<body><div align="center">
<iframe src='top.html' style='border:none;width:1020px; margin-bottom:-10px;'>
</iframe></div><div align="center"><form action='' method='post' name='sellform' onsubmit="return sell_submit()"><table border='0' width='1000'>	<tr><td colspan='2' class='input_title'>发布出售商品信息</td></tr><tr><td align='right' width='400'><span class='input_label'>品名</span></td><td><input type='text' name='product_name' class='input' required placeholder="品名不能为空"><span class='tip'>*</span></td></tr><tr><td align='right' width='400'><span class='input_label'>大类名</span></td><td><select name='large_type' class='select1' onchange="change(this.value)"><option>请选择</option><?php $sql="select * from large_type";$result=$conn->query($sql);if($result->num_rows>0){while($row=$result->fetch_assoc()){echo "<option value='".$row['large_id']."'>".$row['large_name']."</option>";}}?></select></td></tr><tr><td align='right' width='400'><span class='input_label'>小类名</span></td><td><select  name='small_type' class='select1'><option>请选择</option></select></td></tr><tr><td align='right'><span class='input_label'>生产厂商</span></td><td><input type='text' name='manufacturer' class='input' required placeholder="生产厂家不能为空"><span class='tip'>*</span></td></tr><tr><td align='right'><span class='input_label'>型号</span></td><td><input type='text' name='model' class='input' required placeholder="型号不能为空"><span class='tip'>*</span></td></tr><tr><td align='right'><span class='input_label'>规格</span></td><td><input type='text' name='specification' class='input' required placeholder="规格不能为空"><span class='tip'>*</span></td></tr><tr><td align='right'><span class='input_label'>单位</span></td><td><input type='text' name='product_unit' class='input' required placeholder="单位不能为空"><span class='tip'>*</span></td></td></tr><tr><td align='right'><span class='input_label'>数量</span></td><td><input type='text' name='product_number' class='input' required placeholder="数量不能为空"><span class='tip'>*</span></td></tr><tr><td align='right'><span class='input_label'>原价</span></td><td><input type='text' name='original_price' class='input' r placeholder="原价不能为空"><span class='tip'>*</span></td></tr><tr><td align='right'><span class='input_label'>现价</span></td><td><input type='text' name='current_price' class='input' required placeholder="现价不能为空"><span class='tip'>*</span></td></tr><tr><td align='right'><span class='input_label'>说明</span></td><td><textarea name='illustrate' cols=40 rows=10 style='font-size:16px;border:1px solid blue;'></textarea></td></tr><tr><td align='right'><span class='input_label'>新旧</span></td><td><input type='text' name='new_old' class='input' required placeholder="新旧不能为空"><span class='tip'>*</span></td></tr><tr><td align='right'><span class='input_label'>购买日期</span></td><td><select name="year" class='select2'><?phpfor($year=date("Y");$year>date("Y")-10;$year--){echo "<option value='".$year."'>".$year."</option>";} ?></select>年<select  name="month" class='select2' onchange="dd()">			<?phpfor($month=1;$month<=12;$month++){ echo "<option value='".$month."'>".$month."</option>";}?></select>月<select name="day" class='select2'><?phpfor($day=1;$day<=31;$day++){ echo "<option value='".$day."'>".$day."</option>";}?></select>日</td></tr><tr><td colspan='2' align='center'><input type='submit' class='button' value='提交'><input type='reset'  class='button' value='重置'></td></tr></table></form></div> <div align="center"><iframe src='bottom.html' style='border:none;width:1020px; margin-bottom:-10px;'></div></body><?php  $conn->close();	?>
</html>

3 .  图片上传效果

4   图片上传代码

upload.php如下:

<?php 
session_start();
if($_SESSION['id']==''){echo "<script>alert('你尚未登录,请登录!');</script>";echo "<script>location.href='login.php'</script>";
}
include 'conn.php'; //引入数据库文件
$allowedExts=array("gif","jpeg",'jpg','png');
$uploadDir="uploads/"; //上传目录
$custom_id=$_SESSION['id']; //客户编号if(isset($_FILES['upfile'])){$temp=explode(".",$_FILES['upfile']['name']);$extension=end($temp);//检查文件类型是否为jpg、gif、pngif(!in_array($extension,$allowedExts)){echo "<script>alert('只允许上传 JPG, JPEG, PNG 或 GIF 格式的图片');</script>";echo "<script>location.href='upload.php'</script>";}//检查文件大小是否超标$fileMaxSize=2000000; //1mbif($_FILES['upfile']['size']>$fileMaxSize){echo "<script>alert('文件大小不能超过 1MB');</script>";echo "<script>location.href='upload.php'</script>";}// 生成唯一的文件名(可选)  $uniqueFileName = uniqid() . '.' . $extension; //创建目标目录if(!is_dir($uploadDir)) {  mkdir($uploadDir);  }//将文件从临时目录移动到目标目录 $targetDir=$uploadDir. $uniqueFileName;if(move_uploaded_file($_FILES['upfile']['tmp_name'], $targetDir)){$sql="select * from product where custom_id='$custom_id' order by product_id desc";$result=$conn->query($sql);$row=$result->fetch_assoc();$product_id=$row['product_id'];$sql="update product set photo='$uniqueFileName' where product_id=$product_id";$conn->query($sql);echo "<script>alert('图片上传成功')</script>";echo "<script>location.href='publish_sell.php'</script>";} else {echo "<script>alert('图片上传失败,请重新上传')</script>";echo "<script>location.href='upload.php'</script>";}}//关闭连接$conn->close();
?>
<!doctype html>
<html><head><meta charset="utf-8"><title>图片上传</title><link rel="stylesheet" type="text/css" href='css/register.css'><script>function validInput(){if(document.upform.upfile.value==""){alert("请选择上传文件!");document.upform.upfile.focus();return false;}return true;}</script></head><body><div align="center">
<iframe src='top.html' style='border:none;width:1020px; margin-bottom:-10px;'>
</iframe></div><div align="center"><form action='' name='upform'  method='post' onsubmit="return validInput()" enctype='multipart/form-data'><p align="center"><font size="+2">图片上传</font></p><p align="center">请选择图片文件的地址:<input type="file" name="upfile" size="40"><input type="submit" value="上传"></p>		</form><p align="center"><a href="index.php">首页</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:close();">退出</a></p></div><div align="center"><iframe src='bottom.html' style='border:none;width:1020px; margin-bottom:-10px;'></div></body>
</html>

5   相关表

表的定义SQL:

商品表
//商品表
CREATE TABLE IF NOT EXISTS `product` (`product_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品编号',`large_id` int(11) NOT NULL COMMENT '大类名',`small_id` bigint(20) NOT NULL COMMENT '小类名',`custom_id` int(11) NOT NULL COMMENT '客户编号',`product_name` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '品名',`product_model` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '型号',`specification` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '规格',`product_unit` varchar(2) COLLATE utf8_unicode_ci NOT NULL COMMENT '单位',`product_number` int(11) NOT NULL COMMENT '数量',`originial_price` decimal(12,0) NOT NULL COMMENT '原价',`current_price` decimal(12,0) NOT NULL COMMENT '现价',`manufacturer` varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT '生产厂家',`illustrate` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '说明',`photo` varchar(30) COLLATE utf8_unicode_ci NOT NULL COMMENT '图片',`purchase_date` datetime NOT NULL COMMENT '购买日期',`new_old` varchar(6) COLLATE utf8_unicode_ci NOT NULL COMMENT '新旧',`publish_date` datetime NOT NULL COMMENT '发布时间',`state` varchar(2) COLLATE utf8_unicode_ci NOT NULL DEFAULT '在售' COMMENT '状态',`in_out` varchar(1) COLLATE utf8_unicode_ci NOT NULL COMMENT '进出',PRIMARY KEY (`product_id`),KEY `large_id` (`large_id`),KEY `small_id` (`small_id`),KEY `custom_id` (`custom_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;
大类表
//表的结构 `large_type`
CREATE TABLE IF NOT EXISTS `large_type` (`large_id` int(11) NOT NULL COMMENT '大类号',`large_name` varchar(8) COLLATE utf8_unicode_ci NOT NULL COMMENT '大类名',PRIMARY KEY (`large_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
小类表
//表的结构 `small_type`
CREATE TABLE IF NOT EXISTS `small_type` (`large_id` int(11) NOT NULL COMMENT '大类号',`small_id` bigint(20) NOT NULL COMMENT '小类号',`small_name` varchar(8) COLLATE utf8_unicode_ci NOT NULL COMMENT '小类名',PRIMARY KEY (`small_id`),KEY `large_id` (`large_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

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

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

相关文章

OpenAI 发布了新的事实性基准——SimpleQA

SimpleQA 简介 名为 SimpleQA 的事实性基准&#xff0c;用于衡量语言模型回答简短的事实性问题的能力。 人工智能领域的一个悬而未决的问题是如何训练模型&#xff0c;使其产生符合事实的回答。 目前的语言模型有时会产生错误的输出或没有证据证明的答案&#xff0c;这个问题…

Android camera2

一、序言 为了对阶段性的知识积累、方便以后调查问题&#xff0c;特做此文档&#xff01; 将以camera app 使用camera2 api进行分析。 (1)、打开相机 openCamera (2)、创建会话 createCaptureSession (3)、开始预览 setRepeatingRequest (4)、停止预览 stopRepeating (5)、关闭…

Javascript属性遮蔽问题

先了解一下Object.defineProperty()方法 Object.defineProperty() 静态方法会直接在一个对象上定义一个新属性&#xff0c;或修改其现有属性&#xff0c;并返回此对象。 //obj&#xff1a;要定义的对象 //prop&#xff1a;一个字符串或 Symbol&#xff0c;指定了要定义或修改…

vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由

vue3项目history模式部署404处理&#xff0c;使用 historyApiFallback 中间件支持单页面应用路由 在现代的 web 开发中&#xff0c;单页面应用&#xff08;SPA&#xff09;变得越来越流行。这类应用通常依赖于客户端路由来提供流畅的用户体验&#xff0c;但在服务器端&#xf…

【vim文本编辑器gcc编译器gdb调试器】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、vimvim安装vim常用快捷键vim使用vimtutor zh文档 二、gcc编译器安装gcc工具编译源代码 三、gdb调试器gdb安装gdb常用指令gdb简单上手使用gdb的单步调试功能 总结…

企业数字化转型的架构治理策略:核心问题、深度分析与优化路径

在当今的商业环境中&#xff0c;企业数字化转型已成为实现可持续发展、增强竞争力的战略选择。企业架构治理&#xff08;Enterprise Architecture Governance Capability, EAGC&#xff09;在数字化转型中扮演着保障架构一致性、提升变革效能的关键角色。本指南深入解析了如何通…

基于springboot+vue实现的农产品物流系统

基于springbootvue实现的农产品物流系统 &#xff08;源码L文ppt&#xff09;4-107 摘 要 随着现代信息技术的迅猛发展&#xff0c;农产品物流系统应运而生&#xff0c;成为连接生产者与消费者的重要桥梁。该系统采用java语言&#xff0c; Spring Boot框架&#xff0c;结合My…

基于uniapp和java的电动车智能充电系统软件平台的设计

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 对电动车智能充电系统进行设计和开发。通过使用本系统可有效地减少运营成本&#xff0c;提高管理效率。 根据近年来社会…

Jmeter命令监控CPU等指标

JMeter 命令行执行脚本得到的报告中&#xff0c;是没有CPU、内存使用率等监控数据的&#xff0c;但是可以使用JMeter插件帮忙。 一、下载jmeter-plugins-manager.jar 下载后将文件放到jmeter安装包lib/ext目录下。打开Jmeter》菜单栏》选项》Plugins Manager 二、安装PerfMon…

ubuntu20.04 加固方案-检查是否设置登录超时

一、编辑/etc/profile配置文件 打开终端。 使用文本编辑器&#xff08;如vim&#xff09;编辑/etc/profile 文件。 vi /etc/profile 二、添加配置参数 在打开的配置文件中&#xff0c;如图位置添加如下参数&#xff1a; TMOUT1800 export TMOUT三、保存并退出 在vim编辑器…

HarmonyOS使用arkTS拉起指定第三方应用程序

HarmonyOS使用arkTS拉起指定第三方应用程序 前言代码及说明bundleName获取abilityName获取 前言 本篇只说采用startAbility方式拉起第三方应用&#xff0c;需要用到两个必备的参数bundleName&#xff0c;abilityName&#xff0c;本篇就介绍如何获取参数… 代码及说明 bundle…

32位汇编——通用寄存器

通用寄存器 什么是寄存器呢&#xff1f; 计算机在三个地方可以存储数据&#xff0c;第一个是把数据存到CPU中&#xff0c;第二个把数据存到内存中&#xff0c;第三个把数据存到硬盘上。 那这个所谓的寄存器&#xff0c;就是CPU中用来存储数据的地方。那这个寄存器有多大呢&a…

江协科技STM32学习- P35 硬件I2C读写MPU6050

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

【大数据学习 | HBASE】habse的表结构

在使用的时候hbase就是一个普通的表&#xff0c;但是hbase是一个列式存储的表结构&#xff0c;与我们常用的mysql等关系型数据库的存储方式不同&#xff0c;mysql中的所有列的数据是按照行级别进行存储的&#xff0c;查询数据要整个一行查询出来&#xff0c;不想要的字段也需要…

【dvwa靶场:XSS系列】XSS (Reflected)低-中-高级别,通关啦

一、低级low 简单拿捏 <script>alert(123)</script>二、中级middle 源码过滤了script但是没有过滤大小写&#xff0c;改成大写S <Script>alert(123)</script>三、高级high 比中级高&#xff0c;过滤了script并且以及大小写&#xff0c;使用其他标…

NAT实验

一、网络拓扑 二、实验步骤 1.配ip地址 用缺省路由充当网关 2.配置telent服务 3.配置公网互通&#xff0c;在PC1上ping R3的公网地址&#xff0c;测试是否可以访问互联网 [R1]ip route-static 0.0.0.0 0 10.1.1.2 [R3]ip route-static 0.0.0.0 0 10.2.2.2 此时私网是ping不通…

Centos 7系统一键安装宝塔教程

服务器推荐青鸟云服务器&#xff0c;2H2G低至16元/月 官网地址&#xff1a; 所有产品_香港轻量云 2核 2G-A型_青鸟云 推荐Finalshell软件连接至服务器&#xff0c;下载地址&#xff1a; https://dl.hostbuf.com/finalshell3/finalshell_windows_x64.exe 下载完成后连接服务…

Kafka 之顺序消息

前言&#xff1a; 在分布式消息系统中&#xff0c;消息的顺序性是一个重要的问题&#xff0c;也是一个常见的业务场景&#xff0c;那 Kafka 作为一个高性能的分布式消息中间件&#xff0c;又是如何实现顺序消息的呢&#xff1f;本篇我们将对 Kafka 的顺序消息展开讨论。 Kafk…

SpringBoot day 1105

ok了家人们&#xff0c;今天继续学习spring boot&#xff0c;let‘s go 六.SpringBoot实现SSM整合 6.1 创建工程&#xff0c;导入静态资源 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</…