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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

0回答

880閲覧

不要なページネーションが表示される

shunta80

総合スコア96

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2021/10/26 12:39

前提・実現したいこと

ECサイトを作成し会員ごとの購入履歴ページを作成
購入した商品を4つずつ画面表示させていますが
不要なページネーションが表示されてしまいます。
イメージ説明

5つめ、9つめがデータベースに登録された時にページネーションの数も1つずつ増えるようにしたいです。

発生している問題・エラーメッセージ

購入された商品を登録しているテーブルのデータ数が増えるにつれて
画面表示されるページネーションの数も増えてしまいます。

該当のテーブル  ここに登録されるデータが増えるごとにページネーションの数も増えます。
イメージ説明

該当のソースコード

include_once('c.php'); $pdo = new PDO('mysql:dbname=shop;host=localhost;charset=utf8','root',''); //ページ毎の件数を設定 $row_count = 4; //テーブル全体の件数を取得 $sql = "SELECT COUNT(*) FROM dat_sales_product"; $sth = $pdo -> query($sql); $count = $sth -> fetch(PDO::FETCH_COLUMN); //現在のページを取得 存在しない場合は1とする $page = 1; if(isset($_GET['page']) && is_numeric($_GET['page'])){ $page = (int)$_GET['page']; } if(!$page){ $page = 1; } //$pageの数から件数分を表示するSQLクエリを生成 配列で取得 $sql = "SELECT * FROM dat_sales_product WHERE seles_menber_code=?"; $sql .= " ORDER BY code LIMIT ".(($page - 1) * $row_count).", ".$row_count; $sth = $pdo -> prepare($sql); $data[] = $id; $sth -> execute($data); $aryPref = $sth -> fetchAll(PDO::FETCH_ASSOC); //Pagingクラスを生成し、ページングのHTMLを生成 $pageing = new Paging(); $pageing -> count = $row_count; $pageing -> setHtml($count);

c.php(ここでクラスを作成しています)

<?php class Paging{ //表示させる件数 public $count = 50; //ページングのパラメータ $_GET[]に入る部分 public $param = 'page'; //現在のページの前後に表示させる数 public $items = 2; //最初と最後に繋ぐ文字 public $between_str = '…'; //「前へ」にあたる文字 public $prev_str = '≪'; //「次へ」にあたる文字 public $next_str = '≫'; //ulに付くclass public $ul_class = 'paging'; //aタグを除外する $_GETではなくajax等の処理に public $atag_remove_flg = false; public $page = 1; public $url = ''; public $html = ''; //HTMLを生成 プロパティhtmlに代入 public function setHtml($sum = 0){ $this -> getPage(); $max_page = ceil($sum / $this -> count); if($max_page == 1 || 1 > $this -> page || !is_numeric($this -> page)){ $this -> page = 1; } if($this -> page > $max_page){ $this -> page = $max_page; } $aryCmp = []; for($i = 1; $i <= $max_page; $i++){ $aryCmp[$i] = true; } $loop_count = 0; for($i = ($this -> page + 1); $i <= $max_page; $i++){ $loop_count++; if($loop_count > $this -> items && $i != $max_page){ unset($aryCmp[$i]); } } $loop_count = 0; for($i = ($this -> page - 1); $i >= 1; $i--){ $loop_count++; if($loop_count > $this -> items && $i != 1){ unset($aryCmp[$i]); } } $aryResult = []; foreach($aryCmp as $key => $value){ $aryResult[] = $key; if($max_page == $key){ break; } if(!isset( $aryCmp[($key + 1)] ) && $this -> between_str){ $aryResult[] = $this -> between_str; } } if(!$aryResult){ return ''; } $html = ''; $html .= '<ul class="'.$this -> ul_class.'">'; $aryList = []; if($this -> page != 1 && $this -> prev_str){ $aryList[] = '<li>'.$this -> getQuery(($this -> page - 1), $this -> prev_str).'</li>'; } foreach($aryResult as $key => $value){ if(is_numeric($value)){ $aryList[] = '<li>'.$this -> getQuery($value, $value).'</li>'; }else{ $aryList[] = '<li>'.$this -> getQuery(0, $value).'</li>'; } } if($this -> page != $max_page && $this -> next_str){ $aryList[] = '<li>'.$this -> getQuery(($this -> page + 1), $this -> next_str).'</li>'; } $this -> html = '<ul class="'.$this -> ul_class.'">'.implode('', $aryList).'</ul>'; } //現在のページURLを取得 atag_remove_flgがtrueの場合は行わない private function getPage(){ if($this -> atag_remove_flg) return; if(isset($_GET[$this -> param]) && is_numeric($_GET[$this -> param])){ $this -> page = $_GET[$this -> param]; }else{ $this -> page = 1; } } //ページ内リンクを生成 private function getQuery($page, $str){ $url = $this -> url; if(!$url){ $url = ((isset($_SERVER['HTTPS'])) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; if(isset($_SERVER['QUERY_STRING'])){ $url = str_replace('?'.$_SERVER['QUERY_STRING'], '', $url); } } $html = ''; if($this -> page == $page){ return '<span class="active">'.$str.'</span>'; } if($page == 0){ return '<span class="between">'.$str.'</span>'; } if(!$this -> atag_remove_flg){ $aryQuery = []; if($_GET){ $aryQuery = $_GET; } $aryQuery[$this -> param] = $page; if($page == 1){ unset($aryQuery[$this -> param]); } if($aryQuery){ return '<a href="'.$url.'?'.http_build_query($aryQuery).'">'.$str.'</a>'; }else{ return '<a href="'.$url.'">'.$str.'</a>'; } }else{ return '<span data-page="'.$page.'">'.$str.'</span>'; } } }

補足情報(FW/ツールのバージョンなど)

Windows10

XAMPP環境で構築

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問