PHP if-else语句。使用PHP进行搜索和过滤

PHP if-else语句。使用PHP进行搜索和过滤,php,html,mysql,if-statement,select,Php,Html,Mysql,If Statement,Select,问题是我无法访问第三个“else-if语句”,其中的场景如下: 我有3个文本框在HTML->最小值,最大值和搜索关键字。如果2个文本框中有值,我希望在2个文本框中输入值时达到第3个,但实际情况是它只返回到第一个if语句 <?php $price_min = $_POST['price_min']; $price_max = $_POST['price_max']; $keyword = $_POST['keyword']; $sql = 'SELECT *

问题是我无法访问第三个“else-if语句”,其中的场景如下:
我有3个文本框在HTML->最小值,最大值和搜索关键字。如果2个文本框中有值,我希望在2个文本框中输入值时达到第3个,但实际情况是它只返回到第一个if语句

 <?php
    $price_min = $_POST['price_min'];
    $price_max = $_POST['price_max'];
    $keyword = $_POST['keyword'];
    $sql = 'SELECT * FROM products ';
    
    if (!empty($price_min)) {
      $sql .='WHERE price >='.$price_min;
    } else if (!empty($price_max)) {
      $sql .='WHERE price <='.$price_max;
    } else if (!empty($price_min) && !empty($price_max)) {
      $sql .='WHERE price BETWEEN '.$price_min.' AND '.$price_max;
    } else if (!empty($keyword) && !empty($price_min)) {
      $sql .='WHERE (tags LIKE "%'.$keyword.'%") AND (price >='.$price_min.')';
    } else if (!empty($keyword) && !empty($price_max)) {
      $sql .='WHERE (tags LIKE "%'.$keyword.'%") AND (price <='.$price_max.')';
    } else if (!empty($keyword) && (!empty($price_min) AND !empty($price_max)) {
      $sql .='WHERE (tags LIKE "%'.$keyword.'%") AND (price BETWEEN '.$price_min.' AND '.$price_max.')';
    } else {
      echo "all are empty// ";
    }
  ?>

else if
仅在先前的
if
条件为false时执行。一系列
if/else if
将在第一个真实条件下停止。因此,只有在条件相互排斥时才应使用此选项。如果同时填写了
$price\u min
$price\u max
,则第一个
If
将成功,因此它不会执行任何
else If
测试。您应该先测试这两个设置,然后再自行检查其中一个

iif (!empty($price_min) && !empty($price_max)) {
    $sql .='WHERE price BETWEEN '.$price_min.' AND '.$price_max;
} else if (!empty($price_min)) {
  $sql .='WHERE price >='.$price_min;
} else if (!empty($price_max)) {
  $sql .='WHERE price <='.$price_max;
}

谢谢你!我认为你的代码比我的好得多!但是如果“price\u min和price\u max”有值呢?做“price>=$price\u min和price是的,
a在x和y之间
相当于
a>=x和a哦,天哪,我已经在这个问题上纠缠了好几天了,非常感谢!我能再问你一件事吗?我忘了在我的问题中包括这个,我有一个用于分类过滤的复选框,问题是如果复选框只选中1个,查询将是“category_id=$category”,但如果是2个或更多,查询将是“
category\u id像\'%'。$category\u选中。'%\'或category\u id像\'%'。$category\u选中。%\'等等。”。。取决于将选中多少类别
复选框应位于一个数组中。然后,您可以循环所有这些元素,并将它们收集到一个
category\u id数组中,如“%”。$category\u checked[$i].%“
,然后使用
”(“.内爆('OR',$categories)。”
)组合它们。将它添加到您的
$conditions
数组中。不要在注释中放入长代码,它完全不可读。如果您还有其他问题,请发布另一个问题,这样您就可以将其正确格式化
$conditions = [];

if (!empty($price_min)) {
    $conditions[] = 'price >='.$conn->real_escape_string($price_min);
}
if (!empty($price_max)) {
    $conditions[] = 'price <='.$conn->real_escape_string($price_min);
}
if (!empty($keyword)) {
    $conditions[] = 'tags LIKE "%'.$conn->real_escape_string($keyword).'%"';
}

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