• ベストアンサー
  • すぐに回答を!

ワードプレス固定ページのページングについて

初めまして。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にこのファイルの指定や 私が思い当たる方法では試してみたのですが、やはり解決することはできませんでした。 説明が不十分で大変失礼かと思いますが、どういった原因が考えられるでしょうか? リンク以外の観点からも、アドバイスをいただければと考えております。 お力を貸していただければ大変嬉しく思います。よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数1237
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.3

>>2 聞く限り余裕でWordpressの範疇だと思います WP_queryとかいじくらないでもいいんじゃないかと思えるぐらいです まず商品情報を登録するなら固定ページではなく通常の投稿 もしくは通常の投稿はすでにつかっているなら カスタム投稿を作ってそこに入れるようにしましょう (カスタム投稿の登録については言い出すと 話がややこしくなりそうなのでここでは割愛します) 固定ページはそういう用途に想定されてません テーマファイルの search.phpが検索結果一覧ページ single.phpが個別ページになります 要はsearch.phpとsingle.phpの ループの内容を変えてやればいいのです http://wpdocs.sourceforge.jp/テンプレート階層 wordpressテーマ作り初心者はまずこのページから search.phpでのページングは『wp-pagenavi』というプラグインで簡単に実現します あと『CustomFieldTemplate』というプラグインを探して入れてみてください このプラグインとdo_shortcode()やpost_custom()使うだけで 商品検索CMSには必要充分な機能を実現する道具が揃うはずです

共感・感謝の気持ちを伝えよう!

質問者からのお礼

度重なるご回答誠にありがとうございます。 WordPressのマニュアルもろくに見ず、 手探りで行った結果だと反省しております。 H240S18B73様のおっしゃることが大分理解できました。 確かにこれなら実装可能ですし、なによりWordPressの 機能を今よりも利用することができるので、より良い サイトが制作できそうです。 是非これからチャレンジしてみたいと思います。 この度は、お力添えいただきましてありがとうございました。

関連するQ&A

  • phpphp,mysqlページングについて

    1つのphpファイルで作成を考えています。検索後(if($subsub){}を消せば)でなければページング機能は、可能です。1ページ目は、正常に表示しますが、2ページ目以降表示できません。データ保持ができません。同じ類の質問は、たくさん出てると思いますが・・・初心者ということもあり、ロジックがまだわかっていないのでできれば記述で教えていただければ幸いです。よろしくお願いします。 検索項目は、1項目で省略していますが、本来4~5項目で考えています。 <?php // データベースに接続する 省略 $test = $_POST[test]; echo' <form method="POST" action="".$_SERVER["PHP_SELF"].""> <tr> <input type="text" name="test"> <td><input type="submit" value="検索" name="subsub"></td> </form> '; //検索ボタンを押したら表示 if((isset($_POST['subsub']))or(isset($_GET['p'] ))){ //ページング処理 //総レコード数を取得する //条件がある場合は、where 条件式を書く $sql = "SELECT COUNT(*) AS reccnt FROM faq;"; $res = mysql_query($sql, $conn) or die ("データ抽出エラー"); $row = mysql_fetch_array($res, MYSQL_ASSOC); $reccnt = $row["reccnt"]; //取り出す最大レコード数 $lim = 3; //最初と最後のページ番号を定義 $first = 1; $last = ceil($reccnt / $lim); //表示するページ位置を取得 $p = intval($_GET['p']); if ($p < $first) { $p = $first; } elseif ($p > $last) { $p = $last; } //表示するレコード位置を取得 $st = ($p - 1) * $lim; //前後のページ移動数と表示数 $page = 3; //前後$pageページ移動した際のページ番号を取得 $prev = $p - $page; $next = $p + $page; //前後1ページ移動した際のページ番号を取得 $prev1 = $p - 1; $next1 = $p + 1; //SELECTコマンドを実行して、$stレコード目から$lim件の各データを取得し、大きい順に並べる $sql = "SELECT test FROM testtest WHERE test like '$test' ORDER BY id DESC LIMIT $st, $lim;"; $res = mysql_query($sql, $conn) or die ("データ抽出エラー"); echo' <table border="1"> <tr> <td>ID</td> <td>テスト</td> </tr> '; //取得したデータを一件ずつ表示 while($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo' <tr> <td>'.$row["id"].'</td> <td>'.$row["test"].'</td> </tr> '; } echo '</table>'; //ページ移動リンクの組み立て //1ページ前のページ if ($p > 1) { echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$prev1\"><</a></font>&nbsp"; } //各ページ番号への移動リンクを表示 for ($cnt = $p - $page; $cnt <= $last; $cnt++) { if ($cnt < 1) { $cnt = 1; } $pageno = "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$cnt\">$cnt</a></font>&nbsp"; //表示番号を指定数に区切る //ページ番号と現在のページが同一の場合は //リンク無しにする if ($cnt <= $p + $page) { if ($cnt == $p) { $pageno = "<font size=\"1\">$p</font>&nbsp"; } echo $pageno; } } //1ページ後のページ if (($next1 - 1) * $lim < $reccnt) { echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$next1\">></a></font>&nbsp"; } echo "<br>\n"; //最初のページへ移動 if ($p > 1) { echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$first\">最初</a></font>&nbsp"; } //前の$pageページへ移動 if ($p > $page) { // << を $page"."ページ戻る にする事もできる echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$prev\"><<</a></font>&nbsp"; } //次の$pageページへ移動 if (($next - 1) * $lim < $reccnt) { // >> を $page"."ページ進む にする事もできる echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$next\">>></a></font>&nbsp"; } //最後のページへ移動 if ($p < $last) { echo "<font size=\"1\"><a href=\"$_SERVER[PHP_SELF]?p=$last\">最後</a></font>&nbsp"; } } ?>

    • ベストアンサー
    • PHP
  • php_selfで複数の変数をパラメタとしたいとき

    php4.3.5にてdbデータをページ分けして表示する簡単なプログラムで、次ページへのリンクにページ番号をパラメタとして持たせていますが、もう1つの変数をパラメタに追加したいのですが私の追加方法では変数値が帰って来ません。 ~dbリード~dbデータの表示~ // 前のページ/次のページへのリンク if ($p > 1) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\"> 前のページ</a>"; } if (($next - 1) * $lim < $dtcnt) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$next\">←ココに?age=$ageを追加したい。 次のページ</a>"; } 単なる書式の問題なのかも知れませんが、オンラインマニュアル・MLの検索でも分かりませんでした。 ご教授よろしくお願いします。

    • ベストアンサー
    • 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)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($id+5<$maxPage){ $endPage=$id+5; $endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT &gt;</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

その他の回答 (2)

  • 回答No.2

とりあえず『?p=$hoge』はマズイです pはWordpressが投稿IDとして解釈します その他s,cat,tax,tagとかはwordpressが使います qとかもプラグインで使うヤツが結構いるので避けたいです current_pageとか被らない名前にしときましょう あと 固定ページで検索結果をループをさせるってことは WP_query使ってるのですよね? 自力で表示ページ数とか計算・格納して クエリ生成とかしなくても WP_queryにはページ分割の手段が ちゃんと用意されてます (それにページングのリンクでは GETしか渡してないんだから 『$lim = $_POST["page"];』 がちゃんと入るはずないと思うのですが… そのためのエラーであると予想します) http://wpdocs.sourceforge.jp/関数リファレンス/WP_Query Wordpressのテーマ自作するならとりあえずこのページはブクマ必須です それから、質問の趣旨をひっくり返すような提案なのですが 可能なら検索ページ(search.php)に固定ページのコンテンツを表示する方が ページングのプラグインも使えたりとずっと楽だと思いますよ

共感・感謝の気持ちを伝えよう!

質問者からの補足

度々ご回答いただきましてありがとうございます。 ご親切なご対応に大変感謝しております。 H240S18B73様のおっしゃるとおりGETの値を見直すことによって、 解決することができました。 初歩的なミスで申し訳ございませんでした。 WordPressもPHPも初心者で分からないことばかりで大変恐縮なのですが、 今回は元々WordPress外で作った検索機能を移設しておりまして、 mySQLもWordPress以外に自作のテーブルを用意し、 「検索」という固定ページに検索フォームを設置し、「検索結果」という 固定ページ1ページにmySQLより無理矢理データ表示しているという状況です。 WordPressであれば、そのような複雑なことをしなくても、実装できるのだと 思うのですが、分からないなりに手探りで行った結果、このような形となってしまいました。 解決後の質問申し訳ございませんが、こういった場合でも、 例えば現在実装されている「検索結果」の情報1件1件を 固定ページ1ページずつに分けて制作し、search.phpなどで、 その固定ページをソートした検索結果として表示することは 可能なのでしょうか? 【固定ページに検索結果の子要素を分割して制作】 ・みかん=100円 固定ページ名「みかん」 ・りんご=120円 固定ページ名「りんご」         ↓ 【固定ページに検索結果を一括して表示】 固定ページ名「検索結果」 ・みかん=100円 ・りんご=120円         ↓ 【検索結果に表示されたリンクをクリックし投稿ページに移動】 みかんについての詳細説明 このような流れをWordPressで行いたい場合、どのような方法が ございますでしょうか? もし差し支え等、ございませんでしたらアドバイスいただければと思います。 よろしくお願いいたします。

  • 回答No.1

wordpressはhtaccessでURLかなり書き換えるので $pageLast = "<a href=\"$_SERVER[PHP_SELF]?p=$last\">最後</a> "; じゃなく $pageLast = sprintf('<a href="%s?p=%s\">最後</a> ',home_url(/固定ページ名),$last); とかにすれば動くと思います wordpressは内部処理でなんやとやってるのでいろいろ自分で頑張るより 大人しくWPの関数使っといた方がコンフリクトもしないし無難なカンジです

共感・感謝の気持ちを伝えよう!

質問者からの補足

早急なご回答ありがとうございます。 早速試させていただいたところ、ソースを確認すると <a href="http://www.hogehoge.com/固定ページ?p=2\"> とすることができたので、接続自体は正常に行えたようです。 大変ありがとうございました。 しかしページを移動してみるとなぜか、シンタックスエラー You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-0,' at line 1 が表示され、上手く表示することができない状態です。 単純なコード記載ミスなのか予約語関係なのか、両方を調べていますが、 解明することができません。 お手間お掛けして申し訳ございませんが、再度お力を貸していただけれと思いますので よろしくお願いいたします。

関連するQ&A

  • ページング。困っています。

    分かる方はいませんか?? <?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)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($id+5<$maxPage){ $endPage=$id+5; $endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT &gt;</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 $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)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</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
  • ページングでの値の引き継ぎ方

    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)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</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 &gt;</a>"; この部分でリンクをクリックした場合、POSTした値が消えてしまっています。どうしたら引き継げますか??

    • 締切済み
    • PHP
  • 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.'">&laquo; 前へ</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.'">次へ &raquo;</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/

    • 締切済み
    • 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)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</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
  • パラメータを2個つけたい

    ある住所録があり、インデックスをつけてページング処理もさせたいと思っています。 具体的には、「あ」を押すとあ行の人のデータが1~10件表示され、 「next」を押すと、「あ」行の11~20件を表示するイメージになります。 以下のPHPを作成しましたがうまく動作しません。 どうしたらよろしいでしょうか。 ご教授ください。宜しくお願い致します。 ********************************** エラーメッセージ ********************************** Notice: Undefined variable: dtcnt in C:\Program Files\Apache…テスト.php on line 359 359行目が「back」を表示するコードになります↓。 if ($p > 1) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\"> back</a>"; } ****************************** 作成したPHP 環境:PGSQL8.24 PHP5 Apache2.2 ****************************** <a href="テスト.php?x=a">あ</a> <a href="テスト.php?x=ka">か</a> … <a href="テスト.php?x=wa">わ</a> <table> <tr> <th>NO</th> <th>氏名</th> <th>住所</th> </tr> <?php // データベースに接続する $conn = pg_connect("host=サーバ dbname=データベース user=ユーザ password=パスワード") or die("接続エラー"); // 取り出す最大レコード数 $lim = 10; // 表示するページ位置を取得する $p = intval(@$_GET["p"]); if ($p < 1) { $p = 1; } // 表示するデータの位置を取得する $st = ($p - 1) * $lim; // 前のページ/次のページのページ番号を取得する $prev = $p - 1; if ($prev < 1) { $prev = 1; } $next = $p + 1; // データを取り出す if ($_GET['x']=='a') { // あ行 $sql = "select no, name, address from テーブル WHERE (name LIKE N'あ%' OR name LIKE N'い%' OR name LIKE N'う%' OR name LIKE N'え%' OR name LIKE N'お%') ORDER BY name LIMIT $lim OFFSET $st;"; } …(か行~ら行) if ($_GET['x']=='wa') { // わ行 $sql = "select no, name, address from テーブル WHERE (name LIKE N'わ%' OR name LIKE N'を%' OR name LIKE N'ん%') ORDER BY name LIMIT $lim OFFSET $st;"; } // 取り出したデータを表示する for ($i = 0; $i < pg_num_rows($res); $i++) { $row = pg_fetch_array($res, $i, PGSQL_ASSOC); echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".cnv_enc($row["name"], $enc_disp, $enc_db)."</td>"; echo "<td>".$row["address"]."</td>"; echo "</tr>"; } echo "</table>"; // 前のページ/次のページへのリンク if ($p > 1) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\"> back</a>"; } if (($next - 1) * $lim < $dtcnt) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$next\"> next</a>"; } // 接続を解除する pg_close($conn); ?> </table> </body> </html>

    • ベストアンサー
    • 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)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</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
  • ページングのページ情報が更新されない

    PHPとMySQLを用いてページング処理をさせたいと思いましたが、うまくいきませんでした。 1ページあたり10件表示させるというプログラムです。 具体的に問題点を挙げると、ページ情報が更新されません。 はじめにページ情報の有無を判定して、ない場合、初期値として1を入れてその後の処理につなげると思うのですが、「次へ」をクリックしても同じページになります。 ためしに、初期値を2にしてみると、2ページ目が表示されるので、表示の部分は間違っていないと思うのですが・・・ うまくページ情報が受け渡されていないのが原因だと思うのですが・・・ プログラムの一部です。 データベースからデータ件数を出し、ページの初期値を設定 $pagesize = 10; if(!isset($page)){ $sql = <<<EOS (省略) EOS; $result = $conn->query($sql); if (DB::isError($result)) { die ($result->getMessage()); } $count = $result->numRows(); $page = 1; } 次に、リンク部分です。 if($totalpage > 1 and $page < $totalpage){ ?> <?php print "<a href = '$PHP_SELF?page=" .($page+1). "&count=$count'>"."次の$pagesize 件&gt;</a>&nbsp;&nbsp;&nbsp;";?> <?php print "<a href = '$PHP_SELF?page=$totalpage&count=$count'>最後へ&gt;&gt;</a>";?> 原因が分かる方がいらっしゃいましたらよろしくお願いします。

    • ベストアンサー
    • PHP
  • ページング機能はできたのですが、よりコード内容を理解しようと思っており

    ページング機能はできたのですが、よりコード内容を理解しようと思っており、疑問があります。 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
  • ページ番号別に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)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</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

専門家に質問してみよう