php - 如何在 PHP/HTML 中有多个搜索输入/值
问题描述
我目前有一个 HTML 搜索表单,它接受用户输入(例如 123456)并使用 PHP 搜索数据库以查看该数字是否作为项目编号存在。然后它会在表格中返回有关该项目的信息。
是否可以一次搜索多个项目,例如 123456、654321、000000 并将每个项目的结果显示在表格中?我目前无法找到任何关于如何实现这一目标的文档。任何帮助将不胜感激。
我当前搜索并带回一项数据的代码是。
<div id="div1">
<!-- [SEARCH FORM] -->
<form method="post" action="nweb.php">
<h1>Product Information</h1>
<input type="text" name="search" required/>
<input type="submit" value="Search"/>
</form>
<?php
if (isset($_POST['search'])) {
require "2-search.php";
if (count($results) > 0) {
foreach ($results as $r) {
echo "<table>";
echo "<tr><td>Item number</td><td>" . $r['item_number'] . "</td></tr>";
echo "<tr><td>Stock available</td><td>" . $r['stock_available'] . "</td></tr>";
echo "<tr><td>Available Stock</td><td>" . $r['available_stock'] . "</td></tr>";
echo "<tr><td>Detailed Description</td><td>" . $r['detailed_desc'] . "</td></tr>";
echo "<tr><td>Gender</td><td>" . $r['gender'] . "</td></tr>";
echo "<tr><td>Group</td><td>" . $r['group'] . "</td></tr>";
echo "<tr><td>Subgroup</td><td>" . $r['sub_group'] . "</td></tr>";
}
echo "</table>";
} else {
echo "No results found";
}
}
?>
</div>
我的搜索代码是。
try {
$pdo = new PDO(
"sqlsrv:Server=$server;Database=$database", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
$stmt = $pdo->prepare ("SELECT * FROM dbo.[data] WHERE [item_number] LIKE ? OR [stock_available] LIKE ?");
$stmt->execute(["%" . $_POST['search'] . "%", "%" . $_POST['search'] . "%"]);
$results = $stmt->fetchAll();
if (isset($_POST['ajax'])) { echo json_encode($results); }
?>
解决方案
一种简单的方法,在您的代码中没有太多剧烈的变化,是选择一个分隔符(可能是逗号)并像这样编写您的项目,然后,您将这些项目分成一组搜索项:
$searchFor = explode(',', $_POST['search']);
并一一搜索:
$resultsArray = [];
foreach ($searchFor as $searchItem){
$stmt = $pdo->prepare ("SELECT * FROM dbo.[data] WHERE [item_number] LIKE ? OR [stock_available] LIKE ?");
$stmt->execute(["%" .$searchItem . "%", "%" . $searchItem . "%"]);
$results = $stmt->fetchAll();
array_push($resultsArray, $results);
}
最后,您将以几乎与现在相同的方式回显表格:
foreach ($resultsArray as $results) {
...
foreach ($results as $r) {
...
推荐阅读
- c# - ASP.NET Core 3.1 API Ocelot JWT 在登录时返回 401
- python - 缺少lib文件,如何解决?
- here-api - 在这里请求邮政编码的坐标时地理编码器不准确
- android - Flutter:在 null 上调用了方法“animateCamera”
- c++ - std::sample() 每次都返回相同的元素
- regex - 如何让“grep -zoP”分别显示每场比赛?
- elasticsearch - Elasticsearch 7.10 不接受关键字?
- php - WordPress。每个表单提交的表单特定功能,以避免另一个重复的表单提交
- android - Android在同一个view上拖拽结果报drop result: false
- angular - 如果值为空,如何停止传递查询参数。使用“ng-attr-href”