本文目錄一覽:
怎麼用PHP來做網站上的贊功能?
網站上的贊功能類似於統計功能。
總體來說,在頁面上做好「贊」連接或者按鈕,點擊觸發事件;事件中可以ajax操作伺服器代碼,在資料庫中執行+1操作等,並返回結果給「贊」數值。
根據是否需要記錄用戶,分兩種情況:
不需要記錄誰贊了,只統計被贊次數
文章表裡加一個被贊次數的欄位,用戶每點一次「贊」,更新對應文章的被贊次數,也就是這個欄位值+1;
需要記錄用戶「贊」的記錄
新加一個「贊」的記錄表,包括點贊的用戶id,被贊的文章id,贊的時間等,用戶每點一次贊,就在這個表裡新增一條數據。這個可以嚴格控制用戶贊同一篇文章的次數
求PHP文章點贊實現原理 下面有具體說明
你好!
你可以將id放到被循環的一個div裡面,設置成屬性,或者加入到隱藏域中,點贊時候,你就可以獲取到裡面的值了,
如有疑問,請追問。
Php點贊效果的製作代碼+解析
資料庫設計
先準備兩張表,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’];
?
liimg src=”images/?php echo $pic_url;?” alt=”?php echo $pic_name;?”pa 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”); //對應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中資料庫的連接信息即可。
【新手求助】PHP點贊功能,急!!!
html:
head
script src=”common/js/jquery.js” type=”text/javascript”/script
script language=”JavaScript” type=”text/javascript”
jQuery(function($) {
//這兩個是滑鼠放上去的效果
$(“.zhan”).hover(function(){
$(this).children(“b”).toggle();
});
$(“.cai”).hover(function(){
$(this).children(“b”).toggle();
});
});
/script
script type=”text/javascript”
!–這兩個點擊事件可以改進的,因為事件問題,所以就弄了兩個點擊事件
$(document).ready(function(e) {
//點贊(給力)
$(‘.zhan’).click(function(){
var zhan=$(this);
var left = parseInt($(this).offset().left)+10, top = parseInt($(this).offset().top)-10, obj=$(this);
$(this).append(‘div id=”zhan”b+1\/b/\div’);
$(‘#zhan’).css({‘position’:’absolute’,’z-index’:’1′, ‘color’:’#C30′,’left’:left+’px’,’top’:top+’px’}).animate({top:top-10,left:left+10},’slow’,function(){
$(this).fadeIn(‘fast’).remove();
var Num = parseInt(obj.find(‘span’).text());
Num++;
obj.find(‘span’).text(Num);
});
$.ajax({
url:”ajax.php?action=zan”,
type:”post”,
data:”answer_id=”+$(this).attr(“alt”),
success:function(datas){
zhan.unbind(‘click’);
zhan.parent().parent().siblings().children().children().unbind(‘click’);
zhan.parent().parent().siblings().children().children().attr(“class”,”evaluate-inner”);
zhan.attr(“class”,”evaluate-inner”);
}
});
});
//踩(不給力)
$(‘.cai’).click(function(){
var cai=$(this);
var left = parseInt($(this).offset().left)+10, top = parseInt($(this).offset().top)-10, obj=$(this);
$(this).append(‘div id=”cai”b-1\/b/\div’);
$(‘#cai’).css({‘position’:’absolute’,’z-index’:’1′, ‘color’:’#7DAAD5′,’left’:left+’px’,’top’:top+’px’}).animate({top:top-10,left:left+10},’slow’,function(){
$(this).fadeIn(‘fast’).remove();
var Num = parseInt(obj.find(‘span’).text());
Num–;
obj.find(‘span’).text(Num);
});
$.ajax({
url:”ajax.php?action=cai”,
type:”post”,
data:”answer_id=”+$(this).attr(“alt”),
success:function(datas){
cai.unbind(‘click’);
cai.parent().parent().siblings().children().children().unbind(‘click’);
cai.parent().parent().siblings().children().children().attr(“class”,”evaluate-inner”);
cai.attr(“class”,”evaluate-inner”);
}
});
});
});
//–
/script
/head
body
!–給力開始–
span data-evaluate=”0″ id=”evaluate-1908165795″ class=”evaluate” alog-action=”qb-zan-btn” span class=”evaluate-outer”
!—–判斷對應的回答的id是否在自己創建的存儲贊和踩數據的php文件,如果贊或者踩存在一個的話就不能再單擊—-
span class=”evaluate-inner {if $answer_datas.ans_id|in_array:$zan_list or $answer_datas.ans_id|in_array:$cai_list/}{else/}zhan{/if/}” alt=”{$answer_datas.ans_id/}” b style=”display:none” class=”evaluate-tip evaluate-num-fixed”給力/b b class=”evaluate-num evaluate-num-fixed” span{$answer_datas.goods/}/span/b /span /span /span
!–不給力開始–
span data-evaluate=”0″ id=”evaluate-bad-1908165795″ class=”evaluate evaluate-bad” alog-action=”qb-evaluate-outer” span class=”evaluate-outer” span class=”evaluate-inner {if $answer_datas.ans_id|in_array:$zan_list or $answer_datas.ans_id|in_array:$cai_list/}{else/}cai{/if/}” alt=”{$answer_datas.ans_id/}” b style=”display: none;” class=”evaluate-tip evaluate-num-fixed”不給力/b b class=”evaluate-num evaluate-num-fixed” style=”display: inline-block;”span{$answer_datas.bads/}/span/b /span /span /span
/div
/div
!–評論回答開始–
/body
/html
php
?php
$action=$_GET[‘action’];//獲取get方式傳過來的action
require_once(“array/ovovsys_zan.php”);
switch($action){
case ‘detail’:
/*****贊開始****/
$zan_list = json_decode(str_replace(“‘”,'”‘,$zan_json),true);
$zan_lists=array();
foreach($zan_list as $key=$value){
if($value[‘uid’]==$uid){
$zan_lists[]=$value[‘answer_id’];
}
}
$smarty-assign(‘zan_list’,$zan_lists);//查詢當前登錄的會員的uid對應的點贊的回答
/*****贊結束****/
/*****踩開始****/
$cai_list = json_decode(str_replace(“‘”,'”‘,$cai_json),true);
$cai_lists=array();
foreach($cai_list as $key=$value){
if($value[‘uid’]==$uid){
$cai_lists[]=$value[‘answer_id’];
}
}
$smarty-assign(‘cai_list’,$cai_lists);//查詢當前登錄的會員的uid對應的踩的回答
/*****踩結束****/
$smarty-display(‘自己的靜態頁面’);
exit();
break;
}
?
ajax
?php
require_once(“array/ovovsys_zan.php”);//這裡引用array文件夾中的數組文件
$action=trim($_GET[‘action’]);
if(empty($action)){
echo ‘font color=red參數錯誤!/font’;exit();
}
switch($action){
case ‘zan’://點贊(給力)
//$zan_json是數組文件中設置的數組變數,存的是json數據—-1
$zan_array = json_decode(str_replace(“‘”,'”‘,$zan_json),true);
//獲取當前的會員的uid—–2
$user_answer[‘uid’]=$uid;
//獲取對應的贊的回答的id—-2
$user_answer[‘answer_id’]=$_POST[‘answer_id’];
//將會員的uid和答案的id一塊的數組放到指定的數組中—-3
$zan_array[]=$user_answer;
$config_path = ‘shuzu/ovovsys_zan.php’;
if(!file_exists($config_path)){
$Base-ErrorMsg(‘文件錯誤:shuzu/ovovsys_zan.php 不存在!’);exit();
}
//將指定的數組轉換成json數據,並且將雙引號轉換成單引號,不然放到數組文件中後會出錯—-4
$zan_new_json = str_replace(‘”‘,”‘”,json_encode($zan_array));
$fp = @fopen($config_path,’r+’);
if(!$content = @fread($fp,filesize($config_path))){
$Base-ErrorMsg(‘無法讀取shuzu/ovovsys_zan.php文件!’);exit();
}
//執行替換,將數組文件中對應的json數據—-5
$content = str_replace(“\$zan_json = \”{$zan_json}\””,”\$zan_json = \”{$zan_new_json}\””,$content);
$fp = @fopen($config_path,’w+’);
@fwrite($fp,$content);
//修改對應的數據表中的數據—-5
$Db-ThisQuery(“update `”.$db_prefix.”ask_answers` set `goods`=`goods`+1 where `ans_id`=”.$user_answer[‘answer_id’].””);
exit();
break;
case ‘cai’://踩(不給力)
$cai_array = json_decode(str_replace(“‘”,'”‘,$cai_json),true);
$user_answer[‘uid’]=$uid;
$user_answer[‘answer_id’]=$_POST[‘answer_id’];
$cai_array[]=$user_answer;
$config_path = ‘shuzu/ovovsys_zan.php’;
if(!file_exists($config_path)){
$Base-ErrorMsg(‘文件錯誤:shuzu/ovovsys_zan.php 不存在!’);exit();
}
$cai_new_json = str_replace(‘”‘,”‘”,json_encode($cai_array));
$fp = @fopen($config_path,’r+’);
if(!$content = @fread($fp,filesize($config_path))){
$Base-ErrorMsg(‘無法讀取shuzu/ovovsys_zan.php文件!’);exit();
}
$content = str_replace(“\$cai_json = \”{$cai_json}\””,”\$cai_json = \”{$cai_new_json}\””,$content);
$fp = @fopen($config_path,’w+’);
@fwrite($fp,$content);
$Db-ThisQuery(“update `”.$db_prefix.”ask_answers` set `bads`=`bads`-1 where `ans_id`=”.$user_answer[‘answer_id’].””);
exit();
break;
}
?
對應的數據文件(因為創建資料庫時沒有創建踩和贊的再斷,所以這裡就用php文件存變數的方式保存了一下答案對應的贊和踩的數據,其中包含用戶的id和答案的id):
?php
$zan_json = “”;
$cai_json = “”;
?
你沒看錯,就是兩個變數
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/293931.html