PHP / MySQL(eFiction)防止单个用户的多个评级

时间:2017-06-26 00:38:58

标签: php mysql templatepower

在我的网站上(使用CMS eFiction),用户可以在1-10的章节中留下评分,如果他们不对它在桌面上记录的章节评为-1。我想阻止用户留下多个评级。我的PHP知识非常有限,我相信代码应该在review.php(on github here)的第144行之前。

dbquery("INSERT INTO ".TABLEPREFIX."fanfiction_reviews (item, type, reviewer, review, rating, date, uid, chapid) VALUES ('$item', 'ST', '$reviewer', '$review', '$rating', now(), '".(USERUID && isNumber(USERUID) ? USERUID : 0)."', '$chapid')");

我正在尝试为fanfiction_reviews表编写查询,如果找到与uid(用户)和chapid匹配且具有评级的条目,则抛出一条错误消息,表明他们已经对该章节进行了评分。 ETA:要回答下面的问题,我希望忽略或不记录第二个评级,而不是替换之前的评级。

正如我所提到的,我的PHP是有限的,我只是试图模仿我在其他地方找到的eFiction。编辑:在下面最初更改了useruid = '$uid',这给了我一个致命的mysql错误。我将其更改为uid = '$uid'并停止了错误

$ratecount = dbquery("select count(rating) as count FROM ".TABLEPREFIX."fanfiction_reviews WHERE item = '$item' AND chapid = '$chapid' AND uid = '$uid' AND rating != '-1'");
if($ratecount != 0) $output .= write_error(_MULTIPLERATINGS);

上面粘贴在文件中,它确实给了我“多次评级错误”消息,但它仍然记录了评级。如何让它不记录评级(或将其更改为非评级为-1)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

试试if($ratecount.count != 0) $output .= write_error(_MULTIPLERATINGS);。您也可能需要将其格式化为if($ratecount["count"] != 0) $output .= write_error(_MULTIPLERATINGS);

作为另一种偶然事件,您可能需要遍历结果集,或在其中放置[0]以指示您要访问结果集中第一行的“count”字段。您的里程可能会有所不同,具体取决于dbquery()的作用。请记住,在php中有许多不同的连接方式和与数据库交互的方式,不同的实现可能会以不同的方式返回结果,并且可能遵循略微不同的约定。 AFAIK,dbquery()不是php中的标准函数。