Поиск по ключевому слову с помощью PHP MYSQL

#php #mysql #search

#php #mysql #Поиск

Вопрос:

Я хочу выполнить поиск по ключевому слову, например, по проблеме клиента. Однако каждый раз, когда он выполняет поиск, он извлекает каждую отдельную запись, а не ту, которая из их выпуска.

Я пытался не использовать for each, а просто выполнить простой like, но это тоже не сработало.

Это то, что передается.

 <form id="" class="searchbar" action="searchAppt.php" method="get">
           <input type="text" name="terms" size="40" class = "sbar" required value="Search by keyword" oninput="validity.valid||(value='');"
                       onblur="if (this.value == '') {
                                    this.value = 'Enter keyword';
                                }"
                       onfocus="if (this.value == 'Enter keyword') {
             this.value = '';
         }"/>amp;nbsp;amp;nbsp;
                <button type="submit" class = "btn">Search</button>
            </form>
  
 
if (filter_has_var(INPUT_GET, "terms")) {
    $terms_str = filter_input(INPUT_GET, 'terms', FILTER_SANITIZE_NUMBER_INT);
} else {
    echo "There were no appointments found.";
    include ('includes/footer.php');
    exit;
//explode the search terms into an array
            $terms = explode(" ", $terms_str);


            $sql = "SELECT * FROM appointments WHERE 1";
            foreach ($terms as $term) {
             $sql .= " AND issue LIKE '%$term%' AND email = '". $_SESSION['email'] ."' 
                ";
            }

            $result = $conn->query($sql);

            if ($result->num_rows > 0) {
                echo "<br /><br /><center><h1>Your Ticket(s)</h1><br />
                <div class='table'>
                <div class='tr'>
                <div class='td'><b>Ticket #</b></div>
                <div class='td'><b>First Name</b></div>
                <div class='td'><b>Last Name</b></div>
                <div class='td'><b>Phone #</b></div>
                <div class='td'><b>Building</b></div>
                <div class='td'><b>Room #</b></div>
                <div class='td'><b>Issue</b></div>
                <div class='td'><b>Appt. Start Time</b></div>
                <div class='td'><b>Appt. End Time</b></div>
                <div class='td'><b>Ticket Details</b></div>
                </div>";
                // output data of each row
                while($row = $result->fetch_assoc()) {
                    echo "<div class='tr'>
                    <div class='td'>".$row["id"]."</div>
                    <div class='td'>".$row["fname"]."</div>
                    <div class='td'>".$row["lname"]."</div>
                    <div class='td'>".$row["phonenum"]."</div>
                    <div class='td'>".$row["building"]."</div>
                    <div class='td'>".$row["room"]."</div>
                    <div class='td'>".$row["issue"]."</div>
                    <div class='td'>".$row["start_time"]."</div>
                    <div class='td'>".$row["end_time"]."</div>
                    <div class='td'><form action='ticketdetails.php' method='post'>
                        <input type='hidden' name='id' value='".$row["id"]."'>
                        <input type='submit' value='Ticket Details'></form>
                    </div>
                    </div>";
                }
                echo "</div>";
            } else {
                echo "<br /> <br />Your search <i>'$terms_str'</i> did not match any appointments";
  

Он отображает каждое отдельное назначение, а не те, у которых есть проблема, похожая на поиск по ключевому слову. Я чувствую, что я просто что-то упускаю из виду с помощью инструкции select. Любая помощь была бы высоко оценена.

Комментарии:

1. Примеры данных и ожидаемые результаты, пожалуйста.

2. Что передается в $_GET['terms'] ?

3. Таким образом, в основном их проблемой может быть, например, «подключение к Wi-Fi». Если они вводят «wifi» и назначают какие-либо встречи с проблемами, подобными «wifi», я хочу, чтобы эти встречи отображались из базы данных.

4. @Nick только что добавил его в начало

5. 1. что такое $ terms_str? 2. неверен начальный код. для нескольких $ terms это приведет к созданию sql-запроса с большим количеством дубликатов И email = ‘». $_SESSION[’email’] .»‘ условия. Я бы предложил добавить фильтр AND email=… ПОСЛЕ цикла foreach.

Ответ №1:

Ваша проблема заключается в вашем вызове filter_input . Вы указываете фильтр FILTER_SANITIZE_NUMBER_INT , но передаете список слов, разделенных пробелом. В результате вывод filter_input представляет собой пустую строку (поскольку с этим флагом из входных данных удаляется все, кроме /- и цифр), и поэтому к вашему запросу не добавляются никакие условия. Вы, вероятно, захотите использовать FILTER_SANITIZE_STRING вместо этого.

Комментарии:

1. Привет, Ник! Извините, я действительно забыл свои учетные данные для входа, но восстановил их сегодня. Я сделал именно то, что вы сказали, и это работает!! Спасибо. Я нажал на зеленую галочку и дал вам положительный результат, хотя он не будет отображаться из-за того, что моя учетная запись новая. Еще раз спасибо!