PHP If/Else语句不适用于所有情况

PHP If/Else语句不适用于所有情况,php,if-statement,Php,If Statement,我的语法是这样的,我的问题是如果$employee和$saleDate都设置了where子句,则会按预期添加。但是,如果只设置了$employee或$saleDate,则永远不会将where子句添加到查询中 编写此语法的正确方法是什么,以便根据用户选择添加适当的where子句 if (!is_null($employee) && !is_null($saleDate)) { if (!empty($employee) && !empty($saleDate))

我的语法是这样的,我的问题是如果
$employee
$saleDate
都设置了
where
子句,则会按预期添加。但是,如果只设置了
$employee
$saleDate
,则永远不会将
where
子句添加到查询中

编写此语法的正确方法是什么,以便根据用户选择添加适当的
where
子句

if (!is_null($employee) && !is_null($saleDate)) {
  if (!empty($employee) && !empty($saleDate)) {
    $sql2 .= " where employee = '$employee' AND saleDate = '$saleDate'";
  }  
}

elseif(!is_null($date)) {
if (!empty($date)) {
    $sql2 .= " where saleDate = '$saleDate'";
  }
}

elseif (!is_null($employee)) {
  $sql2 .= " where employee = '$employee'";
}
编辑
我这里的语法是有效的,除了where
employee=ALL
它不知何故遗漏了这一点(或者忽略了这一点,因为我认为我已经解释了这一点)

$date=$\u POST['userSelectedDate'];
$employee=$_POST['empName'];
如果(!is_null($employee)和&!is_null($saleDate)){
如果(!empty($employee)和&!empty($saleDate)){
如果($employee'All'){
$sql.=“其中employee='$employee'和salesaleDate='$saleDate'”;
}
}
}
如果(!为空($employee)){
$sql.=“其中employee='$employee'”;
}
如果(!为空($saleDate)){
如果(!空($saleDate)){
$sql.=“其中salesaleDate='$saleDate'”;
}
}

这里有三个变量<代码>$employee,
$date
$salesDate
。我认为这不是故意的

此外,您还要检查两次
$date
的内容

elseif(!is_null($date)){
如果(!空($date)){
所以我认为这就是你想要做的:

if(!empty($employee)和&!empty($saleDate)){
$sql2.=“其中employee='$employee'和saleDate='$saleDate'”;
}
elseif(!空($saleDate)){
$sql2.=“其中saleDate='$saleDate'”;
}
elseif(!empty($employee)){
$sql2.=“其中employee='$employee'”;
}

这里有三个变量。
$employee
$date
$salesDate
。我认为这不是故意的

此外,您还要检查两次
$date
的内容

elseif(!is_null($date)){
如果(!空($date)){
所以我认为这就是你想要做的:

if(!empty($employee)和&!empty($saleDate)){
$sql2.=“其中employee='$employee'和saleDate='$saleDate'”;
}
elseif(!空($saleDate)){
$sql2.=“其中saleDate='$saleDate'”;
}
elseif(!empty($employee)){
$sql2.=“其中employee='$employee'”;
}

整个脚本可以简化为以下脚本:

$saleDate = $_POST['userSelectedDate'];
$employee = $_POST['empName'];

$conditions = [];

if (!empty($employee) && strtolower($employee) !== 'all') {
    $conditions[] = "employee='$employee'";
}

if (!empty($saleDate)) {
    $conditions[] = "saleDate='$saleDate'";
}

if (!empty($conditions)) {
    $sql .= ' WHERE ' . implode(' AND ', $conditions);
}

但是,请注意,您的查询很容易出错,因此您最好使用预先准备好的语句。

整个脚本可以简化为以下脚本:

$saleDate = $_POST['userSelectedDate'];
$employee = $_POST['empName'];

$conditions = [];

if (!empty($employee) && strtolower($employee) !== 'all') {
    $conditions[] = "employee='$employee'";
}

if (!empty($saleDate)) {
    $conditions[] = "saleDate='$saleDate'";
}

if (!empty($conditions)) {
    $sql .= ' WHERE ' . implode(' AND ', $conditions);
}


但是,请注意,您的查询很容易出错,因此您最好使用准备好的语句。

Empty也会检查null,这样您就可以在同时检查!Empty的地方消除!is_null。除此之外,您可能需要再次检查这些值,并尝试沿脚本路径进行一些日志记录/回显/调试。@aynber-我没有意识到,这一点谢谢。我已经做了回显,并且我已经验证了(例如)
$date
是否已设置,但是当我做
echo$sql2
时,与该值一起出现的
where
子句不应添加
!is_null($date)
!empty($date)
确实是
!is_null($saleDate)
!empty($saleDate)
?如果您检查了实际使用的变量,这将更有意义。您是否正在使用此字符串连接构建SQL查询?请注意,您的查询已打开SQLinjection@NicoHaase-我知道它们是为sql注入打开的。但这只是一个测试。Empty也会检查null,所以您可以在检查!是否为空的地方吃了!is_null。除此之外,您可能需要再次检查值,并尝试沿脚本路径进行一些日志记录/回送/调试。@aynber-我没有意识到,谢谢。我已经完成回送,并且已经验证了这一点(例如)
$date
已设置,但当我执行
echo$sql2
时,与该值一起使用的
where
子句不应添加
!is null($date)
!empty($date)
确实是
!is null($saleDate)
!empty($saleDate)
?如果您检查了实际使用的变量,这将更有意义。您是否正在使用此字符串连接构建SQL查询?请注意,您的查询已打开SQLinjection@NicoHaase-我知道它们是为sql注入打开的。但这只是为了测试。如果我尝试这种语法,where子句是never补充道。我已经尝试了所有条件,
saleDate
only,
employee
only,以及
saleDate
employee
selected。我真的认为这是由于使用了
elseif
,但我不知道解决方法。对不起,艾恩伯也是对的,请参阅更新的答案编辑后的语法给我一个
的错误YNTAX错误,意外的“;”
请查看第一行中的括号,或者查看更新的答案如果我尝试此语法,where子句从未添加。我尝试了所有条件,
saleDate
仅,
employee
仅,以及
saleDate
employee
选择我确实认为这是由于使用了
elseif
但我不知道如何解决它。抱歉,aynber也是对的,查看更新的答案编辑的语法给我一个错误
语法错误,意外“;”
看看你第一行中的括号-或查看更新的答案让我测试一下。我刚刚意识到我需要再检查一次。我还需要验证
$e员工!=“All”
-我该如何添加它?我想最后一句话说明了一切:使用准备好的语句或期望注入…我知道它们可以用于sql注入。这只是一个测试。无论选择什么标准,都不会添加
where
子句。如何设置
$employee
$saleDate
?它们从哪里来?让我测试一下。我刚刚意识到我需要再检查一次。我