GETで配列を次のページへ移動する方法

このQ&Aのポイント
  • データ量が多い検索フォームから渡された配列のデータを次ページに移動する方法についてアドバイスをいただきたいです。
  • 検索実行ファイルに渡されたデータをリンクに貼り付けても上手く行かないため、配列を処理してから移動させる方法を探しています。
  • implodeやexplodeを使用して配列を処理してみましたが、うまくいかないです。アドバイスをお願いします。
回答を見る
  • ベストアンサー

GETで渡す配列に関して

こんばんは。お世話になっております。 早速ですが、DB内のデータを複数あるチェックボックス(name="category[]"など)を用いて、別ファイルにGETでデータを送り、検索結果を表示させているのですが、データ量が多いため、表示させるデータ数を一定にし、「次のページへ」とリンクを張ることで前後のページに移動できるよう考えています。 そこで、今回躓いたのが、検索フォームから渡された配列のデータ(チェックボックス)を、次ページへ移動させる際、どのような記述になるのでしょうか? 当たり前でしょうが、検索実行ファイルに渡されたデータをそのまま($category=$_GET["category"];)リンクに貼り付けても上手く行かず、 $category_box = implode(' ',$_GET["category"]); $arr1 = explode(" ",$category_box); foreach($arr1 as $category_box){ $wherearr1[] = "category like '%$category_box%'";} として、配列に戻してから・・などとも思ってはいるのですが、全て上手くいくことが出来ません。 お忙しい中恐縮ですが、アドバイスなど頂けたら幸いに思います。宜しくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

FORMのボタンを使用するならば foreach ($_GET['category'] as $cate) { print "<input type=\"hidden\" name=\"category[]\" value=\"" .$cate ."\">\n"; } でやればいいです。 Aタグのリンクの場合は print "<a href=\"hoge.php?foo=bar"; foreach ($_GET['category'] as $cate) { print "&amp;category[]=$cate"; } print "\">リンク</a>\n";

sadacha
質問者

お礼

moon_night様 こんばんは。いつもお世話になっております。 ご挨拶が遅れてしまいましたが、色々と試し、ようやく上手くいく事が出来ました! 単なる私の記述ミス(スペルミスに気付くのが遅れた)のために、随分と時間を費やしてしまいましたが、moon_night様のお陰で、ようやく上手く動かす事が出来ました。 有難う御座いました!

関連するQ&A

  • チェックボックスによる検索

    こんばんは。お世話になっております。 PHPにてDB(MySQL)に登録されたデータをチェックボックスのみで検索するスクリプトを組んでおりますが、チェックボックスの数が多数あり、混乱してしまい、お力をお借りしたく投函させて頂きました。 上手く説明できるかどうか判りませんが… まず検索項目として、(複数チェック可) カテゴリ: □ドリンク □グルメ □ケーキ 年齢:   □20代  □30代 以上のようなフォームを用意しており、各チェックボックスのnameはDBのフィールドを同じ名前。valueは実際に登録されている数値を記述しています。 そこで、上記チェックボックスにいくつかのチェックを入れ、検索すると、それに該当するものだけを検索結果として一覧表示させたいのですが、現在、全ての項目に当てはまるものと一緒に、1つでも含んだデータまでもが表示されてしまいます。 お忙しい中恐縮ですが、お知恵を頂戴出来ればと考えております。 宜しくお願い致します。 //POSTで受け取ったデータを配列にし、 foreach($arr as $category){ $wherearr1[] = " ( category = '$category' )" } foreach($arr as $category){ $wherearr2[] = " ( age = '$age' )" } $wherestr1 = implode(" OR ",$wherearr1); $wherestr2 = implode(" OR ",$wherearr2); $sql = "select * from member where $wherestr AND $wherestr1 order by date desc"; $result = mysql_query($sql);

    • ベストアンサー
    • PHP
  • PHPのGETパラメーターの検索値の変更

    電話番号のデータ検索で、ハイフンが入っていたり、入っていなかったりして、検索の値を、Getパラメーターで取得したデータの「-」ハイフンを抜いて検索の値に格納したいのですが、$_GET['tel']をstr_replaceしても、「-」でexplode後、implodeしてもデータ検索にひっかかりません。 $_GET['tel']のデータ変換を行う方法ありましたら教えて下さい。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 2次元配列をスマーティーにうけわたしたい。

    2次元配列を下記のようなソースで処理し、GETで取得したパラメーターと同じならば、スマーティーをつかって、検索フォームに値をわたしたい(次のページにいった時にフォームのチェックボタンなどをチェックしたいとかんがえています。(foreachはつかわないで)単体と複合の配列は、ラジオボタン、一戸建てと大規模のほうはチェックボックスにしたいと考えてます。 現在は、値が表示されない状態です。どうしたらよいでしょうか? //------------検索画面にひとつのパラメーターをわたす機能 $flagbreak=0; foreach($arr_parame as $row){ $i=1; foreach($row as $id => $list){ if( $id2 == $list['url'] ){ //$id2はGETで取得した値 $check_flag = $list['url']; $parame[$id][$check_flag] = '変数に渡す値を記入'; $flagbreak=1; break; } } if($flagbreak == 1)break; } $smarty -> assign("paramelist" , $parame); //smartyのしょり tplでは、{$paramelist.id.url}と書いてます。 ///////////////////////////////////////////////////////// 2次元配列 $arr_parame = array( array( array('no' => 1 , 'url' => 'un', 'title' => '単体'), array('no' => 2 , 'url' => 'com', 'title' => '複合')), array( array('no' => 1 , 'url' => 'ko', 'title' => '一戸建て'), array('no' => 2 , 'url' => 'man', 'title' => '大規模住宅'));

    • 締切済み
    • PHP
  • 配列データをキーワード検索

    こんばんは。お世話になっております。タイトルにあるように配列内にあるデータを、キーワード検索をしたいと考えておりますが、テキストフォームに入力したキーワードが反映できずにいるため、アドバイスを頂戴したく投函させていただきました。 $string=array( "1組 男 高木義男 明るい性格 ok", "2組 女 高島幸子 根暗な性格 ok", "3組 男 飯田彰浩 前向きな性格 no", "2組 男 木下敏明 努力家 ok", "3組 女 結城聡子 心配性な性格 no", "1組 女 佐藤恵子 明るい性格 ok", ); 以上のような配列があり(各データのスペースはタブ区切りです)、テキストフォームで入力したキーワードを 最後のokとなっているのを条件に、名前の欄と性格の欄から、OR検索(*)をしたいのですが、上手く検索させることが出来ません。 *テキストフォームにてスペースでキーワードを入力したとき、OR検索としたい。 お忙しい中恐縮ですが、ご指導いただけたら幸いです。宜しくお願い致します。 以下が実際に記述している現在のソースです。 (テキストフォームにて入力されたキーワードをGETで送信しています) $key = urldecode($_GET["key"]); $key = mb_convert_encoding($key, 'EUC-JP', 'auto'); $key = mb_ereg_replace(" ", " ", $key); $arr = explode(" ",$key); foreach($arr as $keyy){ $wherearr[] = "(strstr($site_data_array[2], $keyy) OR strstr($site_data_array[3], $keyy))" ; } $wherestr = "(".implode(" OR ",$wherearr).")"; if($key != ""){ for($i=0; $i<$count; $i++){ $site_data = $string[$i]; $site_data_array = explode(" ", $site_data); if($wherestr AND trim($site_data_array[4]) == "ok"){ $search_array[] = implode("\t", $site_data_array);//この配列データを表示 } } }

    • ベストアンサー
    • PHP
  • 配列データをCSVでダウンロードしたい

    こんばんは。お世話になっております。 題名にある「配列データをCSVで・・」に関して、2つほど質問があり投稿させていただきます。 ヤフーのAPIを利用しているのですが(テストしている段階)、検索結果は提供されたデータが配列に格納されており、それを展開して検索結果として出力しています。 と、ここで、その結果をCSVでダウンロードすべく、配列データをimplodeで配列に収めて別ファイルにGETで渡し、渡されたデータをexplodeで配列に戻し、 header("Pragma: cache;"); Header("Content-type:application/vnd.ms-excel; charset=Shift_JIS"); header("Content-Disposition: inline; filename=$fname.csv");//ファイル名は一意な名前にしています。 $csv_line = implode("\n", $items); print(mb_convert_encoding($csv_line, "SJIS", "UTF-8")); と、やっております。 そこで質問なのですが、まず1つめ。APIで提供されているデータはUTF-8なので、上記のようにmb_convert_encoding()を使っていますが、文字化けでダウンロードしたデータを読むことが出来ません。 このような場合の対処の仕方は、どのようにすれば良いのでしょうか? また、2つ目の質問ですが、配列データをCSVでダウンロードするために、配列データを別ファイルに渡しているのですが、上記のようなやり方では、implodeで変数に代入すると文字列が長すぎて、正常にデータを渡すことが出来ません。 当初はCSVを生成するときもヤフーに接続して・・と行っていたのですが、これだと2度アクセスすることになり(1日のアクセス数の上限が定められている)、出来れば1度のアクセスで得たデータを利用したいと考えているのですが、このような場合、配列データを別ファイルに渡すにはどのようにするのが理想なのでしょうか?(セッションの利用も試したが上手くいきませんでした)

    • ベストアンサー
    • PHP
  • 2次元配列から1次元配列へのデータ読み込み方法をお尋ねします。

    いつもお世話になります。 readtest.csvというCSVファイルを作り、データを次のように入れています。 a,apple,301,23 b,orange,518,47 c,grape,278,19 d,banana,189,36 この3列目のデータを取り出して1次元配列に入れるため、DBtest.phpを次のように書きました。 01: <?php 02: $Data=file("../readtest.txt"); 03: for ( $i = 0; $i < sizeof( $Data ); $i++ ) { 04: $line=explode(",",$Data[$i]); 05: echo $line[2]; // 301518278189 06: // $xdata=implode(",", $line[2]); 07: } 08: ?> この実行結果は、「301518278189」となります。なぜコンマが入らないのでしょうか? 5行目をコメントアウトして6行目を生かして実行すると、 Warning: implode() [function.implode]: Bad arguments. in C:\Program Files\Apache Group\Apache2\htdocs\DBtest.php on line 6 となります。 3列目のデータを抜き出して配列を作るにはどのようにすれば良いでしょうか? よろしくご教示頂ければ幸いです。

    • ベストアンサー
    • PHP
  • 配列データの件数指定表示

    こんばんは。お世話になっております。 テキストファイルに保存してある配列データがあり、そのデータを呼び出したとき、10件なり20件なりの件数を制限してページング処理?を行いたいのですが、その配列にある各データには、タブ区切りで「OK」または「NO」というデータも格納されており、「NO」というデータのみを件数を制限して表示させたいと考えてます。(次ページなり前ページなりでページを変えて表示させたい) //$count テキストファイルに格納された配列のデータ数 //$string 配列データ $lim = 10;//件数制限 $ii=1; for($i=0; $i<$count; $i++){ $category_data = $string[$i]; $category_data = explode(' ',$category_data); if(trim($category_data[5]) == "no"){ $ii++; echo "○○\n";//ここにデータを表示 if($ii > $lim){break;} } } 以上が、実際にローカル上で記述しているスクリプトなのですが、先の説明のように、はじめの10件までは表示させることが出来ましたが、次ページに移動した際、11件目からのデータを取得する方法が思いつくことが出来ず、今日も朝からテストを繰り返している状況です。 このような場合、どのようにしたら宜しいのでしょうか? お忙しい中恐縮ですが、アドバイスなど頂戴できれば幸いです。 ※以下の質問も投函しており、解決済みとしておりませんが、今回の質問の延長線上にあるので、「解決済みになっていない」ことをお気づきの場合、ご了承願えればと思います。 http://oshiete1.goo.ne.jp/qa4281205.html

    • ベストアンサー
    • PHP
  • 繰り返し処理が上手くいかない

    foreach($ARR_SCATTER as $val){ //人数分繰り返す //値を分解 $EXPLODE_VALUE = explode(",", $val); //質問1の値を配列に $QUESTION_NO[1][] = $EXPLODE_NUM[0]; //質問2の値を配列に $QUESTION_NO[2][] = $EXPLODE_NUM[1]; //質問3の値を配列に $QUESTION_NO[3][] = $EXPLODE_NUM[2]; //質問4の値を配列に $QUESTION_NO[4][] = $EXPLODE_NUM[3]; //質問5の値を配列に $QUESTION_NO[5][] = $EXPLODE_NUM[4]; //最後の質問の値を配列に $LAST_QUESTION[] = $EXPLODE_NUM[5]; $TOTAL[1] = $QUESTION_NO[1] + $LAST_QUESTION; $TOTAL[2] = $QUESTION_NO[2] + $LAST_QUESTION; $TOTAL[3] = $QUESTION_NO[3] + $LAST_QUESTION; $TOTAL[4] = $QUESTION_NO[4] + $LAST_QUESTION; $TOTAL[5] = $QUESTION_NO[5] + $LAST_QUESTION; } という処理を繰り返し処理をつかって記述したいのですが、うまくいきません。 下記のように記述しましたが、なぜか配列に値が1つしかはいりません。 (質問数は変動、言語はPHP5) foreach($ARR_SCATTER as $val){ //人数分繰り返す //値を分解 $EXPLODE_NUM = explode(",", $val); } for($test =0; $test <= $for_arr_count; $test++){ //質問の値を配列に $QUESTION_NO[$test][] .= $EXPLODE_RADIO_NUM[$test]; //最後の質問の値を配列に $LAST_QUESTION[] = $EXPLODE_RADIO_NUM[5]; $TOTAL[] = $QUESTION_NO[$test] + $LAST_QUESTION; $test++; } 原因がわからず困っています。 アドバイスお願いいたします。

    • ベストアンサー
    • PHP
  • 参照変数の親配列を取得

    データの多次元配列があって、値に応じて動的に関数を選択し 中身の値を引数で渡すみたいな感じの処理をしています ほとんどの処理は中身の値だけあれば事足りるのですが 稀にキー値を使いたい処理がでてきます 本当に稀なので引数にキー値も渡すようにするのは 無駄が多くなるように思うので避けたく できれば参照変数で渡される値から 親配列でのキー値を取得したいと思っています $arr2A=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); $arr2B=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); $arr2C=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); foreach($arr2A as $key=>$val){ $fncs[$val['fnc']]($val); } foreach($arr2B as $key=>$val){ $fncs[$val['fnc']]($val); } foreach($arr2C as $key=>$val){ $fncs[$val['fnc']]($val); } $fncs=array( A=>function(&$arr){ }, B=>function(&$arr){ }, C=>function(&$arr){ //ここで稀にキー値も使いたい }); 実際のコードはかなり長いので載せられませんが 要約すると上記のような感じの処理です まずどのデータ配列の集合から渡されたのかが明確ではありませんので indexOfなどでキー値を得るのというのが難しいです 現在は、その処理が必要なデータ行について処理前に 中身にキー値をあらかじめ入れてしまう というように対応しているので、一応解決はしているのですが もし参照変数から親配列を得る方法が あればと思い質問させていただきました ”そんなものはない”という回答も あきらめつくのでお願いします

    • ベストアンサー
    • PHP
  • 多次元配列のソート?

    お世話になります。 外部テキストに保存されているデータを読み込んで、任意のデータで並べ替えたいです。 data.txtには、次の様なデータが格納されてます。 namae<>なまえ<>23<>2008/04/01<> このデータから、なまえで並べ替えたり、日付で並べ替えたりしたいです。 ------------------------------------------------------------------------------------------------ $list = file("data.txt"); foreach ($list as $line) { //配列を設定 list($data01, $data02, $data03, $data04) = explode("<>", $line); print $data02 . ":" . $data04 . "<br>\n"; } ------------------------------------------------------------------------------------------------ 宜しくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう