JS&PHP&mysql/不用cookie实现用户收藏功能的小demo
来源:互联网 发布:张子萱淘宝店月收入 编辑:程序博客网 时间:2024/06/05 10:01
//购物车vs店铺收藏
回想一下在逛淘宝的时候,我们经常会用到购物车,添加/删除/清空/支付什么的~再回忆一下淘宝的另一项功能:收藏店铺,大家看到喜欢的店铺就会去点击“收藏”,这个操作也是想必大家也是很熟悉了吧!我想问问大家,“购物车”与“收藏店铺”究竟有什么需求上的不同?嗯,对于购物车而言,如果我退出登录清除cookie,那里面的东西基本就烟消云散了,基于cookie的数据都是这样的,谁让没有写进数据库呢;而对于店铺收藏功能而言,我们更希望退出登录清除cookie之后再登陆,那些个收藏的店铺还是在的,也就是说可以与cookie毫无关联,在收藏的一刹那就统统被塞进了数据库里。今天向大家展示一个自己的写的超超超超超简易小demo,jq+php+mysql,没有任何样式,重在思路,看官们轻拍~
//需求分析
每个文章标题都有个收藏按钮,我点了收藏就把按钮改为已收藏,如果再点就弹框“您已收藏”,同时下面列表会即时添加我收藏的文章标题。本demo的重点是存储功能,我关闭页面后无论多久再次访问这个页面,都会保存并显示我所收藏的文章以及按钮的状态
//图示
注:本demo用的是xampp自带的apache和mysql。
网页部分:
mysql数据库(极简)
(该demo的数据库中真正有用的只有user_favorite字段)
//代码展示
目录结构:
php文件与html文件位于同一目录下,favorite.html通过http://localhost:9999/demo/favorite.html访问
#后端代码
favor_str.php:负责在favorite.html每次加载页面的时候传输实时的数据库里user_favorite里的字段;
<?php // 创建连接 error_reporting(0); $servername = "localhost"; $user = "root"; $password = ""; $dbname = 'demo'; $conn = new mysqli($servername, $user, $password,$dbname); mysqli_query($conn,'set names utf8'); // 检测连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } //查询并更改相应的user_favorite $sql = "SELECT user_favorite FROM my_favorite"; $result = mysqli_query($conn,$sql); $row = mysqli_fetch_assoc($result); $str = $row['user_favorite']; echo $str;//向前端输出内容 //与数据库断开连接 $conn->close(); ?>
favorite.php: 负责回应favorite.html里收藏按钮点击事件的ajax请求,返回的是已经更新好的了user_favorite字段内容;
<?php // 创建连接 error_reporting(0); $servername = "localhost"; $user = "root"; $password = ""; $dbname = 'demo'; $conn = new mysqli($servername, $user, $password,$dbname); mysqli_query($conn,'set names utf8'); // 检测连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } //获取前端传来的数据 $title = $_POST['title']; //根据username查询并更改相应的user_favorite $sql = "SELECT user_favorite FROM my_favorite"; $result = mysqli_query($conn,$sql); $row = mysqli_fetch_assoc($result); $temp = $user_favorite = $row['user_favorite']; //更新添加user_favorite的内容,并存储覆盖 $temp .= $title . ';'; $sql = "UPDATE my_favorite SET user_favorite='$temp'"; $result = mysqli_query($conn,$sql); echo $temp;//向前端输出内容 //与数据库断开连接 $conn->close(); ?>
#前端代码:
html结构
<body> <div id="article"> <a href="javasript:;">我是文章1</a><input type="button" value="收藏"><br> <a href="javasript:;">我是文章2</a><input type="button" value="收藏"><br> <a href="javasript:;">我是文章3</a><input type="button" value="收藏"><br> <a href="javasript:;">我是文章4</a><input type="button" value="收藏"><br> <a href="javasript:;">我是文章5</a><input type="button" value="收藏"><br> </div> <div id="favorite"> <h1>您收藏的文章有:</h1> <ul id="list"></ul> </div></body>
js代码
<script> $(function (){ //当页面刚加载的时候,我就要发送一个ajax请求,向后台询问“我收藏了哪些文章” $.post('./favor_str.php',null, function (res){ //根据返回的字符串,进行收藏div的渲染 let titles = $('#article').children('a'); let arr = res.split(';'); arr.pop();//因为用数据库用分号隔开的,所以最后会多个分号,转换的数组最后一项是空的,要把最后的空字符串去掉 let inner = ''; for(let i = 0; i < arr.length; i++){ inner += '<li>'+arr[i]+'</li>'; } $('#list').html(inner); //循环所有的按钮 for(let i = 0; i < titles.length; i++){ let $titleText = $(titles[i]).text(); let $btn = $(titles[i]).next(); //如果我所点的这个按钮对应的文章标题在ajax收到的结果字符串里是存在的,就显示“已收藏” if(res.indexOf($titleText)!=-1){ $btn.val('已收藏'); } else{//否则显示“收藏” $btn.val('收藏'); } //为每个按钮绑定点击事件 $btn.click(function (){ if($btn.val()=='已收藏'){ //如果已收藏,则弹框并终止点击事件函数 alert('你已收藏过!') return; } //走到这里说明没有收藏过,那我就要发送ajax请求,在user_favorite字段里存储title $.post('./favorite.php',{ 'title': $titleText },function (res){ //根据返回的结果,即时地渲染进收藏的div里,一个个append //注:这里的res和上面的res是两个ajax请求的结果,是完全不相同的 let arr = res.split(';'); arr.pop();//把最后的空字符串去掉 $btn.val('已收藏'); let $newLi = $('<li>'); $newLi.html(arr[arr.length - 1]); $('#list').append($newLi); }) }) } }) })</script>
完工,这样一个最最基本的收藏功能就完成了,任你怎么刷新页面怎么关机,收藏过的文章就安安静静躺在那巍然不动!
- JS&PHP&mysql/不用cookie实现用户收藏功能的小demo
- php实现收藏功能
- Android+PHP+Mysql实现用户反馈功能
- JS小Demo实战之一个超级简单的计算器功能的实现。
- fileuploadJs+JcropJs+php综合小应用 实现图片拖拽上传与裁剪功能的demo
- 一个ajax实现根据积分查询mysql获取用户等级的小demo
- 【php学习】php+mysql实现用户注册功能
- 不用正则实现js中replace全局替换的功能
- PHP实现登录功能DEMO
- 不用Cookie的“Cookie”技术 可用于追踪用户
- android+json+php+mysql实现用户反馈功能
- android+json+php+mysql实现用户反馈功能
- android+json+php+mysql实现用户反馈功能
- android+json+php+mysql实现用户反馈功能
- JS实现的一些小功能
- javascript读写cookie的一个小demo
- JS实现php的trim功能
- hammer.js---拖动滑块实现验证的小demo
- 算法学习——贪心算法实践
- 线性筛
- 空间复杂度O(1)的两个有序序列的归并
- alsa
- java 反射
- JS&PHP&mysql/不用cookie实现用户收藏功能的小demo
- leetcode 530. Minimum Absolute Difference in BST 深度优先遍历DFS
- chrome 断点
- selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH
- WebStorm安装与使用
- wondows识别不了USB的解决办法
- PAT (Advanced Level) Practise 1011. World Cup Betting (20)
- 可测空间、测度空间及σ-代数
- ros回炉2-创建工作空间