- 締切済み
php掲示板でページング機能を装備したいのですが
下記のプログラムのみでは投稿が0にもかかわらず12345...10次へ » となってしまいます。理想は13件投稿の場合10件表示で、一ページ目は 13件中10件表示 1|2次へ>> としたいです。 PHP初心者です。どこに記述するかなど、できるだけ分かりやすくお願いいたします><申し訳ございません。 <?php function paging($limit, $page, $disp=5){ //$dispはページ番号の表示数 $next = $page+1; $prev = $page-1; $start = ($page-floor($disp/2)> 0) ? ($page-floor($disp/2)) : 1;//始点 $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>";*/ } $limit = 10;//最大ページ数 $page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 paging($limit, $page); ?> またlogファイルなどの関連ファイル名はどこに記述されているかわからないので、このファイルをindex.phpにしたとして、ほかに必要なファイルがあれば教えていただきたいです。宜しくお願いいたします。 参考URL http://tenderfeel.xsrv.jp/php/639/
- mintozuku
- お礼率0% (0/1)
- PHP
- 回答数1
- ありがとう数0
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- shimix
- ベストアンサー率54% (865/1590)
相互リンク http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1291971992 あちらでも書きましたが、paging($limit, $page, $disp=5)の$limitには何を渡しているのですかね。 >logファイルなどの関連ファイル名はどこに記述されているかわからないので、 ご自分が作成している掲示板ではないのですか? それとも「ページングを実装したい」ではなく「掲示板を作りたい(ページングのあるヤツ)」ということでしょうか? #せめて仕様くらいは決めてから作り始めないとgdgdになりますよ(汗
関連するQ&A
- ページング機能はできたのですが、よりコード内容を理解しようと思っており
ページング機能はできたのですが、よりコード内容を理解しようと思っており、疑問があります。 disp_log($page,$page,$max){・・・の第一$page、第二引数$pageが同じ値でデータを渡しておりますが、それぞれに代入される変数はユーザー定義関数内では同じ値として取り扱われるかと理解しており、disp_log($page,$max){でもいいような気がし、実際に実行すると前記と後期では実行結果が異なります。 よく理解できていないんですが、どなたかわかりやすいように教えてください。 <?php //http://tenderfeel.xsrv.jp/php/639/ $logdata = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"); $count = count($logdata);//ログの数 $max = 3;//1ページあたりの表示数 $limit = ceil($count/$max);//最大ページ数 $page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 //↓ここの部分です。 function disp_log($page,$page,$max){ global $logdata,$count; $start = ($page == 1)? 0 : ($page-1) * $max; $end = ($page * $max); /* 確認用 print "<p>"; print "count:".$count."<br>"; print "max:".$max."<br>"; print "start:".$start."<br>"; print "end:".$end."</p>";*/ print "<p>"; for($i=$start;$i<$end;$i++){ if($i>= $count){break;} print $logdata[$i]."<br>"; } print "</p>"; } function paging($limit,$page,$disp=5){ //$dispはページ番号の表示数 $page = empty($_GET["page"])? 1:$_GET["page"]; $next = $page+1;//前のページ番号 $prev = $page-1;//次のページ番号 if($page != 1 ) {//最初のページ以外で「前へ」を表示 print '<a href="?page='.$prev.'">≪ 前へ</a>'; } if($page <$limit){//最後のページ以外で「次へ」を表示 print '<a href="?page='.$next.'">次へ ≫</a>'; } /*確認用 print "current:".$page."<br>"; print "next:".$next."<br>"; print "prev:".$prev."<br>";*/ } /* $limit = 10;//最大ページ数 $page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 paging($limit, $page); */ paging($limit,$page); disp_log($page,$page,$max); ?>
- ベストアンサー
- PHP
- ページング。困っています。
分かる方はいませんか?? <?PHP $countRe=$num_rows; function pager($id,$countRe){ if($id=="") $id=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$id) return false; if($id>6){ $startPage=$id-5; $startMore="<a href=\"$PHP_SELF?id=".($startPage -1)."\">< PREV</a>"; }else{ $startPage=1; } if($id+5<$maxPage){ $endPage=$id+5; $endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT ></a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($id==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?id=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> 現在、このようなソースでページングをしています。1ページにつき10件ずつ表示させたいのです。該当データ11件になったら、ちゃんとリンクが[1,2]と出てくれますが、1ページ目に11件、2ページ目でも11件出てしまいます。理想は説明不要だと思いますが、1ページ目に10件、2ページ目で余りの1件表示させたいです。このソースの問題ではなくSELECT文の問題なんでしょうか??LIMIT 0,10としたら11件該当しなければならないのに10件しか該当しないとなり、これはこれでおかしくなります。
- 締切済み
- PHP
- ページング時のセレクト文が分かりません。
<?php $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">< PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT ></a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このソースでページングしています。$pidが1ページの時はLIMIT 0.10 $pidが2ページの時はLIMIT 10.10 $pidが3ページの時はLIMIT 20.10 としたいのですが、SELECT文はどうしたら良いですか??
- 締切済み
- PHP
- ページングについて
$countRe=$num_rows; pager($_GET["id"],$countRe); function pager($id,$countRe){ if($id=="") $id=1; $maxPage=ceil($countRe/5); if($maxPage==1 or $maxPage<$id) return false; if($id>6){ $startPage=$id-5; $startMore="<a href=\"$PHP_SELF?id=".($startPage -1)."\">< PREV</a>"; }else{ $startPage=1; } if($id+5<$maxPage){ $endPage=$id+5; $endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT ></a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($id==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?id=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } 現在このようなコードでページングしています。 該当内容が10件未満ならリンクは出ず、10件以上なら「12」とリンクが出てくれるのは良いのですが、 1ページに11件表示され2ページにも同じ内容が11件表示されてしまいます。どのようにしたら、1ページ目で10件、2ページ目で1件表示してくれるのでしょうか??
- 締切済み
- PHP
- ページングに関して
<?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">< PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT ></a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このようにしています。現在は、該当データが11件あれば、[1,2]リンクは現れますが、1をクリックしたら11件、2をクリックしても11件表示されます。10件、1件と表示させたいです。方法をどなたか教えていただけないでしょうか?? また、上記のようなコードだとSELECT文はどうすれば良いでしょうか? 自分で調べろという回答は御遠慮下さい。分からないから質問しているのです。
- 締切済み
- PHP
- ページングでhiddenの値が伝わらない
ページングリンクの値の受け渡しについて。 <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">< PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT ></a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このようなソースなんですが、どうしたらリンク先にhiddenの情報が送れますか?? このページで <input type="hidden" name="usersearch" value="<?php print_r($_POST['usersearch']) ;?>"> として、値を受け取り、ページIDのリンクをクリックした際も、このページで表示します。 このページがa.phpだとしたらリンク先はa.php?pid=1と言ったような具合です。
- 締切済み
- PHP
- ページングでの値の引き継ぎ方
1.html <form method="POST" action="l.php"> <input type="text" name="usersearch"/> <input type="submit" name="button" id="button" value="検索" /> </form> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 2.php $usersearch= $_POST['usersearch']; こんな感じにPHPで受け取ったとして 2.php で <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">< PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT ></a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> こうした場合、<a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT ></a>"; この部分でリンクをクリックした場合、POSTした値が消えてしまっています。どうしたら引き継げますか??
- 締切済み
- PHP
- ワードプレス固定ページのページングについて
初めまして。WordPress・PHPの初心者で大変恐縮ではございますが、 ご質問させていただきます。 この度、固定ページに検索結果を表示し、その検索結果を件数指定し、 ページングを行いたいと考えています。 既にWordPress外では、実装でき正常動作を確認しているのですが、 WordPressの固定ページに組み込むと、2ページ目のリンク設定が 上手く行えておらず、誤動作してしまう状態です。 コードは同一ファイルに 【PHP】 if ($_POST["page"] !== "all") { //取り出す最大レコード数 $lim = $_POST["page"]; //最初と最後のページ番号を定義 $first = 1; $last = ceil ($num / $lim); //表示するページ位置を取得 $p = intval ($temp_p); if ($p < $first) { $p = $first; } elseif ($p > $last) { $p = $last; } //表示するレコード位置を取得 $st = ($p - 1) * $lim; //前後のページ移動数と表示数 //$page = 10 現在のページの前後10ページへのリンク番号を表示 //$page = 10 現在のページの前後10ページ目に移動 $page = 3; //前後$pageページ移動した際のページ番号を取得 $prev = $p - $page; $next = $p + $page; //前後1ページ移動した際のページ番号を取得 $prev01 = $p - 1; $next01 = $p + 1; //$stから$lim件のデータを取得し、並べ替える $sql .= " ORDER BY hoge LIMIT " . $st . "," . $lim . ";"; //ページ移動リンクの組み立て //1ページ前のページ if ($p > 1) { $pagePrev = "<a href=\"$_SERVER[PHP_SELF]?p=$prev01\"><</a> "; } //各ページ番号への移動リンクを表示 for ($cnt = $p - $page; $cnt <= $last; $cnt++) { if ($cnt < 1) { $cnt = 1; } $pageNo = "<a href=\"$_SERVER[PHP_SELF]?p=$cnt\">$cnt</a> "; //表示番号を指定数に区切る //ページ番号と現在のページが同一の場合は //リンク無しにする if ($cnt <= $p + $page) { if ($cnt == $p) { $pageNo = $p; } } } //1ページ後のページ if (($next01 - 1) * $lim < $reccnt) { $pageNext = "<a href=\"$_SERVER[PHP_SELF]?p=$next01\">></a> "; } //最初のページへ移動 if ($p > 1) { $pageFirst = "<a href=\"$_SERVER[PHP_SELF]?p=$first\">最初</a> "; } //前の$pageページへ移動 if ($p > $page) { echo "<a href=\"$_SERVER[PHP_SELF]?p=$prev\"><<</a> "; } //次の$pageページへ移動 if (($next - 1) * $lim < $reccnt) { echo "<a href=\"$_SERVER[PHP_SELF]?p=$next\">>></a> "; } //最後のページへ移動 if ($p < $last) { $pageLast = "<a href=\"$_SERVER[PHP_SELF]?p=$last\">最後</a> "; } } 【html】 <?php echo $pageFirst; echo $pagePrev; echo $pageNo; echo $pageNext; echo $pageLast; ?> としており、a href=\"$_SERVER[PHP_SELF]?p=$hoge が上手く行えて いないからだと自分では考えているので、hrefにこのファイルの指定や 私が思い当たる方法では試してみたのですが、やはり解決することはできませんでした。 説明が不十分で大変失礼かと思いますが、どういった原因が考えられるでしょうか? リンク以外の観点からも、アドバイスをいただければと考えております。 お力を貸していただければ大変嬉しく思います。よろしくお願いいたします。
- ベストアンサー
- PHP
- ページ番号別にLIMIT定義を変えるには。たすけて
<?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">< PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT ></a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> 例えばページIDが1ならばLIMIT 0,10 ページIDが2ならばLIMIT10,10とするにはどうしたら良いのでしょうか?? 我流で select * from lab where LIMIT $pid*10,10としましたが、エラーになってしまいます。
- ベストアンサー
- PHP
- ページ切り替え機能について
現在ページの切り替えで<最初|1|2|3|4|5|6|7|8|9|10|最後>という風に作っています。例えば32ページ目が終わりなのに33ページ目以降も表示されてしまいます。PHP4で次のように書いています。 どうすれば良いでしょうか? <? $j=floor($count/10);//ページ数(10項目づつ表示) print "<"; ?> <a href="./a.php?start_num=0>最初|</a> <? for($i=$start_num ;$i<=$start_num+9; $i++){ if($start_num<$j){ ?> <a href="./a.php?start_num=<?=$i ?>"><?=$i+1 ?>|</a> <? } } ?> <a href="./a.php?start_num=<?=$j ?>">最後</a> <? print ">"; ?> 宜しくお願い致します。
- ベストアンサー
- PHP