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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

1回答

444閲覧

ページネーションをphpで実装したい

tech_first

総合スコア13

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2020/04/23 14:40

###phpにて、ページネーションを実装したいです。

phpにてサイトの管理画面を実装しております。
その際に新着順で10件ごとのデータを表示し、データの下にページのリンクを置きたいです。

###エラー文

現状エラー文というのは出ておりませんが、ページを2にクリック(URLが http://XXXXX.php?page=2)となっている状態の際2つ目のデータ(つまり11件目〜20件目)が表示されず、常に1件目~10件目が表示されてしまいます。

###該当のソースコード

php

1$db = new PDO('mysql:dbname=test_db;host=localhost', 'root', 'password'); 2 3$page = $_GET['page']; 4 5if (isset($_GET['page'])) { 6 $page = (int)$_GET['page']; 7} else { 8 $page = 1; 9} 10 11if ($page > 1) { 12 $start = ($page * 10) - 10; 13} else { 14 $start = 0; 15} 16//上記の記述がおかしいのだと思います。 17 18$news = $db->prepare(" 19 SELECT id, title 20 FROM news 21 LIMIT 0, 10 22"); 23$news->execute(); 24$news = $news->fetchAll(PDO::FETCH_ASSOC); 25 26foreach ($news as $post) { 27 echo $post['id'], ':'; 28 echo $post['title'], '<br>'; 29} 30 31$page_num = $db->prepare(" 32 SELECT COUNT(*) id 33 FROM news 34"); 35$page_num->execute(); 36$page_num = $page_num->fetchColumn(); 37 38$pagination = $page_num / 10; 39$pagination = ceil($page_num / 10);

1~10件は表示できていることから、$pageに上手く数字が入っていないのだと思います。

$_GET['page'];を使い、クエリを取得して$pageに代入しておるのですが、クエリの値を取り出せていないのでしょうか。

###FWなど

FWは一切使っておりません。

どなたか、何卒よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

SELECT id, title
FROM news LIMIT 0, 10

常に上記SQLが実行されるように組んでるので最初の10件しか取得しないでしょうね。

投稿2020/04/23 14:46

m.ts10806

総合スコア80765

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

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

tech_first

2020/04/24 01:44

ありがとうございます。 ここのSQL文だったのですね。気が付きませんでした。 誠にありがとうございます!
m.ts10806

2020/04/24 02:23

はい。まず全体の流れをつかむこと そして1行1行の役割を理解すること  です。 SQLであれば「実行されるSQL文字列」をPHP側で作ってるので 「実際実行している文字列」をexecuteやprepareの前で出力してみて、出力されたSQLコピペで直にDBに対して実行してみて結果を確認すると良いです。 今回に限らず、DBはあくまで外部の仕組みなので、直に実行して想定の結果を得られるSQLを先に作っておき、PHPで動的に作られたものと比較して整合性を確かめます、 ※画面出力HTMLも同じです。先に静的HTMLを作っておく工程は必須です
tech_first

2020/04/24 08:02

ありがとうございます。 var_dump()で出力し、値を確認しながら進めて参ります。 なるほどまずはsql文をsql(ターミナルなど)で確かめた後にコードに入れ込むのですね。 勉強になりました。 ありがとうございます!
m.ts10806

2020/04/24 08:04

直接実行して想定の結果が得られなければ、PHPから実行しても想定の結果が得られないのは当然ですからね。 なので、「考えながら組む」のではなく「考えてから組む」ようにしてみてください。 紙に落書き程度でいいんですよ。「設計書」です。 あるかないかで大違いです。
tech_first

2020/04/24 08:10

ありがとうございます。 書学者なので答えよりも勉強方法を教えてくださる方がありがたいと思いました。 やってみます。
m.ts10806

2020/04/24 08:14

勉強方法、、、というと 初学者でまず必ず覚えるべきは「PHPマニュアルの活用方法」です。 読み方確認の仕方、サンプルコードでの検証 これができるようになるだけで成長の伸びが全く違ってきます。
tech_first

2020/04/24 13:53

phpマニュアルの活用方法ですか? 聞いたことがないので調べてみます。 何から何までありがとうございます本当に!
m.ts10806

2020/04/24 13:58

伝え方が難しいですね。 マニュアルなので基本的に「仕様」が書かれています。 プログラムは書いた通りにしか動かないので、仕様通りに動きます。 「何かうまいこと動かない」となれば機能の仕様を確認してコードとの正誤を確認する、というのを「活用する」と言います。 誰かが書いたその辺の個人の記事より、書籍より確実な情報源です。
tech_first

2020/04/24 14:04

今ブックマークしました! 自分が使いたいメソッドをマニュアルで調べて、仕様の通りに動いてるかの確認をすれば良いというわけですね。 あと、大変恐縮なのですが、初学者にお勧めの技術本はありますでしょうか。 「気づけばプロ並みphp ゼロから作れる人になろう」を購入して今発送待ちなのですが他に何かあれば教えていただきたいです。
m.ts10806

2020/04/24 14:28

取り急ぎ >購入して今発送待ちなのですが 今すぐ返金して発送も止めてください。
tech_first

2020/04/24 14:38

これは会社の上司から進められたでのですが、お勧めではないのですか。
m.ts10806

2020/04/24 14:39

補足 https://teratail.com/search?q=%E3%83%97%E3%83%AD%E4%B8%A6%E3%81%BF+tag%3APHP このように書籍名が出るくらい名前につられて買う人が多いですが、 実装方法としては古く、むしろ間違ってるようなところも見受けられます。 ちなみに書籍内に独特な名前のtitleが出てくることでも知られていて https://teratail.com/search?q=%E3%82%8D%E3%81%8F%E3%81%BE%E3%82%8B%E8%BE%B2%E5%9C%92 上記のように質問が出ています。 ※検索に引っかからないだけで体感ではもっと多いです。 不買運動をしているわけではないですが、発行が3年前ですかね。 おそらく執筆当時となるともっと前でしょう。十分古いです。 好ましくない教材は広まるとそれだけ間違った認識で学習を進めてしまい使えないプログラマーを量産してしまいます。時間もお金も無駄になりますからね。 teratailでこの書籍を扱った人の質問は多く見てきましたが、最低限必要なことも身に付けていない質問ばかりで、「この書籍ではプロ並みどころか何もまともに作れるようにならない」というのがteratailの回答者の中での共通認識かと思います。 「またプロ並みか」と口癖のように出てきますからね。 書籍を買う場合は、1年以上前の本は極力避けましょう。 PHPだと7.1以上対応の本を選びましょう。 「昔の本の焼き直し」も多くみられるのでそこは見極めが必要ですが、判断できないなら「半年以内に発行された書籍を選ぶ」ですね。 そして、機能確認は必ずPHPマニュアルで行う。 PHPマニュアルでは機能確認だけでなく、form送信の基礎ですとかセッション、クラスの基礎などもかなりのボリュームが割かれて書かれています。サンプルコードも載っています。 それらのサンプルコードを動かしつつ、自分でもちょっと考えて組み込んで色々作っていくのが最も良い学習方法です。 もしネット上の記事を参考にするのでしたら、その記事が書かれた時期と(更新日時より作成日時)対応したPHPのバージョンは必ず確認してください。 Qiitaという技術者が情報共有するために知見をまとめた記事を書くサイトがありますが、なるべく評価の高い記事を採用してください。 コメントで指摘が入っていたりするので、そのやりとりも読むようにするとなおよしです。対応の履歴などもあわせて確認すると良いです。
tech_first

2020/04/24 14:47

事細かくありがとうございます。 感動しました。 phpマニュアルで確認しつつ、自分で色々といじってやってみたいと思います。 技術本よりも、マニュアルとネットの知識で十分という認識ですね。 ありがとうございます。
m.ts10806

2020/04/24 14:49

>技術本よりも、マニュアルとネットの知識で十分という認識ですね。 ネットも嘘かいてあることもあるし古い設計や考えをもとに書かれている可能性もあります。 ですので、鵜呑みにせず自身で調べ、理解してから使うように
tech_first

2020/04/24 14:52

はい。承知しました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問