【发布时间】:2014-06-28 19:03:28
【问题描述】:
我创建了一个页面,显示单个类别下的所有帖子,即如果我点击音乐类别,我将获得与音乐类别相关的所有文章。
但我的目标是创建一个过滤选项,该选项可以过滤掉某些类别,并且只显示与您过滤的类别相关的所有帖子,即我将有一堆带有复选框的类别,如果我检查音乐和游戏并提交我想查看音乐和游戏下的所有帖子的表格。
这是我用来显示 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,主要,自动递增。
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
【问题讨论】:
-
您正在呼应内爆的 $links。您能否编辑您的帖子并向我们展示回显的内容以及您尝试运行的生成查询是什么?
-
我这样做只是为了测试,实际上从未删除它。代码现在只选择 1 个类别 id 并显示与该 1 个类别相关的所有帖子。我想要实现的是过滤多个类别,以显示与您过滤的类别相关的所有帖子。
-
如果你有一个 catIDs 列表,是什么阻止你运行这样的东西:“SELECT * FROM blog_posts NATURAL JOIN blog_posts_categories WHERE catID in (".implode(",", $catIDs)." )" ?
标签: php mysql filter blogs categories