- ベストアンサー
チェックボックスの値の受け渡しについて
現在、複数のチェックボックスの値を配列にしてパラメータで送ったのち、そのパラメータを引き継いで、ページング処理をしようとしてエラーが出て困っております。 【ページングの処理】 function pager($idname,$countRe){ $id =$_GET[$idname]; foreach($_GET as $key => $value){ if ($key != $idname){ $other_param .= "&".$key."=".urlencode($value); } } if($id=="") $id=1; $maxPage=ceil($countRe / PER_PAGE); if( ($maxPage == 1) or ($maxPage < $id) ) return false; if($id > VIEW_PAGE_MENU_WIDTH + 1){ $startPage = $id - VIEW_PAGE_MENU_WIDTH; $startMore = "<a href=\"$PHP_SELF?".$idname."=".($startPage - 1).$other_param."\">".PREV_MARK." </a>\n"; }else{ $startPage = 1; } if($id + VIEW_PAGE_MENU_WIDTH < $maxPage){ $endPage = $id + VIEW_PAGE_MENU_WIDTH; $endMore = " <a href=\"$PHP_SELF?".$idname."=".($endPage + 1).$other_param."\"> ".NEXT_MARK."</a>\n"; }else{ $endPage = $maxPage; } $page_footer=""; for($i = $startPage ; $i <= $endPage ; $i++){ $page_footer.= " ".(($id == $i)?"<span style='font-size:120%'>$i</span>\n":"<a href=\"$PHP_SELF?$idname=$i$other_param\">$i</a>\n"); } $page_footer = $startMore.$page_footer.$endMore; print $page_footer; } ----------------------------------------------------- 【エラー内容】 Warning: urlencode() expects parameter 1 to be string, array given in どうやら foreach($_GET as $key => $value){ if ($key != $idname){ $other_param .= "&".$key."=".urlencode($value); } } の部分でチェックボックスの値が第1引数ではないのでエラーが返っていると思うのですが、どなたかエラーが出ないようにご教授ください。 お願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>> 現在、複数のチェックボックスの値を配列にしてパラメータで送ったのち・・ >> foreach($_GET as $key => $value){ >> if ($key != $idname){ >> $other_param .= "&".$key."=".urlencode($value); >> } >> } チェックボックスの値を配列で送っている以上、$valueが配列になりますので該当のエラーになります。 PHPではチェックボックすなどは配列で送信するのが常套手段ですが受信側もそれなりの方法で受ける必要が有ります。 以下のように書換えてみてください。 foreach($_GET as $key => $value){ if ($key != $idname){ if (is_array($value)){ foreach($value as $val1){ $other_param .= "&".$key."[]=".urlencode($val1); } } else $other_param .= "&".$key."=".urlencode($value); } }
その他の回答 (4)
- macky1974
- ベストアンサー率77% (7/9)
配列の取得の仕方が間違っています。 var_dump($_GET); などで確認してみてください。 array(1) { ["te"]=> array(2) { [0]=> string(1) "2" [1]=> string(1) "5" } } の様に出ると思います。 foreach($_GET as $key => $value){ if ($key != $idname){ $other_param .= "&".$key."=".urlencode($value); } } ですと$valueの部分は配列となりますので foreach($_GET as $key => $value){ if ($key != $idname){ foreach($value as $val){ $other_param .= "&".$key."[]=".urlencode($val); } } のようにしてみてはどうでしょうか?
- yambejp
- ベストアンサー率51% (3827/7415)
[]についてはPHPでは常套手段ですし、順位のない同列の値を表示するときには 多用すると思いますので、今のままで問題ないかと。 ざっとフロー的にこんな感じにしてみては? foreach((array) $_REQUEST["te"] as $val){ $checked["te"][$val]=" checked"; } print <<<eof <form> <input type="checkbox" name="te[]" value="1" {$checked["te"][1]}/>a<br /> <input type="checkbox" name="te[]" value="2" {$checked["te"][2]} />b<br /> <input type="checkbox" name="te[]" value="5" {$checked["te"][5]} />c<br /> <input type="submit" value="go" /> </form> eof; ?>
- phoenix343
- ベストアンサー率15% (296/1946)
#1 です | name属性に[]をつけて配列でパラメータを渡しております。 なぜそうする必要があるのでしょう? 私だったらそうしません。チェックボックスなんですから、それぞれ別名でないと、どのチェックボックスだかすぐわからないじゃないですか。 そもそも名前に[]をつけるなんて想像つかないですw 紛らわしい。 ラジオボックスだったら同じ名前であるどれか一つだけvalueとして入るのでそうしますが、これと混同してませんか? チェックボックスで同じ名前にしてもどれか一つにはなりませんよ。
- phoenix343
- ベストアンサー率15% (296/1946)
$keyに対する$valueが配列だと言ってるんだから、 同じ名前のチェックボックスが複数ないか調べれば? name属性で指定してる名前は基本的には同じ名前にしちゃいけないですよ
補足
ちなみに チェックボックスは <input type="checkbox" name="te[]" value="1" />あ<br /> <input type="checkbox" name="te[]" value="2" />い<br /> <input type="checkbox" name="te[]" value="5" />う<br /> のようにname属性に[]をつけて配列でパラメータを渡しております。 パラメータは list.php?np=&xp=&sw=&na=&xa=&ns=&xs=&nl=&xl=&part=%E6%A4%9C%E7%B4%A2&te%5B%5D=2&te%5B%5D=5&backro=&ar=&mu=&ro=&st=&pc=1&tc=1&route= のようになります。
お礼
ありがとうございました。 エラーが出ずにやりたいことができました。