PHP嵌套的if和许多条件不起作用


PHP Nested ifs and many conditions not working

我的代码中有许多嵌套的if和条件,但它没有提供所需的输出。编写以下代码的最佳方式是什么:

$driver_code = $this->input->post('filter_driver_code');
        $unit_code = $this->input->post('filter_unit_code');
        $fuel_type = $this->input->post('filter_fuel');
        $date_to = $this->input->post('date_to');
        $date_from = $this->input->post('date_from');


        if (isset($date_from) and isset($date_to) and empty($unit_code) and empty($driver_code) and empty($fuel_type)) {
            $sql = "SELECT * FROM fuel_usage where (date between '$date_from' and '$date_to') ";
            $result = $this->db->query($sql);
        } elseif (isset($driver_code) and isset($unit_code) and isset($fuel_type) and isset($date_from) and isset($date_to)) {
            $sql = "SELECT * FROM fuel_usage where driver_code='$driver_code' AND unit_code='$unit_code' AND fuel_type='$fuel_type' and (date between '$date_from' and '$date_to')";
            $result = $this->db->query($sql);
        }  elseif (empty ($date_from) and empty ($date_to) and isset ($unit_code) and isset ($driver_code) and isset ($fuel_type)) {
            $sql = "SELECT * FROM fuel_usage where driver_code='$driver_code' AND unit_code='$unit_code' AND fuel_type='$fuel_type'";
            $result = $this->db->query($sql);
        }  else {
            $sql="SELECT * FROM FUEL_USAGE";
            $result = $this->db->query($sql);
        }

它没有给出正确的输出。

empty()尝试所有检查可能是isset()在发布isset时给您问题原因,因为所有变量都将返回true,即使值为空

       if (!empty($driver_code) && !empty($unit_code) && !empty($fuel_type) && !empty($date_from) && !empty($date_to)) {
            $sql = "SELECT * FROM fuel_usage where driver_code='$driver_code' AND unit_code='$unit_code' AND fuel_type='$fuel_type' and (date between '$date_from' and '$date_to')";
            $result = $this->db->query($sql);
        }elseif (!empty($date_from) && !empty($date_to) && empty($unit_code) && empty($driver_code) && empty($fuel_type)) {
            $sql = "SELECT * FROM fuel_usage where (date between '$date_from' and '$date_to') ";
            $result = $this->db->query($sql);
        }  elseif (empty($date_from) && empty($date_to) && !empty($unit_code) && !empty($driver_code) && !empty($fuel_type)) {
            $sql = "SELECT * FROM fuel_usage where driver_code='$driver_code' AND unit_code='$unit_code' AND fuel_type='$fuel_type'";
            $result = $this->db->query($sql);
        }  else {
            $sql="SELECT * FROM FUEL_USAGE";
            $result = $this->db->query($sql);
        }

或者尝试短距离

$sql = "SELECT * FROM fuel_usage where 1 ";
if (!empty($driver_code)) {
  $sql .= " AND driver_code='$driver_code' ";
} 
if (!empty($unit_code)) {
  $sql .= " AND unit_code='$unit_code' ";
} 
if (!empty($fuel_type)) {
  $sql .= " AND fuel_type='$fuel_type' ";
} 
if (!empty($date_from) && !empty($date_to)) {
  $sql .= " AND date between '$date_from' and '$date_to' ";
}
$result = $this->db->query($sql); 
    if (!empty($driver_code) && !empty($unit_code) && !empty($fuel_type) && !empty($date_from) && !empty($date_to)) {
        $sql = "SELECT * FROM fuel_usage where driver_code='$driver_code' AND unit_code='$unit_code' AND fuel_type='$fuel_type' and (date between '$date_from' and '$date_to')";
        $result = $this->db->query($sql);
    }
    elseif(!empty ($unit_code) && !empty ($driver_code) && !empty ($fuel_type)) {
        $sql = "SELECT * FROM fuel_usage where driver_code='$driver_code' AND unit_code='$unit_code' AND fuel_type='$fuel_type'";
        $result = $this->db->query($sql);
    }
    elseif (!empty($date_from) and !empty($date_to)) {
        $sql = "SELECT * FROM fuel_usage where (date between '$date_from' and '$date_to') ";
        $result = $this->db->query($sql);
    }  else {
        $sql="SELECT * FROM FUEL_USAGE";
        $result = $this->db->query($sql);
    }