我有一些问题,我创建了一个页面来阅读新闻,如果页面打开,它将在我的数据库字段中更新为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中
答案 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会让用户再次被计算在内)但总的来说它应该足够好了。