【问题标题】:What is wrong with my view counter我的视图计数器有什么问题
【发布时间】:2013-12-17 21:01:30
【问题描述】:

我正在尝试创建一个查看计数器,每次有人查看该页面时计数。

我的代码:

$old_views = $thread_view_count;
$new_views = $thread_view_count + 1;
$sql3 = mysql_query("UPDATE forum_posts SET view_count='.$new_views.' WHERE id='.$thread_id.'");

计数器不会更新页面的视图。我没有收到任何错误,它只是不起作用。

请帮助我,我是 PHP 新手,所以不要给我带来困难并摧毁我的自信心

谢谢

  • 山姆

【问题讨论】:

  • 你检查mysql_error 是否返回了一些东西吗?我猜是的。我不认为没有错误。如果 mysql_query 返回一个布尔值false,则表示有错误。如果您坚持使用已弃用的接口,则需要检查一下。
  • "更新 forum_posts SET view_count="."$new_views。" WHERE id=".$thread_id
  • 找一个好用的带有语法高亮的IDE,以后可以避免这些问题。试试 netbeans IDE。
  • 您不是properly escaping values,这可能会导致严重的SQL injection bugs,并且您正在使用已弃用的mysql_query,不应在新应用程序中使用它,因为它已从未来版本的PHP 中删除。像PDO is not hard to learn 这样的现代替代品。像PHP The Right Way 这样的指南展示了如何避免犯这些错误。

标签: php mysql view counter


【解决方案1】:

您正在混合使用单引号和双引号。您从双引号开始,然后使用单引号插入变量,这将在查询中作为字符串进行评估。

$sql3 = mysql_query('UPDATE forum_posts SET view_count='.(integer)$new_views.' WHERE id='. (integer)$thread_id);

还请注意,我将您的值转换为整数,以便您知道整数被传递到数据库中。

【讨论】:

  • 非常感谢。有效。不过我还不能接受你的回答,我得等10分钟。谢谢
  • @user3112869 很高兴为您提供帮助。我还想建议您考虑保护自己免受 SQL 注入。这个查询看起来可能没问题,但只要可以通过用户输入更改查询,您应该将该值转换为数字或使用mysql_real_escape_string() 以确保人们无法删除您的数据库。最佳做法是始终保护自己,即使您认为查询过于简单或沙盒化而无法受到攻击。
  • 还是建议你做view_count=view_count+1,更快,更安全,不用强制转换变量
【解决方案2】:

更简单

$sql3 = mysql_query("UPDATE forum_posts SET view_count=view_count+1 WHERE id='.$thread_id.'");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多