PHP校园二手交易平台开发实战:从零搭建一套完整的PHP电商系统
校园二手交易平台开发实战:从零搭建一套完整的PHP电商系统
一、为什么做这个系统
先说个真实情况。每年毕业季,学校跳蚤市场群里各种消息刷屏,卖书的、卖生活用品的、卖数码产品的,信息杂乱不说,很多同学发完消息就找不到了。关键是时间不对等,我想买个二手显示器,翻半天群消息也不一定能找到合适的。
大二那年我自己想买个iPad看课件,连续蹲了三天群,最后总算找到一个,但是价格一点也不美丽。这让我萌生了一个想法:为什么不做一个专门给咱们学校用的二手交易平台呢?
正好这学期学了PHP,老师也让我们做个期末项目,那就把这个想法落地。
二、技术选型过程
选技术栈的时候纠结了一下。用原生PHP写?太慢了,后面维护也麻烦。用框架吧,ThinkPHP国内用的人多,文档也全,就它了。
具体版本是这样的:
- PHP 7.3(服务器稳定版)
- MySQL 5.7(够用就行)
- Apache 2.4
- ThinkPHP 5.1
前端方面,我不会花太多时间写CSS,直接上Tailwind CSS,写起来快。jQuery处理Ajax请求,轮播图用Swiper。
三、数据库设计
说实话,数据库设计改了好几版。最开始想得太复杂,后来跟同学讨论后精简了。
用户表(users):存用户名、密码(MD5加密)、邮箱、手机号、头像路径。状态字段用来禁用违规用户。
商品表(products):核心表。user_id关联发布者,category_id关联分类。图片用逗号拼接存,读取时explode拆开就行,简单粗暴。status区分在售和已售。
求购表(wanted):结构跟商品表类似,但没图片字段,求购嘛不需要图。
分类表(categories):一开始写死的,后来想想还是做成动态的,方便后台管理。
评论表(comments):用户对商品的评价,关联user_id和product_id。
轮播图表(banners):首页那几个滚动大图。
管理员表(admin_users):后台登录用,角色区分超级管理员和普通管理员。
大概就这些,够用了。
四、开发中的坑和解决
1. 路由优先级问题
这个坑了我半天。路由规则写错了顺序,后面的规则永远匹配不上。后来搞明白了,TP5.1是按顺序匹配的,具体的路由要写在前面。比如 product/detail/:id 要在 product/list 前面,不然:id会被当作list处理。
2. 分页样式
TP自带的分页样式真的一言难尽,丑到我都不想看。后来直接在layout里写了完整的分页CSS,圆角、悬停效果、激活高亮,加了个渐变色,瞬间顺眼多了。响应式也调了一下,手机上不至于太难看。
3. 文件上传
最头疼的地方。编辑商品时如果不传新图片,$request->file(‘images’)返回null,foreach直接报错。解决方案是先用try-catch包起来,然后做多层判断:files不为null、数组不为空、文件大小>0,全部通过才处理。不上传就保留原图。
4. 搜索功能
一开始搜索一直没结果,排查发现是TP5.1的查询语法问题。直接用where(‘title’, ‘like’, “%{$keyword}%”)就没毛病了。
5. 重定向循环
后台权限验证时,没登录的用户会重定向到登录页,但登录页也检查登录状态,已登录又重定向回后台,死循环。解决方法是登录控制器单独放行,不验证。
五、模块功能介绍
前台这边:
首页放轮播图和最近发布的商品、求购。商品列表左侧是分类树,右侧是卡片式商品,支持搜索和分页。详情页能看到商品所有信息,登录用户可以评论。
求购功能类似,但不带图片。
个人中心集成了我的发布、我的评论、我的求购,都能增删改。
发布商品支持多图上传,体验还行。
后台这边:
分类管理实现增删改查,删除前检查是否有商品关联。
商品管理主要是查询和删除,违规商品直接干掉。
用户管理可以禁用用户,禁用了就不能登录。
评论管理有敏感词可以删除。
管理员管理增加角色区分,超级管理员才能加管理员。
六、一些实用的代码片段
搜索的商品列表查询:
$query = Db::name('products')
->alias('p')
->join('users u', 'p.user_id = u.id')
->join('categories c', 'p.category_id = c.id')
->field('p.*, u.username, c.name as category_name');
if (!empty($keyword)) {
$query->where('p.title', 'like', "%{$keyword}%");
}
$list = $query->paginate(10);
分页样式的关键代码:
.pagination li.active span {
background: linear-gradient(135deg, #3182ce 0%, #2c5282 100%);
color: #ffffff;
border-color: #3182ce;
}
七、部署上线
部署到服务器时几个注意点:
- 数据库连接配置要改,localhost改成实际地址
- public目录作为网站根目录
- 如果URL重写有问题,检查.htaccess配置
- uploads目录要给写权限,不然图片传不上去
我用的是Apache,配置虚拟主机指向public目录,省去index.php的麻烦。
八、效果展示
登录后的首页可以看到导航栏多了个人中心入口。商品列表页左侧分类点一下右侧内容随之变化,搜索也能实时筛选。
发布商品页面表单友好,图片上传有进度提示。我的发布页面能看到自己发的商品,支持编辑和删除。
后台管理页面布局清晰,侧边栏导航,数据表格支持搜索和分页,操作按钮简洁明了。
手机端适配也做了,用Tailwind的响应式类,小屏幕下卡片变成单列布局,导航栏折叠,体验还不错。
九、总结
做这个项目前后花了大概两周时间,代码量不算大,但涉及的知识点挺全面的。数据库设计、路由配置、模板渲染、文件上传、权限验证、分页处理等等,基本把一个Web项目的核心流程都走了一遍。
遇到的问题比预想的多,但解决之后收获也大。特别是调试的过程,对框架的理解更深入了。
下一步计划加上微信支付和站内信功能,目前只能线下交易,有些同学还是希望有担保。还有就是增加收藏功能,看到喜欢的商品可以先标记起来。
代码已经传到GitHub了,需要的同学可以自取。项目名是campus-trading,欢迎star和交流讨论。
做这个系统的初衷很简单,就是让同学们交易更方便。代码能力有限,但产品能用,也算是为校园做了一点小贡献吧。
P31232
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)