【问题标题】:PHP advanced search with Multiple OPTION带有多个选项的 PHP 高级搜索
【发布时间】:2016-02-05 10:25:37
【问题描述】:

我正在使用 php 构建一个搜索字段,用户可以在其中使用多个搜索选项搜索医生信息。

如图所示,用户可以通过以下方式进行搜索:DR.NAME、SPECIALTY、DIVISION、LOCATION。 DR.NAME 应该匹配任何关键字,并且表格不需要填写任何字段。

这是我当前不起作用的代码。

医生搜索.php

<?php
    error_reporting(0);

    include 'config.php';

    $d_fname = $_POST['d_fname'];
    $d_spcl = $_POST['d_spcl'];
    $d_division = $_POST['d_division'];
    $d_location = $_POST['d_location'];


    $qry = "SELECT * FROM doctor_reg WHERE ";
    if ($d_fname != '') {
        $qry .= "d_fname='".mysql_real_escape_string($d_fname)."' AND ";
    }
    if ($d_spcl != '') {
        $qry .= "d_spcl='".mysql_real_escape_string($d_spcl)."' AND ";
    }
    if ($d_division != '') {
        $qry .= "d_division='".mysql_real_escape_string($d_division)."' AND ";
    }
    if ($d_location != '') {
        $qry .= "d_location='".mysql_real_escape_string($d_location)."' AND ";
    }

    $result = mysql_query($result);

        ?>  

            <?php
            echo "<table border='1px solid #CCCCCC;' width='100%'>";
            echo "<tr style='color:#FFFFFF;background:#555555;'>";
            echo "<th style='padding:3px;'>Name</th>";


            while($row = mysql_fetch_array($result)){
                echo "<tr class='trbd'>";
            echo "<td style='padding:3px;'>".$row['d_fname'].' '.$row['d_lname']."</td>";

            ?>

            <?php
            echo "</tr>";

    }
            echo "</table>";
    ?>

【问题讨论】:

  • 在查询中使用 OR 而不是 AND
  • 试过但每次搜索结果都是空的
  • 尝试调试查询中的错误。你也可以在这里粘贴你形成的查询。还可以尝试在 phpmyadmin 中运行查询或 mysql 的查询提示。这会告诉你出了什么问题。

标签: php search error-handling query-optimization


【解决方案1】:

如果您希望任何关键字不完全匹配,那么您应该使用 like 而不是 = 运算符,因此请更改此

if ($d_fname != '') {
    $qry .= "d_fname='".mysql_real_escape_string($d_fname)."' AND ";
}

进入这个

if ($d_fname != '') {
    $qry .= "d_fname LIKE'%".mysql_real_escape_string($d_fname)."%' AND ";
}

【讨论】:

    【解决方案2】:

    您需要添加OR 而不是AND

    一般来说,当用户搜索时,他们按OR 条件搜索。

    例如:医生姓名应为 Sharma 或位置应为东街。

    如果我们用AND条件搜索,数据库将只搜索具有精确组合的记录。

    如果所有条件都为真,AND 返回true

    如果任一条件为真,OR 将返回 true

    因此,OR 在这里是正确的语法。

    更正的代码:

    $qry = "SELECT * FROM doctor_reg";
    $searchArray = array();
    if ($d_fname != '') {
     $searchArray[] = "d_fname LIKE '%".mysql_real_escape_string($d_fname) . "%'";
    }
    if ($d_spcl != '') {
     $searchArray[] = "d_spcl LIKE '%".mysql_real_escape_string($d_spcl) . "%'";
    }
    if ($d_division != '') {
     $searchArray[] = "d_division LIKE '%".mysql_real_escape_string($d_division) . "%'";
    }
    if ($d_location != '') {
     $searchArray[] = "d_location LIKE '%".mysql_real_escape_string($d_location) . "%'";
    }
    $qry .= ! empty($searchArray) ? " WHERE " . implode(" OR ", $searchArray) : '';
    

    【讨论】:

    • 为了让上面的数组起作用,它应该类似于$searchArray[] = 'd_fname LIKE %' . mysql_real_escape_string($d_fname) . '%'; 而对于其他数组查询元素$searchArray[] = 'd_spcl = ' . mysql_real_escape_string($d_spcl); 等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2018-12-05
    • 2013-01-22
    • 1970-01-01
    相关资源
    最近更新 更多