我有这个查询,显示一些待售的建筑物,用户可以选择“plaats”(区域)和slaapkamers(卧室数量)。这些存储在变量中,此查询有效:
$p = $_POST['plaats'];
$s = $_POST['slaapkamers'];
$sSql = "select * from tblpand WHERE PandPostcodeGemeente='". mysql_real_escape_string( $p ) ."' AND PandSlaapkamers='". mysql_real_escape_string( $s ) ."';
只要变量等于一个字段,这就可以工作。例如,如果$ s等于3,则显示所有带有3间卧室的建筑物。但是,还有一个选项可以选择所有卧室(“全部”),与区域相同,如果应选择所有区域,则$ p为“全部”。我不知道如何将其添加到查询中。也许是这样的:
$sSql = "select * from tblpand WHERE"If ($p != "all"){ PandPostcodeGemeente='". mysql_real_escape_string( $p ) ."'}" AND "If ($s != "all"){PandSlaapkamers='". mysql_real_escape_string( $s ) ."'}";
这只是一个理论上的例子,我知道这不起作用。有关于此的任何想法?谢谢大家。
答案 0 :(得分:2)
试试这个:
$p = $_POST['plaats'];
$s = $_POST['slaapkamers'];
$sSql = "select * from tblpand WHERE 1=1";
if ($p !== 'all') {
$sSql .= " AND PandPostcodeGemeente='" . mysql_real_escape_string($p) . "'";
}
if ($s !== 'all') {
$sSql .= "AND PandSlaapkamers='" . mysql_real_escape_string($s) . "'";
}
答案 1 :(得分:2)
请允许我推荐一种不同的方法,使用它:
$p = filter_input(INPUT_POST, 'plaats', FILTER_SANITIZE_STRING);
$s = filter_input(INPUT_POST, 'slaapkamers', FILTER_SANITIZE_STRING);
$query = 'select * from tblpand ';
if (strcasecmp($p, 'all') !== 0) {
$query .= " WHERE PandPostcodeGemeente='". $p . "'";
$wherehasBeenSet = true;
}
if (strcasecmp($s, 'all') !== 0) {
if (isset($wherehasBeenSet)}) {
$query .= ' AND ';
} else {
$query .= ' WHERE ';
}
$query .= " PandSlaapkamers='" . $s . "'";
}