就應該數據庫進行數據存儲,安全!贊功能很簡單,既然是要對文章做功能,那么互動角色就是會員,考慮一個問題,會員需要不需要登錄才能點贊,如果不需要登錄也可以點贊,你需要有個匿名會員。
網站建設哪家好,找成都創新互聯公司!專注于網頁設計、網站建設、微信開發、成都小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了夏河免費建站歡迎大家使用!
那么表方面三個:一個文章表,一個贊表,一個會員表
數據存儲:
會員點擊了贊,相應的數據存到贊的表里面,這個三個表怎么關聯的呢?其核心是贊表,這個表里面存有文章的id號和會員的id號,形成關系。
數據讀取:
文章內容讀取時候,根據文章的id,從贊的表調取相關數據統計,ok。
數據庫設計
先準備兩張表,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中數據庫的連接信息即可。
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?=?"";
?
你沒看錯,就是兩個變量
這個問題應該屬于javascript類,你這樣提問會導致知道分類分到php里去了。
實際上應該是前端控制的,有人說了,可以用jquery的$.post,如果你要用兩個form, 那就不能用$('form')這種方式提交,因為會選到兩個Form,可以分別加標示區分
form?id='good'
/form
form?id='bad'
/form
script
$('#good').submit();
/script
而且點贊和踩,這種功能,不需要用到form, 兩個Button就可以了
分享題目:php數據庫點贊功能 php點贊的代碼
網頁地址:http://vcdvsql.cn/article24/dopjgje.html
成都網站建設公司_創新互聯,為您提供網站建設、服務器托管、品牌網站建設、定制網站、全網營銷推廣、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯