我正在尝试创建一个看起来像这样的高级搜索表单;
http://img805.imageshack.us/img805/7162/30989114.jpg
但是我应该为查询写什么?
如果只有两个文本框我知道怎么做,但是三个,用户这样做的可能性太大了。
$query = "SELECT * FROM server WHERE ???";
“???”应该怎么写
我知道如何在查询中使用 AND OR,但假设用户只填写两个文本框和一个空文本框。如果我写这样的东西;
$query = "SELECT * FROM server WHERE model='".$model."' and brand='".$brand."' and SN='".$SN.'" ";
结果将作为空集返回。我希望用户可以选择是否填写一个、两个或三个标准。如果我使用 OR,结果将不准确,因为如果模型有两个名称相同(例如:M4000)但品牌不同(例如:IBM 和 SUN)的数据。如果我使用 OR 并且用户想要搜索 M4000 和 SUN,它将同时显示 M4000。这就是它不准确的原因。
最佳答案
如果用户可以决定他想为你的搜索输入多少条件,而你想组合这些条件(只有用户实际填写的那些),那么你必须动态创建你的 SQL 查询以只包含那些字段由用户填写的搜索。我给你举个例子。
简单搜索表单的代码可能如下所示:
$search_fields = Array(
// field name => label
'model' => 'Model',
'serialNum' => 'Serial Number',
'brand' => 'Brand Name'
);
echo "<form method=\"POST\">";
foreach ($search_fields as $field => $label) {
echo "$label: <input name=\"search[$field]\"><br>";
}
echo "<input type=\"submit\">";
echo "</form>";
实际搜索的代码如下:
if (isset($_POST['search']) && is_array($_POST['search'])) {
// escape against SQL injection
$search = array_filter($_POST['search'], 'mysql_real_escape_string');
// build SQL
$search_parts = array();
foreach ($search as $field => $value) {
if ($value) {
$search_parts[] = "$field LIKE '%$value%'";
}
}
$sql = "SELECT * FROM table WHERE " . implode(' AND ', $search_parts);
// do query here
}
else {
echo "please enter some search criteria!";
}
在上面的代码中,我们动态构建 SQL 字符串以仅对输入的条件进行搜索(“AND”)。
关于php - 高级搜索、PHP 和 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9901926/