php - 我想从数据库中使用复选框和 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");
}
?>
解决方案
这是由于您的 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>
推荐阅读
- ruby-on-rails - Facebook Oauth URL 被阻止
- mysql - 为什么有两种方式可以更新`Binary log`。(1. Master Binlog dump 2. Master Database)
- python - TypeError:无法转换 numpy.complex128 类型的 np.ndarray。唯一支持的类型是:float64、float 32
- mysql - Flutter Widgets中的Mysql查询结果
- php - PHP 无法从远程 TLS 主机检索证书属性
- hive - 配置图集后 hive 无法与 hue 一起使用
- scala - Scala RDD 键值对
- angular - 从 json 对象数组中提取一个/多个属性到另一个对象中
- java - 打印三角问题
- geopandas - 错误:“无法渲染缺少任何几何图形的对象:” Geopandas 没有缺少我的几何图形