使用前端搜索条件查询数据库

时间:2014-08-24 06:22:11

标签: php mysql

我正在创建一个搜索表单,允许客户端通过输入名字,姓氏,出生日期或其某些组合来搜索数据库中的用户。我遇到的问题是,当任何字段留空时,我不确定如何处理创建查询的where子句,更不用说如何绑定可能不存在的参数。这是我的搜索框。

<form action="manageUsers.php"method="POST">
        <h3>Search Users</h3>
        <label for="lastName">Last Name:</label>
        <input type="text" name="lastName"><br>

        <label for="firstName">First Name:</label>
        <input type="text" name="firstName"><br>

        <label for="birthdate">Birthdate:</label>
        <input type="text" name="birthdate"><br>

        <input type="submit" value="Search Users">
</form>

我唯一能想到的是使用一些if语句根据字段是否为空来动态创建查询。我确信有人有一个我不知道或没有想过的简单解决方案。感谢

1 个答案:

答案 0 :(得分:1)

我接近这个的方法是确保你的输入名称与MySQL数据库中的列匹配。它只是使映射更容易。然后,您可以执行以下操作:

<?
    if(count($_POST)>0){
        // remove any key that has no value
        $data = array_filter($_POST);

        // define an array to hold the pieces of the where clause
        $where = array();

        // loop each of the variables and build the query
        foreach($data as $key => $value){
           // make things safe
           $key = mysql_real_escape_string($key);
           $value = mysql_real_escape_string($value);

           // push values to array
           array_push($where, "$key='$value'");             
        }

        // create teh select query by imploding the array of pieces
        $query = "SELECT * FROM tablename WHERE ".implode(" AND ", $where);

        // just to show sample output
        echo $query;
    }
?>
<form action=""method="POST">
        <h3>Search Users</h3>
        <label for="lastName">Last Name:</label>
        <input type="text" name="lastName"><br>

        <label for="firstName">First Name:</label>
        <input type="text" name="firstName"><br>

        <label for="birthdate">Birthdate:</label>
        <input type="text" name="birthdate"><br>

        <input type="submit" value="Search Users">
</form>

基本上它确保你发布,然后做一个数组过滤器来删除任何没有价值的键(这样你就不会查询生日=&#34;&#34;)。然后遍历其余的键并构建查询的那一部分。在循环之后,它会内爆数组并通过AND加入它,然后将其抛出到包含其余选择查询的字符串中。

输出SELECT * FROM tablename WHERE lastName='efef' AND firstName='adsf'

之类的内容