避免人们刷新页面?

时间:2014-01-06 14:46:23

标签: php html

我有一些问题,我创建了一个页面来阅读新闻,如果页面打开,它将在我的数据库字段中更新为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;

更新

更新

谢谢大家,我用会话解决了我的问题

我把

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

在我的所有页面中,除了read.php和我把

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

在read.php中

3 个答案:

答案 0 :(得分:1)

方法1。 保存cookie,如果用户有cookie则不更新数据库。

方法2.(更好) 保存已查看过本文的用户,如果用户在列表中,则不更新数据库。

提示:

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

避免无用的查询。

答案 1 :(得分:0)

这不是用sql解决的问题,而是使用HTTP。

页面刷新和初始请求之间基本没有区别。这两个只是HTTP命令。两个请求的标头可能有所不同,但您无法始终确定它们存在。所以使用引用者可能不是一个好主意。

除了Valdas用cookie回答你也可以使用你的用户的会话并在那里设置一个标志。 (虽然大多数会话实现也使用cookie,但以另一种方式)

答案 2 :(得分: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会让用户再次被计算在内)但总的来说它应该足够好了。