【问题标题】:How can I have multiple search inputs/values within PHP/HTML如何在 PHP/HTML 中有多个搜索输入/值
【发布时间】:2020-09-10 14:23:35
【问题描述】:

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

【问题讨论】:

    标签: php html sql


    【解决方案1】:

    一种简单的方法是选择一个分隔符(可能是逗号)并像这样编写您的项目,然后将这些项目分成一组搜索项:

    $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) {
        ...
    

    【讨论】:

    • 这行得通。非常感谢。所以要理解这一点,它是否将用逗号分隔的条目存储在一个数组中,然后遍历每个条目?并返回结果?
    • 差不多,是的,它在迭代过程中返回的结果存储在 resultsArray 中,然后您可以使用它来回显您的表格
    • 用这个。我将如何显示它无法找到或说出的项目,例如表中不存在项目编号,因为目前如果一个项目编号不在表中,即使其他项目存在,它也只会显示未找到结果
    • 我会在执行 foreach 之前检查 $results 计数($results as $r)。如果这还不够,请创建另一个问题(使用更新的代码),因为这是一个新问题
    • 好的,再次感谢您。我发布了另一个问题stackoverflow.com/questions/63848367/…
    猜你喜欢
    • 2017-05-14
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2014-03-05
    • 2017-09-24
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多