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