1

私はこの機能をプログラムしました

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)


この関数を使用すると、単語が id = 1 に置き換えられますが、他の単語は置き換えられません。

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

4

2 に答える 2

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;
}
于 2012-05-09T16:55:59.827 に答える
0

これは、結果の行をループしていないためです。最初の行でのみコードを実行しています。1 つ以上の行 ( if (mysql_num_rows($sql) > 0)) があることを確認したら、一度に 1 つずつレコードをループし、アクションを実行する必要があります。

詳細については、これを確認してください: http://php.net/manual/en/function.mysql-fetch-array.php

于 2012-05-09T16:56:13.167 に答える