• ベストアンサー

URLエンコードした配列を使う方法

<php $data[5] = array(6,4,3,7,9); ?> <a href='image.php? <?php print http_build_query($data,'','&'); ?> '>リンク先</a> リンク先へのURLの後ろにhttp_build_queryを使いつけて 送り側で$_GETで受け取って配列を使うようなことを しようと思ったのですが Undefined index: dataと言われてうまくいきません。 どのようにして配列を取り出せばよいのでしょうか?

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

  • ベストアンサー
noname#244856
noname#244856
回答No.3

・PHPにおいて配列サイズの指定は不要な上、これだと5番目の要素に更に配列を作ってしまい、別の意味になります。 ・http_build_queryは変数名を親配列にはしません。 ・HTML中に埋め込む場合は「&」ではなく「&amp;」としなければHTMLとして不正になります。 正しくは下記のようになります。 <a href="image.php?<?=http_build_query(array('data' => array(6,4,3,7,9)), '', '&amp;')?>">リンク先</a> また、これらの値を受け取って使う場合、特に今回のように ・GETを使う場合 ・配列を渡す場合 該当する場合は十分に「正しい構造を受け取っているか」の検証を行ってください。GETはURLを書き換えるだけで簡単に渡す値を操作できてしまうので特に注意が必要です。 $_GET, $_POSTなどを受け取る際の処理 http://qiita.com/mpyw/items/2f9955db1c02eeef43ea 汎用的な変数構造フィルタリング関数 http://qiita.com/mpyw/items/c39b9ee695a5c2e74627

cern5100
質問者

お礼

回答ありがとうございます。 色々試してみて複数の配列もこのやり方で渡せました。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

これで生成される<a href='image.php? 以降のものに data=XXXX といったパラメータは無いように思うのですが。

cern5100
質問者

お礼

回答ありがとうございます。 確かに、そのようでした。書き方間違ってました。

全文を見る
すると、全ての回答が全文表示されます。
  • mjtanaka
  • ベストアンサー率39% (34/86)
回答No.1

単にリンク先に配列のデータを渡したいだけならばセッションに格納する方法があります。 この方法にこだわるのでしたらわかりかねます。

cern5100
質問者

お礼

ありがとうございます。初心者なので、後でセッションについて調べておきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エンコードされたものを、$_GETしたら...

    よろしくお願いします。グーグルdirectory検索のパラメータ%E3%82%A2%E3%83%BC%E3%83%88を使ったWEBアプリを作ろうと思っています。 $query ='%E3%82%A2%E3%83%BC%E3%83%88/' ; //これは'アート/'ディレクトリに対応している print '<a href="'.$_SERVER['PHP_SELF'].'?query='.$query.'">アート</a>'; のリンクをブラウザで実行して、$_GET['query']して、$queryに代入してprintしたところ、'アート/'と表示されました。 '%E3%82%A2%E3%83%BC%E3%83%88/'を何度も持ち歩きたいと思っているので、'アート/'となってもらっては困るのです。なぜなら、この$query ='アート/'を次に$_GETで受け取ると、 'アーチE'と表示されたからです。 '%E3%82%A2%E3%83%BC%E3%83%88/'のまま <a href="'.$_SERVER['PHP_SELF'].'?query='.$query.'">アート</a>で、 次に渡して、$_GET['query']で受取る方法はないでしょうか? または、'%E3%82%A2%E3%83%BC%E3%83%88'をデコードして'アート'にする関数などありますか?  urlencode('アート');は、'%83A%81%5B%83g'という少し短いものになり、これは使うことができないのです。

    • ベストアンサー
    • PHP
  • print_rで出力した配列データファイルをfile_get_cont

    print_rで出力した配列データファイルをfile_get_contentsでそのまま取り込もうとしましたが、配列としてではなく文字列として取り込んでしまいます。 ひとつの配列にまとまってしまします。 text.php $data=array(1,2,3,4,5); print_r($data); Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) output.php これを別ファイルで取り込むと$value= file_get_contents("text.php"); echo $value; print_r($value);両方とも Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) が出力されました。 配列として取り込みたいのですが可能でしょうか?

    • ベストアンサー
    • PHP
  • Smartyで多次元配列をスマートに出力するには?

    Smartyで多次元配列をスマートに出力するには? ■php側 $array1[1] = 'ショッピング案内'; $array1[2] = 'サイト案内'; $array1[3] = 'お問い合わせ'; $array2[1][1] = '0101'; $array2[1][2] = '0102'; $array2[1][3] = '0103'; $array2[1][4] = '0104'; $array2[1][5] = '0105'; $array2[2][1] = '0201'; $array2[2][2] = '0202'; $array2[2][3] = '0203'; $array2[2][4] = '0204'; $array2[2][5] = '0205'; $array2[2][6] = '0206'; $array2[2][7] = '0207'; $array2[3][1] = '0301'; $array2[3][2] = '0302'; $array2[3][3] = '0303'; $array2[3][4] = '0304'; $array3[1][1] = 'お買い物の流れ'; $array3[1][2] = 'お支払いについて'; $array3[1][3] = '配送について'; $array3[1][4] = '返品・交換について'; $array3[1][5] = 'メールマガジンについて'; $array3[2][1] = 'サイトマップ'; $array3[2][2] = 'このサイトについて'; $array3[2][3] = '販売者概要'; $array3[2][4] = '特定商取引法表記'; $array3[2][5] = 'プライバシーポリシー'; $array3[2][6] = '免責事項'; $array3[2][7] = 'リンクについて'; $array3[3][1] = 'FAQ(よくある質問)'; $array3[3][2] = 'お買い物について質問'; $array3[3][3] = '個別商品について質問'; $array3[3][4] = 'お問合せ対応時間'; $sub_menu = array($array1, $array2, $array3 ); $smarty->assign('SUB_MENU', $sub_menu); ■テンプレート側のサンプル <dl class="side_column"> <dt class="block_title">{$SUB_MENU[0][1]}</dt> <dd class="block_contents"> <ul class="sub_menu"> <li><a href="index.php?contents={$SUB_MENU[1][1][1]}">{$SUB_MENU[2][1][1]}</a></li> <li><a href="index.php?contents={$SUB_MENU[1][1][2]}">{$SUB_MENU[2][1][2]}</a></li> <li><a href="index.php?contents={$SUB_MENU[1][1][3]}">{$SUB_MENU[2][1][3]}</a></li> <li><a href="index.php?contents={$SUB_MENU[1][1][4]}">{$SUB_MENU[2][1][4]}</a></li> <li><a href="index.php?contents={$SUB_MENU[1][1][5]}">{$SUB_MENU[2][1][5]}</a></li> </ul> </dd> </dl> テンプレート側の繰り返し処理の仕方をご教示くださいませ。 もっと効率よくスマートに実現できる方法がありましたらそちらもよろしくお願いします。 どうぞよろしくお願いします。

    • 締切済み
    • PHP
  • 配列のデータを受け取る、のバグ

    PHPスーパーサンプル第2版の2-3/rcvarray.phpからの抜粋です。 <html> <head> <title>配列のデータを受け取る</title> </head> <body> <?php <?php $array = array("menu"=>"カレー", "price"=>"380", "date"=>"2005/01/01"); echo "配列の内容(エンコードした場合)"; print_r(unserialize(base64_decode($_POST["ar_enc"]))); echo "<p>配列の内容(そのまま渡すと失敗)"; print_r($_POST["ar"]); ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <input type="submit" value="送信" name="sub1"> <input type="hidden" name="ar" value="<?php echo $array ?>"> <input type="hidden" name="ar_enc" value="<?php echo base64_encode(serialize($array)) ?>"> </form> </body> </html> を実行すると、 配列の内容(エンコードした場合): Notice: Undefined index: ar_enc in /UNIONFS/opt/lampp/htdocs/samples/chapter2/2-3/rcvarray.php on line 14 配列の内容(そのまま渡すと失敗): Notice: Undefined index: ar in /UNIONFS/opt/lampp/htdocs/samples/chapter2/2-3/rcvarray.php on line 16 というエラーが出るんですが、どうやって直せばいいのですか? 正しくは、上には配列の内容が表示され、下にはarrayとだけ表示されるようです。 $arrayの直後に     $ar_enc = "";     $ar = ""; と挿入してみましたがダメでした。 @でエラーを抑制するのはなしでお願いします。

    • ベストアンサー
    • PHP
  • これまで遷移してきたサイト内のURLを表示する方法について

    これまで遷移してきたサイト内のURLをHTMLに表示したいと思いましたが、 直前のURLは表示できるものの、2つ以上前のURLを表示する事ができませんでした。 何らかの方法で、アクセス毎にセッションの配列に直前のURLを追記して、 ページ間の遷移の際その情報を保持し続けられれば解決すると思うのですが、 どのようにコーディングすればよいかわかりませんでした。 その為、何らかのアドバイスを頂ける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 【ソース(index1.php, index2.php, index3.php, index4.php, index5.php共通)】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>1ページ目</title> </head> <body> <p> <?php if (strlen($_SERVER["HTTP_REFERER"]) != 0) { echo "リンク元は"; echo $_SERVER["HTTP_REFERER"]; echo "です。"; } ?> </p> <p><a href="index1.php">リンク1</a></p> <p><a href="index2.php">リンク2</a></p> <p><a href="index3.php">リンク3</a></p> <p><a href="index4.php">リンク4</a></p> <p><a href="index5.php">リンク5</a></p> </body> </html>

    • ベストアンサー
    • PHP
  • htmlソースからアンカータグ内のURLを配列に

    お世話になっております。 file_get_contents()で取得したhtmlファイルのソースにある、アンカータグに設置されている、URLおよび、そのアンカータグに囲まれたテキストを取得して配列に収めたいと考えているのですが、いろいろと調べていても、思うような結果を出せずにいる状況です。 あるサイトにて、以下のようなソースがあり、これをヒントとしているものの、初めて目にする配列の中の配列?に戸惑い、その分解の仕方が分からず、またアンカータグ内に、target="_blank"などの記述があったりすると、配列に収めることが出来なかったりで、対処の仕方がwからずにいる状況です。 $html = ' <ul> <li><a href="http://www.yahoo.co.jp/">Yahoo!JAPAN</a></li> <li><a href="http://jp.msn.com/">MSN</a></li> <li><a href="http://www.google.co.jp/">Google</a></li> </ul> '; $pattern = '/<a href="([^"]+)">(.+?)<\/a>/is'; $match = array(); preg_match_all($pattern, $html, $match, PREG_SET_ORDER); var_export($match); echo "<br><br>"; print_r($match); 知識が乏しく、お恥ずかしいところと思うことろではありますが、アドバイスなど頂戴できれば幸いです。 お忙しいなか恐縮ですが、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • PHPのようにスマートに配列の配列など記述する方法が

    PHPの場合、データ構造ですが以下のようになっています。 $a = array( "test1" => array( array(1,1), array("x", 2) ), "test2" => array( array(3,2), array("y", 1) ), ); これをエクセルVBAの場合、Scripting.Dictionaryを使えば連想配列が 可能ですが、PHPのようにスマートに配列の配列など記述する方法が わかりません。 Dim dic As Scripting.Dictionary set dic = New Scripting.dictionary dic.Add "test1", ???????????????? dic.Add "test2", ???????????????? スマートにデータ構造を実現できる方法が知りたいです。

  • 配列表示の方法

    ちょっと長いですが・・・このサイトを参考に、カンマ区切りのデータをテーブルデザインで表示したいのですが、うまくいきません。 参考サイト: http://www.sakura-pc.jp/php/page.html ■$arrayにカンマデータを代入して表示しようと思ったコード $data_file = "test.txt"; $array = file($data_file); for($i=0; $i<count($array); $i++){ list($data1,$data2,$data3,$data4,$data5) = split(",", $array[$i]); } 以下参考ソース <?php header("Content-type: text/html; charset=shift_jis"); $thisphp="page.php"; $page_line_num=5;#1つのページに表示させたい件数 if(!$page_num=$_GET["page"]){$page_num=1;}#最初は1ページ目とする ///////// この部分がわかりません。カンマデータを$arrayに代入してHTMLでテーブル表示する方法///////////////////////////////// $array=array('1行目','2行目','3行目','4行目','5行目','6行目','7行目','8行目','9行目','10行目', '11行目','12行目','13行目','14行目','15行目','16行目','17行目','18行目','19行目','20行目', '21行目','22行目','23行目','24行目' ); ////////////////////////////////////////////////////////////// $page_array=array_slice($array,($page_num-1)*$page_line_num,$page_line_num);#表示する分だけ別の配列に格納する 配列は0から数えるので処理上は1ページ目は0ページ目とする print_r($page_array);#現在のページで表示される中身を確認 $next_page=$page_num+1;#次のページ $back_page=$page_num-1;#前のページ if($back_page >= 1){$back_str='<a href="'.$thisphp.'?page='.$back_page.'">前へ</a>';}#現在より前のページが存在すれば戻るリンクを作る else{$back_str='<span style="color:gray">前へ</span>';}#存在しなければグレイ色で薄く表示 if(count($array) > ($next_page-1)*$page_line_num){$next_str='<a href="'.$thisphp.'?page='.$next_page.'">次へ</a>';}#現在より後のページが存在すれば進むリンクを作る else{$next_str='<span style="color:gray">次へ</span>';} $all_page_num=count($array) / ($page_line_num-1);#全部のページ数を計算 for($i=1;$i<$all_page_num;$i++){#存在するページ番号を生成 if($i != $page_num){$page_str.='[<a href="'.$thisphp.'?page='.$i.'">'.$i.'</a>]';} else{$page_str.='[<span style="color:gray">'.$i.'</span>]';} } print '<p>'.$back_str.' '.$page_str.' '.$next_str.'</p>';#ページを切り替えるリンクを表示する ?>

    • 締切済み
    • PHP
  • 配列を返す関数から、一つの要素だけ取り出したい。

    例えば、配列を返す関数、get_array がある時、 その配列の0番目の要素だけが欲しい時、 Perlでは、 $val = get_array[0]; (配列リファレンスを返す場合は、$val = get_array->[0]; ) みたいな感じで書けたと思いますが、 PHPでは、 $val = get_array()[0]; みたいに書けないですよね? 以下のように、二行で書かなければダメですか? $array = get_array(); $val = $array[0];

    • ベストアンサー
    • PHP
  • PHPの配列について

    PHPの配列についての質問です。 以下のソースを // == ソース == function hoge( $foo ) { $arrs['a'] = 'A'. $foo; $arrs['b'] = 'B'. $foo; $arrs['c'] = 'C'. $foo; $arrs['d'] = 'D'. $foo; } hoge( '3' ); hoge( '9' ); // == /ソース == 実行すると print_rは // == print_r == Array (   [a] => A3   [b] => B3   [c] => C3   [d] => D3 ) Array (   [a] => A9   [b] => B9   [c] => C9   [d] => D9 ) // == /print_r == のようになります。 これを 関数を実行するごとに (0から IDのような 配列を組むようにする) 以下のようにするには どのようにすればよいでしょうか? // == print_r == Array (   [0] => Array     (       [a] => A3       [b] => B3       [c] => C3       [d] => D3     )   [1] => Array     (       [a] => A9       [b] => B9       [c] => C9       [d] => D9     ) ) // == /print_r == 使用目的は get_contentsしたものを正規表現で取り出し 配列にする処理に使おうと思っています。

    • ベストアンサー
    • PHP