我有一个搜索表单,它在“results.php”中显示来自 MySQL 的匹配行。我有一些选择框让用户选择他的偏好。但是,用户可能不会从所有选择框中进行选择,而是从几个选择框中进行选择。如果发生这种情况,我的查询将不会返回任何内容,因为它应该使用所有可用的选项。
例如,唯一必须选择的变量是make
。 disabled
是标准的,我在每个查询中都需要它。
当未选择 model
且 AND year = '$year' 时,如何编辑以下内容以“删除
当未选择 AND model = '$model'
” year
时?
我将使用示例进行更多选择。
$make = $_POST["make"];
$model = $_POST["model"];
$year = $_POST["year"];
$useds = mysql_query("SELECT * FROM used WHERE make = '$make' AND model = '$model' AND year = '$year' AND disabled='0' order by id desc" );
最佳答案
将查询分段构建,然后将它们串联起来。您受益于至少有一个 where 子句是强制性的。我使用的是简短的 IF 语法,但如果您真的愿意,您可以使用 if(){}else{}
完整地写出它。
$make = ( isset($_POST['make'] ? 'make='.$_POST['make'].' AND ' : '' );
$model = ( isset($_POST['model'] ? 'model='.$_POST['model'].' AND ' : '' );
$year = ( isset($_POST['year'] ? 'year='.$_POST['year'].' AND ' : '' );
$query = "SELECT * FROM used WHERE ".$make.$model.$year."disabled=0 ORDER BY id DESC"
$useds = mysql_query(" ");
前三行查看帖子是否已设置,如果已设置,则将它们从 $val 转换为 col=$val AND
。如果不是,则变量设置为 ''
,并且将该变量插入到查询中无效。
$variable = ( true ? 'yes' : 'no' );
$variable = ( false? 'yes' : 'no' );
第一个给你"is",第二个给你“否”
然后通过在查询中将它们串在一起,您可以在查询中使用任意数量的它们:
WHERE make=$make AND disabled=0
WHERE make=$make AND model=$model AND disabled=0
WHERE make=$make AND model=$model AND year=$year AND disabled=0
WHERE year=$year AND disabled=0
如果您要大写 MySQL 运算符/函数,那么您也应该保持一致,以便您可以分辨哪些是名称,哪些不是。
关于php - 即使用户没有从所有选择框中进行选择,如何显示结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22187291/