У меня есть поисковая система, которая является работает, но только когда я ищу 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 месте, а не говорил это каждый раз, когда находит новый результат для другого ключевого слова?
Вам нужно запустить переменную $ 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>";
}
}
}
}
?>
У вас есть пара проблем в вашем коде. Вы пропустили "
на этой линии:
echo "Sorry, there are no matching result for <b>$search</b>";
И последнее else
не имеет if