【问题标题】:PHP/MySQL (eFiction) Preventing Multiple Ratings from single userPHP/MySQL (eFiction) 防止单个用户多次评分
【发布时间】:2017-06-26 00:38:57
【问题描述】:

在我的网站(使用 CMS eFiction)上,如果用户没有将记录在表格中的章节评分为 -1,则用户可以对第 1-10 章的章节评分。我想防止用户留下多个评分。我的 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,只是不要写,如果没有记录显示在应用程序端显示您为-1 显示的内容。之后,您可以根据需要在列上设置唯一键(类似于唯一的(用户 ID、章节、书籍 ID))。
  • 欢迎来到 Stack Overflow!不要被 cmets 气馁。你的第一个问题很好,很快就会很好。
  • @chris85 这就是 eFiction 软件的设置方式,如果用户不给章节评分,评分会记录为 (-1),我不确定我将如何开始更改那。每个评论/评分都会在 reveiwid 列下使用唯一 ID 记录

标签: php mysql templatepower


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答,我编辑了上面的代码,所以它至少不再给我一个致命的 mysql 错误,但它仍在记录评级。我尝试了您发布的 2 种方法,但它们都给了我错误,if($ratecount.count != 0) 给了我“可捕获的致命错误:无法将类 mysqli_result 的对象转换为字符串”,而if($ratecount["count"] != 0) 给了我“未捕获的错误:无法使用在 review.php 中键入 mysqli_result 作为数组堆栈跟踪:#0 {main} 在第 X 行的 reviews.php 中抛出。 eFiction 非常古老,所以它甚至可能不是用正确的 PHP 形式编写的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2014-08-13
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多