チェックボックスではそれを行うことはできません。これは、チェックボックスが機能する方法ではありません。本当に、それは選択ではありません。これは、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
これがチェックボックスの仕組みです。私が考えることができる2つの回避策があります。
1つ目は、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がないと機能しません。その悪いデザインだと思います。
もう1つのオプションは、URLの書き換えを試みるために使用することですが、正直なところ、それを機能させるために必要な複雑な正規表現が可能mod_rewrite
かどうかはわかりません。mod_rewrite
努力する価値も価格も回避策はないと思います。角かっこを使用して、受信側で配列を処理することをお勧めします。言い換えれば、もしあなたが持っているなら&tag[]=tag1&tag[]=tag4&tag[]=tag6
、これはあなたがあなたのURLに望むような文字列を得るでしょう:
if (isset($_GET['tag'])) {
$tstr = implode('+',$_GET['tag']);
}
echo $tstr;
そのために使用しているものは何でも、検索機能でそれを使用できます。