PHP中的帖子冷却时间

时间:2015-09-03 13:17:49

标签: php post input

我有一个非常基本的PHP聊天系统。唯一的事情是添加一行$ user和$ message到log.html。

但是,用户可以通过多次按输入或按输入来发送垃圾邮件。这导致网站滞后。

我想制作一个0.3秒的冷却系统。 如果它处于冷却状态,请不要让用户在0.3秒内发布或停用输入。

我该怎么做?

在这里,我的代码:

index.php 包含两件事。 " log.html"和这些代码

    <form name="message" action="">
        <div class="input-group dropup" id="bottom">
  <input type="usermsg" type="text" id="usermsg" maxlength="65" autocomplete="off" class="form-control" placeholder="Type your message here.">
        <span class="input-group-btn">
    <button class="btn btn-success" type="submit" name"submitmsg" id="submitmsg">Send</button>
  </span>
</div>
</form>

post.php包含这些代码

<?
session_start();
if(isset($_SESSION['name'])){

$text = $_POST['text'];

$sp = fopen("player_log.html", 'a');
fwrite($sp, "<div class='msgln'>[" .date("Y-m-d"). "-".date("g:i A"). " | " .$_SERVER['REMOTE_ADDR']."] <b>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>");
fclose($sp);

// SOME str_replace CODES FOR EMOTICONS, BANNED TEXTS ETC..

$fp = fopen("log.html", 'a');
fwrite($fp, "<div class='msgln' style='color: #BDBDBD;'><b style='color: #FFBF00;'>[Player]&nbsp;".$_SESSION['name'].":</b> ".$finaltext."<br></div>");
fclose($fp);
}
?>

4 个答案:

答案 0 :(得分:2)

您可以尝试在JavaScript中使用setTimeout()函数。按Enter键时,禁止用户输入另一条消息(我无法评论如何执行此操作,因为您没有发布任何代码)。然后使用setTimeout()函数在x秒后启用输入(下面显示3秒后的警报):

setTimeout(function(){ 
    alert("Hello"); 
}, 3000);

如果您需要更多帮助,请展开您的问题并向我们展示一些代码。

阅读了您发布的代码后,可能值得做其他人建议的内容 - 检查内容是否为空且不发布。但是,这仍然不会阻止用户发送一封信回复垃圾邮件。如果您希望用户快速输入消息并发布消息,我相信超时会最有效。如果您只想阻止用户按住Enter,那么检查空消息可能会更好。最好的解决方案(在我看来)是使用这两种技术,因为它会阻止用户快速发送垃圾邮件并阻止用户输入空白邮件。

答案 1 :(得分:0)

禁用输入不是一个好的解决方案。它会破坏用户体验,用户也会因此而讨厌你。

如果邮件为空或仅包含空格或禁止的字符,更好的方法是不执行任何操作。

答案 2 :(得分:0)

当您的用户输入消息并收到消息时,只需在会话变量中添加时间戳即可。当用户再次发送消息时,请使用当前时间戳检查会话中的时间戳。 http://php.net/manual/de/datetime.gettimestamp.php

答案 3 :(得分:0)

更改此

$text = $_POST['text'];

到此

$text = $_POST['text'] || exit(); 

这样,如果用户没有发布任何内容,则不会发生任何事情。