我正在创建一个搜索表单,允许客户端通过输入名字,姓氏,出生日期或其某些组合来搜索数据库中的用户。我遇到的问题是,当任何字段留空时,我不确定如何处理创建查询的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语句根据字段是否为空来动态创建查询。我确信有人有一个我不知道或没有想过的简单解决方案。感谢
答案 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'