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

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

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

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

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

Q&A

解決済

2回答

1183閲覧

ページング処理がうまくいきません

tege

総合スコア29

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

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

0グッド

0クリップ

投稿2019/10/13 07:26

ページング処理を作っているのですが、現在DBには15件データが入っていて1ページ目には10件表示。2ページ目には5件表示したいのですが2ページとも10件表示になってしまいリンクを見ると
1ページ目はhttp://localhost/paging/?page%20=%201
2ページ目はhttp://localhost/paging/?page%20=%202となぜか出てしまいます。
どなたか教えてほしいです。

php

1<?php 2require_once($_SERVER["DOCUMENT_ROOT"] . "/php/classes/conf.php"); 3require_once($_SERVER["DOCUMENT_ROOT"] . "/php/classes/Book.php"); 4define('PER_PAGE',10); 5// GETで現在のページ数を取得する(未入力の場合は1を挿入) 6if (isset($_GET['page'])) { 7$page = (int)$_GET['page']; 8} else { 9$page = 1; 10} 11 12$bookList = []; 13try { 14 $db = new PDO(Conf::DB_DNS, Conf::DB_USERNAME, Conf::DB_PASSWORD); 15 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 16 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 17 18 $offset = PER_PAGE * ($page - 1); //現在のページ-1に10を掛ける 19 $sql = "SELECT * FROM product LIMIT ".$offset.",".PER_PAGE; 20 $stmt = $db->prepare($sql); 21 $result = $stmt->execute(); 22 23 24 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 25 $dp = []; 26 foreach ($row as $col => $val) { 27 $dp[$col] = $val; 28 } 29 30 $book = new Book(); 31 $book->setBoName($dp['book_name']); 32 $book->setPrice($dp['price']); 33 $bookList[$dp['book_id']] = $book; 34 } 35 36 $page_num = $db->prepare("SELECT COUNT(*) book_id FROM product"); 37 $page_num ->execute(); 38 $page_num = $page_num->fetchColumn(); 39 $pagenation = ceil($page_num / PER_PAGE); 40 41 42} catch (PDOException $ex) { 43 $_SESSION["errorMsg"] = "DB接続に失敗しました。"; 44} finally { 45 $db = null; 46} 47?> 48 49<!DOCTYPE html> 50<html lang="ja"> 51 <head> 52 <meta charset="utf-8"> 53 <title>書籍情報リスト</title> 54 <link rel="stylesheet" href="/ph34/EP32/css/desing.css" type="text/css"> 55 </head> 56 <body> 57 <section> 58 <table> 59 60 <tbody> 61 <?php 62 if (empty($bookList)) { 63 ?> 64 <tr> 65 <td colspan="5">該当書籍は存在しません。</td> 66 </tr> 67 <?php 68 } 69 else { 70 foreach ($bookList as $book) { 71 ?> 72 <ul id="bookimg"> 73 <li id="box2"><?= $book->getBoName() ?></li> 74 <li><?= $book->getPrice() ?>+税</li> 75 </ul> 76 <?php 77 } 78 } 79 ?> 80 <br> 81 <?php for($i=1; $i <= $pagenation; $i++) :?> 82 <a href="?page = <?php echo $i ?>"><?php echo $i; ?></a> 83 <?php endfor; ?> 84 </tbody> 85 </table> 86 </section> 87 </body> 88</html> 89

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

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

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

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

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

guest

回答2

0

GETパラメータに空白が入っているので(int)にした際に$pageには0が入っているんじゃないですか?

if (isset($_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; }

投稿2019/10/13 07:43

sola-msr

総合スコア876

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

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

0

ベストアンサー

%20が入るのは空白があるからです。

PHP

1// ?page = <?php echo $i ?> 2// ↓ 3 ?page=<?php echo $i ?>

投稿2019/10/13 07:35

kei344

総合スコア69444

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

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

tege

2019/10/13 08:33

できました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問