Я пытаюсь создать зону с селектором категорий и для каждой категории для отображения сообщений. Я беру категории, а также сообщения из базы данных mysql, и я показываю их на php-странице. Я также использую Bootstrap 4.
Здесь я объяснил свою проблему:
Мой код:
<div class="col center_content">
<div class="categories_buttons">
<small id="emailHelp" class="form-text text-muted">Choose a category:</small>
<p>
<?php
$category_select = 'SELECT * FROM categories';
$posts_select = 'SELECT * FROM categories, posts WHERE posts.post_categ_id=categories.categ_id';
$category_query = $DBcon->query($category_select);
$category_query2 = $DBcon->query($category_select);
$posts_query = $DBcon->query($posts_select);
if(isset($category_query)){
while($category_row = $category_query->fetch_assoc()){
?>
<button class="btn btn-primary btn-sm" type="button" data-toggle="collapse" data-target="#collapseCategory-<?= $category_row['categ_id'];?>" aria-expanded="false" aria-controls="collapseCategory-<?= $category_row['categ_id']; ?>">
<?= $category_row['categ_name'] ?>
</button>
<?php
}
}
?>
</p>
</div>
<div class="clasa_cu_probleme">
<?php
if(isset($category_query2)){
while($category_row2 = $category_query2->fetch_assoc()){
if(isset($posts_query)){
while($posts_row = $posts_query->fetch_assoc()){
?>
<div class="collapse_div collapse" id="collapseCategory-<?=$category_row2['categ_id'];?>">
<div class="card card-block">
<?php echo $posts_row['post_name'];
?>
</div>
</div>
<?php
}
}
}
}
?>
</div>
</div>
Ваш $posts_query
необходимо обновить для каждой из категорий, поэтому вам придется обновлять его на каждой итерации цикла $category_row2
. Я не могу проверить решение, но он будет выглядеть примерно так:
<div class="col center_content">
<div class="categories_buttons">
<small id="emailHelp" class="form-text text-muted">Choose a category:</small>
<p>
<?php
$category_select = 'SELECT * FROM categories';
// this is moved to below
// $posts_select = 'SELECT * FROM categories, posts WHERE posts.post_categ_id=categories.categ_id';
// $posts_query = $DBcon->query($posts_select);
$category_query = $DBcon->query($category_select);
$category_query2 = $DBcon->query($category_select);
if(isset($category_query)){
while($category_row = $category_query->fetch_assoc()){
?>
<button class="btn btn-primary btn-sm" type="button" data-toggle="collapse" data-target="#collapseCategory-<?= $category_row['categ_id'];?>" aria-expanded="false" aria-controls="collapseCategory-<?= $category_row['categ_id']; ?>">
<?= $category_row['categ_name'] ?>
</button>
<?php
}
}
?>
</p>
</div>
<div class="clasa_cu_probleme">
<?php
if(isset($category_query2)){
while($category_row2 = $category_query2->fetch_assoc()){
// This is where it gets updated with the new categ_id, then run the query
$posts_select = 'SELECT * FROM categories, posts WHERE posts.post_categ_id='.category_row2['categ_id'];
$posts_query = $DBcon->query($posts_select);
if(isset($posts_query)){
while($posts_row = $posts_query->fetch_assoc()){
?>
<div class="collapse_div collapse" id="collapseCategory-<?=$category_row2['categ_id'];?>">
<div class="card card-block">
<?php echo $posts_row['post_name'];
?>
</div>
</div>
<?php
}
}
}
}
?>
</div>
</div>
редактировать
Это лучшее решение, потому что вам нужно только один раз запустить запрос категории:
<div class="col center_content">
<div class="categories_buttons">
<small id="emailHelp" class="form-text text-muted">Choose a category:</small>
<p>
<?php
$category_select = 'SELECT * FROM categories';
// this replaces the single query
$posts_selects = array()
$category_query = $DBcon->query($category_select);
if(isset($category_query)){
while($category_row = $category_query->fetch_assoc()){
// populate an array with page_queries values for later
$posts_selects[] = 'SELECT * FROM categories, posts WHERE posts.post_categ_id='.category_row['categ_id'];
?>
<button class="btn btn-primary btn-sm" type="button" data-toggle="collapse" data-target="#collapseCategory-<?= $category_row['categ_id'];?>" aria-expanded="false" aria-controls="collapseCategory-<?= $category_row['categ_id']; ?>">
<?= $category_row['categ_name'] ?>
</button>
<?php
}
}
?>
</p>
</div>
<div class="clasa_cu_probleme">
<?php
if(count($posts_selects) != 0){
foreach($posts_selects as $posts_select)
$posts_query = $DBcon->query($posts_select);
if(isset($posts_query)){
while($posts_row = $posts_query->fetch_assoc()){
?>
<div class="collapse_div collapse" id="collapseCategory-<?=$category_row2['categ_id'];?>">
<div class="card card-block">
<?php echo $posts_row['post_name'];
?>
</div>
</div>
<?php
}
}
}
}
?>
</div>
</div>