当浏览新闻页面或者其它页面的时候会有阅读后的感受,比如给力、淡定、打酱油、加油、坑爹等等的表情。让读者打分,看看自己的感受是否与其他读者一样。很不错的交互!
立即下载:mood.rar
本文需要熟悉jquery,mysql,ajax相关的知识,不过用的不多。本文有三个文件:index.html,mood.php,sql.php
- index.html,页面展示和请求ajax数据
- mood.php,后台文件 处理get请求来的数据,并返回数据
- sql.php,数据库文件,存数据库信息
直接进入代码吧。
index.html
首先导入jquery
1
|
//cdn.bootcss.com/jquery/1.7.2/jquery.min.js
|
当文档载入完毕就请求(ajax-get)投票人数数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
$.ajax({
type: 'get' ,
url: 'mood.php' ,
cache: false,
data: 'id=1' ,
datatype: 'json' ,
error: function (){
alert( '出错了!' );
},
success: function (json){
if (json){
$.each(json, function (index, array ){
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=\"images/" + array [ 'mood_pic' ]+ "\"><br/>" + array [ 'mood_name' ]+ "</div></li>" ;
$( "#mood ul" ).append(str);
});
}
}
});
|
返回就添加到网页里,然后就点击表情逻辑,也ajax到后台
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$( ".face" ).live( 'click' , function (){
var face = $(this);
var mid = face.attr( "rel" );
var value = face.parent().find( "span" ).html();
var val = parseint(value)+1;
$.post( "mood.php?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" );
} else {
alert(data);
}
});
});
|
这样整个前台就完成了工作
mood.php
首先要导入sql.php数据库文件
1
|
include_once ( "sql.php" );
|
这个文件处理的是整个功能的核心,处理数据库,cookies...
1.处理获取投票人数代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
$mname = explode ( ',' , $moodname ); //心情说明
$num = count ( $mname );
$mpic = explode ( ',' , $moodpic ); //心情图标
$id = (int) $_get [ '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' ];
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 ,
'mood_name' => $mname [ $i ],
'mood_pic' => $mpic [ $i ],
'mood_val' => $m_val ,
'height' => $height
);
}
echo json_encode( $arr );
} else {
for ( $i =0; $i < $num ; $i ++){
$arr [] = array (
'mid' => $i ,
'mood_name' => $mname [ $i ],
'mood_pic' => $mpic [ $i ],
'mood_val' => 0,
'height' => 0
);
}
echo json_encode( $arr );
}
|
2.处理投票功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
$id = (int) $_post [ 'id' ];
$mid = (int) $_post [ 'moodid' ];
if ( $mid <0 || ! $id ){
echo "错误" ;
exit ;
}
$havemood = chk_mood( $id );
if ( $havemood ==1){
echo "您已表达过了" ; exit ;
}
$field = 'mood' . $mid ;
//查询是否有这个id
$result = mysql_query( "select 1 from mood where id='{$id}'" );
$row = mysql_fetch_array( $result );
if ( is_array ( $row )){
$query = mysql_query( "update mood set " . $field . "=" . $field . "+1 where id=" . $id );
if ( $query ){
setcookie( "mood" . $id , $mid . $id , time()+3600);
$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' ];
$height = round (( $rs [ $field ]/ $total )* $moodpicheight );
echo $height ;
} else {
echo -1;
}
} else {
mysql_query( "insert into mood(id,mood0,mood1,mood2,mood3,mood4)values ('{$id}','0','0','0','0','0')" );
$query = mysql_query( "update mood set " . $field . "=" . $field . "+1 where id=" . $id );
setcookie( "mood" . $id , $mid . $id , time()+3600);
echo $moodpicheight ;
}
|
这个文件很简单,基本都是在处理数据库,逻辑也不是很复杂。可以自己下来细心看。
sql.php
一个通用的数据库信息储存文件,数据库的ip、帐号、密码、数据库名等等
1
2
3
4
5
6
7
8
9
10
11
|
$host = "localhost" ;
$db_user = "root" ;
$db_pass = "" ;
$db_name = "demo" ;
$timezone = "asia/shanghai" ;
$link =mysql_connect( $host , $db_user , $db_pass );
mysql_select_db( $db_name , $link );
mysql_query( "set names utf8" );
header( "content-type: text/html; charset=utf-8" );
|
到目前所有的核心代码都也贴出,大神就跳过,如果有需要就下载来看一看
对了,还有一个数据库,行吧ddl也贴出来
1
2
3
4
5
6
7
8
9
|
create table `mood` (
`id` tinyint(5) not null,
`mood0` int(9) unsigned not null,
`mood1` int(9) unsigned not null,
`mood2` int(9) unsigned not null,
`mood3` int(9) unsigned not null,
`mood4` int(9) unsigned not null,
primary key (`id`)
) engine=innodb default charset=utf8mb4;
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://segmentfault.com/a/1190000011114993