• 締切済み

MySQLとPHPで一覧表示させページ分割するには

PHP初心者です。 フォトライブラリを作っているのですが、MySQLからのデータを指定件数表示させることは出来るようになりました。 しかしその後の「次のページ」リンクを作り、クリックされた際に次ページで次の一覧を表示させる方法(ページ生成)がわかりません。 静的ページにしたいので、mod_rewriteを使うとの事がわかったのですが、それを具体的に使う方法がわかりませんでした。 サーバへどのような要求があった際にどのようなページを表示させる、等が出来るようなのですが、実際の静的ページ生成の方法・ソースが発見出来ませんでした。 わかりやすいサイトがございましたら教えてくださいませ。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

noname#138894
noname#138894
回答No.1

まずはSQLとPHPだけのお話しを。 mod_rewriteについてはこれが理解出来ていないと完全に無理なので、 通常のURLで出来るようになってから考えて下さい。 まず、こんなかんじのSQL(limit句)を使うと指定した位置のデータを取得出来ます 51件目のデータから10件データを取得する場合 select * from table limit 50,10 参考 http://www.dbonline.jp/mysql/select/index12.html 一回に表示できるデータ量は10件固定とすると、50の部分を変えれば取得したいページが変わることになります。 2ページを取得したいならこんな感じ。 ・url http://hoge.com/index.php_offset=10; ・PHP $offset = mysql_real_escape_string($_GET['offset']); $query = 'select * from table limit ' .$offset . ',10 ' ; とりあえずここまでで、 URLに直接offsetを指定すればページ指定が出来るようになったので、 あとは ・現在のページURLを変数に入れる ・次のページURLを現在のoffsetから生成する(+10する) ・1つ前のページURLを現在のoffsetから生成する(-10する) を実装すれば、前後のページ移動できるようになります。 複数ページ移動や、次のページが存在しない場合はリンクを表示しないなど 考えることは色々ありますが、一つづつクリアしていくのがいいかと思いますよ。 *ページャーを扱うライブラリも存在しますが、まずはどうすれば動くかを理解していないとライブラリの利用も難しいです。

関連するQ&A

  • PHPでのページ分割について

    PHPを勉強中の初心者なのですが、現在PHPとMySQLを用いて、練習用に簡単な掲示板を作っています。 トップ画面には投稿されたもののタイトルが一覧で表示されているのですが、内容が多くなってきたときのために、10件づつ一覧を分割して表示したいと考えております。 ただ、自分で調べてみてもなかなか難しく、今回質問させて頂きました。 ページのリンクの理想としましては、 |先頭のページへ|前のページへ|1|2|3|…|次のページへ|最後のページへ| の様にしたいです。 あつかましいですが、できるだけ詳細に教えて頂ければ幸いです。 どなたか助けてください>< よろしくお願いします。

    • 締切済み
    • PHP
  • PHP+MySQLでポータルサイトを作る

    PHP+MySQLでポータルサイトを作りたいと思っています。 ほっとぺっぱーのように http://beauty.hotpepper.jp/B_30400/svcSA_macAZ.html オススメから探すという項目で ・カットがオススメ ・カラーがオススメ などなど 条件別に検索できるようにしたいのですが、 これはお店データのデータベースで条件をtrueかfalseかなんかで設定しておいて trueならば生成という感じなのでしょうか? (無知ですいません、条件がいっぱいあれば全店計算していくのに重くならないでしょうか?) データベースでお店を増やして、条件が合えば勝手に一覧ページに追加されていく というようにしたいのです。 そして、一覧に表示されているページの件数表示 10件を超えれば2ページ目といった感じにしたいのですが こういう作りはPHP+MySQLでできるのでしょうか? そして URLは作ったものではなくパラメータになるのでしょうか? お願いします。

    • ベストアンサー
    • PHP
  • ページング機能の実装について@PHP+MySQL

    ページング機能の実装について 【PHP+MySQL】 表示させる要素が多いものでは数万件あり、 たとえば1ページあたりの表示を10件とすると数千ページになります。 実現したい機能は ------------------------------------------------- ◆10ページ以内に収まる件数なら全ページをリンク表示。 [ 1 2 3 4 5 6 7 8 9 10 ] ◆上記以外の場合では↓これと同じくする。 http://tutorials.ajaxmasters.com/pagination-demo/ ◆上記paginationで [...] に当たるページが100ページ以上ある 場合は中間のページをリンク表示。 [ 1 2 ... 135 ... 271 272 273 274 275 ... 612 ... 1499 1500 ] ------------------------------------------------- を考えています。 質問ですが、 1.このようなものを容易に実装できるようなライブラリ等を ご存知の方いらっしゃいましたらご教示ください。 2.上に書いた jquery の pagination は、まだ試してないのですが、 これは数万件のレコードをクライアント側で抱え込んで クライアント側のスクリプトでページングするものでしょうか? もしそうであると件数と容量が大きいので都合悪いかなと思いまして。 総ページ数(或いは総件数)と 1ページあたりの表示件数と クリックされた要求ページを postで持ってページをクリックする度にsqlで最低限の情報を引き出し表示しようと考えています。 上の質問についてと、もしくはもっと効率的な方法があるという方いらっしゃいましたらご教授願います。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPとMysqlのページ分割表示について

    以前こちらで質問させて頂きまして htmlの検索フォームから入力した情報をデータベースから引っ張ってきて 表示するまでは出来たのですが、表示制限を10個にして、次のページ、前のページと移動させるようなシステムにしたいのですが、うまくいきません(エラーが出てしまいます) どうか、お力をお貸し願えないでしょうか。 search.html <html> <head><title>検索</title></head> <body> <form action="/search/"method="post"> /*page_numを入れた*/ <input type="hidden" name="page_num" value="0"> <li>会社名</li> <li><input type="text"name="name"></li> <li>電話番号</li> <input type="text"name="phone" maxlength="11"> <input type="submit" name="submit" value="検索"> </body> </html> index.php(データベースから情報を引っ張り出す) <?php $host="localhost"; if(!$conn=mysql_connect($host,"usr","passwd")){ die("データベース認証エラー.<br />"); } mysql_select_db("usr",$conn); $condition=""; if(isset($_POST["name"])&&($_POST["name"]!="")){ $name=mysql_real_escape_string($_POST["name"]); $name=str_replace("%","\%",$name); $condition="WHERE name LIKE \"%".$name."%\""; } if(isset($_POST["phone"])&&($_POST['phone']!="")){ $phone=mysql_real_escape_string($_POST["phone"]); $phone=str_replace("%","\%",$phone); if($condition==""){ $condition="WHERE phone LIKE \"%".$phone."%\""; }else{ $condition.="AND phone LIKE \"%".$phone."%\""; } } $tmp=$page_num*10; $sql="SELECT * FROM table".$condition."ORDER BY id limit".$tmp.",10"; while($row=mysql_fetch_array($res)){ print("<table border=\"1\">"); print("<tr><td>会社名</td><td>電話番号</td></tr>"); print("<tr>"); print("<td>".$row['name']."</td>"); print("<td>".$row['phone']."</td>"); print("</tr>"); print("</table>"); } $cnt=$row[0]; //ページ表示 if(!$cnt>10){ echo ceil($cnt/10), "ページの中の",$page_num+1,"ページ目を表示<br>"; } //前の10件 if ($page_num!=0){ echo "<a href=index.php?name=",$name,".$page_num -1.">"; echo "&lt</a>; echo "前の10件"; } //次の10件 if (($page_num+1)*10<$cnt){ echo "<a href=index.php?name=",$name,".$page_num +1.">"; echo "次の10件"; echo "&g</a>t"; } mysql_free_result($res); //データベースから切断 mysql_close($conn); ?> ちなみにエラーが出ている行はここの //前の10件 if ($page_num!=0){ echo "<a href=index.php?name=",$name,".$page_num -1.">"; echo "&lt</a>; echo "前の10件"; } >>echo "&lt</a>; この部分がエラーになっています。

    • ベストアンサー
    • PHP
  • PHP+MySQLからHTMLページを自動生成?

    初めまして、質問させていただきます。 フォーム(PHP)から送信されたデータ(コメントや写真等)を データベースへ(MySQL)と格納し、 その内容を新規HTMLページを自動生成させ表示させることは可能でしょうか? 既存するPHPで動的に内容を表示させることは簡単に出来るのですが、 そうではなくて、ユーザーから投稿された内容を、 自動的に新規ページを作成して表示させるようにしたいと思っています。 分かりやすく言えば、投稿されたデータをテンプレートに当てはめ、 新規ページを生成するまでをサーバー上で自動的に行いたいのです。 できればPHPとMySQLでこれらを行えればと考えているのですが、 無理ならば他のものでもかまいません。 ちなみに、PHPとMySQLはまだまだ初心者です。 DreamWeaverの機能で動作させ、少しいじれる程度です。 どうかアドバイスをお願いいたします。

    • ベストアンサー
    • PHP
  • mysql>PHPにデータ表示、10件ごとにページ分割

    はじめまして、PHP勉強中の初心者です。。 MYSQLから取り出したデータを件数でページ分割したいのですが、 うまくきません。。 環境:eclipse3.5、mysql5.0、php5.0、xampp (phpで、sql接続、select * from でデータは表示は確認できてます)。。 ソースは↓です。。(初心者なもので不備がればすみません)。。 eclipse上では if (($page_num+1)*10<$cnt) {}でエラーで表示されます。。 どなたかご存知の方いましたら、教えていただけないでしょうか? <!--kensaku.html--> <html> <body> <form action ="kensaku.php" method="post">    名前:<input type="text" name="nm">    年齢:<input type="hidden" name="page_num" value="0">    <input type="submit" name="exec" value="検索"> </form> </body> </html> //kensaku.php ソース <html> <body> <? $nm=$_POST['nm']; $page_num=$_POST['page_num']; //データベースに接続 if (!$conn =mysql_connect("","user","PASS")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("table", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select id,name from table " ; $sql.= "where name like '%$nm% ' order by id " ; $sql.="limit" . $page_num * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr><td>id</td><td>name</td></tr>" ; while($row = mysql_fetch_array($res)){ echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "</tr>" ; } echo "</table>" ; //検索条件に該当する全データの件数取得 $sql = "select count(*) from member " ; $sql.="where name like '% $nm % ' order by id " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page_num + 1, "ページ目を表示<br>"; //前の10件 if ($page_num !=0) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num -1..">"; echo "&lt 前の10件"; } //次の10件.--ここからエラー行ですが、、解決策がわかりません。。 if (($page_num+1)*10<$cnt) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num +1..">"; echo " 次の10件 &g</a>t"; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </body> </html> すみませんが、ご存知の方いましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpとmysqlでデータの一覧表示をしたいと思っています。

    phpとmysqlでデータの一覧表示をしたいと思っています。 ずらーっと並べるだけでなく、1ページに100件した場合には 10行毎に<hr>や<br>などのタグを挿入して間隔を空けたいのですが どのようにしたらいいのか悩んでいます。 現在は下記のようにLIMITで何度もqueryを発行しています。 できれば1回のqueryで処理したいのですが 他にどのような方法があるでしょうか。 $rs = mysql_query("select * from data order by id desc LIMIT 0,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } $rs = mysql_query("select * from data order by id desc LIMIT 10,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } $rs = mysql_query("select * from data order by id desc LIMIT 20,10 ;",$conn); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $site = $rec['site']; $url = $rec['url']; echo '<a href="'.$url.'">'.$site.'</a>'; } よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • mod_auth_mysqlについて

    mod_auth_mysql を導入したいのですがどうもうまく行きません。 参考ページ内に記載されている手順で行いました。 しかし、httpd.confの #LoadModule auth_mysql_module libexec/mod_auth_mysql.so を LoadModule auth_mysql_module libexec/mod_auth_mysql.so に変更して apachectl configtestを実行すると Syntax error on line 213 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/libexec/mod_auth_mysql.so into server: /usr/local/apache/libex ec/mod_auth_mysql.so: undefined symbol: mysql_connect というエラーが出力されます。 libexec/mod_auth_mysql.soも存在していますし、 mod_auth_mysqlをコンパイルする際も mysql.hなどのライブラリも存在しています。 mysql-4.1.15 apache 1.3.34 mod_auth_mysql-3.2 Redhat 8.0 どこでひっかかっているのでしょうか。 参考ページ:http://www.y-min.or.jp/~nob/Linux/apache-mysql.html

  • 「○件リスト表示&次のページへ」と表示させたいのですが・・・

    Web上でPOP3に接続して新着メールを確認するプログラムを作成しています。 受信したメールの一覧を表示させるのではなく、1ページに表示する件数を指定して、件数が多い場合は次のページへといったように表示させたいのですが、プログラムの作成方法がわかりません。 OSはwindowsXP PHP5を利用しています。 どなかたご教授くだされば幸いです。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQLのLimit句によるページ分割について

    MySQL初級です。 PHP+MySQLで、検索ページを作成しています。 SELECT部を簡略して書くと・・ (ページ番号$get_pageNoをGETで渡して、10件ずつ検索結果を表示したい。) $sql = "SELECT Id FROM houjin WHERE (word LIKE '%${ワード}%')"; $sqlLimit .= "ORDER BY Id ASC limit " . ($get_pageNo*10) . ", 10"; 表示まではできていて、前へ、次へ、のリンクで、10件ずつ抽出できるところまでは、 できました。 さらに、抽出されたレコードに、チェックボックスをつけて、 ユーザーに選択させて、処理(削除など)を行いたいわけです。 表示されたあるレコードにチェックをつけて、 次のページのレコードにもチェックをつけて、 一括処理(削除など)ができる方法を探しています。 ページ番号をGETで渡してリロードさせているので、 チェックされたレコード番号もGETで渡す、しか方法はないでしょうか? Limitにこだわってはいません。 よい方法、アイデアがあれば教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう