Home >Backend Development >PHP Tutorial >php+jQuery+Ajax实现点赞效果的方法

php+jQuery+Ajax实现点赞效果的方法

WBOY
WBOYOriginal
2016-06-20 13:01:42967browse

php+jQuery+Ajax实现点赞效果的方法,

结合实例形式详细介绍了php结合jQuery的ajax无刷新提交实现点赞功能的具体步骤与相关技巧,

需要的朋友可以参考下

php+jQuery+Ajax实现点赞效果具体如下:

数据库设计

先准备两张表,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'];
   ?>
   
  • <?php echo $pic_name;?>

  • 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"); //对应id
        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(); //获取用户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有所帮助。


    Statement:
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn