【问题标题】:How do I output information from different search fields?如何从不同的搜索字段输出信息?
【发布时间】:2019-05-15 04:16:45
【问题描述】:

我有以下带有三个搜索字段的表单。 两个文本输入(关键字和距离)和一个下拉列表(交通)。

我的搜索功能适用于关键字文本输入,但不适用于其他两个字段。我可以看到当我“回显”时正在输出数据,但它实际上不会搜索这些术语。

    <form action="searchresults.php" method="POST">
  <h3> Keyword </h3>
    <input type="text" name="keyword-search">

  <h3> Primary Function </h3>
  <?php
  $sql = "SELECT pf_id, primary_function FROM primary_function ORDER BY pf_id;";
  $result = mysqli_query($conn, $sql);

  echo "<select name='function-search' id = 'function-search'>";
  echo '<option value=""></option>';

  while ($row = mysqli_fetch_assoc($result)) {
                unset($id, $name);
                $id = $row['pf_id'];
                $name = $row['primary_function'];
                echo '<option value="'.$name.'">'.$name.'</option>';

              }
  echo "</select>";
  ?>

  <h3> Distance </h3>
    within <input type="text" name="distance-search"> miles of PCC
    <br>
    <button type="submit" name="submit-search">Search</button>
</form>

下面是数据被推送到的地方。

    <?php
if (isset($_POST['submit-search'])) {

$functionSearch = mysqli_real_escape_string($conn, $_POST['function-search']);
$keySearch = mysqli_real_escape_string($conn, $_POST['keyword-search']);
$distanceSearch = mysqli_real_escape_string($conn, $_POST['distance-search']);
$sql = "SELECT * FROM resource WHERE resource_name LIKE '%$keySearch%'
OR  description LIKE '%$keySearch%' OR username LIKE '%$keySearch%'
OR primary_function LIKE '%$keySearch%'
OR distance_in_miles LIKE '%$keySearch%'
ORDER BY distance_in_miles";
$result = mysqli_query($conn, $sql);
$queryResult = mysqli_num_rows($result);
// Checking for search result page errors
//echo $result;
echo $queryResult;
// echo $functionSearch;

if ($queryResult > 0){
    while ($row = mysqli_fetch_assoc($result)) {
      echo "<tr><td>". $row['resource_id'] ."</td><td>". $row['resource_name'] ."</td><td>". $row['username'] ."</td><td>". "$" .$row['cost_in_usd'] ."/". $row['cost_per'] ."</td><td>". $row['distance_in_miles'] ."</td></tr>";
    } echo "</table>";
  } else {
    echo "<br>No results matching your search";
  }
}
?>

【问题讨论】:

  • 你的 foreach 循环中没有波浪括号,所以它只是循环 sql 赋值。
  • 这里似乎缺少代码。主要是为了看起来像是一种形式。
  • 谢谢。查看是否有任何启用错误报告并在查询/查询上使用mysqli_error($conn) 的内容,同时查看 HTML 源代码,这将揭示其中与查询一起使用的表单中的内容。您还可以回显您的查询以查看(或不)那里传递了什么。
  • 好的,这就是我认为的错误我会尝试删除您已将变量传递到的数组并分配不同的变量。
  • @howthegodschill 我在答案区域中发布了一些内容供您查看。评论太长了。我希望这会有所帮助。

标签: php mysql forms search


【解决方案1】:

旁注:评论太长了。

我会删除 foreach 循环并改用单独的变量。

现在,您的 foreach 会在每个 LIKE 查询中显示类似 search1search2search3 的内容,这本身不会引发错误,只是不会(可能)匹配任何内容。

这是一个示例,并将 $search_x 替换为您选择的标准/POST:

$sql = "SELECT * FROM resource WHERE resource_name LIKE '%$search_1%'
        OR description LIKE '%$search_2%' OR username LIKE '%$search_3%'
        OR primary_function LIKE '%$search_4%'
        OR distance_in_miles LIKE '%$search_5%'
        ORDER BY distance_in_miles";

$result = mysqli_query($conn, $sql);
if(!$result){
   // handle no results/failure here
}

您可能还需要在两端、开头和/或结尾处使用一个 %

旁注:如 cmets 中所述,始终使用适当的支撑与任何类型的循环函数。

顺便说一句,我建议您为此使用准备好的语句。 real_escape_string() 可以绕过,这里有一个关于这个主题的问答:

【讨论】:

  • 感谢您的帮助。所以我调整了代码。在这一点上,我只能让 '%keySearch%' 为 $sql 函数中的所有五个变量正常工作。如果我添加 $functionSearch 或 $distanceSearch,该函数仍然无法在搜索中识别它们。
  • @howthegodschill(欢迎)- 嗯....,我很难弄清楚为什么会这样。查询(或输入)或记录的值中可能存在空间,或者它区分大小写或组合。如果是输入时引入的空格,请尝试使用trim()。如果这些都不是问题,那么我会感到困惑(笑)。还可以尝试使用答案中提到的%
  • @howthegodschill 另一件事可能是某些值与(某些)列类型不匹配。您的一列似乎具有暗示整数而不是字符串的距离。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-26
  • 1970-01-01
  • 2017-02-02
  • 2018-09-06
  • 1970-01-01
相关资源
最近更新 更多