Как вывести информацию из разных полей поиска? - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть следующая форма с тремя полями поиска.Два текстовых ввода (ключевое слово и расстояние) и раскрывающийся список (транспорт).

Моя функция поиска работает с вводом текста ключевого слова, но не с двумя другими полями.Я вижу, что данные выводятся, когда я "эхо", но на самом деле они не будут искать эти термины.

    <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";
  }
}
?>

1 Ответ

0 голосов
/ 14 декабря 2018

Примечание: это слишком долго для комментария.

Я бы удалил цикл foreach и использовал бы вместо него отдельные переменные.

Прямо сейчас ваш foreach покажет что-токак search1search2search3 в каждом из запросов LIKE, который сам по себе не выдаст ошибку, он просто (вероятно) ничего не будет соответствовать.

Вот пример и заменим $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
}

Возможно, вам также придется поиграться с %, используя один из них на обоих концах, в начале и / или в конце.

Примечание: как указано в комментариях, всегда используйте правильную связь с любым типом циклической функции.

Кстати, я предлагаю вместо этого использовать подготовленный оператор.real_escape_string() можно обойти, и вот вопросы и ответы по теме:

...