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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

4543閲覧

function pagingがうまく使えない

uverworld101nm

総合スコア172

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/08/16 04:54

編集2016/08/17 08:42

再質問をさせていただきます。
※わかりづらかったので説明します。このコードだと、次へボタンをクリックしても3ページ目に行けないんです。また、1,2,3,4,5,6,7,8,9,10,...110と表示され、...の中は絶対表示されないんです。
どうすれば、この問題を直せますか?

php

1$page = empty ( $_GET ["page"] ) ? 1 : $_GET ["page"];

これを入れると、ページ遷移ができなくなります。
このコードでできることは、10ページまでと最後のページの遷移ができること、「次へ」ボタンで2ページ目へ行けることです。
つまり、このコードでもページ遷移が可能だということです。
しかし、反対にできないことは10ページ以降のページが表示されないこと、「次へ」ボタンは2ページまでしか表示されないことです。
var_dumpで見たところ、「次へ」ボタン中身は

string(〇〇) "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=私のキー&count=50&large_area=&start=11&keyword=&budget=B001=&format=xml"

となっています。つまり、「次へ」ボタンは2ページだけしか指定出来ないとこになっています。
余談ですが

php

1 $prev = $page-1;

php

1 $prev = $page-10; 2 3

に変えると9頁目を表示します。

また、10ページ目以降が表示されないのはまだわかりません。
var_dumpで見ると、ページ渡しができています。
要素の詳細を表示をすると、

"..."=$0

と表示されています。

php

1<?php 2$key='私のキー'; 3$count='50'; 4$large_area='〇〇'; 5$start =1+($page-1)*10; 6$budget=$_POST ["budget"] 7$format='xml'; 8$url='http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key='.$key.'&count='.$count.'&large_area='.$large_area.'&start='.$start.'&keyword='.$keyword.'&budget='.$budget.'&format='.$format; 9$xml=simplexml_load_file($url); 10$total_count=$xml->results_available; 11function paging($limit, $page, $disp=5){ 12 global $budget; 13 //$dispはページ番号の表示数 14 $next = $page+1; 15 $prev = $page-1; 16 //ページ番号リンク用 17 $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点 18 $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点 19 $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算 20 21 if($page != 1 ) { 22 print '<a href="?page='.$prev.'&budget='.$budget=$_POST["budget"].'">&laquo; 前へ</a>'; 23 } 24 25 //最初のページへのリンク 26 if($start >= floor($disp/2)){ 27 print '<a href="?page=1&budget='.$budget=$_POST["budget"].'">1</a>'; 28 if($start > floor($disp/2)) print "..."; //ドットの表示 29 } 30 31 32 for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ 33 34 $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス 35 36 if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合 37 print '<a href="?page='.$i.'&budget='.$budget=$_POST["budget"].'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 38 } 39 40 //最後のページへのリンク 41 if($limit > $end){ 42 if($limit-1 > $end ) print "..."; //ドットの表示 43 print '<a href="?page='.$limit.'&budget='.$budget=$_POST["budget"].'">'.$limit.'</a>'; 44 } 45 46 if($page < $limit){ 47 print '<a href="?page='.$next.'&budget='.$budget=$_POST["budget"].'">次へ &raquo;</a>'; 48 } 49 50 /*確認用 51 print "<p>current:".$page."<br>"; 52 print "next:".$next."<br>"; 53 print "prev:".$prev."<br>"; 54 print "limit:".$limit."<br>"; 55 print "start:".$start."<br>"; 56 print "end:".$end."</p>";*/ 57 58} 59 60$limit =ceil($total_count/$count); //最大ページ数 61$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 62 63paging($limit, $page);

これが元のコードです。

PHP

1<html> 2<head> 3<title>API_SAMPLE</title> 4</head> 5<body> 6<form action="" method="GET"> 7<input type="text" name="keyword" > 8<input type="submit"> 9</form> 10</body> 11</html> 12<html> 13<head> 14<title>API_SAMPLE</title> 15</head> 16<body> 17 <form method="GET"> 18 <select name="budget"> 19 <option value="B001">〜2000円</option> 20 <option value="B002">2001円〜3000円</option> 21 <option value="B003">3001円〜4000円</option> 22 <option value="B008">4001円〜5000円</option> 23 <option value="B004">5001円〜7000円</option> 24 <option value="B005">7000円〜10000円</option> 25 <option value="B006">10001円〜</option> 26 </select> <input type="submit" name="search" value="検索" onFocus="this.select()"> 27 </form> 28</body> 29</html> 30<?php 31if (isset($_GET['keyword']) || isset($_GET['budget'])) { 32 $page = empty ( $_GET ["page"] ) ? 1 : $_GET ["page"]; 33$key='私のキー'; 34$count='50'; 35$large_area='〇〇'; 36$start =1+($page-1)*10; 37$keyword=$_GET ["keyword"]; 38$budget=$_GET ["budget"]; 39$format='xml'; 40$url='http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key='.$key.'&count='.$count.'&large_area='.$large_area.'&start='.$start.'&keyword='.$keyword.'&budget='.$budget.'&format='.$format; 41$xml=simplexml_load_file($url); 42var_dump($url); 43$total_count=$xml->results_available; 44function paging($limit, $page, $disp=5){ 45 //$dispはページ番号の表示数 46 $next = $page+1; 47 $prev = $page-1; 48 //ページ番号リンク用 49 $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点 50 $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点 51 $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算 52 53 if($page != 1 ) { 54 print '<a href="?page='.$prev.'&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"]. '">&laquo; 前へ</a>'; 55 } 56 57 //最初のページへのリンク 58 if($start >= floor($disp/2)){ 59 print '<a href="?page=1&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"].'">1</a>'; 60 if($start > floor($disp/2)) print "..."; //ドットの表示 61 } 62 63 64 for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ 65 66 $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス 67 68 if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合 69 print '<a href="?page='.$i.'&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"].'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 70 71 } 72 73 //最後のページへのリンク 74 if($limit > $end){ 75 if($limit-1 > $end ) print "..."; //ドットの表示 76 print '<a href="?page='.$limit.'&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"]. '">'.$limit.'</a>'; 77 } 78 79 if($page < $limit){ 80 print '<a href="?page='.$next.'&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"]. '">次へ &raquo;</a>'; 81 } 82 83 /*確認用 84 print "<p>current:".$page."<br>"; 85 print "next:".$next."<br>"; 86 print "prev:".$prev."<br>"; 87 print "limit:".$limit."<br>"; 88 print "start:".$start."<br>"; 89 print "end:".$end."</p>";*/ 90 91} 92$limit =ceil($total_count/$count); //最大ページ数 93$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 94 95paging($limit, $page,10); 96 97if(!$xml->shop){ 98 echo '見つかりませんでした'; 99 } else { 100 foreach($xml->shop as $r){ 101echo '<table>' ; 102 echo '<tr>'; 103 echo '<td>'; 104 echo $r->name; 105 echo '</td>'; 106 echo '<td>'; 107 echo $r->access; 108 echo '</td>'; 109 echo '</tr>'; 110 echo '</table>'; 111 } 112} 113} 114?>

screen

また、$currentが機能していない証拠です。
このページは4ページめですが、1ページめが黒くなっています。(途中で切れていて見れません、ごめんなさい。)

screen2

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

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

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

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

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

jm1156

2016/08/16 06:14

この質問の書き方では、以前のあなたの質問や回答を知ってる人にしかわかりませんよ。初めて見る人にはなんのことかさっぱりです。そもそも何を聞きたいのですか?プログラムの前に、日本語の勉強もしましょう。
uverworld101nm

2016/08/16 06:31

すみません、次へボタンでページ遷移ができるようにしたいです。 また、googleみたいに10ページごとにページリンクを出したいです。つまり、今みたいに10ページ目だけしか表示されないのではなく、10ページ目をクリックしたら、前後のページリンクが表示される仕組みです。
uverworld101nm

2016/08/16 06:34

このコードだと、次へボタンをクリックしても3ページ目に行けないんです。また、1,2,3,4,5,6,7,8,9,10,...110と表示され、...の中は絶対表示されないんです。
Lhankor_Mhy

2016/08/16 07:13

『「次へ」ボタン中身』とは具体的にはなんのことですか。書かれているURLはどの変数をダンプした結果なんでしょうか。
uverworld101nm

2016/08/16 07:41

次へボタンの変数はbudgetをダンプした結果のものです。 次へボタンの中身はxmlでパースしたurlです。
Lhankor_Mhy

2016/08/16 07:42

codepadでページング部分を動かすと普通に動作するので、3ページ目にリンクしないというのは、なんかの勘違いなんじゃないかと思うんですよね。
Lhankor_Mhy

2016/08/16 07:46

うーん…… 『次へボタンの変数はbudgetをダンプした結果のもの』とありますが、変数budgetの中身が string(〇〇) "http://…… で間違いありませんか? ちょっとありえないと思うんですが。
date

2016/08/16 07:53

これこのコードのままですか、このままだと絶対に動かないと思いますが、少なくとも$pageの処理場所は変えているはずです、それに直してください
uverworld101nm

2016/08/16 08:17

dateさん、$page=$_GET["page"];とやりましたが、この場合だと、pageが1ページに定義されてしまい、ページ遷移が出来なくなります。
uverworld101nm

2016/08/16 08:25

lhankor_mhyさん、要素の詳細を表示をすればlhankor_mhyさんが求めているものが表示されると思います。 やってみます。
uverworld101nm

2016/08/16 08:36

いいえ、違います。 apiを使っている人は僕以外にも沢山います。
jm1156

2016/08/16 08:56

本当に同一人物ではないのですか? なぜ「沢山います」と言い切れるのですか? 検索してみましたが、同じような質問しているのは、 あなたとhttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11162935931 の人くらいですよ? 同一人物ではないことを証明できますか? もう一度だけ、確認しますよ。 絶対に、同一人物ではないのですね?
uverworld101nm

2016/08/16 09:19

はい、違います。誓って違います。 じゃあ聞き返しますが、類似したapiの質問があったら全部僕がした質問だとあなたはいうんですね。それと、私がしたという証拠はありますか?
jm1156

2016/08/16 09:23

「全部」なんていつ言いましたかね…?証拠もないですよ。「証拠がある」なんて言ってませんし。同一人物ではないかを再確認しただけですよ。
date

2016/08/16 09:28

わかりました、つまりYAHOO知恵袋にあなたのコードを元に作っている人がもう一人いるというわけね、了解しました
jm1156

2016/08/16 09:34

「僕以外にも沢山います。」って言ってるから、一人じゃないようですけど、もうどうでもいいわwww
uverworld101nm

2016/08/16 09:35

この話はもうやめましょう。 元の話に戻しましょう。
uverworld101nm

2016/08/16 09:39

さて、ページ遷移が出来るにはどうすればいいですか?
date

2016/08/16 23:42

phpのバージョンを書いてください
Lhankor_Mhy

2016/08/17 06:41

1ページ目、2ページ目、3ページ目のURLを提示できますか? ドメインは隠してかまいません。
uverworld101nm

2016/08/17 07:48

hanker_mhyさん、urlをはります。
uverworld101nm

2016/08/17 07:49

2ページ目のurlhttp://localhost:8888/wordpress/〇〇/2/?budget=B001&keyword
uverworld101nm

2016/08/17 07:51

3頁目のurlhttp://localhost:8888/wordpress/〇〇/3/?budget=B001&keyword 補足:mampのlocalhostでwordpressを使っています。〇〇はテンプレートネームです。
Lhankor_Mhy

2016/08/17 08:00

やはりURLリライトかかってますね。さてどうしましょうか……
uverworld101nm

2016/08/17 08:02

そうなんですか。 どうすればいいですか?
Lhankor_Mhy

2016/08/17 08:12

3ページ目に飛んだ後に「次へ」のリンクを踏むと2ページ目に飛ぶ感じですか?
uverworld101nm

2016/08/17 08:24

はい、そうです。 hanker_Mhyさん。 10ページ目に飛んだあとに「次へ」をクリックすると2ページめに戻ります。
Lhankor_Mhy

2016/08/17 08:40

pageになってるところを別の文字列、たとえばpagenumみたいなのに置換してみたら動作しませんでしょうか?
Lhankor_Mhy

2016/08/17 08:41

(でもなんか違和感がある。テンプレートがリライトしてる影響ならパラメータを受取れそうな気がするけど……)
uverworld101nm

2016/08/17 08:44

lhankor_mhyさん、本当に分からないんです。 一度チャレンジしてみます。
uverworld101nm

2016/08/17 08:50

途中からページ遷移が出来るのもよくわかりません。
date

2016/08/17 08:59

画像位きちんとださないと解決しないよ 画面にすべて入らなかったら一時的にブラウザを縮小して画像化するなりできますのでもう一度ちゃんとしたのを出してください
uverworld101nm

2016/08/17 09:00

分かりました。やり直します。
uverworld101nm

2016/08/17 09:01

lhankor_mhyさん、よく分からない原因ですよね。
uverworld101nm

2016/08/17 10:07

lhankor_mhyさん、もし宜しかったら回答欄に回答して下さい。
退会済みユーザー

退会済みユーザー

2016/08/18 04:30

相変わらずですね。もう少し自力でやってみてはどうでしょうか? またせっかく答えてもらっているのにわからないわからないと言うのはどうかと思います。自分で調べましょうよ
Lhankor_Mhy

2016/08/18 06:44

提示いたしました方法で解決するようでしたら、回答欄に書くほどのことでもないと思いますので、自己解決としてください。
退会済みユーザー

退会済みユーザー

2016/08/19 00:49

>uverworld101nm >lhankor_mhyさん、もし宜しかったら回答欄に回答して下さい。 文句言う前にやってみては?せっかく提示してもらった内容コピペして解決したのであれば解決した事にすればいいじゃないですか。
退会済みユーザー

退会済みユーザー

2016/08/19 04:53

画面表示の画像がありますが全体表示で出して下さい。
guest

回答2

0

全くわかっていないようなので、あなたのコードをIDEに貼ってみた。
シンタックスエラーで実行できません。

イメージ説明


以降順次追記します。

#検索ボタンを押す前

出力されたHTMLを表示すると、そもそもHTMLが文法違反。

Another HTML-lint ここで機械的にチェックしましょう。

イメージ説明


#「検索」ボタンを押したとき

大量に出力される Notice: Undefined index

PHPの設定次第では画面には出力されないこともあるが、サーバーないでは発生している。パフォーマンス劣化するので、エラーにならないようにコーディングすべき。

グローバル変数($_GET や $_POST など)に直接アクセスするのはNG。

php

1$keyword = $_GET ["keyword"]; // NG 2$budget = $_GET ["budget"]; //NG

php

1$keyword = (isset($_GET ["keyword"])) ? $_GET ["keyword"] : ''; // OK 2$budget = (isset($_GET ["budget"])) ? $_GET ["budget"] : ''; // OK

または

php

1$keyword = filter_input(INPUT_GET, 'keyword'); // OK 2$budget = filter_input(INPUT_GET, 'budget'); // OK

イメージ説明

#この時のHTMLソース

便宜上、ファイルの先頭に、

<?php error_reporting(0);

を追加して、エラーメッセージを消したから実行。

当然だが、文法違反。</html> の後に、<table> が出力されることを、おかしいと思いませんか?

イメージ説明

投稿2016/08/16 14:07

編集2016/08/17 06:23
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

uverworld101nm

2016/08/16 14:09

$format = 'xml';がエラーなのですか?
退会済みユーザー

退会済みユーザー

2016/08/16 14:13

そうとも限らない。でも、大抵はその行かそれより上の行に問題がある。
退会済みユーザー

退会済みユーザー

2016/08/16 14:15

この状態で実行できると言っていること自体、おかしい。提示しているソースとあなたの手元にあるコードに差異があるか、あなたが嘘つきか。 何れにしても、正しい情報をあなたが提示しない限り、解決できるわけがない。
uverworld101nm

2016/08/16 14:17

あっちこっちがシンタックスエラーなんですね。
退会済みユーザー

退会済みユーザー

2016/08/16 14:18

なにをいまさら。 前の質問で大部分手直しされた理由がこれだ。
uverworld101nm

2016/08/16 14:20

それにしても、dateさんのコードが使えないのが疑問です。
退会済みユーザー

退会済みユーザー

2016/08/16 14:22

若干手直しは必要。それだってどこなで処理されているかチェックできれば、3ヶ月程度PHPの基礎を勉強した初心者でも直せる。
uverworld101nm

2016/08/16 14:23

$page = empty ( $_GET ["page"] ) ? 1 : $_GET ["page"]; このコードを入れると2ページ目以降に遷移が出来なくなります。
退会済みユーザー

退会済みユーザー

2016/08/16 14:26 編集

いい加減、質問の仕方覚えたら? それをどこに入れたのかも示さずに何を答えろというのだ。
uverworld101nm

2016/08/16 14:30

dateさんが示したように、if(isset($_GET["page"]) || isset($_GET["search"])){ $page = empty ( $_GET ["page"] ) ? 1 : $_GET ["page"]; と最初の方に入れました。
退会済みユーザー

退会済みユーザー

2016/08/16 14:34

本当に情報を正確に伝えるのが下手だなぁ… そもそもシンタックスエラーがあるようなコードに何を足したって動くわけないだろう。
退会済みユーザー

退会済みユーザー

2016/08/16 14:37

date さんのコード $_POST を $_GET に置き換えたりもしているわけだし、あなたの手元のコードがどうなっているのかは、あなたが伝えない限り、俺には知ったこっちゃない。
uverworld101nm

2016/08/16 14:39

分かりました。 明日、提示します。
退会済みユーザー

退会済みユーザー

2016/08/16 14:41

中途半端に情報を隠すから話がかみ合わないんだよ。 手元のソースコードをのままコピペして質問すればいいだろ。
uverworld101nm

2016/08/17 04:37

ソースコードを提示しました。
退会済みユーザー

退会済みユーザー

2016/08/17 06:13

とりあえずここまで。
uverworld101nm

2016/08/17 06:30

つまり、6ページめや7ページめが現れないのは、これが原因なんですね。
退会済みユーザー

退会済みユーザー

2016/08/17 06:38

まだ、ページング部分は未チェック。安易に解決を求めるのではなく、一つずつ問題を解消してください。あなたの安易に回答を求めるその態度には辟易とします。
退会済みユーザー

退会済みユーザー

2016/08/17 07:05 編集

「できない」では何も伝わりません。私がやっているように、2ページ目を押した時の画像(スクリーンショット)と3ページ目の時の画像をアップするなどして問題だと考えている部分を伝わるようにしてください。
uverworld101nm

2016/08/17 08:29

スクリーンショットを提示します。
退会済みユーザー

退会済みユーザー

2016/08/17 08:51 編集

> また、$currentが機能していない証拠です。 どこに $current あるの? > このページは4ページめですが、1ページめが黒くなっています。(途中で切れていて見れません、ごめんなさい。) わかるものを提示せずに、どうしろと? 「黒くなって」→意味不明
uverworld101nm

2016/08/17 08:57

分かりづらくてすみません。 $currentに<style>をつけてあるので、最初の時、つまり1ページ目の時は1が他の数字より太くなっています。 2ページ目、3ページ目になっても1の数字はずっと他の数字より今まです。
退会済みユーザー

退会済みユーザー

2016/08/17 09:09

なぜ該当するソースを提示しないの?
退会済みユーザー

退会済みユーザー

2016/08/18 04:32

> Kosuke_Shibuyaさん きっと日本語が通じてないんですよ。今まで散々言われてこれなので。
退会済みユーザー

退会済みユーザー

2016/08/18 17:59

中学生に教える方がもっと楽だと思う…。
退会済みユーザー

退会済みユーザー

2016/08/19 00:45

ですね。素直にやるだろうし、素直に出来たコード見せるだろうし、答える側も「仕方ないなぁ」と答えやすい(勝手な主観ですが)でしょうし。
guest

0

ベストアンサー

method=GET版

PHP

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

$key = '';
の部分だけを自分のにすれば動くPOSTかGETかわかんないからGETにした

追記 2016/08/17 12:11
method=POST版

PHP <?php session_start(); ?> <html> <head> <title>API_SAMPLE2</title> <style> .current { font-weight: bold; } </style> </head> <body> <form method="POST"> <input type="text" name="keyword"> <select name="budget"> <option value="B001">〜2000円</option> <option value="B002">2001円〜3000円</option> <option value="B003">3001円〜4000円</option> </select>         <input type="submit" name="search" value="検索" onFocus="this.select()"> <?php if(isset($_GET["page"]) || isset($_POST["search"])){ if(isset($_POST["search"])){ unset($_SESSION["budget"]); unset($_SESSION["keyword"]); $_SESSION["budget"] =$_POST["budget"]; $_SESSION["keyword"] =$_POST["keyword"]; $page=1; }else{ $page=$_GET ["page"]; } $key = '33e69b320cee12b3'; $count = '50'; $start = 1 + ($page - 1) * 10; $budget = $_SESSION["budget"]; $keyword = $_SESSION["keyword"]; $format = 'xml'; $url = 'http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=' . $key . '&count=' . $count . '&start=' . $start . '&keyword=' . $keyword . '&budget=' . $budget . '&format=' . $format; $xml = simplexml_load_file ( $url ); $total_count = $xml->results_available; $limit = ceil ( $total_count / $count ); // 最大ページ数 function paging($limit, $page, $disp = 5) { global $budget; global $keyword; // $dispはページ番号の表示数 $next = $page + 1; $prev = $page - 1; // ページ番号リンク用 $start = ($page - floor ( $disp / 2 ) > 0) ? ($page - floor ( $disp / 2 )) : 1; // 始点 // print $start; $end = ($start > 1) ? ($page + floor ( $disp / 2 )) : $disp; // 終点 $start = ($limit < $end) ? $start - ($end - $limit) : $start; // 始点再計算 if ($page != 1) { print '<a name="paging" href="?page=' . $prev .'">&laquo; 前へ</a>'; } // 最初のページへのリンク if ($start >= floor ( $disp / 2 )) { print '<a name="paging" href="?page=1">1</a>'; if ($start > floor ( $disp / 2 )) print "..."; // ドットの表示 } for($i = $start; $i <= $end; $i ++) { // ページリンク表示ループ $class = ($page == $i) ? ' class="current"' : ""; // 現在地を表すCSSクラス if ($i <= $limit && $i > 0) // 1以上最大ページ数以下の場合 print '<a name="paging" href="?page=' . $i . '"' . $class . '>' . $i . '</a>'; // ページ番号リンク表示 } // 最後のページへのリンク if ($limit > $end) { if ($limit - 1 > $end) print "..."; // ドットの表示 print '<a name="paging" href="?page=' . $limit . '">' . $limit . '</a>'; } if ($page < $limit) { print '<a name="paging" href="?page=' . $next . '">次へ &raquo;</a>'; } } paging ( $limit, $page ); ?> <table border=1> <tr> <td></td> <td>店名</td> <td>住所</td> </tr> <?php $l = 1; foreach ( $xml->shop as $r ) {?> <tr> <td><?php echo $l+($page-1)*$count;?></td> <td><?php echo $r->name;?></td> <td><?php echo $r->address;?></td> </tr> <?php $l++;?> <?}?> </table> <?php }?> </form> </body> </html>

今度もコピペで動くようになっている

投稿2016/08/16 09:42

編集2016/08/17 03:20
date

総合スコア1820

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

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

uverworld101nm

2016/08/16 10:03 編集

ご回答ありがとうございます。 結局、$page=$_GET[["page "];は間違ったんですね。
uverworld101nm

2016/08/16 13:20

dateさん、やってみましたが2頁目をクリックしたら、画面に何も映らなくなりました。 申し訳ございません。ページ遷移ができませんでした。
uverworld101nm

2016/08/16 13:29

ページ1のhtml<a name="paging" href="?page=1&amp;budget=B001&amp;keyword=" class="current">1</a> ページ2のhtml<a name="paging" href="?page=2&amp;budget=B001&amp;keyword=">2</a>
退会済みユーザー

退会済みユーザー

2016/08/16 13:47

> ページ1のhtml<a name="paging" href="?page=1&amp;budget=B001&amp;keyword=" class="current">1</a> ページ2のhtml<a name="paging" href="?page=2&amp;budget=B001&amp;keyword=">2</a> どこをどう見ても正解じゃん。
uverworld101nm

2016/08/16 13:49

それが、2ページ目をクリックしても中身が見れないんです。
退会済みユーザー

退会済みユーザー

2016/08/16 13:51 編集

こちらでは、ate さんのソースで、正常に動作しました。多分、動作しないと騒いでいるのはあなただけだと思いますが…
uverworld101nm

2016/08/16 14:03

dateさん、僕の質問文に出したコードは2ページ目に行けます。 もしよろしければ、僕のコードを実行してみてください。
uverworld101nm

2016/08/16 14:05

あとなぜか、$page = empty ( $_GET ["page"] ) ? 1 : $_GET ["page"];を書くとページ遷移ができなくなります。
date

2016/08/16 23:28

実行できません、なぜなら今提示してあるコードには検索FORMが存在しないからです 検索FORMがあっても$pageの処理の場所がおかしいので無理
date

2016/08/17 01:41 編集

また Kosuke_Shibuyaさんのシンタックスエラーの原因は上の行にあり $budget=$_POST ["budget"] 最後に;が無いのでエラーになる 毎回言われているが開発時は画面にエラーをすべて出すよう error_reporting ( E_ALL ); ini_set ( 'display_errors', 1 ); を入れるか php.iniの error_reporting = を error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT とすること
date

2016/08/17 00:18

おそらく最初の1ページしかできないのは$_POSTのデータを保持していないから 一回目検索したときに最初は$_POSTにデータが入っているが、2回目に検索したときには$_POSTにはデータが無いそれで2回目はエラーになるのだと思われる 今現在のあなたの状況を再現してみたコードを書いてみます。それ以降の質問はあなたのコードをコピペするだけで検索できるコードを出してくれた場合のみ回答します
date

2016/08/17 00:25

本当にpagingの処理を変えていないのなら 12345...558次へ » という風になるはずなのに 1,2,3,4,5,6,7,8,9,10,...110 となるのは $dispを10にしている証拠です
uverworld101nm

2016/08/17 04:32

コピペしても動きません。 元のコードを掲載します。
uverworld101nm

2016/08/17 04:45

dateさん、二つ目に出したコードは今現在の僕の状況を再現してみたコードですか?
date

2016/08/17 04:48

予想の範囲外だった 二つ目のコードはmethod="post"の場合の例 無視していいよ記録として残しておくけど
date

2016/08/17 04:51

念のため聞いとくけど本当に $large_area = '〇〇'; と検索してないよね これエラーになるから $large_area = 'Z011'; とかにしないとな
uverworld101nm

2016/08/17 04:56

はい、大丈夫です。ちゃんと書いてあります。
uverworld101nm

2016/08/17 04:57

他におかしいところありますか?
date

2016/08/17 05:15

<html>を2重で書くという初心者でもしそうにないことをやるとは思わなかった そしてそれで動作したphpにさらにわけが分からなくなった Notice: Undefined index: keyword in Notice: Undefined index: budget in とそれぞれ検索したらどちらかのエラーが出るが検索はできた、$large_area = 'Z011';と$keyを直したら普通に検索できて普通にページ遷移できたのだが
Lhankor_Mhy

2016/08/17 05:18

横からすみません。 質問者はこのページをWordPress上で作成していたと思うのですが、現在でもそのようになっていますか?
uverworld101nm

2016/08/17 05:28

dateさん、普通に6ページや7ページにページ遷移が出来ましたか?
uverworld101nm

2016/08/17 05:29

lhankor_mhyさん、はいそうです。
date

2016/08/17 05:34

遷移できました。 私のテスト環境は windows7 firefox 48 apache 2.4 php.5.6 wordpressは今は使ったことが無いですので質問されても答えられない
uverworld101nm

2016/08/17 05:37

僕のテスト環境はmac mampです。
uverworld101nm

2016/08/17 05:43

また、今回の質問はwordpressを使っているようがいまいが関係ないと思います。
date

2016/08/17 05:54

よく考えると$startの処理は $start = 1 + ($page - 1) * $count; じゃないとだめだった
uverworld101nm

2016/08/17 06:26

一つ伺いたいことがあります。 dateさん、全てのページにアクセスできましたか?
Lhankor_Mhy

2016/08/17 06:30

「wordpressを使っているようがいまいが関係ない」とのこと、なによりです。 蛇足になりますが、URLのpageパラメータはWordPressのシステムでも使われていること、設定によってはURLリライトされていることを一応お知らせしておきますね。
uverworld101nm

2016/08/17 06:34

だから、僕が分からないのは5ページ目までページが見れるように設定されており5ページ目までページ遷移が出来てなんで6ページ目からページ遷移が出来ないのか、これが分からないんです。 なぜ、...はずっと...のままなのかこれが分からないんです。
uverworld101nm

2016/08/17 06:40

dateさん、...のところもページ遷移が出来ましたか?
date

2016/08/17 06:41

まさか ... をクリックして移動できると考えているの
退会済みユーザー

退会済みユーザー

2016/08/17 06:44

> date さん え、そのまさか?!
uverworld101nm

2016/08/17 06:45

そうじゃなく、...の中に入っているページを出すことは出来ますか?という質問です。
uverworld101nm

2016/08/17 06:45

また、次へボタンに2ページだけじゃなく、3ページ、4ページに遷移が出来ますか?
退会済みユーザー

退会済みユーザー

2016/08/17 06:53 編集

> uverworld101nm さん 1ページから全部のページ番号を出力したいということ? 最後のページまで5000ページ以上を? > また、次へボタンに2ページだけじゃなく、3ページ、4ページに遷移が出来ますか? 意味不明すぎるなぁ… 1ページ目に50件が表示されているから、2ページ目を押した時に、100件表示、3ページ目の時は150件表示したいということ?
date

2016/08/17 06:53

できましたよ、あなたのコードでね
uverworld101nm

2016/08/17 06:56

出来たんですか。じゃあ、何故出来ないんだろう。
uverworld101nm

2016/08/17 06:59

僕がテストしたところ、次へボタンは2ページ目にしか行けないんですよ。
uverworld101nm

2016/08/17 07:01

dateさんとkosuke_shibuyaさん、結局僕のコードはページ遷移が出来るんですか、出来ないんですか?
退会済みユーザー

退会済みユーザー

2016/08/17 07:06

間違いはあるが、できている。50件表示しているにもかかわらず、10件でページ送りしている問題はあるが。
date

2016/08/17 07:11

エラーは起きるができる 次への移動もページ番号をクリックしても 前へを押しても 1をクリックしても 最後のページ番号をクリックしてもできる
uverworld101nm

2016/08/17 07:14

分かりました。kosuke_shibuyaさんの言う通り、一つ一つ解決していきます。
date

2016/08/17 07:20

補足しておくけど元のコードのほうだよ
uverworld101nm

2016/08/17 07:21

では、まず、$startのところを直しますね。
date

2016/08/17 07:28

Lhankor_Mhyさんの要望やKosuke_Shibuyaさんのスクリーンショット も答えて張ってくださいね 
uverworld101nm

2016/08/17 08:39 編集

一つわかったことがあるのですが、どうやら現在位置を表す$currentが機能していないようです。理由は、dateさんが$currentに<style>をつけましたが、2ページ目をクリックしても1ページ目が黒いです。
uverworld101nm

2016/08/17 08:58

黒いというのは、dateさんが書いた、styleの影響で1の数字だけが他の数字より太いってことです。
date

2016/08/17 09:01

まずはlhankor_mhyさんの指摘通りpageをpagenumにしたものを作ってみてください
date

2016/08/17 09:26

よく見るとなんでこれ最大ページが2790件なんだ $totalcount は27899 50件ずつなら最大ページ数は 558件 12345678910...558次へ » となるのだが これだと10件ずつ表示になっているのだがなぜ
退会済みユーザー

退会済みユーザー

2016/08/17 09:31

> date さん paging($limit, $page,10); <- ここ
date

2016/08/17 09:35

そうかとはいかないのですだってそこは$dispに入れる場所だから $limit = ceil ( $total_count / 10); としないと2790にはならない
退会済みユーザー

退会済みユーザー

2016/08/17 09:54 編集

問題ありすぎるから、ほとんど書き直すべきですね。これをもとに直せという方が辛い。 変数名とかいろいろ突っ込みどころありすぎ。 ソース汚すぎて読む気になれない...
date

2016/08/17 10:03

すいません おそらくこういう初心者すぎるコードは私みたいなまだまだ初心者の人の方が読めるのかもしれません。 正直この方にもう今はやめて別の勉強をやれと言える上司や先生や同僚がいればよかったのにと思います
退会済みユーザー

退会済みユーザー

2016/08/17 10:09

PHPはまだしも、HTMLくらいちゃんと書いて欲しい。 質問の本題意外にも問題ありすぎて、正直ページング部分なんてまだ早すぎる。
takaw

2016/08/17 11:15

dataさん。 以前から、uverworld101nmさんには他の方がHTMLやPHPの基礎、 WEB技術の基礎から勉強しろ、そもそも日本語の勉強をしろなど、 言ってきましたが、全く効果なしなんですよ…。 ここまで人の話を聞かない人も珍しいと思います。
date

2016/08/17 12:00

それはしってます いくら解答者が言ってきても聞く耳持たない事 じゃあ誰の言う事なら聞いてくれるのだろうかとね
kei344

2016/08/17 18:26

WordPressのどこにどうやって入れているかわかりません(多分固定ページ)が、$pageをパラメータにした場合WordPressのアーカイブ内のページングとして解釈されるはずで、アーカイブページが分割予定に無い場合1ページ目に飛ぶはずです。 というかWordPressはこういったもののベースにするには不向きです。
uverworld101nm

2016/08/18 04:21

>$pageをパラメータにした場合WordPressのアーカイブ内のページングとして解釈されるはずで、アーカイブページが分割予定に無い場合1ページ目に飛ぶはずです。 じゃあ、プラグインを使うんですか?
uverworld101nm

2016/08/18 04:22

ぐるなびapiで実行したところ、ぐるなびapiだとfunction pagingは実装できませんでした。
kei344

2016/08/18 04:25

> じゃあ、プラグインを使うんですか? もう一度書きますが、WordPressはこういったもののベースにするには不向きです。
uverworld101nm

2016/08/18 04:59

つまり、wordpressにwebapiがむいていないってことですか?
date

2016/08/18 05:48

誰がぐるなびでやれといったんだ pageをpagenumにしたものを作るのと画像を修正してアップするくらいできないのか >ぐるなびapiだとfunction pagingは実装できませんでした それはあなたにぐるなび用にコードを改変する能力が無いだけ
退会済みユーザー

退会済みユーザー

2016/08/18 06:46

あなたがやる事自体が向いてないと思います。
退会済みユーザー

退会済みユーザー

2016/08/18 07:13

今、作成しているAPI自体、ぐるなびじゃなくてホットペッパーだし、そもそもAPIから取得して検索・一覧を作成するために、Wordpress を利用するなんてことは、わざわざ面倒なことをするだけで、そもそもページング機能を作るより何十倍も面倒。 自分が作成するとしても Wordpress に組み込むような設計はしない。できなくはないが面倒だし時間もかかる。仮にお客さんからの要望があっても、理由つけてお断りする。
退会済みユーザー

退会済みユーザー

2016/08/18 07:35

固執する理由とか何かあるんでしょうかねー
Lhankor_Mhy

2016/08/18 07:44

他の回答者に逆らうわけではありませんが、このマッシュアップページがコンテンツの一部で、他にお知らせやコンテンツ更新がされていくようなサイトを作成するなら、別に1枚ページを作るよりも、衝突を避けながら固定ページとして作る方が、デザインの統一性などに対応しやすくていいかもなあ、などと思うところです。   でも、自分でやるならjavascriptでjsonpを叩くかも。
takaw

2016/08/18 11:59

>ajisanさん 理由はわかりませんが、本人曰く「僕、絶対に諦めませんよ」だそうです。 ここで質問しまくってる時点でとっくにあきらめてると思うんですけどねー。
退会済みユーザー

退会済みユーザー

2016/08/19 00:44

>takawさん そうなんですか。面白いですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問