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という風にまとめることはできた

これ、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()を使って判別してる

知らん書き方してたのでメモ

javascriptでする場合

今回PHPでやったけどjavascriptでやるならこういう書き方するみたい

メモ:サーバー側で処理する場合

サーバ側で処理をする方法が紹介されてた
pythonよくわからんから参考記事だけ貼っとく

wordpressの検索部分でカスタム投稿の絞り込みとして使いたかったんだけど、リダイレクトするほどのものでもないしラジオボタンでも十分だったので今回は勉強がてら調べてみた

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。