php - 如何返回找到的项目的结果。但也有一个未找到的项目列表
问题描述
我目前有一个 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);
}
如果有人可以提供帮助,将不胜感激。
解决方案
搜索词在您的$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 数组,其中包含您展开的搜索词。
推荐阅读
- google-apps-script - 如何根据谷歌表格中的几个条件移动一行
- mysql - 在 SQL 上自行设置行的位置
- java - 关于在子类中覆盖的困惑
- react-native - 根导航器无法调用 setParams
- excel - 在 Excel VBA 中,如何打开 PowerPoint 幻灯片并替换文本值?
- python - 对 pandas 数据框中的相等条目进行分组和求和
- c - 如何创建创建 sdl 窗口和渲染器的功能函数(当 sdl 窗口和渲染器作为参数传递时)?
- r - 如何在 h2o.performance 和验证矩阵之间解释 randomForest 中 RMSE 的值?
- python-2.7 - Mysql游标在动态赋值时抛出错误
- java - 如何使用customadapter触摸/单击arraylist中位置的行并执行操作