2012-02-24 50 views
0

這裏是我的嘗試創建禁用的文字工具,但在最後一步我得到錯誤。被禁止的文字應用程序

1 - 創建簡單的形式來輸入字被禁止(ban.php)

<form name="form" method="post" action="add.php"> 
    <textarea name="bad" id="bad"></textarea> 
    <input type="submit" name="submit" id="submit" size="12" value="submit"> 
</form> 

2 - 現在將發佈它通過分貝(add.php)

//DB Connection 
require_once("config.php"); 
$bad = $_POST['bad']; 
$bad = mysql_real_escape_string($bad); 
$bad = nl2br($bad); 
$bad = explode("<br />",$bad); 
foreach ($bad as $value) 
{ 
    $sql = "update my_table set words='$value'"; 
    mysql_query($sql, $conn) or die(mysql_error()); 
} 
echo "Done words added"; 

3-現在如何應用它!檢查我不能做的地方! 我想說當$test="shit";然後,如果$test == any of the words added然後給予禁止的消息,如果沒有,然後給予傳遞的消息。

<?php 
//DB Connection 
require_once("config.php"); 
//example 
$test = "shit"; 
$qry = "select * from my_table"; 
$result = mysql_query($qry) or die($qry); 
$line = mysql_fetch_array($result); 
$words = nl2br($line['words']); 
$words = str_replace('<br />', '', trim($words)); 
if ($test == $words) 
{ 
    echo "bannd"; 
} 
else 
{ 
    echo "passed"; 
} 

問題是我不知道如何與每一個字,因爲所有添加的比較$test存儲在DB這樣

INSERT INTO `my_table` VALUES (1, 'bad\r\nshit\r\ndrugs'); 

所以任何幫助〜謝謝

+2

這裏的問題是你的數據庫。每個單詞應該有它自己的行。將它們組合成「壞\ r \ nshit \ r \ ndrugs」這樣的塊會給你帶來無窮的問題。 – 2012-02-24 18:00:44

+0

好吧,我的想法是在單次提交中添加許多單詞很容易,但我想你的回覆我可能會開始考慮輸入文本每行提交一個單詞,並可能使用ajax以及ummm感謝您的幫助。 – 2012-02-24 18:18:43

+0

只有很多人想要禁止這麼多的詞(相對較小的數據集),只要您管理詞彙以避免重複,它應該可以很好地發揮作用。 – 2012-02-24 18:21:52

回答

1

得到的所有例如,從數據庫中得到一個數組。

$bannedWords = array('shit', 'bannedword2', 'banned word 3'); 

然後你可以這樣檢查它。

if(in_array($word, $bannedWord)) { 
    //Banned word Found 
} else { 
    //No Banned word found 
} 

P.S:你應該重新考慮設計你的數據庫表,你將如何存儲被禁止的單詞的記錄。更好的是在一行中存儲一條記錄。例如。

enter image description here

這種方式,所有它會更容易讓你保持記錄。

+0

謝謝,但如何獲得結果在我提到的例子,因爲我不能存儲每個單詞分隔數據行的結果! 〜任何想法 – 2012-02-24 18:14:46

+0

@JackBen將所有內容存儲在一行中是一個糟糕的主意,嘗試調整數據庫設計,在稍後的時間內,您只會感謝自己。 – 2012-02-24 18:25:50

-2

也許你應該嘗試在單獨的表中存儲單詞?我猜,這會讓更多人感到驚訝。這樣做,你需要生成一個「SELECT * FROM bad_words WHERE word = ...」查詢,或類似的東西。 否則,您只需將您從數據庫獲取的字符串拆分並比較您的$ test變量循環遍歷結果。

0

使用str_replace()函數功能

更換的屏蔽詞陣列,在你被禁止的話陣列

1

你的數據庫設計至少破裂的匹配任何文本一些文本,如* * 第一個數據庫的正常形式(http://en.m.wikipedia.org/wiki/First_normal_form)。更具體地說,它打破了原子性,意味着你在關係(表)中的條目不是原子的。這將是,如果你願意,例如,有表條目:

  • 藥物(ID 1)
  • 狗屎(ID 2)

之後,比較是直截了當的。

相關問題