- ベストアンサー
DBを使用しないで「○件リスト表示&次のページへ」のやり方が・・・
初めまして。初心者です。 MySQLを使用した指定件数リスト表示のやり方はあったのですが、fopen等を使ってCSVやDATファイルでも同様のことが出来るのでしょうか? どなかたご教授くだされば幸いです。 宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 よく見たらあたりまえでした。 私のソースが間違っております。 print "<a href=\"?page=".($page++)."\">次のページへ</a>\n"; ですね。 あと、 $page=$_GET['page']; if ( $page == "" ) { $page = 0; } 取得したpageに何も入っていなかったら0にする必要があるかもしれません。
その他の回答 (5)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんばんは。 動かないというと、何かエラーが表示されていますか? または、単に表示されていないのでしょうか。 チェック方法はいろいろあるでしょうが、 たとえば、page=-1は無いでしょうし、 page=最大ページ数より上の表示も出来ないはずです。 最大ページ数=取得したレコード数/1ページの最大表示数 2つの範囲外の場合は存在しないページになるので リンクの表示は行わず、 範囲に相当する場合はリンクを表示します。
お礼
度々ご回答ありがとうございます。 40行くらいのデータがありますが、 10件表示で2ページ目(11~20)から表示ができません。 「次のページ」を押しても「?=」の後にページ番号 が付いてこないのです。 http://xxx/test/index.php?= となってしまい、表示結果も1ページ目のままです。 直接URLに「?page=2」等と入力すると 正常に2ページ目が表示されました。 何度もお手間を取らせてしまいすみません。 よろしくお願いします。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんばんは。 まずあちらで説明しているpageとは現在表示している ページが何ページであるかをあらわす変数です。 たとえば質問を参照する際に、URLの最後にq=xxxxx というものがあると思います。 xxx.php?q=xxxxxとすることにより、各質問を取得しています。 それと同じ方法でxxx.php?page=1とすると1ページ目 page=2とすると2ページ目を取得するようになります。 取得するようになると言っても、受けるPHPでその値を 取得してあげなければいけません。 $page = $_GET['page']; とすることで$pageにpage=xの値が入ってきます。 ================================================ <?php // 1ページに表示する最大数 $max = 10; // 現在のページ数を取得 $page = $_GET['page']; // ファイルを配列に格納 $rec = file("sample.csv"); // 現在のページに該当するインデックスから // そのページの範囲までを出力 for ( $i = $page*$max; $i < $page*$max+$max; $i ++ ) { print $rec[$i]; } print "<a href=\"?=".($page++)."\">次のページ</a>\n"; ?> ============================================= forの部分でpageの値を使用して動的に表示する 配列の範囲を変えています。 最後のprint文で次のページへのリンクを出力しています。 現在のページ+1で次のページへの遷移を行っています。 但し、上の処理では次のページがあるか、前のページの表示処理は行っていません。 前のページでしたら現在のページ-1になります。 次のページがあるか、前のページがあるかをチェックし、リンクの表示を行います。 (チェックしないとエラーにもなります)
お礼
丁寧なご回答本当にありがとうございます。 ソースをコピペして、1ページ目の10件分の 取得は出来たのですが、「次のページ」のリンクが 正しく動いてくれません。 > 次のページがあるか、前のページがあるかを > チェックし、リンクの表示を行います。 とありますが、if文でチェックを行うところまでは 分かるのですが、その先が… 度々恐縮ですが、宜しくお願いいたします。
- kusukusu
- ベストアンサー率38% (141/363)
$fileopen=file("sample.csv"); とすれば、sample.csvの内容を配列$fileopenに取り込めます。 そうすれば、行数はsizeof($fileopen)で取得出来ます。
お礼
ご回答ありがとうございます。 しかし、sizeof()で取得した値を どうのように1ページ分(例えば10件)として 区切り、次ページへと繋げていけばよいのでしょうか…? 良く見かけるのが、xxxxx.php?page=2 などですが、この「?」は何々でしょうか…? 初心者で恐縮ですが、お時間ありましたら またご回答をお願いいたします。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんばんは。 http://okweb.jp/kotaeru.php3?q=1173009 を参照してみて下さい。 MySQLの場合は多分SQLのlimitを使用して検索を 絞ってるものを見かけたのと思います。 上のアドレスの回答はJavaの構文になってますが PHPになっても処理の概要は同じになります。 ファイルの1レコードを配列に入れて 指定されたインデックスを読み出せば、 いいと思います。
お礼
スミマセン。 レスの仕方を間違っておりました。。 「回答に対する補足」に自分でレスしてました。
補足
早速のご回答、ありがとうございます。 上記URL拝見させていただきました。 > page(現在のページ数)をgetなりpostで取得する このやり方が分からないのですが、 pageという関数があるのでしょうか? それとも変数で作るものなのでしょうか? 現在、下記の構文を作るのが精一杯のレベルです・・・ <?php $fp = fopen ("sample.csv", "r"); while (!feof($fp)) { $line = fgets($fp); $lines = explode(",",$line); print $lines[0]. "<br>\n"; } fclose($fp); ?> 事前に勉強しなければならないような項目が あれば、そちらもお教えいただけると助かります。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
MySQLの検索結果を配列に読み込んだりして、指定した場所の件数を表示しているなら ファイルの一行を配列に読み込めば同じやり方でできますよね
お礼
スミマセン。 レスの仕方を間違っておりました。。 「回答に対する補足」に自分でレスしてました。
補足
早速のご回答ありがとうございます。 すみません、言葉が足りませんでした。 MySQLでの表示方法が「この掲示板に載っていた」、ということで、当方MySQLの関数が全く読めません・・・ ですので、DBを使用しないで同様の処理が出来るかお聞きしたかったのです。 お手数ですがお時間ありましたら、 またご回答をお願いいたします。
お礼
出来ました! ありがとうございます!! print "<a href=?"?page=".($page++)."?">次のページへ</a>?n; ですが、ここを($page+1)としたら出来ました。 あとは教えていただいたとおり、 ページ数が存在する範囲内で「次のページへ」「前のページへ」を 表示すれば良いのですよね? 夜分までお付き合いいただき、ありがとうございました。 また色々と質問を書き込むかもしれませんが、 そのときはどうぞ宜しくお願いいたします。