как вернуть отфильтрованные строки в HTML-таблицу с помощью PHP (без MySQL) - PullRequest
0 голосов
/ 28 сентября 2018

В моем 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 Ответ

0 голосов
/ 28 сентября 2018

На самом деле не видя, как выглядит $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 не пуст, поэтому, если вы не выполняете поиск, будут показаны все строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...