Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 即使用户没有从所有选择框中进行选择,如何显示结果?_Php_Mysql - Fatal编程技术网

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

Php 即使用户没有从所有选择框中进行选择,如何显示结果?,php,mysql,Php,Mysql,我有一个搜索表单,在“results.php”中显示MySQL中匹配的行。我有一些选择框,让用户选择他的偏好。但是,用户可能不会从所有选择框中进行选择,而是从几个选择框中进行选择。如果发生这种情况,我的查询将不返回任何内容,因为它应该使用所有可用的选项 $make = $_POST["make"]; $model = $_POST["model"]; $year = $_POST["year"]; $useds = mysql_query("SELECT * FROM used WHERE ma

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

$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" );
例如,唯一必须选择的变量是
make
disabled
是标准配置,我在每个查询中都需要它

当未选择
模型
且未选择
年份
时,如何编辑以下内容以“删除
和model='$model'
,以及
和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" );

本末倒置,反之亦然:如果选择了条件,则附加条件

$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";

将查询分块构建,然后将其线程连接在一起。至少有一个where子句是必需的,这让您受益匪浅。我使用的是short 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(" ");
前三行查看是否设置了POST,如果设置了POST,则将POST从$val变为
col=$val和
。如果未设置POST,则将变量设置为
'
,并且将该变量插入查询中不会产生任何效果

$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操作符/函数,那么你也应该保持一致,这样你就可以分辨出哪些是名称,哪些不是名称。

你的脚本可能是,也可能是。你应该切换到或,并使用准备好的语句。我们在这里谈论的是多少品牌和型号?我想有人给了你否决票,因为你已经回复了我在OP的帖子中提到了SQL注入漏洞。我认为,如果你回答了,就值得注意这种错误,这样OP就可以知道如何安全地运行查询了。@halfer我知道,我可以尝试保护变量,但我认为这是OP保护代码的问题。我猜你的downvoter不同意这一点。因此,如果你不想获得否决票,即使你没有提供解决方案,也值得指出错误。