使用Multiple OPTION进行PHP高级搜索

时间:2016-02-05 10:25:37

标签: php search error-handling query-optimization

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

如图所示,用户可以搜索:DR.NAME,SPECIALTY,DIVISION,LOCATION。 DR.NAME应匹配任何关键字,表单不需要填写任何字段。

这是我目前的代码,它不起作用。

doctorsearch.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>";
    ?>

2 个答案:

答案 0 :(得分:0)

您需要添加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) : '';

答案 1 :(得分:0)

如果你想要任何关键字不完全匹配,那么你应该使用like而不是= operator,所以改变这个

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