Как я могу вернуть результаты для найденных элементов. но также иметь список не найденных элементов

#php #html

#php #HTML

Вопрос:

В настоящее время у меня есть форма поиска HTML, которая принимает несколько входных данных (например: 123456, 654321, 789456). Я использую PHP для поиска в базе данных, чтобы узнать, существуют ли числа в виде номера элемента. Затем он возвращает информацию об этих элементах в повторной таблице.

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

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

Моя форма и генерация таблицы приведены ниже:

 <div id="div1">
            <!-- [SEARCH FORM] -->
        <form method="post" action="nweb.php" id="testform">
        <h1>Product Information</h1>
        <!-- <input type="text" name="search" required/> -->
        <textarea name="search" cols="40" rows="5" form="testform"></textarea>
        <input type="submit" value="Search"/>
        </form>

<?php
    if (isset($_POST['search'])) {
      // SEARCH FOR ITEMS
      require "2-search.php";
      
      // DISPLAY RESULTS
      if (count($results) > 0) {
        echo "number found ".count($resultsArray)."<br>";

 echo "<table>";
        echo "<thead>";
        echo  "<tr>";
        echo    "<th>Item number</th>";
        echo    "<th>Stock available</th>";
        echo    "<th>Available Stock</th>";
        echo    "<th>Detailed Description</th>";
        echo    "<th>Division</th>";
        echo    "<th>Gender</th>";
        echo    "<th>Group</th>";
        echo    "<th>Subgroup</th>";
        echo  "</tr>";
        echo "</thead>";
      foreach ($resultsArray as $results) {
        
        foreach ($results as $r) {

            echo "<tbody>";
            echo  "<tr>";
            echo    "<td>". $r['item_number'] ."</td>";
            echo    "<td>". $r['stock_available'] ."</td>";
            echo    "<td>". $r['available_stock'] ."</td>";
            echo    "<td>" . $r['detailed_desc'] . "</td>";
            echo    "<td>" . $r['division'] . "</td>";
            echo    "<td>" . $r['gender'] . "</td>";
            echo    "<td>" . $r['group'] . "</td>";
            echo    "<td>" . $r['sub_group'] . "</td>";
            echo  "</tr>";
            echo "</tbody>";
   }
      }
            echo "</table>";  
      } else {
        echo "No results found";
      }
    }
    ?>
    </div>
  

Код поиска в 2-search.php является:

 $searchFor = explode(",", trim($_POST['search']));

$resultsArray = [];

foreach ($searchFor as $searchItem){
  echo $searchItem;
    $stmt = $pdo->prepare ("SELECT * FROM dbo.[data] WHERE [item_number] = ? ");
    $stmt->execute(["" .$searchItem . ""]);
    $results = $stmt->fetchAll();
    echo $searchItem;
    array_push($resultsArray, $results);
}
  

Если кто-нибудь может помочь, это было бы очень ценно.

Ответ №1:

Условия поиска находятся в вашем $searchFor массиве, так что с этим уже разобрались. Теперь нам нужно только найти какой-то способ отобразить их вместо таблицы. Давайте изменим код, который имеет дело с количеством результатов.

Попробуйте что-то вроде этого:

 foreach ($resultsArray as $key => $results) {
    if (count($results) > 0) {
        foreach ($results as $r) {
            echo "<tbody>";
            
            ...

            echo "</tbody>";
        }
    } else {
        echo "No results found for ". $searchFor[$key];
    }
}
  

Вы хотите, чтобы проверка количества была в вашем foreach($resultsArray as $results) . Таким образом, вы будете проверять каждый из as $results массивов. $key содержит индекс для текущей итерации (1st = 0, 2nd = 1 и т.д.), Поэтому вы можете использовать его для доступа к массиву searchedFor, который содержит ваши разнесенные условия поиска.

Комментарии:

1. Еще раз благодарю вас. Теперь логика есть, и она работает. Я очень благодарен за ваши знания и многому научился. Почему это может быть случай поиска другого способа, кроме таблицы, для просмотра результатов?

2. найденные результаты будут в том же месте, в моем ответе они отмечены как три точки (…), я сделал это только для того, чтобы не связанный с проблемой код занимал меньше места и был более читаемым, ха-ха. единственная проблема, которая приходит на ум, заключается в том, что, возможно, echo no results может нарушить логику таблицы, поэтому, возможно, поместите его в <tr> или что-то в этом роде, но это всего лишь вопрос незначительного исправления html PS сейчас собираюсь спать, поэтому, если вы ответите, я не увижу его до следующего раза, когда я вернусь, спокойной ночи