首页 > 解决方案 > 如何返回找到的项目的结果。但也有一个未找到的项目列表

问题描述

我目前有一个 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);
}

如果有人可以提供帮助,将不胜感激。

标签: phphtml

解决方案


搜索词在您的$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 数组,其中包含您展开的搜索词。


推荐阅读