跳蚤市场之商品发布功能

一   商品类别和小类的联动

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

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

        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.xdnf.cn/news/4043.html

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

相关文章

LabVIEW气体检测系统

随着工业化进程的加速&#xff0c;环境污染问题愈加严峻&#xff0c;尤其是有害气体的排放对人类生存环境构成了严重威胁。为了更好地监测这些有害气体&#xff0c;开发一个高效、准确且易于操作的气体检测系统显得尤为重要。LabVIEW软件开发的气体检测系统&#xff0c;采用激光…

【三维重建】Semantic Gaussians:开放词汇的3DGS场景理解

文章目录 摘要一、引言二、主要方法1.3D Gaussian Splatting2.其他方法2.1 Gaussian Grouping2.2 GARField 3. 2D Versatile 投影4. 3D Semantic Network4. 推理 四、实验1. 实验设置2.定量结果 论文&#xff1a;https://arxiv.org/pdf/2403.15624 摘要 开放词汇的三维场景理解…

机器学习—前向传播的一般实现

可以写一个函数来实现一个密集的层&#xff0c;那是神经网络的单层&#xff0c;所以定义稠密函数&#xff0c;它将上一层的激活作为输入以及给定层神经元的参数w和b。看下边图片所展示的例子&#xff0c;把所有这些权重向量堆叠成一个矩阵&#xff0c;wnp.array([[1,-3,5][2,4,…

Java实验六 网络和数据库

1. 利用InetAddress编写程序接受用户输入网址&#xff0c;输出这个网址的主机IP地址。 package project; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Scanner; public class GetIPAddress {public static void main(String[] args…

猎板PCB2到10层数的科技进阶与应用解析

1. 单层板&#xff08;Single-sided PCB&#xff09; 定义&#xff1a;单层板是最基本的PCB类型&#xff0c;导线只出现在其中一面&#xff0c;因此被称为单面板。限制&#xff1a;由于只有一面可以布线&#xff0c;设计线路上有许多限制&#xff0c;不适合复杂电路。应用&…

分布式任务调度实现原理

目录 分布式任务调度功能 分布式任务调度实现 1.Scheduler&#xff08;调度器&#xff09; 2.Trigger&#xff08;触发器&#xff09; 3.Job&#xff08;任务&#xff09; 分布式任务调度框架 xxl-job quartz Snail Job PowerJob elastic-job 分布式任务调度功能 通…

qt QFontDialog详解

1、概述 QFontDialog 是 Qt 框架中的一个对话框类&#xff0c;用于选择字体。它提供了一个可视化的界面&#xff0c;允许用户选择所需的字体以及相关的属性&#xff0c;如字体样式、大小、粗细等。用户可以通过对话框中的选项进行选择&#xff0c;并实时预览所选字体的效果。Q…

qt QStandardItem详解

1、概述 QStandardItem是Qt框架中QStandardItemModel的一个基础元素&#xff0c;用于在基于项的模型&#xff08;如QStandardItemModel&#xff09;中表示单个数据项。QStandardItem可以存储文本、图标、工具提示等丰富的信息&#xff0c;并且支持数据的编辑和自定义显示。通过…

【每日一题】LeetCode - 最接近的三数之和

LeetCode 的「最接近的三数之和」问题要求我们从给定整数数组中找到三个数的和&#xff0c;使它最接近目标值。适合初学者的原因在于它结合了双指针、排序等基本技巧&#xff0c;为大家理解基本的算法和数据结构提供了一个很好的机会。 如果你不知道什么是双指针可以参考我之前…

【青牛科技】GC8549替代LV8549/ONSEMI在摇头机、舞台灯、打印机和白色家电等产品上的应用分析

引言 在现代电子产品中&#xff0c;控制芯片的性能直接影响到设备的功能和用户体验。摇头机、舞台灯、打印机和白色家电等领域对控制精度、功耗和成本等方面的要求日益提高。LV8549/ONSEMI等国际品牌的芯片曾是这些产品的主要选择&#xff0c;但随着国内半导体技术的进步&…

教育机构如何利用知识中台进行数字教学

在教育行业&#xff0c;数字化转型已成为提升教学质量和效率的关键。知识中台作为一种新兴的技术平台&#xff0c;为教育机构提供了一个集中化、智能化的知识管理和应用解决方案。本文将探讨教育机构如何利用知识中台进行数字教学&#xff0c;以及这一转型带来的优势。 1. 知识…

项目审核系统 ---(连接数据库---项目模拟)

本章主要是查询方法和修改方法 编写查询方法&#xff0c;查询所有项目审核信息并返回查询结果&#xff0c;需实现分页功能&#xff0c;注意必要的异常处理。编写查询方法&#xff0c;根据项目编号查询指定项目的审核信息&#xff0c;注意必要的异常处理。编写修改方法&#xf…

C语言 | Leetcode C语言题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; char * findLongestWord(char * s, char ** d, int dSize){char *result "";int max -1;for (int i 0; i < dSize; i) {char *p s, *q d[i];int j 0, k 0;while (p[j] ! \0 && q[k] ! \0) {if (p[j] q[k]) {k…

Git详细使用

本地项目托管到码云中教程 1. 使用git init 命令&#xff0c;git init命令用于在目录中创建新的 Git 仓库。 在目录中执行git init就可以创建一个 Git 仓库了。 2. 使用git status命令查看未提交的文件 3. 使用git add . 命令将所有文件添加到暂存区 4. 使用git commit -m &qu…

开源办公软件 ONLYOFFICE 深入探索

文章目录 引言1. ONLYOFFICE 创建的背景1. 1 ONLYOFFICE 项目启动1. 2 ONLYOFFICE 的发展历程 2. 核心功能介绍2. 1 桌面编辑器2. 1. 1 文档2. 1. 2 表格2. 1. 3 幻灯片 2. 2 协作空间2. 3 文档编辑器 - 本地部署版 3. 技术介绍4. 安装5. 优势与挑战6. 个人体验7. 强大但不止于…

Day95 Docker

Docker的使用 1、Docker是什么 docker是一个用来管理镜像的容器 容器(container)&#xff1a;可以装东西 镜像( image )&#xff1a;所谓的镜像&#xff0c;你可以认为就是一个虚拟机 虚拟机&#xff1a;用软件代理硬件来模拟整个计算机的这样一套软件就成为 虚拟机 镜像说白了…

WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查

目录 开始前准备的数据库dbblog如下&#xff1a; 第一步&#xff1a;创建项目后下载四个NuGet程序包 第二步&#xff1a;删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML 并且在App.XAML中将启动项改为Login.XA…

多模态PaliGemma——Google推出的基于SigLIP和Gemma的视觉语言模型

前言 本文怎么来的呢&#xff1f;其实很简单&#xff0c;源于上一篇文章《π0——用于通用机器人控制的流匹配VLA模型&#xff1a;一套框架控制7种机械臂(改造了PaliGemma和ACT的3B模型)》中的π0用到了PaliGemma 故本文便来解读下这个PaliGemma 第一部分 PaliGemma 1.1 Pal…

微服务day03

导入黑马商城项目 创建Mysql服务 由于已有相关项目则要关闭DockerComponent中的已开启的项目 [rootserver02 ~]# docker compose down WARN[0000] /root/docker-compose.yml: version is obsolete [] Running 4/4✔ Container nginx Removed …

IAPP仿源码大师主界面UI

仿源码大师首页主界面的布局 首页&#xff0c;分类&#xff0c;需求&#xff0c;我的 就只有这几个界面内容而已 资源静态 没有任何动画和功能 纯UI布局 纯UI布局 https://pan.baidu.com/s/1Hc5nWQCZ_ckQlXXV82OYpA?pwd7826 https://caiyun.139.com/m/i?2i2MoYbkdze41 来源…