2013-11-27 91 views
2

我已經創建了一個表單,用戶可以添加評論。也許這是非常明顯的,但我怎樣才能避免用戶在文本區域插入一個URL。有沒有辦法檢查這個? 我已經輸入驗證碼來檢查人類。如何防止PHP聯繫表格中的垃圾郵件URL

<form action="" method="POST" name="form"> 
    some other input fields 

      <span id="sprytextarea1"> 
      <textarea name="Comments" cols="50" rows="3" ></textarea> 
      <span class="textareaRequiredMsg">A value is required.</span></span></p> 

    <img id="captcha" src="/securimage/securimage_show.php" alt="CAPTCHA Image" /><input type="text" name="captcha_code" size="10" maxlength="6" /> 

<a href="#" onclick="document.getElementById('captcha').src = '/securimage/securimage_show.php?' + Math.random(); return false">[ Different Image ]</a> 

    <input name="Submit" type="submit" value="Submit your form "> 
      <input type="hidden" name="MM_insert" value="form"> 
      </form> 

歡迎任何建議。

+1

這就是CAPTCHA的目的 - 儘量減少機器人/垃圾郵件(儘管它很容易被工資差異打敗)。現在,人們可以*刪除*所有的URL或類似URL的文本,但這會打敗非垃圾郵件鏈接,並且不會阻止巧妙的表示。或者,要求認證並相信需要時間註冊的人不會發送垃圾郵件。 – user2864740

+1

如何驗證輸入 – Khem

回答

0

使用PHP,您可以使用preg_match()和strip_tags()或它們的組合來嘗試兩件事情。下面將清理textarea,並將其轉義爲數據庫。

一旦提交表單,試試這個。

$post = array(); 

foreach($_POST as $k => $v){ 

// strip all HTML and escape values for database 

$post[$k] = strip_tags(mysql_real_escape_string($v)); 
} 

// check of we have URL in text area 

if(preg_match('/www\.|http:|https:/'i,$post['Comments']){ 

// prevent form from saving code goes here 
echo 'error please remove URLs'; 

}else{ 
// let form be saved 
} 
+0

使用準備好的語句將不安全的內容放入數據庫中。 PDO和MySQLi確實爲他們提供了方法。甚至,mysql_ *函數也被棄用。 –

+0

不完全確定驗證碼是如何防止用戶直接向表單中插入URL,這不是他們所做的。 OP詢問是否有辦法檢查表單並阻止用戶插入URL。上面的代碼應該這樣做。 Captcha似乎可以達到一個目的,並且可以防止漫遊器或非人類的垃圾評論。 – Leon

+0

我沒有談到驗證碼。 –

0

簡單地說,沒有任何自動的方法來檢查輸入文本中的URL。您只需使用人工檢查來獲取用戶輸入。

例如:假設你想申請正則表達式檢查的URL,我想招的話,我可能能寫出無窮的字符串,顯示爲一個URL:

  • HTTP:例如.COM
  • h ttp:// ecxampleDOTcom
  • ht-tp:/// ecample。 COM

因此,任何的評論系統,以實現最終的垃圾郵件防護,它適用於主持人的評論,其中一個人的檢查內容。

2

只需在if條件下插入db之前。

if(preg_match("/\b(?:(?:https?|ftp|http):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$_POST['comment'])){ 

echo 'error please remove URLs'; 

}else 
{....