Поисковая система с несколькими ключевыми словами

У меня есть поисковая система, которая является работает, но только когда я ищу 1 слово. Всякий раз, когда я ищу несколько ключевых слов, я получаю только 1 результат.

Пример: в моей базе данных есть теги «test» и «hello»;
Всякий раз, когда я вхожу в «тест привет» и нажимаю «Поиск», отображается:

1 результат привет (это заголовок сообщения с тегом = привет).

Мой код (search.php — страница, где я получаю результаты поиска):

<?php

$button = $_GET ['submit'];
$search = $_GET ['search'];

if(!$button) {
echo "you didn't submit a keyword";
} else {
if(strlen($search)<=1) {
echo "Search term too short";
} else {
echo "You searched for <b>$search</b> <hr size='1'></br>";
mysql_connect("localhost","root","root");
mysql_select_db("myschool");

$search_exploded = explode (" ", $search);

foreach($search_exploded as $search_each) {
$x = NULL;
$construct = NULL;
$x++;
if($x==1) {
$construct .="tag LIKE '%$search_each%'";
} else {
$construct .="OR tag LIKE '%$search_each%'";
}

$construct ="SELECT * FROM posts WHERE $construct";
$run = mysql_query($construct);

$foundnum = mysql_num_rows($run);

if ($foundnum==0) {
echo "Sorry, there are no matching result for <b>$search</b>.";
} else {
echo "$foundnum results found !<p>";

while($runrows = mysql_fetch_assoc($run)) {
$title = $runrows ['title'];
$tag = $runrows ['tag'];

echo "<a href='#'><b>$title</b></a><br>";

}
}

}
}
}
?>

Проблема, вероятно, вокруг $x=++ частично, потому что я считаю, что движок не отображает или даже не просматривает все строки в базе данных, и не отображает, когда число строк num> 1.

Заранее спасибо, ребята.

РЕДАКТИРОВАТЬ :

Теперь я получаю несколько результатов с кодом выше, но я получаю их в этой форме:

Вы искали привет тест постар

1 результатов найдено!
ПРИВЕТ
1 результатов найдено!

Тестовое задание
1 результатов найдено!

поста ноу

Как я могу сделать так, чтобы он добавлял результаты в 1 месте, а не говорил это каждый раз, когда находит новый результат для другого ключевого слова?

0

Решение

Вам нужно запустить переменную $ x перед оператором foreach и не устанавливать ее как ноль, если вы хотите использовать ее как целое число.

Переменная $ construct имеет ту же ошибку, вы должны иметь один и тот же ответ три раза, потому что вы должны закрыть оператор foreach перед вызовом mysql select.

$x = 1;
$construct = NULL;

foreach($search_exploded as $search_each)
{
if($x==1) {
$construct .="tag LIKE '%$search_each%'";
} else {
$construct .="OR tag LIKE '%$search_each%'";
}
$x++;
}
$select ="SELECT * FROM posts WHERE $construct";
...

Последнее редактирование

<?php

$button = $_GET ['submit'];
$search = $_GET ['search'];

if(!$button) {
echo "you didn't submit a keyword";
} else {
if(strlen($search)<=1) {
echo "Search term too short";
} else {
echo "You searched for <b>$search</b> <hr size='1'></br>";
mysql_connect("localhost","root","root");
mysql_select_db("myschool");

$search_exploded = explode (" ", $search);
$x = 1;
$construct = '';

foreach($search_exploded as $search_each) {
if($x==1) {
$construct .="tag LIKE '%$search_each%'";
} else {
$construct .="OR tag LIKE '%$search_each%'";
}
$x++;
}

$select ="SELECT * FROM posts WHERE $construct";
$run = mysql_query($select);

$foundnum = mysql_num_rows($run);

if ($foundnum==0) {
echo "Sorry, there are no matching result for <b>$search</b>.";
} else {
echo "$foundnum results found !<p>";

while($runrows = mysql_fetch_assoc($run)) {
$title = $runrows ['title'];
$tag = $runrows ['tag'];

echo "<a href='#'><b>$title</b></a><br>";

}
}
}
}
?>
0

Другие решения

У вас есть пара проблем в вашем коде. Вы пропустили " на этой линии:

echo "Sorry, there are no matching result for <b>$search</b>";

И последнее else не имеет if

0

По вопросам рекламы [email protected]