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

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

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

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

Q&A

解決済

2回答

577閲覧

PHPでの簡易掲示板の作成

gaia4869

総合スコア7

PHP

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

0グッド

0クリップ

投稿2017/09/14 03:44

編集2017/09/14 04:42

###前提・実現したいこと
簡易掲示板の作成を目標にしています。
フォームで送信した値を受けとり、「{投稿番号}<>{名前}<>{コメント}<>{投稿された時間}」という感じで一行ずつテキストファイルに保存したいと考えています。
投稿番号は、最後の投稿番号に+1した値を入れます。

###発生している問題・エラーメッセージ
「{投稿番号}<>{名前}<>{コメント}<>{投稿された時間}」を一行として投稿順にテキストファイルに保存することはできたのですが、投稿番号が2番から始まってしまいます。
また、まわりくどい書き方や無駄な行が多いと思いますので、もっと良い書き方があれば、ぜひご教授ください。

よろしくお願いします。

エラーメッセージ

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

PHP

1<?php 2 header('Content-Type: text/html; charset=UTF-8'); 3 date_default_timezone_set('Asia/Tokyo'); 4 5 $filename1 = "text.txt"; 6 $filename2 = "text_count.txt"; 7 8 $name = $_POST["name"]; 9 $comment = $_POST["comment"]; 10 $time = date("Y/m/d H:i:s"); 11 12 $data1 = "$name.'<>'.$comment.'<>'.$time."; 13 14 $fp1 = fopen($filename2, 'a'); 15 fwrite($fp1, $data1."\n"); 16 fclose($fp1); 17 18 19 $fp1 = fopen($filename2, 'r+'); 20 flock($fp1, LOCK_EX); 21 22 $count = 0; 23 while (fgets($fp1) !== false) { 24 $count++; 25 } 26 27 flock($fp1, LOCK_UN); 28 fclose($fp1); 29 30 $postNumber = $count + 1; 31 32 $data2 = "$postNumber.'<>'.$name.'<>'.$comment.'<>'.$time."; 33 34 $fp2 = fopen($filename1, 'a'); 35 fwrite($fp2, $data2."\n"); 36 fclose($fp2); 37?> 38

###試したこと
投稿番号は、行数をcountして、その値に+1する方法にしました。

$filename2 = "text_count.txt"に投稿番号以外の「{名前}<>{コメント}<>{投稿された時間}」を一行ずつ保存して、その行数を数えて+1した投稿番号と合わせて、$filename1 = "text.txt"に「{投稿番号}<>{名前}<>{コメント}<>{投稿された時間}」を保存しようとしました。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

m.ts10806

2017/09/14 04:13

名前やコメントに<>と書かれた場合の対応も課題には含まれていますでしょうか。
gaia4869

2017/09/14 04:19

各項目の間の'<>'に関しては別の記号でもOKですが、コメントに入力されない記号でないといけません。
m.ts10806

2017/09/14 04:23

そういう意味ではないです。名前やコメントに<>と書かれる場合もありますよね。コメントも名前も自由に入力できるはずです。「コメントに入力されない記号」はないと思っていいです。つまり、セパレーター文字列が入力された際にどのように対応するか考慮して組んでいるか?という意味です。
m.ts10806

2017/09/14 04:25

ご提示の作りは情報をDBに保存する仕組みではないのであらゆるケースに対応した作りにする必要があるわけです(もちろん課題なのであればどこまでやるべきかの範囲は明確にされているとは思いますが、単にテキストに保存ってだけではセキュリティボロボロです)
gaia4869

2017/09/14 04:38

わかりづらくて申し訳ありませんでした。名前やコメントに<>と入力された場合は想定していません。今回は単にテキストに保存というかたちです。
m.ts10806

2017/09/14 04:39

了解です。ひとまずプログラムコードは```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)
gaia4869

2017/09/14 04:42

修正しました。
guest

回答2

0

ベストアンサー

課題?とはいえ自身の書いたコードに責任をもってしっかりと見直す癖をつけてください。
よーく見るとありますよ、無駄に1を足してしまっている箇所が。

追記

どこで「2」になってしまっているか、保存処理部分をコメントアウトして
$countなり$postNumberをechoしていくとどこで「2」となるか確認していってください。
LINE をechoすればechoした場所の行数が出力されますので原因箇所を特定しやすくなります。

投稿2017/09/14 04:15

編集2017/09/14 04:47
m.ts10806

総合スコア80850

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

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

gaia4869

2017/09/14 07:41

解決しました、ありがとうございました。
guest

0

サイト内の検索で簡易掲示板とすると、前に質問した方への回答がたくさん出てくるので参考になるかと。

フォーマットが同じなので、何かの課題なんですかね?

投稿2017/09/14 03:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gaia4869

2017/09/14 04:01

ありがとうございます。 サイト内検索で似たような質問を探してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問