2015-09-03 78 views
2

我有一個非常基本的PHP聊天系統。只有後期做的事情是在log.html中添加一行$ user和$ message。冷卻崗位在PHP

但是用戶可以拿着進入或按進入多次垃圾郵件。這導致網站滯後。

我想製作一個類似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); 
} 
?> 

回答

0

禁止輸入不是一個很好的解決方案。它會破壞用戶體驗,用戶會因此而憎恨你。

如果郵件爲空或僅包含空格或禁止的字符,則更好的方法是不做任何事情。

+0

從個人體驗來看,大多數用戶在5秒鐘的暫停時間內不會注意到任何東西,因爲他們無法再輸入其他消息。由於Eren只想在一秒鐘內停下來停止,大多數用戶不會注意到(您能鍵入內容並在1秒內按下回車鍵嗎?) – mfisher91

+0

您對OK + Enter有什麼看法? :)另外,如果忘記了某些東西,大多數聊天人(包括我自己)都會再次快速打字。以任何方式阻礙用戶從來都不是一個好主意。 – beerwin

+1

我也經常在忘記一些東西后打字。但我不認爲用戶想要禁用人們輸入,而僅僅是提交他們輸入的內容。 – mfisher91

2

你可以嘗試在JavaScript中使用setTimeout()函數。當按下Enter時,禁止用戶輸入另一條消息(我無法評論如何執行此操作,因爲您沒有發佈任何代碼)。然後使用的setTimeout()函數來啓用後x秒量輸入(下圖爲在3秒後警報):

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

如果你想要更多的幫助,擴大你的問題,我們看一些代碼。

通讀您發佈的代碼後,可能值得做別人建議的內容 - 檢查內容是否爲空並且不要發佈。但是,這仍然不會阻止用戶用一封信回覆垃圾郵件。如果您希望用戶快速輸入郵件併發布郵件,我相信超時時間最適合。如果你只想阻止用戶按下輸入,檢查空郵件可能會更好。在我看來,最好的解決方案是使用這兩種技術,因爲它可以阻止用戶快速發送垃圾郵件,並阻止用戶輸入空白郵件。

+0

好,謝謝。我會嘗試。順便說一下,我添加了我的代碼。 – Eren

0

更改此

$text = $_POST['text']; 

對此

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

如果用戶的帖子沒有,什麼都不會發生這種方式。

+0

它使人們發佈「1」(不帶引號)而不是消息。 – Eren