phpの表示領域を指定する方法は?

このQ&Aのポイント
  • phpの表示領域を指定する方法について困っています。
  • トップページに掲示板の書き込みを表示しているindex.phpというものを制作しましたが、掲示板が書き込みが多いと書き込み部分が長くなってしまいます。どのように表示領域を指定すればいいでしょうか?
  • レッツphpさんを参考に作成したindex.phpで、表示領域を指定する方法がわかりません。
回答を見る
  • ベストアンサー

phpの表示領域をしていしたい!

トップページに掲示板の書き込みを表示しているindex.phpというものを制作しました。 困っていることに掲示板が書き込みが多ければ多いほど、書き込み部分が長くなってしまいます。 対処法としてphp部分をテーブル部分かこんでみたり、CSSをいれたりしたのですが、うまく反映させません。 どうにか表示領域を指定するにはどうしたらいいでしょうか? レッツphpさんを参考に作成したものです。 【index.php】 function Main2(&$dat){ //TOPページ表示用 global $logfile,$page_def,$page,$PHP_SELF,$autolink,$re_color,$hostview; $view = file($logfile); $total = sizeof($view); $total2= $total; (isset($page)) ? $start = $page : $start = 0; $end = $start + $page_def; $st = $start + 1; $dat = "<?php\n"; $dat.="function NOTICE() { \n"; for($s = $start;$s < $end;$s++){ if(!$view[$s]) break; list($no,$now,$name,$email,$sub,$com,$url, $host,$pw) = explode("<>", $view[$s] -------略 //*************** function MakeHtml(){ //HTML生成 global $html_file; Main2($buf); //改造 $hp = @fopen ("notice.php","w"); //改造 flock($hp,2); fputs($hp, $buf); fclose($hp); } といった感じです、さんこうまでに。

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

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

  • ベストアンサー
  • koke29
  • ベストアンサー率58% (114/196)
回答No.1

overflowでも使えば出来るかもですが、かっこ悪いですよね 発想を転換して、表示時の文字数を固定にして、残りはクリックして 表示とかはどうですか??(ブログとかの続きを読むみたいな感じ)

yyyooo1029
質問者

補足

コメントありがとうございます。 今現在、overflowでスクロールしています。 「更新履歴」といった一覧ページ(html)は別に設けています。 こちらでももう少し、勉強してみます。

その他の回答 (1)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

記事数(レス数)が多くて困るなら、 for($s = $start;$s < $end;$s++){ のとこで指定回数越えたら break; で止めてやればいいのでは。 そうでなくて記事本文が長いという意味ですか? なら本文を htmlspecialchars なり strip_tag なりした後で mb_substr なりで文字列を切り取ればいいのでは。

関連するQ&A

  • PHPの勉強として掲示板を作成しているのですが、謎の二重書き込みに出会

    PHPの勉強として掲示板を作成しているのですが、謎の二重書き込みに出会い躓いています。 下記はテストとして書いた、状況が再現されるソースです。 <?php $filename = './test.dat'; if($_REQUEST) { $data = file($filename); $newdata = "{$_REQUEST['newdata']}\n"; $logfile = @fopen($filename, "r+"); flock($logfile, LOCK_EX); foreach($data as $value) { fputs($logfile, $value); } fputs($logfile, $newdata); flock($logfile, LOCK_UN); fclose($logfile); } ?> <html> <head><title>TEST</title></head> <body> <form action="test.php"> <input type="text" name="newdata"> <input type="submit"> </form> </body> </html> 5、6行目で $newdata = "{$_REQUEST['newdata']}\n"; $data[] = $newdata; とした場合、DATを逆順にして $newdata = $_REQUEST['newdata']; $array_unshift = $newdata; とした場合、また、そこで追加せずに書き込み処理を $logfile = @fopen($filename, "r+"); while(!feof($logfile)) { $data[] = fgets($logfile); } fputs($logfile,$newdata); foreach($data as $value) { fputs($logfile, $value); } とした場合、など…どうやってもなぜか同じ症状が出ます。 しかももっと不思議なのは、どこでおかしくなっているのか調べようと思い途中にprint_r($data)を入れると、場所によってはなぜか二重書き込みが起きなかったりするのです。 検索しても同じ状況は見つけられずどうしたものかと悩んでおります。 情報が足りないかもしれませんが、何か気づいた方がいましたら教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpのエラー(Warning: explode() [functio

    phpのエラー(Warning: explode() [function.explode]: Empty delimiter in..)と(Warning: Invalid argument supplied for foreach() in) PHP4のサーバーにて問題なく作動しているプログラムなのですが、PHP5のサーバーにて設置したところ、以上のエラー表示がされ、解決策が見つからず質問いたしました。 エラーの出たサーバー情報 PHP Version 5.2.11 Server API Apache エラーの出たファイル1 --------------------- $fname = "als_admin/alslist.dat"; $fp = fopen($fname, "r"); $buf = fread($fp, filesize($fname)); $buf = explode( LB(), substr($buf, 0, strlen($buf)-strlen(LB()) ) );    ※ //tab毎に分割 foreach($buf as $key => $value) { //表示対象を抽出   ※ $buf[$key] = explode("\t", $value); } //詳細情報に代入 $write = ""; foreach($buf as $key => $value)     ※ { //idが一致するデータのみを取得 if( $value[0] != $_GET['id'] ){ continue; } //非表示中はアクセス不可(一覧には出ないが直リン対策) if( $value[13] < 0 ){ //リストNoがマイナスになっている exit("ページが存在しません。<a href=\"top.php\"> TOPへ</a>"); } //データをセット foreach($gkey as $fk => $fv){ $g[$fv] = $value[$fk] ? $value[$fk] : ""; } break; } エラーの出たファイル2 --------------------- <? include "../modules.php"; if(empty($_GET['r'])) : //リスト表示の場合 $fname = "galslist.dat"; $buf = file_get_contents($fname); if(!empty($buf)) { $buf = explode( LB(), substr( $buf, 0, strlen($buf) - strlen(LB()) ) ); ※ foreach($buf as $key => $value) {     ※ $buf[$key] = explode("\t", $value); if(isset($buf[$key][13]) && $buf[$key][13] > 0) $view[] = $buf[$key]; else $noview[] = $buf[$key]; } } endif; ?> エラー表示が出たところに※印をいれました。 文字数制限があり、お答えを頂く上で以上の記載で足らない部分がありましたらご指摘頂けますでしょうか。恐れ入りますがよろしくお願いします。

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

    はじめまして。大変困ってます・・ PHP初心者なのですが、どなたか教えていただけないでしょうか・・ よくホームページで見かける 1|2|3 ↑このようなページ表示の数字の部分を画像にしたいのですが、どうしたらよいのでしょうか? CGI'Sというサイトから、フリーのショッピングカートをダウンロードして作っているのですが、全くの初心者のため、どうしたらいいのか全く分かりません・・ 多分ここをいじればいいのかな?と思うのですが・・ if($para) { $para = preg_replace('/&amp;p=[0-9]*?/','',$para); $para = preg_replace('/&p=[0-9]*?/','',$para); } $prefix = '?'; if(strpos($_this,'?')) { $prefix = '&amp;'; } $p_html = ''; $all_p = ceil($data_c / $max_row); if($all_p < $max_page){ $p_start = 0; $p_end = $all_p - 1; } else{ if(($p + 1) <= ceil($max_page / 2)){ $p_start = 0; $p_end = $max_page - 1; } else{ $p_start = ($p + 1) - ceil($max_page / 2); $p_end = $p_start + $max_page - 1; if($p_end >= $all_p - 1){ $p_end = $all_p - 1; $p_start = ($all_p - $max_page) ; } } if($p_end < ($all_p - 1)){ $tail = '...'; } } 本当に初心者で申し訳ないです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP 掲示板記述

    現在、PHPで掲示板をメモ帳で作成しています。 今回は、よくよく分からないものを記載! PHPタグ================================= <?php // 保存するログファイル名 $LOGFILE = "log.txt"; … (1) // POST で mode = write の属性が送られていたら書き込み処理 if ($_POST["mode"] == "write") { … (2)   $name = $_POST["name"]; … (3)   $message = $_POST["message"];   $date = date("Y/m/d H:i:s"); … (4)   if (file_exists($LOGFILE)) { … (5)     $lines = file($LOGFILE); … (6)   }   $fp = fopen($LOGFILE,"w"); … (7)   fputs($fp,"$name,$message,$date\n"); … (8)   for ($i=0;$i<count($lines);$i++) { … (9)     fputs($fp,$lines[$i]); … (10)   }   fclose($fp); } ?> PHP 解説よくよく分からない=========== (1) では変数で説明した変数に保存するファイル名を指定しています。ファイル名は保存、読み込みのところで複数回つかうので使いまわしできるように変数に入れています。 (2) では前ページで説明した、 <input type="hidden" name="mode" value="write"> でフォームから送られる情報を $_POST["mode"] で受け取って、その値が "write" かどうかチェックしています。 「投稿する」ボタンを押してサーバに情報が送信される際に mode=write も送られていますので、それを if文で判定しています。通常のアクセスでは mode=write が送られないため、書き込み処理を行わないという感じです。 (3) では(2)同様、フォームから送られた name の情報を受け取って $name という変数に入れています。 (4) では現在の日付を取得しています。PHPには date 関数という代物があって簡単に現在の日付を取得できます。 (5) ではファイルが存在するかチェックしています。 file_exists関数でファイルが存在するか調べています。 (6) では file 関数によって配列にデータをすべて入れています。なぜここでデータを変数に入れるかというと、新しく投稿されたデータを1行目に書き込んで、残りに古い情報を書き込むためです。 なまえ,メッセージ,2005/02/06 なまえ,メッセージ,2005/02/06 なまえ,メッセージ,2005/02/06 青が新しく投稿された情報で赤が元々保存されていたふるい情報 (7) ではこれから書き込むのでfopen関数でファイルを書き込みモードで開いています。 (8) では開いたファイルにfputs関数で書き込んでいます。名前、メッセージ、日付をカンマ区切りで1行にしてファイルに書き込んでいます。 (9),(10) では古いファイルの情報(投稿前に書き込まれていた情報)を書き込んでいます。これを行わないと、新しく投稿された情報は書き込まれますが、古い情報が消えてしまうのでこの処理をしています。 PHPの解説でよくわからないので、お答えしてください。                                     ♪♪宜しくお願いします。♪♪

    • ベストアンサー
    • PHP
  • phpを使ってxmlの追加書き出しについて教えてください

    現在flashからphpに位を渡して、そこからxmlで書き出すということをしています。 phpからxmlを作成することは、なんとか無事にできるのですが、この場合一つのXMLデータしか作成できません。 fopen($fname."a")を使って追加で作成しようとすると $buf ="<?xml version=\"1.0\" encoding=\"" . $encode."\" ?> \r\n"; が二重に作成されてエラーが出ます。なにか解決策はないでしょうか? お願いします。 ソース ------------------------------------------------------------ <? function xml_write($fname,$roottag,$id,$encode,$val) { $file = fopen($fname,"w"); // XMLヘッダ書き出し // $buf ="<?xml version=\"1.0\" encoding=\"" . $encode."\" ?> \r\n"; fputs($file,$buf); // XMLルート書き出し // fputs($file,"<".$roottag.">\r\n"); // XMLルート書き出し1 // fputs($file,"<".$id.">\r\n"); // XML本文書き出し // foreach($val as $key => $oneval) { fputs($file,"<".$key.">" . $oneval . "</".$key.">\r\n"); } // XMLルート書き出し1 // fputs($file,"</".$id.">\r\n"); // XMLルート終了 // fputs($file,"</".$roottag.">\r\n"); fclose($file); } xml_write("./test/test.xml","doc","object","Shift_JIS",$_POST); ?> -----------------------------------------------------------------

    • ベストアンサー
    • PHP
  • JavascirptかPHPでコメントフォーム

    http://qitailang.small.jp/webtech/commentbox/commentform.html このサイトのコメントフォームを使おうと思っているのですが 行き詰っています。 アパッチのhtdocsの直下にフォルダを置き、 フォルダ名をcommentform_modifiedとしてその下にsample.htmlを置き さらにその下に commentform commentform.php commentform.js commentform.css commentfiles としました。今の所パーミッションというのは触っていません。 元々このサイトとは違う練習用のPHPファイルはうまくいっています。ただ今回、 http://localhost/commentform_modified/sample.htmlとして実行した所PHPのエラーが出ています。 Notice: Use of undefined constant file - assumed 'file' in C:\Program Files\Apache\Apache24\htdocs\commentform_modified\commentform\commentform.php on line 17 Notice: Use of undefined constant cmd - assumed 'cmd' in C:\Program Files\Apache\Apache24\htdocs\commentform_modified\commentform\commentform.php on line 21 Notice: Undefined index: cmd in C:\Program Files\Apache\Apache24\htdocs\commentform_modified\commentform\commentform.php on line 21 Notice: Use of undefined constant cmd - assumed 'cmd' in C:\Program Files\Apache\Apache24\htdocs\commentform_modified\commentform\commentform.php on line 57 Notice: Undefined index: cmd in C:\Program Files\Apache\Apache24\htdocs\commentform_modified\commentform\commentform.php on line 57 まず17行目から21行目辺りですが $commentdir = 'http://localhost/commentform_modified/commentform'; /*--------------------------------------------*/ $Comment = array(); if (!is_dir($commentdir)) mkdir($commentdir); if ($_REQUEST[file] && is_file("$commentdir/$_REQUEST[file].dat")) { $a=1; $Comment = file("$commentdir/$_REQUEST[file].dat"); } if ($_REQUEST[cmd] == 'commentRegist') { としています。 57行目は } elseif ($_REQUEST[cmd] == 'delete') { となっています。 双方とも何がいけないんでしょうか?

    • ベストアンサー
    • PHP
  • phpで作られた多言語向けHPから日本語表示でデータを取り込みたい

    下記のHP http://www.ffxiah.com/browse.php?sid=21 では、「言語:EN」をクリックすることで、英語バージョンに、「Language:JP」をクリックすることで日本語バージョンに切り替えられるHPです。 問題は、このHPの日本語バージョンのデータを取り込もうとして <?php $_GET[site] = "http://www.ffxiah.com/browse.php?sid=21" $page = @file($_GET[site]); ・・・ とプログラムを組んだのですが、どうしても英語のページしか取り込めません。 英語バージョンも日本語バージョンも同じURL(http://www.ffxiah.com/browse.php?sid=21)になっています。 このページの日本語バージョンを取り込むにはどうしたらいいのでしょうか?

    • 締切済み
    • PHP
  • PHPでのページング処理についての質問です。

    ドットインストールにてページングの勉強をしています。 http://dotinstall.com/lessons/paging_php_v2/8510 件数が多いと、 この場合ですと10ページ以上まで表示されてしまうかと思うのですが、 よくあるWEBサービスのように10ページまでで区切り、 10ページ目をクリックすると、 5ページから15ページまでを表示させたいのですが、 どのように書いていくものでしょうか? <?php define('DB_HOST', 'localhost'); define('DB_USER', 'dbuser'); define('DB_PASSWORD', '********'); define('DB_NAME', 'dotinstall_paging_php'); define('COMMENTS_PER_PAGE', 5); if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])) { $page = (int)$_GET['page']; } else { $page = 1; } error_reporting(E_ALL & ~E_NOTICE); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } // select * from comments limit OFFSET, COUNT // page offset count // 1 0 5 // 2 5 5 // 3 10 5 // 4 15 5 $offset = COMMENTS_PER_PAGE * ($page - 1); $sql = "select * from comments limit ".$offset.",".COMMENTS_PER_PAGE; $comments = array(); foreach ($dbh->query($sql) as $row) { array_push($comments, $row); } $total = $dbh->query("select count(*) from comments")->fetchColumn(); $totalPages = ceil($total / COMMENTS_PER_PAGE); // var_dump($comments); // exit; $from = $offset + 1; $to = ($offset + COMMENTS_PER_PAGE) < $total ? ($offset + COMMENTS_PER_PAGE) : $total; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>コメント一覧</title> </head> <body> <h1>コメント一覧</h1> <p>全<?php echo $total; ?>件中、<?php echo $from; ?>件~<?php echo $to; ?>件を表示しています。</p> <ul> <?php foreach ($comments as $comment) : ?> <li><?php echo htmlspecialchars($comment['comment'],ENT_QUOTES,'UTF-8'); ?></li> <?php endforeach; ?> </ul> <?php if ($page > 1) : ?> <a href="?page=<?php echo $page-1; ?>">前</a> <?php endif; ?> <?php for ($i = 1; $i <= $totalPages; $i++) : ?> <?php if ($page == $i) : ?> <strong><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></strong> <?php else: ?> <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php endif; ?> <?php endfor; ?> <?php if ($page < $totalPages) : ?> <a href="?page=<?php echo $page+1; ?>">次</a> <?php endif; ?> </body> </html>

    • ベストアンサー
    • PHP
  • 時間の加算をlaravelまたはphpで実現したい

    こんにちは。Laravel初心者マークです。 色々、自分なり考えていますが、下記の所でつまずいています。 よろしくお願いします。 //やろうとしていること  データベースに入っている時間の累計(例 9:00+10:00+11:00=30:00)をview側で表示させたい //出来た事  contoroller側でDBからselectしてsumを使って集計($starts)しview側で集計値を表示させた。(出来た)ただし今回のソースでview側は記載していない。 //やりたいことその2 view側で表示させる範囲を決め(例 2022年4月16日~2022年5月1日) 集計値を表示したいので一旦、全件取得($e_all)してview側でループ集計して合計を足したい($e_time->start_time)をループして合計値を求める感じ。  因みにstart_timeは9:00のような時間が入っている。 //試したこと  上記、日付ループだと少し大変なので$i=0~5までのループとした。 //エラー表示 $total=0; 13:22:00 $total += $i; 13:22:00 $total += $i; 13:22:00 $total += $i; 13:22:00 $total += $i;  のように計算されずに文字列でそのまま吐き出している。 //補足  上記、出来た事に書いているコントローラー側で先にsumして  viewで表示した場合は、start_timeの合計値は時間で加算されている。 //DB側でなくview側で計算させる根拠  やりたいこと2で書いた通り、表示させたい範囲が変わるために(例2月、3月、4月)  範囲をview側で決めて日数でループする回数を決めたい //今回の解決したいこと  取り急ぎ、データベース側から全件取得したと仮定して  $i=0~5までのループ回分を文字ではなく時間の加算となるようにしたいです。 //Controller側で全件取得($e_all)とstart_time($starts)の合計値を取得   public function index() { $e_all = Kintai::all(); $starts = Kintai::selectRaw('SUM(start_time) as start')->groupby('date_time')->get(); return view('user.index',compact('e_all','starts')); } //view側で$e_allの中のstart_timeを取り出し加算  今回は,$startsは取っていない。 $total=0; @foreach($e_all as $e_time) @for($i=0;$i<5;$i++) {{ $e_time->start_time }} $total += $i; @endfor echo $total; //表示結果(文字で表示されている) $total=0; 13:22:00 $total += $i; 13:22:00 $total += $i; 13:22:00 $total += $i; 13:22:00 $total += $i; 以上よろしくお願い致します。

    • 締切済み
    • PHP
  • php4でxmlを取得してページに表示

    http://www.phppro.jp/school/mashup/vol3/2 を参考に以下コードを書いたのですが、記事を1件表示させるだけでなく別の記事も複数件表示させたい場合はどうすれば良いのでしょうか。 また、<dc:type>番付</dc:type>のものだけを抜き出す方法も教えていただけると嬉しいです。宜しくお願い致します。 <?php function news(){ //XMLデータ取得用ベースURL $req = "http://polls.dailynews.yahoo.co.jp/rss.xml"; //XMLファイル内容を全て文字列に読み込む $buf = file_get_contents($req); preg_match_all('@<item>.*?<title>(.*?)</title>.*?<link>(.*?)</link>.*?<description>(.*?)</description>.*?<dc:subject>.*?</dc:subject>.*?<dc:type>(.*?)</dc:type>.*?</item>@s', $buf, $match, PREG_SET_ORDER); $ret .= "<h1><a href=\"".$match[0][2]."\">".$match[0][1]."</a></h1>"; $ret .= "<div>".$match[0][3]."【".$match[0][4]."】</div>"; return $ret; } echo news(); ?>

    • ベストアンサー
    • PHP