首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个下拉菜单动态查询AJAX PHP MySQL

多个下拉菜单动态查询AJAX PHP MySQL
EN

Stack Overflow用户
提问于 2012-03-05 13:03:54
回答 3查看 1.7K关注 0票数 0

我目前正在创建一个多下拉查询,其中用户可以通过(3)因子查询返回结果,我的问题是如何以一种有效的方式做到这一点,这样我就不会模糊地编写多个可能的MySQL查询。

代码语言:javascript
复制
<select name="class"> 
<OPTION VALUE='any'>Choose Class
<option value="a">Block A</option>
<option value="b">Block B</option>
<option value="c">Block C</option>
</select>

 <select name="category"> 
 <OPTION VALUE='any'>Choose Type
 <option value="math">Math</option>
 <option value="science">Science</option>
 <option value="history">History</option>
 </select>

如何成功创建MySQL查询,以便在缺少变量的情况下正确选择正确的参数。例如,如果他们选择第一个下拉列表,只搜索"class“,而不选择第二个下拉列表。我希望能够执行第一个查询、第二个查询或这两个查询。我已经写好了PHP,Ajax,我只是被MySQL查询的正确结构难住了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-05 13:28:14

将"WHERE“子句条件放在一个数组中。我会这样做:

代码语言:javascript
复制
// filter out invalid values is important
$valid_class = array('a', 'b', 'c');
$valid_category = array('math', 'science', 'history');

// initialize array for WHERE clause conditions
$where = array('TRUE');

if (in_array($_POST['class'], $valid_class))
{
    $where[] = 'class = "' . $_POST['class'] . '"';
}

if (in_array($_POST['category'], $valid_category))
{
    $where[] = 'category = "' . $_POST['category'] . '"';
}

// use the array with the "implode" function to join its parts
$sql = 'SELECT * FROM table WHERE ' . implode(' AND ', $where);

您可能希望使用比"TRUE“更有趣的值来初始化$where数组(这是为了防止用户不按类和类别进行过滤,因为我们不想让一个空的$where数组到达最后一行)。例如:

代码语言:javascript
复制
$where = array();
$where[] = 'name = "' . mysql_real_escape_string($_POST['name']) . '"';
票数 0
EN

Stack Overflow用户

发布于 2012-03-05 13:20:03

将查询拆分并有条件地使用它

假设:$class代表类别选择框,$category代表类别选择框

代码语言:javascript
复制
$selectquery = "select * from tablename ";
if($class != "" && $category == ""){
$selectquery .= "WHERE class='".$class."'";
}elseif($class == "" && $category != ""){
$selectquery .= "WHERE category ='".$category."'";
}elseif($class != "" && $category != ""){
$selectquery .= "WHERE category ='".$category."' AND class='".$class."'";
}
票数 0
EN

Stack Overflow用户

发布于 2012-03-05 13:21:43

代码语言:javascript
复制
<select name="class"> 
<OPTION VALUE="">Choose Class
<option value="a">Block A</option>
<option value="b">Block B</option>
<option value="c">Block C</option>
</select>

 <select name="category"> 
 <OPTION VALUE="">Choose Type
 <option value="math">Math</option>
 <option value="science">Science</option>
 <option value="history">History</option>
 </select>

将您的MySQL上表的列设置为允许null,以便当用户选择“<OPTION VALUE="">Choose Type”或"<OPTION VALUE="">Choose Class“时,将Null传递到该列中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9561878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档