• ベストアンサー

チェックボックスの値の受け渡しについて

現在、複数のチェックボックスの値を配列にしてパラメータで送ったのち、そのパラメータを引き継いで、ページング処理をしようとしてエラーが出て困っております。 【ページングの処理】 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引数ではないのでエラーが返っていると思うのですが、どなたかエラーが出ないようにご教授ください。 お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.3

>> 現在、複数のチェックボックスの値を配列にしてパラメータで送ったのち・・ >> 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); } }

hunter_999
質問者

お礼

ありがとうございました。 エラーが出ずにやりたいことができました。

その他の回答 (4)

回答No.5

配列の取得の仕方が間違っています。 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)
回答No.4

[]については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)
回答No.2

#1 です | name属性に[]をつけて配列でパラメータを渡しております。 なぜそうする必要があるのでしょう? 私だったらそうしません。チェックボックスなんですから、それぞれ別名でないと、どのチェックボックスだかすぐわからないじゃないですか。 そもそも名前に[]をつけるなんて想像つかないですw 紛らわしい。 ラジオボックスだったら同じ名前であるどれか一つだけvalueとして入るのでそうしますが、これと混同してませんか? チェックボックスで同じ名前にしてもどれか一つにはなりませんよ。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

$keyに対する$valueが配列だと言ってるんだから、 同じ名前のチェックボックスが複数ないか調べれば? name属性で指定してる名前は基本的には同じ名前にしちゃいけないですよ

hunter_999
質問者

補足

ちなみに チェックボックスは <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= のようになります。