На самом деле не видя, как выглядит $books
или даже $book
, кажется, что каждый поиск потерпит неудачу из-за этого:
$book_formatted = substr($book_formatted, 0, $pos);
Если бы ваша книга была "ABC Book""и ваш поиск был" Бо ", первые полоски дадут вам результат 4, который не является ложным, поэтому он перемещается в ваш раздел else.Но затем вы снова вводите в строку название книги, сокращая название до «ABC» и выполняете другой поиск «Bo», который обычно завершается ошибкой.
Возможно, вы пытались получить поисковый запрос и все после него?в этом случае просто используйте
$book_formatted = substr($book_formatted, $pos);
, который вернет «Book».В этом случае второй поиск не имеет смысла, потому что он всегда будет возвращать 0. Если больше ничего не предоставлено, он должен работать, если вы просто отформатируете название книги, как хотите, и напечатаете его в первом операторе else вместо выполнения второгоstripos.
РЕДАКТИРОВАТЬ:
где-то на вашей странице у вас, вероятно, есть цикл печати строк таблицы:
foreach($books as $book){
...
print "<tr><td>" . $book . "</td></tr>";
...
}
в основном скопируйте весь ваш код в этот цикл вокруг этогонапечатать такую строку
$search_term = $_POST['search_term'];
...
// this should be the loop on your page that is printing the contents of the table
foreach($books as $book){
...
$book_formatted = str_replace('|', '', $book);
$pos = stripos($book_formatted, $search_term);
if($search_term == "" || $pos !== false) {
// this should be whatever line, or group of lines, that is printing the table rows
print "<tr><td>" . $book_formatted. "</td></tr>";
}
}
Важно отметить, что позиция поиска важна только в том случае, если $ search_term не пуст, поэтому, если вы не выполняете поиск, будут показаны все строки.