最近在作一個視頻網站,須要實現視頻的點贊功能,我是結合ajax和數據庫實現的,數據庫的格式爲有四個字段:文章id,贊,踩,ip。由於須要一個ip只能點贊一次,因此須要一個ip字段存儲點讚的ip,這樣便於判斷該ip是否已經點贊過了;javascript
我將點贊和踩的圖片作成兩個按鈕;具體代碼以下:php
<button style="margin-left:4px" id="vote" rel="<?php echo 文章id;?>"><img src="點贊圖片路徑" alt="贊"><span style="position:absolute;margin-top:6px;margin-left:2px;font-size:20px"><span style="position:absolute;margin-top:-2px;margin-left:6px;font-size:20px"><?php if(!$vnum){echo 0;}else{ echo 點贊次數;} ?></span></button>html
<button style="margin-left:38px;margin-top:1px;position:absolute" id="dvote" rel="<?php echo 文章id;?>"><img src="踩圖片路徑" alt="踩" ><span style="position:absolute;margin-top:2px;margin-left:6px;font-size:20px"><?php if(!$dnum){echo 0;}else{ echo 踩次數;} ?></span></button>java
js程序ajax
<script type="text/javascript">
$(function(){
var id=$("#vote").attr('rel');//獲取到文章id;
$("#vote").click(function(){
$.get("傳到哪一個頁面?id="+id,function(r){
alert(r);
window.location.reload();//點同意功後刷新頁面更新新的點贊次數
})
})數據庫
$("#dvote").click(function(){
$.get("/news/dvote?id="+id,function(r){
alert(r);
window.location.reload();
})
})
})數組
</script>框架
我是用ci框架寫,因此在news.php下面的vote方法和dvote方法表明的是贊和踩,具體代碼以下網站
public function vote(){
$id=$_GET['id'];
$ip=getIP();
$getdata=$this->data_model;
$data=$getdata->get_vote_ip($id,$ip);
$msg="";
if(empty($data['ip']) || !$data['ip']){
$data=array('nid'=>$id,'vote'=>1,'ip'=>$ip);
$re=$getdata->insert_vote($data);
$msg.="點同意功";
}else{
$msg.="一個ip只能操做一次";
}
echo $msg;
}this
public function dvote(){
$id=$_GET['id'];
$ip=getIP();
$getdata=$this->data_model;
$data=$getdata->get_vote_ip($id,$ip);
//get_vote_ip($id,$ip),是在模型裏面的查詢該ip是否已經點贊過,具體代碼 以下
//public function get_vote_ip($id,$ip){
// $query=$this->db->query("select * from 表名 where nid='{$id}' and ip='{$ip}'");
// $data=$query->result_array()[0];
// return $data;
// }
$msg="";
if(empty($data['ip']) || !$data['ip']){
$data=array('nid'=>$id,'dvote'=>0,'ip'=>$ip);
$re=$getdata->insert_vote($data);
$msg.="踩成功";
}else{
$msg.="一個ip只能操做一次";
}
echo $msg;
}
點贊能夠實現之後,就是須要將點贊數據進行更新,首先須要在數據庫查詢該篇文章因此的點贊信息
//獲取點贊信息
public function get_vote($id){
$query=$this->db->query("select * from tx_vote where nid='{$id}'");
$data=$query->result_array();
return $data;
}
獲取信息返回到 控制器裏面將贊和踩的信息循環分別存入到數據庫中而後分別計算新的數組長度就能夠獲取贊和踩的次數了,這樣的再html頁面輸出就能夠了