我创建了一个页面,显示单个类别下的所有帖子,即如果我点击音乐类别,我将获得与音乐类别相关的所有文章。
但我的目标是创建一个过滤选项,可以过滤掉某些类别,只显示连接到您已过滤的类别的所有帖子,即我将拥有一堆带有复选框的类别,如果我检查音乐和游戏,并提交表格我想看到音乐和游戏下的所有帖子。
以下是我用于显示1个单一类别下所有帖子的代码。
<?php require('includes/config.php');
$catID = ($_GET['id']);
$catName = ($_GET ['cat']);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>XS</title>
<link rel="stylesheet" href="style/normalize.css">
<link rel="stylesheet" href="style/main.css">
</head>
<body>
<div id="wrapper">
<h1>XS <span style="color:blue;"> >> </span> <span><?php echo $catName); ?></span> </h1>
<hr />
<div class="grid">
<?php
try {
$stmt = "SELECT * FROM blog_posts NATURAL JOIN blog_posts_categories WHERE catID = $catID";
$query = $db->prepare($stmt);
$query->execute();
$numrows = $query->rowCount();
if($numrows > 0){
while($row = $query->fetch()){
echo '<ol class="thumb-grid group">';
echo '<li>';
echo '<a href="viewpost.php?id='.$row['postID'].'">';
echo '<img src="scripts/t.php?src='.$row['postImage'].'&w=236&h=236&q=95" alt="'.$row['postTitle'].'" title="'.$row['postTitle'].'" />';
echo '</a>';
echo '</li>';
echo '</ol>';
}
}
} catch(PDOException $e) {
echo $e->getMessage();
}
?>
</div>
</div>
</body>
</html>
所以我开始使用表单,但它不太好,因为它只发送类别名称而不是相应的类别ID。
<form action="c.php" method="get">
<fieldset>
<legend>Filter Categories</legend>
<p>
<label><input type="checkbox" name="cat[]" value="Music"/> Music</label>
<label><input type="checkbox" name="cat[]" value="Games"/> Games</label>
<label><input type="checkbox" name="cat[]" value="Tech"/> Tech</label>
</p>
</fieldset>
<button type="submit">Filter</button>
<button type="reset">Reset</button>
</form>
这是我的数据库结构:
blog_posts 表
postID int,primary,auto increment。
postTitle varchar
postCont 文字
blog_categories 表
catID int,主要,自动增量。
catName varchar
blog_posts_categories 表
postID int
catID int
数据库内容:
blog_posts
postID | postTitle | postCont
1 Post1 Cont1
2 Post2 Cont2
3 Post3 Cont3
4 Post4 Cont4
5 Post5 Cont5
blog_categories
catID | catName
1 Music
2 Games
3 Technology
blog_posts_categories
postID | catID
1 1
1 2
1 3
2 2
3 3
4 1
4 2
5 2
5 3
答案 0 :(得分:2)
将复选框值替换为实际的类别ID,并将类别名称放在标记内部文本内容中:
<input type="checkbox" name="cat[]" value="<?php echo $row['catID'];?>"/><?php echo $row['catName'];?></input>
您可以从数据库(blog_categories
表)中获取该数据,并对结果集的行执行简单循环。
现在你应该在所有选定类别id的$_GET["cat"]
中得到一个数组;您只需要使用逗号作为分隔符将其内爆,并将其放入查询中,将WHERE catID = $catID"
替换为WHERE catID IN ($catID)"
。不要忘记首先清理您的请求数据(通过检查值是否为整数)。
最后,您可能希望通过在附加列中添加帖子所属的类别来更新表格显示,或者按类别对数据进行排序,并为每个类别设置子表格。这是一个练习。
答案 1 :(得分:0)
<?php
$query = "SELECT * FROM `name` WHERE `status` = '1' ";
if(isset($_GET['catname'])){
$cat1 = $_GET['catname'];
$query .= " AND `category` = '$cat1' ";
}
$query .= " ORDER BY `ptid` DESC ";
$result = mysql_query($query);
$nums = mysql_num_rows($result);
if($nums > 0){
while($rows = mysql_fetch_row($result,MYSQL_ASSOC)){
$ptid_dec = $rows['ptid'];
$mult = '987694929';
$ptid = $ptid_dec*$mult;
$productname = $rows['productname'];
$productimage = $rows['productimage'];
$description = $rows['description'];
?>
<?php echo $productimage; ?>"
<div class="caption">
<a href="admin/<?php echo $productimage; ?>" target="_blank"><h4 class="center listdesign"><strong><?php echo $productname; ?></strong></h4></a>
<?php } } ?>
答案 2 :(得分:0)
<script>
$("#example1").DataTable({
"pageLength": 9,
"lengthChange": false,
"bFilter": false,
"bInfo": false,
"bAutoWidth": false
});
$('#example2').DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false
});
答案 3 :(得分:0)
<script>
function paginateScroll() {
$('html, body').animate({
scrollTop: $(".topheader").offset().top
}, 100);
console.log('pagination button clicked'); //remove after test
$(".paginate_button").unbind('click', paginateScroll);
$(".paginate_button").bind('click', paginateScroll);
}
paginateScroll();
</script>
答案 4 :(得分:0)
我有同样的问题,我想获得将在特定页面上发布的特定类别。我有这个 php 代码可以从我的数据库中获取信息;
<?php
$result = mysqli_query ($mysqli, "SELECT * FROM mydata ORDER BY id DESC");
while ($row = mysqli_fetch_array($result))
{
我有 3 个类别:cat1 / cat2 / cat3。我喜欢所有的 cat1 类别过滤,只会在一页中发布