いつもありがとうございます。
今回もご教授頂ければ幸いです。
●実装したい機能
MYSQLからデータを取得してページング処理をしたい。
●困っている点
MYSQLからあるテーブルのデータを全件取得し、一覧の表示は出来るのですが
3件ずつのページングが上手くいきません。
具体的に言いますと
1ページ目の3件は上手く表示されますが、
2ページ目以降も1ページ目と同じデータが3件ずつ表示されてしまいます。
以下コードです。
phoコード
<?php try { $dsn='mysql:dbname=netshop;host=localhost'; $user='root'; $password=''; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT pro_code,pro_id,pro_name,pro_subname,pro_koumoku,pro_tanka,pro_kosuto,bikou1,bikou2,gazou FROM mst_product ORDER BY pro_code DESC'; $stmt=$dbh->prepare($sql); $stmt->execute(); $count=$stmt->rowCount(); $dbh=null; $max = 3; //1ページあたりの表示数 $limit = ceil($count/$max); //最大ページ数 $page = empty($_GET["page"])?(int)1:(int)$_GET["page"]; //ページ番号 $start = ($page ==1)?0: ($page-1) * $max; $end = ($page * $max); // var_dump($start); // var_dump($end); /* 確認用 print "<p>"; print "count:".$count."<br>"; print "max:".$max."<br>"; print "start:".$start."<br>"; print "end:".$end."</p>"; */ for($i=$start;$i<$end;$i++) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); print '<a href="itemsyousai.php?procode='.$rec['pro_code'].'"><img src="../product/gazou/'.$rec['gazou'].'" width="170" height="150" alt='.$rec['pro_name'].'<br />'; print '</a>'; print '<a href="itemsyousai.php?procode='.$rec['pro_code'].'">'; print ''.$rec['pro_name'].''; print '<br>'; print ''.$rec['pro_subname'].''; print '<br>'; print '商品ID : '.$rec['pro_id'].'<br />'; print '価格 :'.$rec['pro_tanka'].'円'; print '<br>'; print '</a>'; print ''.$rec['bikou1'].''; if($rec==false) { break; } } } catch(Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } include("../include/paging2.php"); paging($limit,$page,3); var_dump($page); ?>
ページングのメソッド
<?php function paging($limit, $page, $disp=3){ //$dispはページ番号の表示数 $next = $page+1; $prev = $page-1; //var_dump($next); //int型で返される //ページ番号リンク用 $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点 //floor 小数点以下切り捨て $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点 $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算 if($page != 1 ) { print '<a href="?page='.$prev.'">« 前へ</a>'; } //最初のページへのリンク if($start >= floor($disp/2)){ print '<a 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 href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 } //最後のページへのリンク if($limit > $end){ if($limit-1 > $end ) print "..."; //ドットの表示 print '<a href="?page='.$limit.'">'.$limit.'</a>'; } if($page < $limit){ print '<a href="?page='.$next.'">次へ »</a>'; } /*確認用 print "<p>current:".$page."<br>"; print "next:".$next."<br>"; print "prev:".$prev."<br>"; print "limit:".$limit."<br>"; print "start:".$start."<br>"; print "end:".$end."</p>"; */ } ?>
$rec=$stmt->fetch(PDO::FETCH_ASSOC);の箇所が原因かなと思っているのですが
なかなか上手くいかず困っています。
どうぞよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/13 04:52