你不能用复选框来做到这一点。这不是复选框的工作方式。这不是一个选择,真的。它是构建 HTML、PHP 和您的浏览器的方式。
此外,您所做的将不起作用。您已将相同的变量设置为几个不同的字段。每次设置时,都会覆盖以前的值。?category_name=VALUE&tag=TAG1&tag=TAG2&tag=TAG3
虽然如果您要添加到脚本中,您的 URL 可能看起来像,但var_dump($_GET);
您会看到 PHP 看到的唯一内容是最后一个 - tag=TAG3
。
您可以通过[]
在复选框名称中使用方括号 -- -- 来使代码正常工作。极简代码示例(仅用于演示目的):
echo '<form>';
echo '<input type="checkbox" name="tag[]" value="tag1">';
echo '<input type="checkbox" name="tag[]" value="tag2">';
echo '<input type="checkbox" name="tag[]" value="tag3">';
echo '<input type="checkbox" name="tag[]" value="tag4">';
echo '<input type="checkbox" name="tag[]" value="tag5">';
echo '<input type="checkbox" name="tag[]" value="tag6">';
echo '<input type="submit" value="Clickie">';
echo '</form>';
但是,您的 URL 的“标签”部分将如下所示:
&tag[]=tag1&tag[]=tag4&tag[]=tag6
这就是复选框的工作方式。我能想到两种解决方法。
第一种是使用 Javascript 填充表单中的隐藏字段。
echo '<form>';
echo '<input type="hidden" name="tag" value="">';
echo '<input type="checkbox" value="tag1">';
echo '<input type="checkbox" value="tag2">';
echo '<input type="checkbox" value="tag3">';
echo '<input type="checkbox" value="tag4">';
echo '<input type="checkbox" value="tag5">';
echo '<input type="checkbox" value="tag6">';
echo '<input type="submit" value="Clickie">';
echo '</form>';
您将让您的 Javascript 监视对这些复选框的点击,并将值填充到隐藏标记字段中。为了获得您想要的 URL,您必须name
从复选框中删除,这使得该表单完全依赖于 Javascript。如果没有 Javascript,它将无法工作。我认为这是糟糕的设计。
另一种选择是mod_rewrite
尝试重写您的 URL,但老实说,我不知道是否mod_rewrite
能够使用复杂的正则表达式来完成这项工作。
我不认为值得付出努力或付出代价的解决方法。我建议您使用方括号并在接收端处理数组。换句话说,如果你有,&tag[]=tag1&tag[]=tag4&tag[]=tag6
那么这将得到一个字符串,就像你在你的 URL 中想要的那样:
if (isset($_GET['tag'])) {
$tstr = implode('+',$_GET['tag']);
}
echo $tstr;
您可以在搜索功能中使用它,无论您使用什么。