使用PHP/MySQL搜索过滤

dxe*_*onx 14 php mysql database

我正在尝试在我的献血者应用程序中创建搜索/过滤选项.可以通过性别,姓名,血型或通过选择所有三种来搜索捐赠者.这是我的代码

function search_donar($_POST) {

        $by_name = $_POST['by_name'];
        $by_sex = $_POST['by_sex'];
        $by_group = $_POST['by_group'];
        $by_level = $_POST['by_level'];

        $search_query = "SELECT * FROM donar WHERE";
        if($by_name !="") {
          $search_query .= " name='$by_name'";
        }
        if($by_sex !="") {
          $search_query .= " sex='$by_sex'";
        }
        if($by_group !="") {
          $search_query .= " blood_group='$by_group'";
        }
        if($by_level !="") {
          $search_query .= " e_level='$by_level'";
        }
        $search_query;
        $result = mysql_query($search_query);

        return $result;
    }
Run Code Online (Sandbox Code Playgroud)

这是html

if(isset($_POST['submit'])) {

    $retrived_result = $donar->search_donar($_POST);

}

   <form action="" method="post">
    <table width="100%" border="0" style="border:none;">
      <tr>
        <td><label>Name:&nbsp;</label><input type="text" name="by_name" /></td>
        <td><label>Sex:&nbsp;</label><input type="text" name="by_sex" /></td>
        <td><label>Blood Group:&nbsp;</label><input type="text" name="by_group" /></td>
        <td><label>Level:&nbsp;</label><input type="text" name="by_level" /></td>
        <td><input class="button" type="submit" name="submit" value="Search" /></td>
      </tr>
    </table>
    </form>
Run Code Online (Sandbox Code Playgroud)

单次过滤非常好.但要过滤所有我使用的AND,但它给了我错误.有人可以帮忙吗?

提前致谢

Rej*_*eri 28

像所有其他帖子一样,您需要使用AND附加所有条件.到目前为止,这是最干净的答案.记住要使用mysqli OOP方式而不是旧的mysql来真正逃避你的字符串.只是一个建议.

下面是典型查询的示例.

正确的方法:

SELECT * FROM donar WHERE name='dxenaretionx' AND sex='M';
Run Code Online (Sandbox Code Playgroud)

你这样做的方式

SELECT * FROM donar WHERE name='dxenaretionx' sex='M';
Run Code Online (Sandbox Code Playgroud)

码:

function search_donar($_POST) {
    $by_name = $_POST['by_name'];
    $by_sex = $_POST['by_sex'];
    $by_group = $_POST['by_group'];
    $by_level = $_POST['by_level'];

    //Do real escaping here

    $query = "SELECT * FROM donar";
    $conditions = array();

    if(! empty($by_name)) {
      $conditions[] = "name='$by_name'";
    }
    if(! empty($by_sex)) {
      $conditions[] = "sex='$by_sex'";
    }
    if(! empty($by_group)) {
      $conditions[] = "blood_group='$by_group'";
    }
    if(! empty($by_level)) {
      $conditions[] = "e_level='$by_level'";
    }

    $sql = $query;
    if (count($conditions) > 0) {
      $sql .= " WHERE " . implode(' AND ', $conditions);
    }

    $result = mysql_query($sql);

    return $result;
}
Run Code Online (Sandbox Code Playgroud)

  • 我在stackoverflow上看到的最好和最明确的答案之一.非常感谢@Rejinderi. (2认同)
  • 谢谢@LaurenceNicolaou,你的评论让我很开心:D (2认同)