从URL获取多个值并将它们放在一个字符串中

时间:2014-06-22 01:02:05

标签: php html

我为自己创建了一个简单的cms,我可以发布文章并让它们有多个类别。

所以第1条有类别: 音乐 技术 第2条类别 音乐 游戏

因此,如果我访问 音乐 类别页面,我会看到两篇文章,因为它们都有 音乐 在他们中。

现在我只需要创建最后一部分,类别页面。

每当有人过滤类别时, 音乐 游戏 它将数据发送到URL,如:http://domain.com/categories.php?cat1=music&cat2=games

现在我将如何获取 音乐 游戏 这些值,并将它们放在如下字符串中:{ {1}}因为每当有人过滤他们想要查看的类别时,这些值就会不同。

其他人可能会过滤 技术 音乐 ,然后我希望字符串如下:{{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%')