2014-01-06 74 views
0

我有一些問題,我創建一個頁面來閱讀新聞,如果頁面打開它將在我的數據庫字段更新爲news_read +1,但我想如果頁面刷新用戶不是+1避免人們刷新頁面?

這是我在頁面

$q="SELECT*FROM t_news WHERE news_id=$b_id"; 
    $dataJ=mysql_query($q); 
    $a=mysql_fetch_array($dataJ); 
    $plus=$a['news_read']+1; 
mysql_query("UPDATE t_news set news_read=$plus WHERE news_id=$a[news_id]"); 

有誰知道查詢,如何刷新頁面後禁用$plus=$a['berita_dibaca']+1;

UPDATE

UPDATE

感謝所有,我已經解決了我的問題與會議

我把

if ($_SESSION['load']==1){ 
     $_SESSION['load']=0; 
    } 
在我所有的頁面的

除了read.php和我把

if ($_SESSION['load']==0) 
    { 
     //QUERY 
    } 
    $_SESSION['load'] = 1; 

in read.php

+0

運行更新是referer不是當前頁 – dagfr

回答

1

方法1. 保存cookie,如果用戶有cookie,則不更新數據庫。

方法2.(更好) 保存已查看此文章的用戶,如果用戶在列表中,請勿更新數據庫。

提示:

UPDATE t_news set news_read = news_read + 1 WHERE news_id = $a[news_id] 

,以避免無用的查詢。

+0

我不使用cookie在我的網站 – Mamen

+0

以及如果它是一個匿名用戶? –

+1

嗯,你總是可以嘗試使用庫來檢測返回的訪問者(使用緩存的圖像,會話,cookies,瀏覽器+ IP匹配等) – Valdas

0

這不是一個用sql解決的問題,而是用HTTP解決的問題。

刷新頁面和初始請求之間基本沒有區別。有兩個只有HTTP命令。兩個請求的標題可能有所不同,但您不能始終確定它們存在。所以使用引用者可能不是一個好主意。

除了Valdas回答Cookie,您還可以使用您的用戶的會話並在那裏設置一個標誌。 (雖然大部分會議實現都還使用Cookie,但以另一種方式)

0

此方法不要求用戶在登錄:

session_start(); // ignore if you're already using sessions 
if(!isset($_SESSION['has_read_news'])) $_SESSION['has_read_news'] = array(); 
if(!isset($_SESSION['has_read_news'][$b_id])) { 
    mysql_query("UPDATE `t_news` SET `news_read`=`news_read`+1 WHERE `news_id`=".$b_id); 
    $_SESSION['has_read_news'][$b_id] = true; 
} 

請注意,這不是一個完全萬無一失(清除會話cookie將允許用戶再次計數),但總體上應該足夠好。

+0

什麼是$ _SESSION ['has_read_news'] [$ b_id] = true;功能? – Mamen

+0

設置會話變量... –

相關問題