我为自己创建了一个简单的cms,我可以发布文章并让它们有多个类别。
所以第1条有类别: 音乐 和 技术 第2条类别 音乐 和 游戏
因此,如果我访问 音乐 类别页面,我会看到两篇文章,因为它们都有 音乐 在他们中。
现在我只需要创建最后一部分,类别页面。
每当有人过滤类别时, 音乐 和 游戏
它将数据发送到URL,如:http://domain.com/categories.php?cat1=music&cat2=games
现在我将如何获取 音乐 和 游戏 这些值,并将它们放在如下字符串中:{ {1}}因为每当有人过滤他们想要查看的类别时,这些值就会不同。
其他人可能会过滤 技术 和 音乐 ,然后我希望字符串如下:{{1 }}
答案 0 :(得分:2)
我怀疑你会想要做一些事情:
<form action="categories.php" method="GET">
<fieldset>
<legend>Filter Categories</legend>
<p>
<label><input type="checkbox" name="categories[]" value="music"/> Music</label>
<label><input type="checkbox" name="categories[]" value="technology"/> Technology</label>
<label><input type="checkbox" name="categories[]" value="film"/> Film</label>
</p>
</fieldset>
<button type="submit">Filter</button>
<button type="reset">Reset</button>
</form>
提交后,会显示以下网址:
http://example.com/categories.php?categories[]=music&categories[]=technology
然后,在显示具有这些类别之一的匹配条目的脚本中,您可以使用WHERE
子句执行以下操作:
$get_categories = $_GET['categories'];
$cat_clauses = array();
while ($category = array_shift($get_categories)) {
// Clean it
$category = preg_replace('/[^a-z0-9-_]/i', '', $category);
if ($category) {
array_push($cat_clauses, "OR category LIKE '%$category%'");
}
}
if ($cat_clauses) {
$cat_where = "AND (" . implode(' ', $cat_clauses) . ")";
}
这可能会给你类似的东西:
SELECT *
FROM blog
WHERE active = 1
AND (category LIKE '%technology%' OR category LIKE '%music%')