【发布时间】:2021-01-29 18:10:09
【问题描述】:
所以我的过滤系统还有另一个问题。当我从我拥有的第一个下拉列表中选择一个选项时,我得到了我的过滤结果。但我也得到了过滤结果下方的一个块,在该块中我可以从第二个下拉列表(重复)中看到我的选项,并且在下面我再次拥有数据库中的所有结果。我怎样才能防止这种情况发生?
这是我的 index.php
<!doctype html>
<html lang="de">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Stylesheets -->
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.3/css/bootstrap.min.css"
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2"
crossorigin="anonymous">
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="js/jquery.min.js"></script>
<script>
$(document).ready(function(){
// Live anzeigen der 2. Ebene + 1 Ebene Ergebnisse
$('#category').on('change', function(){
var categoryID = $(this).val();
if(categoryID){
$.ajax({
type:'POST',
url:'ajaxdata.php',
data:'category_id='+categoryID,
success:function(html){
$('#subcategory').html(html);
$('#partner').html(html);
$('#subcategory').prop('disabled', false);
}
});
} else {
$('#subcategory').html('<option value="">Zuerst Überkategorie auswählen!</option>');
}
});
// Live Anzeigen der 3. Ebene + 2. Ebene Ergebnisse
$('#subcategory').on('change', function(){
var subcategoryID = $(this).val();
if(subcategoryID){
$.ajax({
type:'POST',
url:'ajaxdata.php',
data:'subcategory_id='+subcategoryID,
success:function(html){
$('#subcategory2').html(html);
$('#partner').html(html);
$('#subcategory2').prop('disabled', false);
}
});
} else {
$('#subcategory2').html('<option value="">Zuerst Unterkategorie auswählen!
</option>');
}
});
// Live anzeigen der 3. Ebene Ergebnisse
$('#subcategory2').on('change', function(){
var subcategory2ID = $(this).val();
if(subcategory2ID){
$.ajax({
type:'POST',
url:'ajaxdata.php',
data:'subcategory2_id='+subcategory2ID,
success:function(html){
$('#partner').html(html);
}
});
} else {
$('#partner').html('<h1>Zuerst Unterkategorie auswählen!</h1>');
}
});
});
</script>
</head>
<body>
<?php
// Include connection.php
include_once 'dbconfig.php';
// Fetch all the category data
$query = "SELECT * FROM categories WHERE status = 1 ORDER BY category_name ASC";
$result = $connect->query($query);
?>
<!-- Category dropdown -->
<div class="container">
<div class="row">
<form action="" method="post">
<div class="col">
<select id="category" name="category" class="dropdown">
<?php
if($result->num_rows > 0){
while($row = $result->FETCH_ASSOC()){
echo '<option value="'.$row['category_id'].'">'.$row['category_name'].'</option>';
}
} else {
echo '<option value="">Nicht verfügbar!</option>';
}
?>
</select>
</div>
<div class="col">
<!-- Subcategory dropdown -->
<select id="subcategory" name="subcategory" class="dropdown" disabled>
<option value="">Kategorie auswählen!</option>
</select>
</div>
<div class="col">
<!-- 2nd subcategory dropdown -->
<select id="subcategory2" name="subcategory2" class="dropdown" disabled>
<option value="">Kategorie auswählen!</option>
</select>
</div>
</form>
</div>
</div>
<!-- Show all results -->
<div id="all_results">
<? /*
$query = "SELECT * FROM partner WHERE status = 1 ORDER BY partner_name ASC";
$result = $connect->query($query);
if ($result->num_rows > 0){
} */
?>
</div>
<!-- Partner results -->
<div id="partner">
<?php
if($result->num_rows > 0){
while($row = $result->FETCH_ASSOC()){
?>
<div>
<h1><? echo $row['partner_name'] ?></h1><br>
<img src="<? echo $row['partner_logo'] ?>"><br>
<a href="<? echo $row['partner_link'] ?>">Zum Unternehmen!</a>
</div>
<?php
}
} else {
echo '<p>Nichts gefunden!<p>';
}
?>
</div>
<!-- jQuery library -->
<script src="js/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
这是我的 ajaxdata.php:
<?php
include_once 'dbconfig.php';
//Dropdown No. 1
if(!empty($_POST['category_id']))
{
// Anzeigen von Ergebnisse - 1. Ebene
$query = "SELECT * FROM partner WHERE category_id = ".$_POST['category_id']." AND status = 1
ORDER BY partner_name ASC";
$result = $connect->query($query);
if($result->num_rows > 0)
{
while($row = $result->FETCH_ASSOC())
{
?>
<div class="div_results">
<h1><? echo $row['partner_name'] ?></h1><br>
<img src="<? echo $row['partner_logo'] ?>"><br>
<a href="<? echo $row['partner_link'] ?>">Zum Unternehmen!</a>
</div>
<?php
}
}
// Anzeigen der Kategorien der 2. Ebene
$query = "SELECT * FROM subcategories WHERE category_id = ".$_POST['category_id']." AND status = 1 ORDER BY subcategory_name ASC";
$result = $connect->query($query);
if($result->num_rows > 0)
{
echo '<option value="">Kategorie auswählen!</option>';
while($row = $result->FETCH_ASSOC())
{
echo '<option value="'.$row['subcategory_id'].'">'.$row['subcategory_name'].'</option>';
}
}
// Anzeigen aller Ergebnisse
$query = "SELECT DISTINCT * FROM partner WHERE status = 1 ORDER BY partner_name ASC";
$result = $connect->query($query);
if($_POST["category_id"] != "Alle")
{
while($row = $result->FETCH_ASSOC())
{
?>
<div class="div_results">
<h1><? echo $row['partner_name'] ?></h1><br>
<img src="<? echo $row['partner_logo'] ?>"><br>
<a href="<? echo $row['partner_link'] ?>">Zum Unternehmen!</a>
</div>
<?php
}
}
else {
echo '<option value="">Nothing found!</option>';
}
}
// Dropdown No. 2
elseif(!empty($_POST['subcategory_id']))
{
// Anzeigen von Ergebnisse - 2. Ebene
$query = "SELECT * FROM partner WHERE subcategory_id = ".$_POST['subcategory_id']." AND
status = 1 ORDER BY partner_name ASC";
$result = $connect->query($query);
if($result->num_rows > 0)
{
while($row = $result->FETCH_ASSOC())
{
?>
<div>
<h1><? echo $row['partner_name'] ?></h1><br>
<img src="<? echo $row['partner_logo'] ?>"><br>
<a href="<? echo $row['partner_link'] ?>">Zum Unternehmen!</a>
</div>
<?php
}
}
// Anzeigen der Kategorien der 3. Ebene
$query = "SELECT * FROM subcategories2 WHERE subcategory_id = ".$_POST['subcategory_id']."
AND status = 1 ORDER BY subcategory2_name ASC";
$result = $connect->query($query);
if($result->num_rows > 0)
{
echo '<option value="">Untekategorie auswählen!</option>';
while($row = $result->FETCH_ASSOC())
{
echo '<option
value="'.$row['subcategory2_id'].'">'.$row['subcategory2_name'].'</option>';
}
}
else {
echo '<option value="">Nichts gefunden!</option>';
}
}
// Dropdown No. 3
elseif(!empty($_POST['subcategory2_id'])){
// Anzeigen von Ergebnisse - 3. Ebene (Letzte Ebene)
$query = "SELECT * FROM partner WHERE subcategory2_id = ".$_POST['subcategory2_id']." AND status = 1 ORDER BY partner_name ASC";
$result = $connect->query($query);
if($result->num_rows > 0){
while($row = $result->FETCH_ASSOC()){
?>
<div>
<h1><? echo $row['partner_name'] ?></h1><br>
<img src="<? echo $row['partner_logo'] ?>"><br>
<a href="<? echo $row['partner_link'] ?>">Zum Unternehmen!</a>
</div>
<?php
}
} else {
echo 'Nothing found!';
}
}
?>
我做错了什么,所以这会在我过滤时显示所有内容
【问题讨论】:
-
<script src="js/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>没有意义——你不需要加载 jQuery 两次。 (这不是您问题中问题的根源,但它肯定是不必要且效率低下的,有时它实际上会导致问题)。只保留其中一条,而不是两条。 -
但是是本地的,所以当我想自己写点什么的时候呢?
-
对不起,我不明白你的意思。它们都是同一个文件的副本。你只需要其中之一。不管它是否在您的本地服务器上,您的网页并不关心它来自哪里,只要它可以成功加载它。一旦加载,它的来源就无关紧要了,它的行为是一样的。
-
无论如何 - 我编辑了您的帖子,为您的 ajaxdata.php 添加了适当的缩进和间距,因此我们可以更轻松地查看代码流。以前很难读。一旦我这样做了,很明显在
if(!empty($_POST['category_id']))区域内,您正在运行SELECT * FROM partner...查询的两个版本,并从两者输出结果。第一个版本被过滤,但第二个版本没有。我不知道你为什么这样做。这似乎没有任何意义,但很明显这是问题的根源。 -
那么我怎样才能最好地解决它?