发布量我有一个注释部分,并回复了我的社交网络上的评论部分。我们在手动垃圾邮件发送者方面遇到了一些麻烦,并且我将限制某人每天可能发布的评论数量。如何限制的评论或回复评论的用户可以为每个
以下是评论的插入查询和回复意见:提前
发布量我有一个注释部分,并回复了我的社交网络上的评论部分。我们在手动垃圾邮件发送者方面遇到了一些麻烦,并且我将限制某人每天可能发布的评论数量。如何限制的评论或回复评论的用户可以为每个
以下是评论的插入查询和回复意见:提前
您已经可以通过用户当前日期进行选择,看看有多少项是表:
SELECT COUNT(*)
FROM CysticAirwaves
WHERE userid = $auth->id
AND date = CURDATE()
那么只有执行INSERT
如果数量低于您的门槛。或者,你可以放在做这个检查每INSERT
和弹跳通话以及在INSERT
触发。 (“最佳实践”将其放置在数据库中,因为这将是一个与数据库相关的限制,但这是你的电话)
它已经有一段时间,因为我已经做了MySQL的触发器,但我认为认为这是你追求的:
delimeter |
CREATE TRIGGER reply_threshold BEFORE INSERT ON CysticAirwaves_replies
FOR EACH ROW BEGIN
DECLARE reply_count INT;
SET reply_count = (SELECT COUNT(*) FROM CysticAirwaves_replies WHERE userid = NEW.userid AND `date` = CURDATE());
IF reply_count > 5 THEN
SIGNAL SQLSTATE SET MESSAGE_TEXT = 'Too many replies for today';
END IF;
END;
|
delimeter ;
从本质上讲,如果你去插入表中的一个回复,并将超过阈值,SQL错误将引发停止动作。您不能“防止”每插入一次插入,但是您可以引发一个异常,使其突破。
//COMMENTS
$query = "INSERT INTO `CysticAirwaves` (
`FromUserID`,
`ToUserID`,
`comment`,
`status`,
`statusCommentAirwave`,
`date`,
`time`
) VALUES (
'" . $auth->id ."',
'" . $prof->id ."',
'" . mysql_real_escape_string($_POST['ProfileComment']) ."',
'active',
'active',
'" . date("Y-m-d") . "',
'" . date("G:i:s") . "')";
mysql_query($query,$connection);
if($auth->id == $prof->id) {
$just_inserted = mysql_insert_id();
$query = "UPDATE `CysticAirwaves` SET `status` = 'dead' WHERE `FromUserID` = '" . $auth->id . "' AND `ToUserID` = '" . $prof->id . "' AND `id` != '" . $just_inserted . "'";
$request = mysql_query($query,$connection);
}
//REPLIES
$query = "INSERT INTO `CysticAirwaves_replies` (
`AirwaveID`,
`FromUserID`,
`comment`,
`status`,
`date`,
`time`
) VALUES (
'" . mysql_real_escape_string($_POST['comment']) . "',
'" . $auth->id . "',
'" . mysql_real_escape_string($_POST['reply']) . "',
'active',
'" . date("Y-m-d") . "',
'" . date("G:i:s") . "'
)";
mysql_query($query,$connection);
$mailto = array();
/* get the person that wrote the inital comment */
$query = "SELECT `FromUserID` FROM `CysticAirwaves` WHERE `id` = '" . mysql_real_escape_string($_POST['comment']) . "' LIMIT 1";
$request = mysql_query($query,$connection);
$result = mysql_fetch_array($request);
$comment_author = new User($result['FromUserID']);
感谢您只能通过IP地址限制这个,当你没有登录系统。但IP可以改变,这就是问题所在。
的最佳方式是通过登录到固定的形式。只有用户登录后才能发布。
最后一种技术是使用像Recaptcha这样的验证码,然后大多数时候机器人会将您的表单和垃圾邮件填写到您的系统。
当你有一个登录。然后制作一个与您的使用情况相关的表格并计入INSERTS。在您插入新评论之前,请检查表格是否今天有INSERT。
之前插入注释,你检查,如果用户已张贴在每天超过5个评论。 如果是的话,你不插入注释和你显示一个消息。
SELECT COUNT(*) FROM CysticAirwaves_replies WHERE FromUserID = the_user_id AND date = CURDATE()
除了在每次插入之前进行计数,您可以直接存储用户在某处的评论数量,因此您不必每次都进行计数(*)(如果用户有很多评论和你的桌子有点大)。
一样,对评论:
SELECT comment_count FROM comment_count_table WHERE user_id = ?
如果该值足够小,你这样做:
UPDATE comment_count_table SET comment_count = comment_count + 1 WHERE user_id = ?
小心这一点,因为你需要以某种方式重设计数器。 在我的公司,我们实施了这个设置“最后修改字段”。当我们做SELECT时,如果“最后修改日期”不是今天,那么我们重置计数器。
另一种选择是有一个cron作业,每天为所有用户重置一次计数器,但这太昂贵了。
所以我会把它放在插入查询之前,而不是像它后面插入查询一样的“if(COUNT(*))<5 {}”。 – LightningWrist 2012-04-05 17:40:23