首页 > 解决方案 > 我想通过使用 php 或其他语言选择多个文本框来进行过滤?

问题描述

我正在开发最终项目,它是我大学的一个网站,我正在使用 PHP 开发它。该项目有 6 个字段用于过滤。所以我想使用一个或多个字段来过滤数据。但是,如果我将一个或多个字段留空,则会出现显示错误。所以请帮帮我。我有 2 个不同的代码。如果我使用任何一个领域,一项工作。但另一个代码必须使用 6 个字段,否则会显示错误。

工作只使用任何一个领域。

if (isset($_POST['filter'])) {
            if (!empty($_POST['thana'])) {
                $fthana = $_POST['thana'];
                $query = "SELECT * FROM postad WHERE status='1' AND thana = '$fthana' ORDER BY createdate DESC LIMIT $start, $limit";
                $data = mysqli_query($conn, $query);
            }
            if (!empty($_POST['area'])) {
                $farea = $_POST['area'];
                $query = "SELECT * FROM postad WHERE status='1' AND area = '$farea' ORDER BY createdate DESC LIMIT $start, $limit";
                $data = mysqli_query($conn, $query);
            }
            if (!empty($_POST['category'])) {
                $fcategory = $_POST['category'];
                $query = "SELECT * FROM postad WHERE status='1' AND category = '$fcategory' ORDER BY createdate DESC LIMIT $start, $limit";
                $data = mysqli_query($conn, $query);
            }
            if (!empty($_POST['whom'])) {
                $fwhom = $_POST['whom'];
                $query = "SELECT * FROM postad WHERE status='1' AND whom = '$fwhom' ORDER BY createdate DESC LIMIT $start, $limit";
                $data = mysqli_query($conn, $query);
            }
            if (!empty($_POST['available'])) {
                $favailable = $_POST['available'];
                $query = "SELECT * FROM postad WHERE status='1' AND available = '$favailable' ORDER BY createdate DESC LIMIT $start, $limit";
                $data = mysqli_query($conn, $query);
            }
            if (!empty($_POST['rent'])) {
                $frent = $_POST['rent'];
                $query = "SELECT * FROM postad WHERE status='1' AND rent <= '$frent' ORDER BY createdate DESC LIMIT $start, $limit";
                $data = mysqli_query($conn, $query);
            }

如果我使用 6 个字段,则为第二个工作。但是如果我将任何一个或多个字段留空,则会显示错误。

if ($fthana!="" && $farea!="" && $fcategory!="" && $fwhom!="" && $favailable!="" & $frent!="") {
                $query = "SELECT * FROM postad WHERE status='1' AND thana = '$fthana' AND area = '$farea' AND category = '$fcategory' AND whom = '$fwhom' AND available = '$favailable' AND rent = '$frent' ORDER BY createdate DESC LIMIT $start, $limit";
                $data = mysqli_query($conn, $query);
            }

标签: javascriptphpjqueryajaxfiltering

解决方案


Simplified version (without taking security issues into consideration) of your code can be someting like:

$where = [];
if ($fthana!="") {
    $where[] = "thana = '$fthana'";
} 

if ($farea!="") {
    $where[] = "area = '$farea'"
}

if ($fcategory!="") {
    $where[] = "category = '$fcategory'";
}
// more conditions here

$query = "SELECT * FROM postad WHERE status='1' AND " .  implode(' AND ', $where) . " ORDER BY createdate DESC LIMIT $start, $limit";
$data = mysqli_query($conn, $query);

推荐阅读