搜索
首页web前端js教程PHP+jQuery+Ajax+Mysql如何实现发表心情功能_javascript技巧

实现发表心情功能通过php+jquery+ajax+mysql技术,大致流程我先给大家理下:主页index.html页面通过ajax获取心情图标及柱状图相关数据,当用户点击其中的一个心情图标时,向后台php发送请求,php对用户cookie验证(是否是首次提交),然后将数据库对应的心情字段内容加1,成功后返回前端页面,告诉首页index页面发表成功,并调整柱状图和统计数据。

请看效果图:

html:

先看HTML,我们在index.html中放置一个#msg,用来显示操作结果信息,#mood是操作主区域,其中ul通过javascript异步加载心情图标、说明、柱状图以及统计信息。

复制代码 代码如下:


   

   



    PHP
    首先我们在config.php配置文件中,配置数据库连接信息,以及示例相关参数。
    $

    host="localhost";
    $db_user="root";
    $db_pass="";
    $db_name="demo";
    $link=mysql_connect($host,$db_user,$db_pass);
    mysql_select_db($db_name,$link);
    mysql_query("SET names UTF8");
    //心情说明,用半角逗号隔开
    $moodname='震惊,不解,愤怒,杯具,无聊,高兴,支持,超赞';
    //心情图标文件,用半角逗号隔开(template/images/目录)
    $moodpic='a1.gif,a2.gif,a3.gif,a4.gif,a5.gif,a6.gif,a7.gif,a8.gif';
    //统计心情柱图标最大高度
    $moodpicheight=80;
    

    接下来,我们在mood.php中准备分两部分,通过接收action参数,分为第一部分:发表心情,第二部分:获取心情相关信息。

    复制代码 代码如下:

    include_once("config.php");
    $action = $_GET['action'];
    if($action=='send'){ //发表心情
     ...
    }else{ //获取心情
     ...
    }

    Part1:发表心情。
    用户从前端通过post提交发表心情的参数,包括文章id,心情id。先验证文章是否存在,然后再验证用户是否已经对这篇文章发表过心情了,接着操作数据库,将对应的心情字段值+1,并计算出当前心情对应的柱状图的高度,返回给前端js接收。

    $id = (int)$_POST['id']; //文章或帖子id
    $mid = (int)$_POST['moodid']; //心情id(配置文件中提供8种心情)
    if(!$mid || !$id){
     echo "此链接不存在";exit;
    }
    $havemood = chk_mood($id); //验证cookie
    if($havemood==1){
     echo "您已经表达过心情了,保持平常心有益身心健康!";exit;
    }
    $field = 'mood'.$mid; //数据表中的心情字段,分别用mood0,mood1,mood2...表示不同的心情字段
    $query = mysql_query("update mood set ".$field."=".$field."+1 where id=".$id); //对应的心情字段值+1
    if($query){
     setcookie("mood".$id, $mid.$id, time()+300); //设置cookie,为了测试我们设置cookie过期时间为300s
     $query2 = mysql_query("select * from mood where id=$id");
     $rs = mysql_fetch_array($query2);//获取该文章的心情数据
     $total = $rs['mood0']+$rs['mood1']+$rs['mood2']+$rs['mood3']+$rs['mood4']+$rs['mood5']+
    $rs['mood6']+$rs['mood7'];
     $height = round(($rs[$field]/$total)*$moodpicheight); //得到总量,并计算当前对应心情的柱状图的高度
     echo $height; //返回当前心情柱状的高度
    }else{
     echo -1; //数据出错
    }
    

    验证用户是否已发表过心情,我们通过函数chk_mood()来判断用户对应的cookie是否存在。

    //验证是否提交过
    function chk_mood($id){
     $cookie = $_COOKIE['mood'.$id];
     if($cookie){
     $doit = 1;
     }else{
     $doit = 0;
     }
     return $doit;
    }
    

    Part2:获取心情
    通过获取数据表中文章或帖子id对应的心情数据,得到每种心情对应的值(可以理解为发表心情的次数),并计算其柱状图高度,将每种心情对应的值、名称、图标、高度信息构造成数组,最终以JSON格式数据返回给前端。

    $mname = explode(',',$moodname);//心情说明
    $num = count($mname);
    $mpic = explode(',',$moodpic);//心情图标
    $id = (int)$_GET['id']; //文章或帖子id
    $query = mysql_query("select * from mood where id=$id"); //查询对应的心情数据
    $rs = mysql_fetch_array($query);
    if($rs){
     //得到发表心情的总量
     $total = $rs['mood0']+$rs['mood1']+$rs['mood2']+$rs['mood3']+$rs['mood4']+
    $rs['mood5']+$rs['mood6']+$rs['mood7'];
     for($i=0;$i<$num;$i++){
     $field = 'mood'.$i; //字段名
     $m_val = intval($rs[$field]); //心情对应的值(次数)
     $height = 0; //柱图高度
     if($total && $m_val){
     $height=round(($m_val/$total)*$moodpicheight); //计算高度
     }
     
     $arr[] = array(
     'mid' => $i, //对应心情id
     'mood_name' => $mname[$i], //心情名称
     'mood_pic' => $mpic[$i], //图标
     'mood_val' => $m_val, //次数
     'height' => $height //柱状图高度
     );
     }
     echo json_encode($arr); //返回JSON数据
    }
    

    jQuery

    我们使用强大的jQuery来完成本例中所有ajax的交互动作,因此在index.html中要先载入jquery.js库,目前1.8版本已经发布了哦,可以到官网http://jquery.com/下载。
    接着我们向mood.php发送Ajax请求,获取心情列表信息,并展示在index.html页面中。

    $(function(){
     $.ajax({
     type: 'GET', //通过get方式发送请求
     url: 'mood.php', //目标地址
     cache: false, //不缓存数据,注意文明发表心情的数据是实时的,需将cache设置为false,默认是true
     data: 'id=1', //参数,对应文章或帖子的id,本例中固定为1,实际应用中是获取当前文章或帖子的id
     dataType: 'json', //数据类型为json
     error: function(){
     alert('出错了!');
     },
     success: function(json){ //请求成功后
     if(json){
     $.each(json,function(index,array){ //遍历json数据列
     var str = "<li><span>"+array['mood_val']+"</span><div class="pillar" 
    style="height:"+array['height']+"px;"></div><div class="face" 
    rel=""+array['mid']+""><img  src="/static/imghwm/default1.png"  data-src="images/"  class="lazy"+array['mood_pic']+"" alt="PHP+jQuery+Ajax+Mysql如何实现发表心情功能_javascript技巧" >
    <br/>"+array['mood_name']+"</div></li>";
      $("#mood ul").append(str); //将数据加入到#mood ul列表中
      }); 
     }
     }
     });
     ...
    });
    

    这样,我们在访问index.html后,页面会载入心情列表,当然要想看到最终排列效果,还需要CSS,本文不讲解相关CSS,请下载源码或查看demo了解。
    接下来,我们有个交互动作,当点击对应的心情图标时,图标被标识为已发表,柱状图高度发生变化,并且上面的数字会+1,表示发表成功,如果继续点击心情图标,会提示已经发表过不能重复提交。请看代码:

    $(".face").live('click',function(){ //侦听点击事件
     var face = $(this);
     var mid = face.attr("rel"); //对应的心情id
     var value = face.parent().find("span").html();
     var val = parseInt(value)+1; //数字加1
     //提交post请求
     $.post("mood.php&#63;action=send",{moodid:mid,id:1},function(data){
     if(data>0){
     face.prev().css("height",data+"px");
     face.parent().find("span").html(val);
     face.find("img").addClass("selected");
     $("#msg").show().html("操作成功").fadeOut(2000);
     }else{
     $("#msg").show().html(data).fadeOut(2000);
     }
     });
    });
    
    

    没看明白的童鞋可以下载源码仔细研究,点击文章开头的Download按钮即可下载,最后附上本例所需的mysql数据表结构,谢谢您的关注。

    CREATE TABLE IF NOT EXISTS `mood` (
     `id` int(11) NOT NULL,
     `mood0` int(11) NOT NULL DEFAULT '0',
     `mood1` int(11) NOT NULL DEFAULT '0',
     `mood2` int(11) NOT NULL DEFAULT '0',
     `mood3` int(11) NOT NULL DEFAULT '0',
     `mood4` int(11) NOT NULL DEFAULT '0',
     `mood5` int(11) NOT NULL DEFAULT '0',
     `mood6` int(11) NOT NULL DEFAULT '0',
     `mood7` int(11) NOT NULL DEFAULT '0',
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    INSERT INTO `mood` (`id`, `mood0`, `mood1`, `mood2`, `mood3`, `mood4`, `mood5`, `mood6`, `mood7`)
    VALUES(1, 8, 6, 20, 16, 6, 9, 15, 21);
    

    声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    JavaScript数据类型:浏览器和nodejs之间是否有区别?JavaScript数据类型:浏览器和nodejs之间是否有区别?May 14, 2025 am 12:15 AM

    JavaScript核心数据类型在浏览器和Node.js中一致,但处理方式和额外类型有所不同。1)全局对象在浏览器中为window,在Node.js中为global。2)Node.js独有Buffer对象,用于处理二进制数据。3)性能和时间处理在两者间也有差异,需根据环境调整代码。

    JavaScript评论:使用//和 / * * / * / * /JavaScript评论:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

    JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

    Python vs. JavaScript:开发人员的比较分析Python vs. JavaScript:开发人员的比较分析May 09, 2025 am 12:22 AM

    Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

    Python vs. JavaScript:选择合适的工具Python vs. JavaScript:选择合适的工具May 08, 2025 am 12:10 AM

    选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

    Python和JavaScript:了解每个的优势Python和JavaScript:了解每个的优势May 06, 2025 am 12:15 AM

    Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

    JavaScript的核心:它是在C还是C上构建的?JavaScript的核心:它是在C还是C上构建的?May 05, 2025 am 12:07 AM

    javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

    JavaScript应用程序:从前端到后端JavaScript应用程序:从前端到后端May 04, 2025 am 12:12 AM

    JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

    Python vs. JavaScript:您应该学到哪种语言?Python vs. JavaScript:您应该学到哪种语言?May 03, 2025 am 12:10 AM

    选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

    See all articles

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    Video Face Swap

    Video Face Swap

    使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

    热门文章

    热工具

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Atom编辑器mac版下载

    Atom编辑器mac版下载

    最流行的的开源编辑器

    VSCode Windows 64位 下载

    VSCode Windows 64位 下载

    微软推出的免费、功能强大的一款IDE编辑器

    安全考试浏览器

    安全考试浏览器

    Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)