数据库设计
先准备两张表,pic表保存的是图片信息,包括图片对应的名称、路径以及图片“赞”总数,pic_ip则记录用户点击赞后的IP数据。
- CREATE TABLE IF NOT EXISTS `pic` (   
-   `id` int(11) NOT NULL AUTO_INCREMENT,   
-   `pic_name` varchar(60) NOT NULL,   
-   `pic_url` varchar(60) NOT NULL,   
-   `love` int(11) NOT NULL DEFAULT ‘0‘,   
-   PRIMARY KEY (`id`)   
- ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;   
-     
- CREATE TABLE IF NOT EXISTS `pic_ip` (   
-   `id` int(11) NOT NULL AUTO_INCREMENT,   
-   `pic_id` int(11) NOT NULL,   
-   `ip` varchar(40) NOT NULL,   
-   PRIMARY KEY (`id`)   
- ) ENGINE=MyISAM  DEFAULT CHARSET=utf8  
 
 
 
index.php
在index.php中,我们通过PHP读取pic表中的图片信息并展示出来,结合CSS,提升页面展示效果。
- <?php   
-      include_once("connect.php");   
-      $sql = mysql_query("select * from pic");   
-      while($row=mysql_fetch_array($sql)){   
-          $pic_id = $row[‘id‘];   
-          $pic_name = $row[‘pic_name‘];   
-          $pic_url = $row[‘pic_url‘];   
-          $love = $row[‘love‘];   
-      ?>   
-      <li><img src="images/<?php echo $pic_url;?>" alt="<?php echo $pic_name;?>"><p><a href="#"    
- title="赞"class="img_on" rel="<?php echo $pic_id;?>"><?php echo $love;?></a></p></li>   
-  <?php }?>  
 
CSS中,我们将定义鼠标滑向和离开红心按钮的动态效果,并定位按钮的位置。
- .list{width:760px; margin:20px auto}   
- .list li{float:left; width:360px; height:280px; margin:10px; position:relative}   
- .list li p{position:absolute; top:0; left:0; width:360px; height:24px; line-height:24px;    
- background:#000; opacity:.8;filter:alpha(opacity=80);}   
- .list li p a{padding-left:30px; height:24px; background:url(images/heart.png) no-repeat    
- 4px -1px;color:#fff; font-weight:bold; font-size:14px}   
- .list li p a:hover{background-position:4px -25px;text-decoration:none}  
 
jQuery代码
当用户点击自己喜欢的图片上的红心按钮时,向后台love.php发送ajax请求,请求响应成功后,更新原有的数值
- $(function(){   
-     $("p a").click(function(){   
-         var love = $(this);   
-         var id = love.attr("rel"); 
-         love.fadeOut(300); 
-         $.ajax({   
-             type:"POST",   
-             url:"love.php",   
-             data:"id="+id,   
-             cache:false, 
-             success:function(data){   
-                 love.html(data);   
-                 love.fadeIn(300); 
-             }   
-         });   
-         return false;   
-     });   
- });  
 
love.php
后台love.php接收前端的ajax请求,根据提交的图片id值,查找IP表中是否已有该用户ip的点击记录,如果有则告诉用户已“赞过了”,反之,则进行一下操作:
1、更新图片表中对应的图片love字段值,将数值加1。
2、将该用户IP信息写入到pic_ip表中,用以防止用户重复点击。
3、获取更新后的赞值,即赞该图片的用户总数,并将该总数输出给前端页面。
- include_once("connect.php"); 
-     
- $ip = get_client_ip(); 
- $id = $_POST[‘id‘];   
- if(!isset($id) || empty($id)) exit;   
-     
- $ip_sql=mysql_query("select ip from pic_ip where pic_id=‘$id‘ and ip=‘$ip‘");   
- $count=mysql_num_rows($ip_sql);   
- if($count==0){ 
-     $sql = "update pic set love=love+1 where id=‘$id‘"; 
-     mysql_query( $sql);   
-     $sql_in = "insert into pic_ip (pic_id,ip) values (‘$id‘,‘$ip‘)"; 
-     mysql_query( $sql_in);   
-     $result = mysql_query("select love from pic where id=‘$id‘");   
-     $row = mysql_fetch_array($result);   
-     $love = $row[‘love‘]; 
-     echo $love;   
- }else{   
-     echo "赞过了..";   
- }  
 
我上传的附件中 数据库SQL 你可以直接建立test 数据库UTF8编码的,然后把SQL文件导入进去。修改一下connect.php中数据库的连接信息即可。 源文件下载地址
*********************************************************************************************
总结:其实就是发了一个ajax请求,
比如你要赞一个商品。商品表肯定有一个计数的字段。你发一个请求过去把这个字段+1
该成功了就返回一个现在的数。然后把页面改一下就成了
- function Zan( goodsId, a ){  
-     $.post( "/goods/zan/"+goodsId, null,function( ret ){  
-           if( ret.status == ‘ok‘ )  
-             $(a).html( ret.zannum);  
-           else  
-             alert( ret.data );  
-     },‘json‘ );  
-   }  
 php点赞效果的制作代码+解析(jQuery+Ajax+PHP实现“赞”)
原文:http://www.cnblogs.com/igood/p/4534382.html