web関連
【php】複数のチェックボックスの値をまとめてGETで送信する方法
同じnameのチェックボックスを複数チェックして「送信」を押しても個々に送信されちゃって、どうにかまとめられないものか調べた時の備忘録
したいこと
チェックボックスをいくつか選択して、送信すると?checklist=valueA&checklist=valueB
って同じname属性なのに個々に送信されるのをなんとかしたい
?checklist=valueA&checklist=valueB
↓
?checklist=valueA+valueB
ってなるのが理想
実装してみた
ちょっと綺麗なやり方じゃないけどやってみた
<form method="get" action="">
<label><input type="checkbox" name="checklist[]" value="valueA">選択肢A</label>
<label><input type="checkbox" name="checklist[]" value="valueB">選択肢B</label>
<label><input type="checkbox" name="checklist[]" value="valueC">選択肢C</label>
<button type="submit">送信</button>
</form>
<?php
$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
$query_p = '';
if (isset($_GET['checklist']) && is_array($_GET['checklist'])) {
$checklist = $_GET['checklist'];
foreach( $checklist as $value ){
if($value !== end($checklist)){
//最後以外のループ
$query_p.= $value . '+' ;
}else{
//最後のループ
$query_p.= $value;
}
}
header( "Location:" .$url."?checklist=".$query_p."" );//リダイレクト処理
}
?>
フォームからGET送信したものを取得して、foreachでテキストとしてまとめてクエリパラメーターとして指定してheader関数でリダイレクトさせてる
一度同じname属性をまとめてリダイレクトするという処理を挟んでいるけど、?checklist=valueA+valueB
という風にまとめることはできた
Memo:書き方参考にした
これ、submitする前にまとめて送信するみたいにできないのかな?
なんかリダイレクトかけないといけないのが引っかかる
なんかリダイレクトかけないといけないのが引っかかる
メモ:name=”checklist”とname=”checklist[]”
なんか気になったんだけど、name="checklist"
とname="checklist[]"
と時で取得できるものって変わるんすね
//name="checklist"の時
$_GET['checklist'];//valueA~Cいずれか一つのみ取得
//name="checklist[]"の時
$_GET['checklist'];//チェックしたvalueA~Cを配列で取得
form周りはwordpressのプラグインで作ってるから初めて知った
つか、
つか、
$_GET['checklist']
で[]
ありなしどっちも取得できるわ参考記事
せっかく調べたのでメモがてら残しておく
filter_input()を使って判別してる
知らん書き方してたのでメモ
Link:”[PHP
Memo: checkboxの値を配列で受け取る”]
javascriptでする場合
今回PHPでやったけどjavascriptでやるならこういう書き方するみたい
メモ:サーバー側で処理する場合
サーバ側で処理をする方法が紹介されてた
pythonよくわからんから参考記事だけ貼っとく
Link:”[PHP
Memo: checkboxの値を配列で受け取る”]developer.mozilla.org/のチェックボックスの説明のところで紹介してた
wordpressの検索部分でカスタム投稿の絞り込みとして使いたかったんだけど、リダイレクトするほどのものでもないしラジオボタンでも十分だったので今回は勉強がてら調べてみた