質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

6386閲覧

PHP掲示板連番出力方法がわからないです。

xyg000

総合スコア7

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/11/08 09:44

編集2022/01/12 10:55

###前提・実現したいこと


  1. 匿名 2016/11/07(月) 17:33:08
    あいう

  2. 匿名 2016/11/07(月) 17:33:08
    えお

  3. 匿名 2016/11/07(月) 17:33:08
    かき

  4. 匿名 2016/11/07(月) 17:33:08
    くけこ

  5. 匿名 2016/11/07(月) 17:33:08


1.フォーマットをこの形式に出力したい

2.投稿順に連番をつけたい

3.名前を入力しなかったら匿名と出力したい

###該当のソースコード

<html> <head><title>#</title></head> <body> <p>#</p> <form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>"> <input type="text" name="personal_name"><br><br> <textarea name="contents" rows="8" cols="40"> </textarea><br><br> <input type="submit" name="btn1" value="投稿する"> </form> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ writeData(); } readData(); function readData(){ $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'rb'); if ($fp){ if (flock($fp, LOCK_SH)){ while (!feof($fp)) { $buffer = fgets($fp); print($buffer); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } function writeData(){ $personal_name = $_POST['personal_name']; $contents = $_POST['contents']; $contents = nl2br($contents); $datetime = new DateTime(); $date = $datetime->format('Y年m月d日 H時i分s秒'); $data = "<hr>\r\n"; $data = $data."<p>投稿日時:".$date."</p>\r\n"; $data = $data."<p>投稿者名:".$personal_name."</p>\r\n"; $data = $data."<p>".$contents."</p>\r\n"; $data = $data."<p>匿名:</p>\r\n"; $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } ?> </body> </html>

###補足情報(言語/FW/ツール等のバージョンなど)
初心者の為すみませんわかりません

またゆくゆくは2chのようなものを練習として作成したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toutou

2016/11/08 09:46

コードを部分的にコードブロックに入れるのではなく、全体を```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
toutou

2016/11/08 09:47

右のほうに実際出る画面があるはずです。質問の編集をして囲みなおしてみてください。灰色のやつで囲まれたら成功です。
xyg000

2016/11/08 09:48

ありがとうございます。助かりました、見やすいです。
toutou

2016/11/08 09:57

前とまったく同じコードなので1個1個直してから次の質問にいったほうがいいですよ。
guest

回答2

0

ファイルの書き込み、読み込みが全て正常に動いていたと仮定してですが

php

1$buffer = fgets($fp); 2print($buffer);

の部分にカウンタをつけて1行読み込むごとにインクリメント

$i = 1; ~省略~ $buffer = fgets($fp); print($i++.'行目'.$buffer);

とすれば連番はつくれますが、あくまでこのソースで連番を生成するならの話ですが、

ソースを見た限り、ファイルの読み書きはそれぞれの関数名の通り、ファイルに書き込む・読み込むだけの処理にして、
printfのようにブラウザ表示させる部分とはわけるべきです。
またファイル書き込みのフォーマットを工夫して、ファイル読み込み時行単位で配列で取得し、
その配列をforeach文で1行づつ表示、その際foreachにカウンタを使って連番を表示していくかもしくは
htmlの<ol><li>タグを使って連番を振った方がスマートだと思います。

投稿2016/11/08 10:05

hiim

総合スコア1689

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

テキストベースで掲示板をつくるのは前時代的な感じがしますが
番号は所定のフォーマットをきめておいてgrepなどで抽出すればよいかと。
もしくは1行1データになるよう整形すれば行数が連番になります

投稿2016/11/08 10:03

yambejp

総合スコア114505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問