как вернуть отфильтрованные строки в html-таблицу с помощью PHP (без MySQL)

В моем html у меня есть функция поиска, когда при нажатии кнопки отправки запускается функция PHP, которая должна отфильтровывать строки, которые не содержат искомое слово, и только строки в таблице HTML, содержащие отображаемый список слов на стр. Моя таблица HTML создается с использованием PHP, который читает книги из TXT-файла. Мой код возвращает строки из текстового файла вместо фильтрации результатов таблицы. Любая помощь, пожалуйста?

HTML

<form action="search.php" method="POST">
    <p>Enter Word to Search</p>
    <p>
        <input type="text" name="search_term"/> 
    <input type="submit" value="Search"/>    
    </form>

PHP

 $search_term = $_POST['search_term'];

            foreach($books as $book){
              $book_formatted = str_replace('|', '', $book);

              $pos = stripos($book_formatted, $search_term);       

            if($pos === false){
                print "Not found";
            }else{
              $book_formatted = substr($book_formatted, 0, $pos);
              $book_formatted = trim($book_formatted);

              $pos2 = stripos($book_formatted, $search_term);

              if($pos2 === false){
                  print "Not found in the list";
              }else{
                  print "Titles that match: ". $book_formatted;
                }
               }
              }

Всего 1 ответ


Не видя, как выглядят $books или даже $book , кажется, что каждый поиск не удался из-за этого:

$book_formatted = substr($book_formatted, 0, $pos);

Если ваша книга была «ABC Book», и ваш поиск был «Бо», первые полоса дали бы вам результат 4, что не было бы ложным, поэтому он переместился в ваш раздел. Но затем вы снова подпишите имя книги, отрубив имя до «ABC» и выполните другой поиск «Bo», который тогда обычно терпит неудачу.

Возможно, вы пытались получить поисковый запрос и все после него? в этом случае просто используйте

$book_formatted = substr($book_formatted, $pos);

который вернет «Книгу». В этом случае второй поиск бессмыслен, потому что он всегда будет возвращать 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 не пуст, поэтому, если вы не выполняете поиск, все строки будут показаны.


Есть идеи?

10000