php - 使用 PHP MYSQL 按关键字搜索

标签 php mysql search

我想通过关键字(例如客户问题)进行搜索。然而,每次搜索时,它都会提取每一个条目,而不是来自他们的问题的条目。

我尝试不使用 foreach 而是只做一个简单的 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 = '';
         }"/>&nbsp;&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 语句忽略了一些东西。任何帮助将不胜感激。

最佳答案

您的问题出在对 filter_input 的调用中。您指定了 FILTER_SANITIZE_NUMBER_INT 过滤器,但传递了空格分隔的单词列表。因此,filter_input 的输出是一个空字符串(因为使用该标志,它会从输入中删除除 +/- 和数字之外的所有内容),因此没有任何条件添加到您的查询中。您可能想使用 FILTER_SANITIZE_STRING相反。

关于php - 使用 PHP MYSQL 按关键字搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55388174/

相关文章:

javascript - 在 PHP 中打印嵌套 Json

php - 仅在 Widget 页面上加载样式表

php - SQLite 在 PHP 的 LIKE 查询中使用变量

MYSQL "Division by zero"警告,奇怪的行为

algorithm - 找到一对数字的好方法是什么,每个数字存储在不同的数组中,使得第一个和第二个数字之间的差为 1?

elasticsearch - Elasticsearch不返回具有相同 token 的结果?

php - php中是否有任何语法或命令来检查一个数字是否在一组数字中?

javascript - 如何通过从数据库中检索值来在文本框中显示值?

php - 如何处理每天 800 000 个获取/发布请求以存储在 MySQL 数据库中?

javascript - 一次搜索多个 ng-repeats