繁体   English   中英

多个下拉列表动态查询AJAX PHP MySQL

[英]Multiple Dropdowns Dynamic Query AJAX PHP MySQL

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

<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查询,该查询将在缺少变量的情况下正确选择正确的参数。 例如,如果他们选择执行第一个下拉菜单,而仅搜索“类”,而不选择第二个下拉菜单。 我希望能够执行第一个查询,第二个查询或同时执行这两个查询。 我已经写了PHP,Ajax,只是对MySQL查询的正确结构感到困惑。

分解查询并有条件地使用它

假设: $class用于类选择框,而$category用于类选择框

$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."'";
}
<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>

将ur MySQL上的表的列设置为允许为null,因此当用户选择“ <OPTION VALUE="">Choose Type ”或“ <OPTION VALUE="">Choose Class ”时,将Null传递给该列

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

// 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数组到达最后一行)。 例如:

$where = array();
$where[] = 'name = "' . mysql_real_escape_string($_POST['name']) . '"';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM