人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【PHP】チェックボックスの値を受け取って処理

お世話になります。詳細は以下になります。

■前提
・楽天、Amazon、Yahooの各APIを利用中。

■やりたいこと
・検索ウィンドウを利用。その下にチェックボックスを配置。チェックボックスがcheckedになっていたら、任意の検索キーワードを追加。
例:検索ボックスに「vaio」と入力し、チェックボックス「赤」をチェックすると、「vaio 赤」で検索。
・検索ボタン押下(検索結果表示)後もcheckedは保持。


文字数制限の関係で、現在のソースコードはコメント欄に書かせていただきます。


何卒よろしくお願い致します。

●質問者: cafe-beret
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

質問者から

■定義ファイル
define('RED', '0');
define('BLACK', '1');
……

$COLOR = array(
'赤',
'黒',
…… );


■検索パラメータ編集・取り出し処理
function SearchParam($button)
{
$param = array();
$param['keyword'] = ''; // 検索キーワード

?中略?

$param['color']RED] = 0;
$param['color'][BLACK] = 0;
……
if ( $button == '絞り込み' ) {
// 設定された内容を確定
if ( array_key_exists('color', $_POST) ) {
// チェックボックスがチェックされている
foreach ( $_POST['color'] as $key => $id ){
$param['color'][$id] = '1'; // 選択済み状態
}
}
} else {
// 前回の設定内容を反映
$param['color'][RED] = $_SESSION['PARAM']['color'][RED];
$param['color'][BLACK] = $_SESSION['PARAM']['color'][BLACK];
……
}

?後略?


■検索ボックス、チェックボックス作成
<form name="search" class="search" action="http://example.com" method="post">
<input type="text" name="keyword" id="form" value="">
<input type="button" id="hogehoge" value="検索" onclick="javascriptの処理名()">

<?php
function Checkbox($color)
{
$checked = array(
'', // 赤
'', // 黒
…… );

// 選択されている項目を'checked'に
if ( is_array($colors) ) {
$i = 0;
foreach ( $colors as $color ){
if ( $color ) { // チェックされている
$checked[$i] = ' checked';
}
$i++;
}
}
?>
<input type="checkbox" name="col[]" value="0" <?=$checked[0] ?>>赤
<input type="checkbox" name="col[]" value="1" <?=$checked[1] ?>>黒
……
<input type="button" onclick="javascriptの処理名2">
<?php
}
?>


■検索部分
?前略?
$request = array(); // パラメータクリア
// キーワード
$request['keyword'] = $param['keyword']; // キーワード
} else {
return;
}
if ( array_key_exists('col', $_POST) ) {
// チェックボックスがチェックされている
foreach ( $_POST['col'] as $key => $id ){
$param['col'][$id] = '1';
}
$request['keyword'] .= (($request['keyword']) ? ' ' : '') . "ここに、チェックボックスの値に応じ「赤」「黒」などを追加できる処理を入れたい";
}


いろいろ無駄なコードもあるかもしれません。
実現にjavascriptが必要でしたら、それでも構いません。
また、やりたいことが実現できれば、大幅にコードが変わってもまったく問題ありません。

何卒よろしくお願い致します。


1 ● pogpi
●100ポイント

(document.(フォームのname).(チェックボックスのname).checked)で、チェックされているかは判定できますよ。赤、黒それぞれで判定して追加すればできると思いますよ。


cafe-beretさんのコメント
pogpiさん ありがとうございます。 Javascriptでの方法ですね。 こちらでも実現できたのだろうと思いますが、早く実装できたsnow0214さんをBAにさせていただきました。 ご教示いただいた内容は、別のところで参考になりました。 ご回答頂きありがとうございました。

2 ● snow0214
●400ポイント ベストアンサー

下のコードを追加してみてください。

<?php
if ( array_key_exists('col', $_POST) ) {
 // チェックボックスがチェックされている
foreach ( $_POST['col'] as $key => $id ) {
$param['col'][$id] = '1';
 }
//追加処理
$str_color = '';
foreach ($_POST['col'] as $val) {
$str_color .= ' ' . $COLOR[$val];
}
$request['keyword'] .= (($request['keyword']) ? ' ' : '') . $str_color;
}
?>

cafe-beretさんのコメント
snow0214さん ありがとうございました。 正直、ここで2週間近く詰まっていたのですが、あっという間に解消しました。 アホみたいな感想ですが、まるで魔法にかかったようです。 己の未熟さを恥じ入るばかりです。 本当にありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ