即使用户没有从所有选择框中选择,如何显示结果?

时间:2014-03-05 02:28:04

标签: php mysql

我有一个搜索表单,在“results.php”中显示来自MySQL的匹配行。我有一些选择框让用户选择他的偏好。但是,用户可能不会从所有选择框中选择,而是从少数选择框中选择。如果发生这种情况,我的查询将不返回任何内容,因为它应该使用所有可用的选项。

例如,唯一必须选择的变量是makedisabled是标准的,我在每个查询中都需要它。

如何修改以下内容,以便在未选择AND model = '$model'时移除model,而在未选择AND year = '$year'时移除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" );

3 个答案:

答案 0 :(得分:1)

将查询分段构建,然后将其组合在一起。你受益于至少有一个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' );

第一个给你'是',第二个给'你'

然后通过在查询中将它们串在一起,您可以在查询中使用它们的任意数量:

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运算符/函数大写,那么您应该保持一致,以便可以分辨哪些是名称,哪些不是。

答案 1 :(得分:0)

你在马前有车。反之亦然:附加条件如果被选中。

$conditions = array();
$conditions[] = "make = '".mysql_real_escape_string($make)."'";
if (!empty($model)) $conditions[] = "model = '".mysql_real_escape_string($model)."'";
if (!empty($year)) $conditions[] = "year = '".mysql_real_escape_string($year)."'";
$conditions[] = "disabled = 0";
$conditionString = "WHERE ".implode(' AND ', $conditions);

$sql = "SELECT * FROM used ".$conditionString." ORDER BY id DESC";

答案 2 :(得分:-1)

    $make = $_POST["make"];
    $model = $_POST["model"];
    $year = $_POST["year"];

   $query="SELECT * FROM used WHERE make = '$make'";
   if($model)
   $query.=" AND model = '$model'";
   if($year)
   $query.=" AND year = '$year'";

   $query.= " AND disabled='0' order by id desc";

  $useds = mysql_query($query);