質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2112閲覧

検索結果のページ渡し

uverworld101nm

総合スコア172

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/08/08 05:34

下記のページ渡しで問題があります。
予算を出すパラメータであるbudget、例えばセレクトボックスの2000円をクリックすると、2000円の1ページ目のデータは表示されます。しかし、ページネーションの2ページ目をクリックすると、2000円のデータではなく全体のデータが現れます。(つまり、デフォルトに戻ってしまいます)
ページのリンクに$budgetのデータが書かれなかったためではと考え(ページのリンクに$pageのデータがあるため検索をしない場合、つまり予算検索をしない場合のページング遷移はできる)、ページのリンクに'&budget='.$budget.を付け加えましたが、問題は解決していません。
$budget=$_POST ["budget"];のリクエストパラメータを書き加えなくてはいけないのですか?

php

1<html> 2<head> 3<title>API_SAMPLE</title> 4</head> 5<body> 6 <form method="GET"> 7 <select name="budget"> 8 <option value="B001">〜2000円</option> 9 <option value="B002">2001円〜3000円</option> 10 <option value="B003">3001円〜4000円</option> 11 <option value="B008">4001円〜5000円</option> 12 <option value="B004">5001円〜7000円</option> 13 <option value="B005">7000円〜10000円</option> 14 <option value="B006">10001円〜</option> 15 </select> <input type="submit" name="search" value="検索" onFocus="this.select()"> 16 </form> 17</body> 18</html> 19<?php 20$key='私のid'; 21$count='50'; 22$large_area='〇〇'; 23$start =1+($page-1)*10; 24$budget=$_POST ["budget"]; 25$format='xml'; 26$url='http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key='.$key.'&count='.$count.'&large_area='.$large_area.'&start='.$start.'&budget='.$budget.'&format='.$format; 27$xml=simplexml_load_file($url); 28$total_count=$xml->results_available; 29function paging($limit, $page, $disp=5){ 30 global $large_area; 31 //$dispはページ番号の表示数 32 $next = $page+1; 33 $prev = $page-1; 34 //ページ番号リンク用 35 $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点 36 $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点 37 $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算 38 39 if($page != 1 ) { 40 print '<a href="?page='.$prev.'&budget='.$budget.'">&laquo; 前へ</a>'; 41 } 42 43 //最初のページへのリンク 44 if($start >= floor($disp/2)){ 45 print '<a href="?page=1&budget='.$budget.'">1</a>'; 46 if($start > floor($disp/2)) print "..."; //ドットの表示 47 } 48 49 50 for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ 51 52 $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス 53 54 if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合 55 print '<a href="?page='.$i.'&budget='.$budget.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 56 57 } 58 59 //最後のページへのリンク 60 if($limit > $end){ 61 if($limit-1 > $end ) print "..."; //ドットの表示 62 print '<a href="?page='.$limit.'&budget='.$budget.'">'.$limit.'</a>'; 63 } 64 65 if($page < $limit){ 66 print '<a href="?page='.$next.'&budget='.$budget.'">次へ &raquo;</a>'; 67 } 68 69 /*確認用 70 print "<p>current:".$page."<br>"; 71 print "next:".$next."<br>"; 72 print "prev:".$prev."<br>"; 73 print "limit:".$limit."<br>"; 74 print "start:".$start."<br>"; 75 print "end:".$end."</p>";*/ 76 77} 78 79$limit =ceil($total_count/$count); //最大ページ数 80$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 81 82paging($limit, $page); 83

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asahina_dev

2016/08/08 15:27

すでにPHPファイルがいろいろかわってるとおもうんで 変更後のファイルもあげてみてもらえますか。
uverworld101nm

2016/08/08 15:30

分かりました。 明日提示します。
guest

回答3

0

php

1<?php 2// 開発時には必ず、次の2行を書く 3ini_set('display_errors', 1); 4error_reporting(E_ALL);

php

1$budget=$_POST["budget"];

php

1$budget=$_GET["budget"];

formGET を指定しているんだから、 $_GET だろ。

html

1<form method="GET">

(XML版)ホットペッパーAPIからレストラン検索するサンプル

イメージ説明

出血大サービスで、実行結果

投稿2016/08/08 14:26

編集2016/08/08 15:29
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asahina_dev

2016/08/08 14:34

そこじゃないww form と 何を使いたいか見比べたら笑えるよ
退会済みユーザー

退会済みユーザー

2016/08/08 14:39 編集

g と p でしょ?そこはもちろん知ってる。
asahina_dev

2016/08/08 14:43

そうそうw 他の二人もやってるみたいねぇ
uverworld101nm

2016/08/08 15:09

<form method="GET">になっているのは、ミスです。
uverworld101nm

2016/08/08 15:10

ページのurlに、$budgetを付け加えましたがダメでした。
退会済みユーザー

退会済みユーザー

2016/08/08 15:10

pager との兼ね合いでそこPOSTにすると無駄にハマるぞ。
asahina_dev

2016/08/08 15:15

$GET じゃないぞ $_GET だぞ
guest

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uverworld101nm

2016/08/08 14:15

参考にしましたが、何を付け加えるべきか分かりません。 issetとは変数が存在するかどうかの判別ですよね? 今回は関係のないような気がしましたが・・・ dataさんが提示したコードの一つにfunctionの下に書く$globalが怪しいと思ったのですが、当然ながらglobalを入力しても反応がありませんでした。 if (isset($_POST["budget"])) { でやりましたが、ダメでした。
date

2016/08/09 00:26

まず処理の順番を考える必要があります。 一回目検索したとき ① $start =1+($page-1)*10; この時$pageには何も入っていません。 プログラムに下から上に持ってくることはできず$pageを入れる処理は上にないといけないので$pageにデータを入れる処理は $startより上にないといけない よって順番は 1.今のページ数を取得 $pageの処理 2.開始位置を求める $startの処理 3.ホットペッパーからXMLを取得 4.ホットぺっぱからのresult_availableから最大件数を取出しページ数を求める 5.pagingを行う しかしやると分かるんだが、functionの外にある$budgetはfunction pagingでは認識されず、Notice: Undefined variable: budget in のエラーが出る、そこで globalを使うです global $budgetを入れることでfunction内に$budgetがスコープされます。 詳しくはglobal phpと検索していいサイトを見つけるか http://php.net/manual/ja/language.variables.scope.php でお勉強ください
guest

0

ベストアンサー

$budget=$_POST ["budget"];のリクエストパラメータを書き加えなくてはいけないのですか?

はい。

投稿2016/08/08 05:51

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uverworld101nm

2016/08/08 06:03

budgetのページ渡しができないもので。
ttyp03

2016/08/08 06:06

ページのリンクのURLにbudgetの条件を加えてページ間で引き継いでいけばよろしいかと。
uverworld101nm

2016/08/08 06:09 編集

ページのリンクのURLにbudgetの条件を加えてページ間で引き継いでいけばよろしいかと。 これは、'&budget='.$budget.ではなく'$budget=$_POST ["budget"]と書くのですか?
ttyp03

2016/08/08 06:07

issetはどういった機能の関数ですか?
uverworld101nm

2016/08/08 06:10

issetとは、変数が存在すかどうかの判別です。
ttyp03

2016/08/08 06:12

それを使えば実現できると考えているのならまずはやってみれば。
uverworld101nm

2016/08/08 14:16

予想通りでした。 if (isset($_POST["budget"])) { を入力しましたが、ダメでした。
uverworld101nm

2016/08/08 14:20

また、下記のコードもダメでした。 if($page < $limit){ print '<a href="?page='.$next.'&budget='.$_POST["budget"].'">次へ &raquo;</a>'; }
uverworld101nm

2016/08/08 14:26

if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合 print '<a href="?page='.$i.'&budget='.$budget=$_POST["budget"].'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 } こういうのもやってみましたが、ダメでした。
ttyp03

2016/08/08 15:21

2つ前のコードがいい線行ってる。 ただ、なぜ$_POSTを使う? 一度でもPOSTで送信しているのところあります? 適当にコーディングするのではなく、きちんと論理的にやりましょうね。
uverworld101nm

2016/08/08 15:30

2つ前とはif($page < $limit){ print '<a href="?page='.$next.'&budget='.$_POST["budget"].'">次へ &raquo;</a>'; } ですか?
uverworld101nm

2016/08/11 06:04

ご回答ありがとうございます。 理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問