2012-02-26 2 views
0

Если я имею базу данных my_table (id,word) следующегоошибки при использовании сравнения кода

my_table (id,word)

и я уже некоторые писал текст под название $name то я хочу знать, если $name есть слово, как слова я уже хранящиеся в моя база данных my_table (id,word)

поэтому я использую этот код

$name = "Hello lovely world"; // no bad words 

$sql = "SELECT * FROM my_table"; 
$result = mysql_query($sql); 

$commentArray = explode(" ", $name); 
$counter  = count($commentArray); 
$check  = 0; 

while ($row = mysql_fetch_assoc($result)) { 

    for ($i == 0; $i < $counter; $i++) { 

     if (strcasecmp($commentArray[$i], $row['word'])) { 
      $check = 1; 
     } 

    } 

} 

if ($check == 1) { 
    echo "banned"; 
    exit; 
} 
else { 
    echo "passed"; 
} 

однако это lways приводит к echo "banned";, даже если i $name не содержит никаких плохих слов, которые я сохранил в my_table, поэтому здесь может быть что-то не так!

anyhelp

+0

Спасибо всем, теперь он работает отлично, и я добавил в свой разум 1) strcasecmp возвращает 0, когда он соответствует 2) Дополнительная забота о синтаксических ошибках. –

ответ

4

strcasecmp возвращает 0 в случае совпадения (PHP manual), так что вы должны изменить код:

if (strcasecmp($commentArray[$i], $row['word']) == 0) 

Кроме того, у вас есть ошибка синтаксиса в ваш цикл. Он должен быть for ($i = 0; ...

+0

~ спасибо, он отлично работает, никогда не знал о возврате strcasecmp 0, когда он соответствует ранее, я просмотрю руководство по php. –

+0

Спасибо. Руководство по PHP всегда помогает. –

1

У вас есть синтаксическая ошибка.

for ($i = 0... 

И не

for ($i == 0... 

Кроме того, вы должны отступы ваш код правильно, он выглядит лучше, и это поможет вам в дальнейшем.

1

Вещь strcasecmp возвращает 0, если строки равны. Вы должны изменить его на if (strcasecmp($var1, $var2) == 0).

1

В качестве отправной точки я предлагаю хранить только нижние слова в таблице, сначала вдавливая текст ввода, а затем заменяя весь цикл strcasecmp in_array($row['word'], $commentArray);. И break; после первого матча.

Но весь этот подход не масштабируется - вы выбираете все записи в таблице. Если ваш стол вырастет выше определенного размера, это будет серьезным узким местом, и вам нужно будет найти соответствие на стороне БД.

+0

спасибо, я рассмотрю это. –