首页 > 解决方案 > 我想从数据库中使用复选框和 php 过滤价格

问题描述

我想使用一组范围过滤数据库上的数据。我在下面有我的复选框。

<body>
<form id="form" method="post" action="">
<input type="checkbox" name="price1" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $0 - 5<br>
<input type="checkbox" name="price2" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $6 - 10<br>
<input type="checkbox" name="price3" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $11 - 20<br>
 </form>
 </body>

 <script type="text/javascript">  
    $(function(){
     $('.checkbox').on('change',function(){
        $('#form').submit();
        });
    });
</script>

以下是我的 PHP 代码

<?php
if (isset($_POST["price1"])){
  $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
 }

if (isset($_POST["price2"])){
  $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
 }

if (isset($_POST["price3"])){
 $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 11 AND 20");
 }

else { $query = $conn->query("SELECT price * FROM item");
}
?>

每当我点击一个复选框标记时,它什么都不做,它只是显示一个我正在单独拉动的测试项目。下面的代码只是一个测试,以确保它从数据库中提取数据。现在我只是将价格范围从 0 拉到 5 并且它有效。但是上面的代码让用户可以选择价格范围,它不会做任何事情。任何事情都有帮助。

?php
        //get product rows
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5 ");

        if($query->num_rows > 0){
                while($row = $query->fetch_assoc()){
            ?>

                <div class="list-item">
                    <h2><?php echo $row["name"]; ?></h2>
                    <h4>Price: <?php echo $row["price"]; ?></h4>
                </div>
        <?php }
        }else{
            echo  'Product(s) not found';
        } ?>
    </div>
</div> 

代码如下:

<?php 
$conn_error = "Could not connect";
// SQL connection credentials

//They are blanked out since it is connected to the server already

$mysql_host = "";
$mysql_user = "";
$mysql_pass = "";
$mysql_name = "";

$conn = new mysqli($mysql_host, $mysql_user, $mysql_pass,$mysql_name);

if ($db->connect_error) {
    die("Connection failed: " . $db->connect_error);
}
?>

<?php
        //get product rows test to see database is working 
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5 ");

        if($query->num_rows > 0){
                while($row = $query->fetch_assoc()){
            ?>

                <div class="list-item">
                    <h2><?php echo $row["name"]; ?></h2>
                    <h4>Price: <?php echo $row["price"]; ?></h4>
                </div>
        <?php }
        }else{
            echo  'Product(s) not found';
        } ?>
    </div>
</div> 

<body>
<form id="form" method="post" action="">
<input type="checkbox" name="price1" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $0 - 5<br>
<input type="checkbox" name="price2" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $6 - 10<br>
<input type="checkbox" name="price3" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $11 - 20<br>
 </form>
 </body>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){
        $('.checkbox').on('change',function(){
            $('#form').submit();
        });
    });
</script>
<?php
    if (isset($_POST["price1"])){
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");

    } elseif (isset($_POST["price2"])){
        $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
    } elseif (isset($_POST["price3"])){
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 11 AND 20");
    } else {
        $query = $conn->query("SELECT price * FROM item");
    }
?>

标签: phpmysqli

解决方案


这是由于您的 if 语句的顺序,

<?php
if (isset($_POST["price1"])){
  $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
 }

if (isset($_POST["price2"])){
  $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
 }

if (isset($_POST["price3"])){
 $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
 }

else { $query = $conn->query("SELECT price * FROM item");
}
?>

else 只计算最后一个 if 语句 try,我用“elseif”替换了中间的两个 if,这样它就形成了一个 if 语句,

<?php
    if (isset($_POST["price1"])){
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
    } elseif (isset($_POST["price2"])){
        $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
    } elseif (isset($_POST["price3"])){
        $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 11 AND 20");
    } else {
        $query = $conn->query("SELECT price * FROM item");
    }
?>

我还将最后一个更新为 11-20 超过 0-5 以匹配您的复选框文本。

为了澄清 JS 元素,您使用的是 jQuery $ 选择器,您必须首先包含 jQuery 才能使其工作,

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){
        $('.checkbox').on('change',function(){
            $('#form').submit();
        });
    });
</script>

完整的例子,

<?php
$conn_error = "Could not connect";
// SQL connection credentials

//They are blanked out since it is connected to the server already

$mysql_host = "";
$mysql_user = "";
$mysql_pass = "";
$mysql_name = "";

$conn = new mysqli($mysql_host, $mysql_user, $mysql_pass,$mysql_name);

if ($db->connect_error) {
    die("Connection failed: " . $db->connect_error);
}
?>
    </div>
    </div>

    <body>
    <form id="form" method="post" action="">
        <input type="checkbox" name="price1" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $0 - 5<br>
        <input type="checkbox" name="price2" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $6 - 10<br>
        <input type="checkbox" name="price3" class="checkbox" <?=(isset($_POST['price'])?' checked':'')?>/> $11 - 20<br>
    </form>

    <?php
        if($_SERVER["REQUEST_METHOD"] == "POST") {
            if (isset($_POST["price1"])){
                $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 0 AND 5");
            } elseif (isset($_POST["price2"])){
                $query = $conn->queryn("SELECT * FROM item WHERE price BETWEEN 6 AND 10");
            } elseif (isset($_POST["price3"])){
                $query = $conn->query("SELECT * FROM item WHERE price BETWEEN 11 AND 20");
            } else {
                $query = $conn->query("SELECT price * FROM item");
            }

            if($query->num_rows > 0){
                while($row = $query->fetch_assoc()){
                    ?>

                    <div class="list-item">
                        <h2><?php echo $row["name"]; ?></h2>
                        <h4>Price: <?php echo $row["price"]; ?></h4>
                    </div>
                <?php }
            }else{
                echo  'Product(s) not found';
            }
        }
    ?>
    </body>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.0/jquery.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $('.checkbox').on('change',function(){
                $('#form').submit();
            });
        });
    </script>

推荐阅读