我想创建一个侧边栏,显示按点击排序的前5篇文章。我正在使用Codeigniter。我编写了简单的查询。 在视图中,我有简单的链接:
<a href="<?php echo base_url() ?>/article/<?php echo $row['article'];?>"><h2><?php echo $row['particle'];?></h2></a>
我的模特:
public function count_views($id)
{
$sql = "UPDATE article SET views = views +1 WHERE id = '{$id}'";
$this->db->query($sql);
}
我的控制器:
public function article($article_id) {
$link = $this->quotes_model->get_article($article_id);
$this->quotes_model->count_views($article_id);
$views = $this->quotes_model->popular_articles();
$this->template->set('views', $views);
$this->template->render();
}
当我按文章标题链接(在mysql字段视图中更新+1)时,它会打开一篇完整的文章。一切都很好,但如果我按下刷新,字段视图会再次按+1更新。
如果有人刷新一篇开放的文章,mysql不应该再次更新视图字段+1吗? P.S对不起我的英语。
答案 0 :(得分:0)
您应该通过使用System Ip或浏览器会话ID来控制它,以获得唯一的页面匹配。
使用
session_id();
或
$_SERVER
获取ip地址的变量。
答案 1 :(得分:0)
在表article
中添加两个字段:
ip_address -> ip address of the user.
visited_date -> date time
现在,当用户第一次打开文章时,它将与DATE和TIME一起记录。
如果他/她刷新页面,请检查数据库中的数据,如果不存在,请将其插入。
如果您每个用户只需要访问一次,请不要查看日期,否则请查看日期。