• 締切済み

PHPでログをページで区切って表示するようにするには?

いろんなHPを見ながら掲示板を自作しているのですが 後は、PHPでログをページで区切って表示するようにする方法がどうしても わからないのです たとえば1Pの表示件数が10件超えたらそこまでの記事は前のページに飛べば見れる ような形にしたいのです どなたかご伝授お願いします・・・

  • PHP
  • 回答数7
  • ありがとう数7

みんなの回答

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.7

 何度も申しますが、ログの保存の仕方や順番などnoel11さんがどのように作られたのかが分からないので、そのままコピペで一発でできるのは無理があります。  また、それを望むのは「丸投げ」になってしまいます。  そしてこのパートなど、自分で作り方のを覚えて行かないと自作というところではあまり意味がないように感じます。  順番に一つ一つ解決してゆきませんか。  以下のを置き換えてアクセスしてみると最初の1つの発言が表示されましたか?  またどのように表示されましたでしょうか。罫線で囲まれた箇所を見せていただけますか。 $script = $_SERVER["PHP_SELF"]; // このプログラム自身 $page_no = '5'; # 1ページに表示する発言数 $log = file("upbbs.cgi"); #←ログファイルのデーター $log_no = count($log); # 総発言数 $file_gyaku = Array_Reverse($log); # htmlの表示部分 ----------- if( !empty($now_page) ) $first_pag = '1'; else $first_pag = ( ($now_page -1) * $page_no) +1; $last_pag = $first_pag + $page_no; foreach( $log as $key => $value){ $key++; if($key >= $first_pag && $key < $last_pag ){ print "<hr>\n"; print $value; print "<hr>\n"; break; } }

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.6

追記です。 >>ここら辺の$value;が関係しているのかなと >>ここら辺もう少し詳しく教えてもらえますか?  おかしいと思ったその変数を、  print/echo, var_dump() などで表示させて実際に見てみるのが良いと思いますよ。そうすると次にどうしたら良いのかが分かります。  「過去ログ」の意味が分かりませんでが、表示したいログではない前後も表示されてしまうことでしょうか?  であるのなら、first_pagと$first_pagが上手く設定されていないのかもしれません。 >>ログの内容がそのまま表示されてたっぽいので print $value;  となっているのでそのまま表示されてしまいますが、これは製作者がlist/explode等で分けてhtmlタグで表示させたりです。

noel11
質問者

お礼

なんとか解決しました~ ありがとうございましたm(_ _)m

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.5

>>ページ区切りリンク表示されてちゃんとログの表示数にあわせた >>リンク数になっているのですが  あ、それは良かったです。 foreach( $log as $key => $value){ $key++; を print "\$first_pag = " . $first_pag . "<br>"; print "\$last_pag = " . $last_pag . "<hr>"; foreach( $log as $key => $value){ $key++; print "\$key = " . $key . "<br>" if($key >= $first_pag && $key < $last_pag ) print $value; として、そのリンクの2を押した時にご希望の表示になりますか。 1ページに表示発言数が5となっていれば、 $first_pag = 6 $last_pag = 11 とかになりませんか。

noel11
質問者

お礼

記事が表示されるのは10で設定されているはずだけど その後のもキーが表示されているから1Pの表示設定がうまくいってないみたいなんです ためしに発言してみたら同じページにキー部分だけが増えていったので どこがおかしいかみていてもわからない・・・

noel11
質問者

補足

2ページ目にいっても表示は1ページのままです・・・ $script = $_SERVER["PHP_SELF"]; // このプログラム自身 $page_no = '5'; # 1ページに表示する発言数 $log = file("upbbs.cgi"); #←ログファイルのデーター $now_page='1'; #← 表示するページ $log_no = count($log); # 総発言数 $file_gyaku = Array_Reverse($log); # htmlの表示部分 ----------- if( !empty($now_page) ) $first_pag = '1'; else $first_pag = ( ($now_page -1) * $page_no) +1; $last_pag = $first_pag + $page_no; print "\$first_pag = " . $first_pag . "<br>"; print "\$last_pag = " . $last_pag . "<hr>"; foreach( $log as $key => $value){ $key++; print "\$key = " . $key . "<br>"; if($key >= $first_pag && $key < $last_pag ) print $value; } # ページ区切りリンク表示部分 ----------- if( ($log_no % $page_no) == '0') $all_coment = ($log_no / $page_no); else $all_coment = ceil($log_no / $page_no); for($ip = 1; $ip <= $all_coment; $ip++){ if($ip == ceil($first_pag / $page_no) ) print $ip; else print "<a href=\"$script?now_page=$ip\">$ip</a> "; } 今こんな感じですがどこが間違っているんだろう(^^;

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.4

本質問とズレますが・・  書かれた $file_gyaku = Array_Reverse($templog); 次の行に、 print "ログ総数 =" . count($file_gyaku). "<br>"; print "1行目 =" . $file_gyaku[0]; exit; とした場合、お望みのが表示されますでしょうか。 されなかったら $file_gyaku = Array_Reverse($templog); の後に $temp = array(); $temp = explode("\n", $file_gyaku); $i = '0'; を追記して list($numberZ,$pass,$name,$time,$url,$comment,$image)=explode($kugiri,$file_gyaku[$i]); を list($numberZ,$pass,$name,$time,$url,$comment,$image)=explode($kugiri,$temp[$i]); で、上手く行くのではないでしょうか。

noel11
質問者

お礼

あ、ちょっとおかしかったですね 過去ログが見れるというのは、過去のページも見れるようにって事です ログを表示するのですが同じデザインでってことです どうも教えてもらった方法だと一度うまくいったけど、ログの内容がそのまま 表示されてたっぽいので 途中で乗せたテーブルをページの書き込み分乗せて過去ページもそのデザインで表示させたいってことです 普通の掲示板にあるものです

noel11
質問者

補足

print "ログ総数 =" . count($file_gyaku). "<br>"; print "1行目 =" . $file_gyaku[0]; exit; では表示されますね~ 記事がどうしても表示されないです・・・、ページ区切りリンク表示されて ちゃんとログの表示数にあわせたリンク数になっているのですが・・・ foreach( $log as $key => $value){ $key++; if($key >= $first_pag && $key < $last_pag ) print $value; ここら辺の$value; が関係しているのかなとここら辺もう少し詳しく教えてもらえますか?

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.3

>>ってエラーがでますね~  前後の展開が分からず部分的なところだけを記したのでエラーが出て当然だと思います。  最初のご質問ではページ区切りの方法ということでしたので、そのアウトラインが掴めれば、あとはnoel11さんのやりやすい方法で行えば宜しいのではないでしょうか。

noel11
質問者

お礼

表示はされるようになりましたがログがそのまま表示されてしまってます>< ログでは改行されていても反映されてない感じですね 区切りの部分もそのままでてしまっていて$valueの関係なんでしょうかね?

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.2

未検証にて記していますので、あくまでもこんな感じというのを掴んで頂けたら幸いです。 $script = './hoge.php'; # このphp $page_no = '10'; # 1ページに表示する発言数 # $log ←ログファイルのデーター # $now_page ← 表示するページ $log_no = count($log); # 総発言数 # htmlの表示部分 ----------- if( !empty($now_page) ) $first_pag = '1'; else $first_pag = ( ($now_page -1) * $page_no) +1; $last_pag = $first_pag + $page_no; foreach( $log as $key => $value){  $key++;  if($key >= $first_pag && $key < $last_pag ) print $value; } ↑ 最初にアクセスすると$now_pageは何も入っていないので1とします。 そして$page_no、総発言数$log_no、$now_pageを参照しながらその時の最初に表示するページ番号と最後のページ番号を決めます。 $now_pagが1なら、1~11。 $logを読み込みながらそれを参照し、マッチしたら表示させます。 最初のキーは0なので+1にしています。 print $valu; でお好きなようにhtml表示させます。 # ページ区切りリンク表示部分 ----------- if( ($log_no % $page_no) == '0') $all_coment = ($log_no / $page_no); else $all_coment = ceil($log_no / $page_no); for($ip = 1; $ip <= $all_coment; $ip++){  if($ip == ceil($first_pag / $page_no) ) print $ip;   else print "<a href=\"$script?now_page=$ip\">$ip</a>"; } ↑ 「1 2・・6」の数が $all_coment。 総発言数が60などと10で割り切れた場合とそうでない場合です。 その$all_comentをforでループし、該当ページならリンク無し、それ以外なら、now_page=$ip を付けてリンク表示させます。 ============= noel11さんのログがどのようになっているか、またはどのようにopenしているのかが分からないので、上記の$logは、 2009/02/18,名前,コメント内容 2009/02/09,名前,コメント内容 2009/02/02,名前,コメント内容 ・・・・・・ とかになっているようにしました。  何処か記述ミスがあるかもしれませんが、流れとしてはこんな感じです。  行頭のインデントには全角スペースが入っています。

noel11
質問者

補足

Warning: Invalid argument supplied for foreach() in~on line ってエラーがでますね~ 原因が不明です(^^; 現在はとりあえず $templog = file("upbbs.cgi"); $file_gyaku = Array_Reverse($templog); while ($i <=4) { list($numberZ,$pass,$name,$time,$url,$comment,$image)=explode($kugiri,$file_gyaku[$i]); echo "<TABLE border='0' width='840' cellspacing='1' cellpadding='2'> <TBODY> <TR> <TD width='15%' align='center' bgcolor='#ffffaa'>[ $numberZ ] 名前:</TD> <TD width='30%' align='center' bgcolor='#ffffff'><B>$name</B> <font size='-2'>($time)</font></TD> <TD width='15%' align='center' bgcolor='#ffffaa'>HP:</TD> <TD width='40%' bgcolor='#ffffff'><a href='$url'>$url</a></TD> </TR> <TR> <TD width='15%' align='center' bgcolor='#ffffaa'>コメント:</TD> <TD width='85%' align='left' colspan='3' bgcolor='#ffffff'>$comment<BR><a href='./$image'><img src='$image' width='100' height='100' border='1'></a><BR></TD> </TR> </TBODY> </TABLE><BR>"; $i++; こんな感じでオープンしてますね

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

 例えばこの場合ですと、1ページに表示するのは10件なので、$Page_no = '10'; とかにします。  ログファイルを読み込んでログ数を数えます。PHPだと $log_no = count($log); 。  カウント数を$page_noで割ります。43ログがあれば、4.3なのでその時点でのページ区切りでは切り上げて5ページになります。  $temp1 = ($log_no / $Page_no) +1; ← ($log_no / $Page_no) が 0 という場合のスクリプトも記します  $all_page = floor($temp1); # $all_pageは5  if( !empty($now_page) )$now_page = '1';  最初にアクセスすると、$now_pageには何も入っていないので、ログをforeach/whileとかで表示する時に、$now_pageから( $Page_no * ($now_page )、ここでは1~(10×1)の数字と、配列の数字を合わせ、それ以外は表示しないとします。  ご存知のように配列の最初は0なので1を加えます。  画面下部のリンクのところの、1 2 3 4 5 は、それぞれforeachとかを使い、そのphpへのリンクとして  <a href="./hoge.php?now_page=2"・・・・とかにすれば良いと思います。  分かりづらい説明でしたら済みません。

noel11
質問者

補足

えーっとすみません この場合の記事表示部分と、ログ部分のスクリプト書いてもらえませんか? そこら辺がちょっと不明なのです

関連するQ&A

  • 無料掲示板で、1ページの表示件数が20以上のもの。

    無料掲示板を探しています。(フリーCGIなのではなく、レンタル掲示板です) 条件はひとつ。 1ページの表示件数を20以上に設定できるものです。 欲をいえば30以上、多ければ多いほどいいです。 大体、T-CUPのように10件のものが多いですよね。 最大の保存件数は少なくてもいいのです。 過去ログとして別に残しますので。 1ページの表示件数にこだわるのは、 書き込みが多い場合に、さっき書いた記事がすぐ 「次のページ」に行ってしまうと、後で見る人が煩わしいからです。 ツリー式も敬遠したいです。読み込むのが煩わしいとの声が多いので。 ちなみに今はAAAcafeを利用しているのですが、 不安定になってきたので乗り換えようとしています。 よろしくお願いします。

  • 【PHP】 次の5件の記事を表示させるには?

    例えば、ログファイル(log.txt)に保存されてる記事数が15件あったとします。 【log.txtファイルの中身】 1,あああ君,おはよう ・ ・ ・ 5,おおお君,良い天気ですね ・ ・ ・ 15,そそそ君,明日は晴れるでしょ ページに表示される仕組みについて、画面に表示される記事数を $log= 5; と変数で 5にしています。 ですので、最初のページ(abc.php)に表示される記事は、「1,あああ君,おはよう」のログから5件表示されるのですが 「次のページ」「前のページ」のリンクで、例えば「次のページ」で(abc.php)リンクした場合、「5,おおお君,良い天気ですね」 のログから5件表示させるにはどの様にするば良いのでしょうか? 仕組みなど詳しく教えて頂けると助かります。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 自作PHPブログでの記事を10件ずつ表示する方法に

    自作PHPブログでの記事を10件ずつ表示する方法について http://ponk.jp/php/basic/blog こちらのサイトさんを参考にPHPで自作のブログを制作しているのですが、 最新の記事10件ずつ表示させたい場合はどのような記述をすれば良いのでしょうか? 具体的に書いて頂けると嬉しいです。 「前ページ」と「次ページ」的なリンクを貼りたいと思っております。 一番最古の記事のページまで行くと「前ページ」リンクも消えるようにしたいのです。

    • ベストアンサー
    • PHP
  • 私の口コミは1件もお店ページに表示されていない?

    これはどういう意味でしょうか? 食べログの口コミが 0件/6件 となっていて説明文では 「お店ページに表示している口コミ件数と総口コミ件数を表示しています」と書いてあります。 「お店ページに表示している口コミ件数」が0件で 「総口コミ件数」が6件ですが 私は全て公開して口コミを書いています。 私の口コミは1件もお店ページに表示されていないという事でしょうか?

  • 掲示板で記事を出力するとき*.datや*.logなどではなくhtmlで

    掲示板(phpもcgiも可)で記事を出力するとき*.datや*.logなどではなくhtml形式で出力する掲示板って存在するでしょうか?そしてそのhtmlにアクセスすると記事は見れるような。 ご存知の方がいらっしゃいましたらご伝授お願いします。

    • ベストアンサー
    • CGI
  • MySQLとPHPで一覧表示させページ分割するには

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

    • 締切済み
    • PHP
  • phpで表示件数をcsvの項目ごとに出す

    初心者です、2点分からないことを投稿させていただきます。 下記サイトを参考に、 phpでcsvを読み込み表示するサイトを作成しています。 http://affiliate.aki-f.com/prog/cat/cat9.html 「1ページを10件表示に制限する」方法で、 全件数の表示をすることはできるのですが 各カテゴリページ毎のページ送りを付ける方法がわかりません。 下記サンプルページでいうと 「1.ホームページ」をクリックした後のページを 10件ずつ表示にしたいという感じです。 http://affiliate.aki-f.com/prog/sample/sample30/ もう1点は、 「1.ホームページ」の横に、そのカテゴリの件数を 表示させる方法が分かりません。 例) ┏ 1. ホームページ作成(5) ┣ 2. Webデザイン(2) ┣ 3. CGI(0) ┗ 4. JavaScript(8) としたいのですが、教えて頂けませんでしょうか? お願い致します。

    • ベストアンサー
    • PHP
  • PHPでのページ分割について

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

    • 締切済み
    • PHP
  • 自作PHPブログでの記事を5件ずつ表示する方法に

    自作PHPブログでの記事を5件ずつ表示する方法について PHPで自作のブログをサイト等を参考に制作しているのですが、 最新の記事5件ずつ表示させたい場合はどのような記述をすれば良いのでしょうか? 「前ページ」と「次ページ」的なリンクを貼りたいと思っております。 一番最古の記事のページまで行くと「前ページ」リンクも消えるようにしたいのです。 pager等を検索したのですが、いまいち自分の物に組み込むとなるといまいちよくわからなくなります。 LIMITで5件表示まではわかったのですが、「次へ」で6~10件表示の仕方がわかりませんでした。 どのような記述が良いでしょうか、よろしくお願いします。 <?php $pdo = new PDO("mysql:dbname=blog", "root"); $st = $pdo->query("SELECT * FROM post ORDER BY no DESC LIMIT 5"); $posts = $st->fetchAll(); for ($i = 0; $i < count($posts); $i++) { $st = $pdo->query("SELECT * FROM comment WHERE post_no={$posts[$i]['no']} ORDER BY no DESC"); $posts[$i]['comments'] = $st->fetchAll(); } require 't_index.php'; ?> t_index.phpで表示のプログラムを書いています。

    • 締切済み
    • PHP
  • PHPを使ったRSS表示件数について

    php初心者です。 外部サイトのRSSを取得し、サイト上で表示をしようと思っています。(外部サイトの最新記事をまとめたもの) http://antenna.wcb.jp/ 上記のようなサイトをベースに、50件ごとに最新記事を表示させ、それよりも前の記事は【前の50件】、それよりも後の記事は【次の50件】というように表示させたいのですが、何か良い方法はないでしょうか。 ご存じの方がいましたらお答えいただけると助かります。

    • 締切済み
    • PHP

専門家に質問してみよう