###前提・実現したいこと
いつもお世話になってます。
自作のWordpressテーマに検索フォームを設置しているのですが、チェックボックスの選択した値の受け渡しがうまくいかずここ数日悩んでいます。
検索フォームでチェック項目を選択し、送信後は検索結果ページへ遷移します。
検索結果ページでは前のページで選択したチェックボックスが選択されたままの状態で、フォームの下に検索した結果を表示するようにしています。
前ページで選択したチェックボックスが値がうまく取得できていないのか、もしくは遷移先のPHPの記述が間違っているのか、受け渡しができず「checked="checked"」にならないという状況です。
少々ややこしい仕様のためテンプレートのsearch.php等は使用していません。
$_GETで受け渡す事も考えましたがチェックボックスのvalueが日本語なので$_POSTがやはり適切でしょうか?
他に、いくつか試したことも書いておきます。
初心者のためいくつかおかしい点はありますが、お力添えをいただければ幸いです。
###追記
URLをjQueryで書き換えをしているためAjaxの方法で検証しているのですが、試したことにある
echo "チェックボックス\n";
ここのechoが表示されません…。アラートは出てくるので送れてはいるようです。
参考サイトのコードを変更しているので該当のソースコードに書いておきます。
###該当のソースコード
送信前
<form method="post" action="/search/" id="form"> <div class="vegetable"> <h2>野菜</h2> <input type="checkbox" name="vege[]" value="トマト">トマト <input type="checkbox" name="vege[]" value="ビーマン">ピーマン <input type="checkbox" name="vege[]" value="ジャガイモ">ジャガイモ </div> <div class="fruit"> <h2>フルーツ</h2> <input type="checkbox" name="fruit[]" value="りんご">りんご <input type="checkbox" name="fruit[]" value="オレンジ">オレンジ <input type="checkbox" name="fruit[]" value="バナナ">バナナ </div> <button class="submit-btn">送信</button> </form>
送信後(野菜:ピーマン、フルーツ:バナナを選択した場合)
<form method="post" action="/search/" id="form"> <div class="vegetable"> <h2>野菜</h2> <input type="checkbox" name="vege[]" value="トマト">トマト <input type="checkbox" name="vege[]" value="ビーマン" checked="checked">ピーマン <input type="checkbox" name="vege[]" value="ジャガイモ">ジャガイモ </div> <div class="fruit"> <h2>フルーツ</h2> <input type="checkbox" name="fruit[]" value="りんご">りんご <input type="checkbox" name="fruit[]" value="オレンジ">オレンジ <input type="checkbox" name="fruit[]" value="バナナ" checked="checked">バナナ </div> <button class="submit-btn">送信</button> </form> <div class="search-result"> <h1>検索結果</h1> <!-- ここからは特に関係なし --> <h2>野菜</h2> <p>ピーマン</p> <h2>フルーツ</h2> <p>バナナ</p> </div>
追記分
【jQuery】 $("#form").submit(function(){ var checks=[]; $("input[type=checkbox]:checked").each(function(){ checks.push(this.value); }); $.ajax({ type: "POST", url: "search", data: { "checks":checks }, success: function(data){ if(data != '') { alert(data); } } }); return false; }); 【PHP】(/search/に記述) if (isset($_POST['checks'])) { echo "チェックボックス\n"; foreach($_POST['checks'] as $check) { echo htmlspecialchars($check) . "が選択されました\n"; } }
###試したこと(参考サイトから引用)
jQueryのAjaxを使って複数選択されたチェックボックスの値をPOSTする方法メモ
【jQuery】 $(function(){ $("#form").submit(function(){ //選択されたチェックボックスの値を配列に保存 var checks=[]; $("[name='check[]']:checked").each(function(){ checks.push(this.value); }); //セレクトボックスの値を変数に保存 var select = $("#select").val(); $.ajax({ type: "POST", url: "form.php", data: { "checks":checks, "select":select }, success: function(data){ if(data != '') { alert(data); } } }); return false; //submitイベントハンドラにfalseを返し,action処理をキャンセル }); }); 【PHP】 if (isset($_POST['checks'])) { echo "チェックボックス\n"; foreach($_POST['checks'] as $check) { echo htmlspecialchars($check) . "が選択されました\n"; } } if (isset($_POST['select'])) { echo "セレクトボックスボックス\n"; echo htmlspecialchars($_POST['select']) . "が選択されました\n"; }
その他
PHP:フォームからcheckboxの値の取得してチェック状態を保持する方法のメモ
【PHP】チェックボックスの値を受け取る
###追記 URLパラメータ部分
$("form").submit(function() { var url = '/search?'; var value = []; $("input:checked").each(function(){ value.push($(this).val()); }); url += "カテゴリ="+value.join(","); location.href = encodeURI(url); return false; });

回答3件
あなたの回答
tips
プレビュー