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

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

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

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

Q&A

解決済

3回答

2480閲覧

ページング処理

uverworld101nm

総合スコア172

PHP

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

0グッド

0クリップ

投稿2016/08/06 04:05

ページング処理についてです。
ホットペーパーapiを使っていますが、ページ遷移のところでつまずいいています。
1ページ毎に50件の店舗を表示しようと思います。ただセレクトボックスでページ番号を表示するのではなく、ページネーションでページ番号を表示したいのです。
下記は次のページに行くためのコードです。一つはセレクトボックスでページ番号を表示した番号でもう一つのコードはページネーションでページ番号を表示したコードです。
セレクトボックスは使えますが、ページネーションの方はページネーションは表示されますがページ番号をクリックしても、例えば2ページをクリックしても1ページ目に戻ってしまいます。

HTML

1<html> 2<body> 3 <form method="POST"> 4 <select name="start"> 5 <option value="1">1</option> 6 <option value="2">2</option> 7 <option value="3">3</option> 8 <option value="4">4</option> 9 <option value="5">5</option> 10 <option value="6">6</option> 11 <option value="7">7</option> 12 <option value="8">8</option> 13 <option value="9">9</option> 14 <option value="10">10</option> 15 </select> <input type="submit" name="search" value="検索"> 16 </form> 17</body> 18</html>

PHP

1<?php 2$key='私のid'; 3$count='50'; 4$large_area='〇〇'; 5$start =$_GET["page"]; 6$format='xml'; 7$url='http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key='.$key.'&count='.$count.'&large_area='.$large_area.'&start='.$start.'&format='.$format; 8$xml=simplexml_load_file($url); 9function paging($limit, $page, $disp=5){ 10 $next = $page+1; 11 $prev = $page-1; 12 13 $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1; 14 $end = ($start > 1) ? ($page+floor($disp/2)) : $disp; 15 $start = ($limit < $end)? $start-($end-$limit):$start; 16 17 if($page != 1 ) { 18 print '<a href="?page='.$prev.'">&laquo; 前へ</a>'; 19 } 20 21 if($start >= floor($disp/2)){ 22 print '<a href="?page=1">1</a>'; 23 if($start > floor($disp/2)) print "..."; 24 } 25 26 27 for($i=$start; $i <= $end ; $i++){ 28 29 $class = ($page == $i) ? ' class="current"':""; 30 31 if($i <= $limit && $i > 0 )// 32 print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>'; 33 34 } 35 36 if($limit > $end){ 37 if($limit-1 > $end ) print "..."; 38 print '<a href="?page='.$limit.'">'.$limit.'</a>'; 39 } 40 41 if($page < $limit){ 42 print '<a href="?page='.$next.'">次へ &raquo;</a>'; 43 } 44 45 46} 47 48$limit = 10; 49$page = empty($_GET["page"])? 1:$_GET["page"]; 50 51paging($limit, $page); 52 53if(!$xml->shop){ 54 echo '見つかりませんでした'; 55 } else { 56 foreach($xml->shop as $r){ 57echo '<table>' ; 58 echo '<tr>'; 59 echo '<td>'; 60 echo $r->name; 61 echo '</td>'; 62 echo '<td>'; 63 echo $r->access; 64 echo '</td>'; 65 echo '</tr>'; 66 echo '</table>'; 67} 68} 69 ?>

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

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

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

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

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

uverworld101nm

2016/08/06 04:17

jsonではなく、xml形式で表示したいです。
guest

回答3

0

ベストアンサー

API ドキュメント に記載されてますがなにがわからないのでしょうか?
前スレ で APIの取得は JSON ではできていますよね。

投稿2016/08/06 04:31

asahina_dev

総合スコア610

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

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

uverworld101nm

2016/08/06 04:36

jsonで出来ましたが、xml式で表示したいです。
uverworld101nm

2016/08/06 04:37

ページネーションでページ数を表示したいです。 僕のコードで訂正部分があったら教えて下さい。お願いします。
asahina_dev

2016/08/06 05:02

前スレのサンプルのJSON(PHP-ARRAY) から取得している部分を SimpleXML からの取得に変えればいいだけですよ
uverworld101nm

2016/08/06 05:28

下記のコードをですか? <?php /** * Hpepper.class.php * * @since 2016/08/04 */ class Hpepper { /** * アクセスキー * @var string */ private static $token = '取得済みのAPIKEY'; /** * 都道府県リストを取得 * @return object */ public static function getPref() { $uri = "https://webservice.recruit.co.jp/hotpepper/service_area/v1/"; $acckey = self::$token; $format = "json"; $url = sprintf("%s?format=%s&key=%s", $uri, $format, $acckey); $json = @file_get_contents($url); $obj = json_decode($json); return $obj; } /** * レストラン検索 * @return object */ public static function getRestaurants() { $uri = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/"; $acckey = self::$token; $format = "json"; $get = array( 'format' => $format , 'key' => $acckey , 'count' => 10 , 'name_any' => '' ); if (!is_null(filter_input_array(INPUT_GET))) { $get += filter_input_array(INPUT_GET); } $url = sprintf("%s?%s", $uri, http_build_query($get)); $json = @file_get_contents($url); $obj = json_decode($json); return $obj; } public static function pagination($total = 0) { $start = filter_input(INPUT_GET, 'start'); if ($start == 0) { $start = 1; } if ($total == 0) { return; } $html = '<li%s><a href="?%s">%s</a></li>'; //現在の頁 $curPage = ceil($start / 10); $iStart = (0 < $curPage - 3) ? $curPage - 3 : 1; $pages = ceil($total / 10); $iMax = ($iStart + 6 > $pages) ? $pages : $iStart + 6; $arr = array(); $params = filter_input_array(INPUT_GET); for ($i = $iStart; $i <= $iMax; $i++) { $params['start'] = ($i - 1) * 10 + 1; $class = ($params['start'] == $start) ? ' class="active"' : ''; $query = http_build_query($params, '', '&amp;'); $arr[] = sprintf($html, $class, $query, $i); } return implode(PHP_EOL, $arr); } }
uverworld101nm

2016/08/06 05:30

僕の提示したコードだったら、何処を訂正すればいいですか?
uverworld101nm

2016/08/06 05:49

前スレのサンプルのJSON(PHP-ARRAY) から取得している部分を SimpleXML からの取得に変えればいいだけですよと回答を得ましたが、僕のコードではダメですか?
asahina_dev

2016/08/06 06:00

全部作り変える技能がないなら部分的に改造をしていくのが定石ですが
退会済みユーザー

退会済みユーザー

2016/08/06 06:12

あ、そうか、ライセンスはMITにしておきます!
uverworld101nm

2016/08/06 06:18

一つ聞きたいですが 僕が提示コードを変えるのはダメですか? ダメならダメでいいのですが
asahina_dev

2016/08/06 06:20

だめじゃないですが、その技術がないように見受けられたのでまずは改造してなれましょうってことですよ
uverworld101nm

2016/08/06 06:29

僕のコードで、startを$GETとして値を渡したいんですが、どうやらstartが$GETとしてページネーションに値を渡せていません。
uverworld101nm

2016/08/06 06:29

functionに$GETを渡すにはどうすればいいですか?
退会済みユーザー

退会済みユーザー

2016/08/06 06:31

> どうやらstartが$GETとしてページネーションに値を渡せていません 違いますよ。渡す値が間違っているだけです。 start に渡す値は、1,11,21,31... というふうになるはずです。
uverworld101nm

2016/08/06 06:58

では、$start=1,2;と書くのですか?
退会済みユーザー

退会済みユーザー

2016/08/06 07:03

一体どういう思考回路でそのアイディアになったの?
uverworld101nm

2016/08/06 07:06

すいません、混乱していて・・・
uverworld101nm

2016/08/06 07:08

すいません、詳しく教えてくれないでしょうか?
退会済みユーザー

退会済みユーザー

2016/08/06 08:51

> あ、そうか、ライセンスはMITにしておきます! 重要ですね!
uverworld101nm

2016/08/06 09:07

だったら、コードで表してください。 お願いします。ページネーションの値の渡し方がわからないんです。
退会済みユーザー

退会済みユーザー

2016/08/06 09:07

@ asahina_dev さん 初めから分かっていたことでは?teratail史上最強の敵ですぞw
guest

0

ちゃんとほかの方の言葉を聴いていますか?プログラム以前の問題だと思いますよ。
ググって色々ちゃんと調べてください。そして自分でやってください。
そしてそれをせずにただ聞くのはやめてください。そんな事の為に回答者さんの時間を盗らないで下さい。

投稿2016/08/08 04:49

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

1ページに10件のレコードを表示するとして、

ページネーションの番号が「1(1ページ目)」のときは start = 1
ページネーションの番号が「2(2ページ目)」のときは start = 11
ページネーションの番号が「3(3ページ目)」のときは start = 21



ページネーションの番号が「10(10ページ目)」のときは start = 91

というふうになるということ。

投稿2016/08/06 07:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

uverworld101nm

2016/08/06 07:39

ご回答ありがとうございます。 これを僕が提示したページネーションに実装するにはどうすればいいですか?セレクトボックスならできますが、ページネーションで実装が出来ません。 xml式で実装したいです。
退会済みユーザー

退会済みユーザー

2016/08/06 07:45

jsonだろうが、xmlだろうが、その部分になんの違いもありません。 しかもxmlにこだわる理由もわかりません。むしろjsonの方が処理も早く、実装も楽だというのに。
uverworld101nm

2016/08/06 07:51

xmlが好きだからです。バカバカしいかもしれませんが、理由はそれだけです。
uverworld101nm

2016/08/06 07:52

だから、ページネーションの詳しいやり方を教えて下さい。 ページネーションに値を渡すやり方を教えて下さい。
uverworld101nm

2016/08/06 07:54

僕がしたいのは、検索結果に見合ったページネーションを実装したいんです。 例えば、あるキーワードなら2ページしか表示されない仕組みです。
退会済みユーザー

退会済みユーザー

2016/08/06 08:00

既に回答済みなんだけど。
uverworld101nm

2016/08/06 08:02

$start=1,11,21,31... ;と書くのですか?
退会済みユーザー

退会済みユーザー

2016/08/06 08:06 編集

やってみれば? これをそのまま書くわけじゃないだろうし、 $start=1,11,21,31... ; 「ですか?」と聞かれても意味わからんわ。 ソースコードに反映して「どうですか?」と聞かれりゃ答えようもあるけど、そもそも会話が成り立たないでしょ?
uverworld101nm

2016/08/06 08:29 編集

すみません、説明不足で。 僕がしたいのは、2ページをクリックしたら、$start=11になるようにしたいんです。
uverworld101nm

2016/08/06 08:31

それに、$start=1,11,21,31... ;のまま書いたら反応しないのはわかっています。 $startに渡す値が間違っているんですよね? $GETで渡すやり方は間違っているんですか?
退会済みユーザー

退会済みユーザー

2016/08/06 08:35

$start =$_GET["page"]; これしかやってないんだから、1ページの時は1が投げられる。それだけのことでしょ?自分で書いたコードがわからんとか、意味わからんのだけど。
uverworld101nm

2016/08/06 08:40

$start =$_GET["page"]; をページ数ごとに表示するにはどうすればいいんですか? ページネーションを表示するのはわかります。 しかし、ページネーションに値を渡すやり方がわからないんです。
退会済みユーザー

退会済みユーザー

2016/08/06 08:42

1ページの時11、2ページ目の時に21になるように計算処理をすればいいでしょ。
uverworld101nm

2016/08/06 08:45

1ページの時11、2ページ目の時に21になるように計算処理をするには、どう書けばいいんですか?
退会済みユーザー

退会済みユーザー

2016/08/06 08:58 編集

算数まで解説する気はありません。プログラマですから。 それに、回答済みのコードにその部分の記述はあるわけだし、ソースコードを読めば普通のプログラマならわかることです。理解できないなら、基礎からやれということです。 第一にそりゃじゃ丸投げでしょ? 等差数列の一般項の公式をそのままコードにすればいいだけ。
uverworld101nm

2016/08/06 09:06

そのコードを表してくれませんか?
退会済みユーザー

退会済みユーザー

2016/08/06 09:09

プログラマにコード書いてくれというのなら、予算と納期を提示してください。あくまで善意でコードを書くのと意味が異なります。
uverworld101nm

2016/08/06 09:18

あの、一ついいですか。 私の質問が嫌だと思うなら、無理して答えなくても大丈夫です。
退会済みユーザー

退会済みユーザー

2016/08/06 19:04

あの、一ついいですか。 ここは「思考するエンジニアのためのQAプラットフォーム」です。 思考しない「似非エンジニア」が利用する場所ではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問