2012-05-09 7 views
1

私はこの機能を使用する場合、それは、ID = 1で単語を置き換えますが、他の言葉を置き換えるものではありません。この関数にphp単語フィルタ機能?

function bad_words($val){ 
    global $pre; 
    $sql = mysql_query("SELECT * FROM " . $pre . "BAD_WORDS") or die(mysql_error()); 
    $rs = mysql_fetch_assoc($sql); 
    if (mysql_num_rows($sql) > 0) { 
     $bad_words = $rs['BAD_WORD']; 
     $replace = $rs['REPLACE']; 
    } 
    $val = str_ireplace($bad_words, $replace, $val); 
    return $val; 
} 

BAD_WORDS Table (ID, BAD_WORD, REPLACE)


をプログラムしました。

私には何が欠けていますか?

+3

[。場合は、あなたが冒涜フィルタの考え方にいくつかのフィードバックをしたい](http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad -idea-or-incredibly-intercoursing-bad-idea.html) –

+0

'$ pre'変数には何がありますか? – Ibu

+1

「グローバル」は悪い言葉だとも考えています。 mysql_ *と同様にbtw。 – PeeHaa

答えて

2

テーブルから最初の行のみをフェッチしています。ループを使用して、結果セット内のすべての行 を反復処理する必要があります。

function bad_words($val) 
{ 
global $pre; 
$sql = mysql_query("SELECT * FROM " . $pre . "BAD_WORDS") or die(mysql_error()); 

if (mysql_num_rows($sql) > 0) { 
    while($rs = mysql_fetch_assoc($sql)) { 
     $bad_words[] = $rs['BAD_WORD']; 
     $replace[] = $rs['REPLACE']; 
    } 
} 
$val = str_ireplace($bad_words, $replace, $val); 
return $val; 
} 
+0

wow
tharさんの作品100%
ありがとう –

0

これは、結果の行をループしていないため、最初のコードのみを実行しているからです。 1つ以上の行(if (mysql_num_rows($sql) > 0))があると判断したら、レコードを1つずつループして処理を実行する必要があります。

以上のチェックこれを:http://php.net/manual/en/function.mysql-fetch-array.php

関連する問題