Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21093

初心者が月30万稼ぐ為の記録5(掲示板作成)

$
0
0

シンプルな掲示板作成

目的

機能をシンプルにしてPHPの基礎をしっかりみにつける
自分のHPにも活用する
コードの1行1行をしっかり理解する

メッセージデータを受け取る

var_dump($_POST);

$_POSTにデータが代入されると次のように表示される。

array(3) { ["view_name"]=> string(6) "太郎" ["message"]=> string(27) "おいしかったです。" ["btn_submit"]=> string(12) "書き込む" }

データが渡された確認する

if(!empty($_POST['btn_submit']))

入力したデータが「ある」→メッセージを書き込む
入力したデータが「ない」→掲示板を表示する

empty関数は変数が空であればtrueを返す関数
今回は「空じゃなければtrue」にしたいので関数の前に「!」をつける。

受けっとったデータをファイルに保存する

メッセージを保存するファイルは「message.txt」として設置する。

//メッセージを保存するファイルのパス設定define('FILENAME','./message.txt');

変更することがないので定数を使用する。
defineは閲覧者に表示するメッセージなどを定義するときに便利。

PHPから「message.txt」にアクセスして、受け取ったデータを書き込む

fopen関数を使用してファイルにアクセスする。

if($file_handle=fopen(FILENAME,"a"))

1つ目のパラメータはファイル名を含めたパスを指定する。
(今回defineで宣言した「FILENAME」)

2つ目のパラメータは
ファイルを読み書き(入出力)するのに必要な情報で
「ファイルポンターリソース」と呼ばれる
読み込みだけを行うなら「r」、
書き込みを行うなら「w」「a」がある。
「w」はファイル内容を一旦リセットして書き込む。
「a」は末端から追記する形で書き込む。
今回は「a」を選択。

ファイルを開くと「$file_handle」に「ファイルポインターリソース」と呼ばれるファイルへアクセス情報が代入される。

「ファイルポンターリソース」とは
ファイルを読み書き(入出力)するのに必要な情報のことで、
アクセスするファイルの目印、位置
今回では「a」のことだと思う。

この段階で実行すると「msessage.txt」が作成される。

開いたファイルにデータを書き込む

//タイムゾーン設定date_default_timezone_set('Asia/Tokyo');

date_default_timezone_set関数は、メッセージが投稿された時間を日本のタイムゾーンで取得して書き込むために実行している。

//書き込み日時を取得$now_date=date("Y-m-d H:i:s");

メッセージを書き込まれた日時を取得して「$now_date」に代入する。

ファイルに書き込むデータを作成します。

'太郎','おいしかったです。','2020-05-12 10:58:08'
の形式で書き込む。

//書き込むデータを作成$data="'".$_POST['view_name']."','".$_POST['message']."','".$now_date."'\n";

それぞれのテキストを「’(シングルクォーテーション)」で囲み、「表示名」「メッセージ」「投稿日時」をそれぞれ「,(コンマ)」で区切る。
「\n(改行)」で区切る。

途中の「.(ドット)」は文字列連結子と呼ばれるもので、前後の文字列をくっつける役割を持つ。

fwrite関数でファイルへ書き込み

//書き込みfwrite($file_handle,$data);

「fwrite」関数でファイルへの書き込みを行う。
書き込み対象となるファイルを判別するために
1つ目のパラメータに「file_handle」これはfopen関数で指定した「ファイル名を含めたパス」と「ファイルポンターリソース」
2つ目のパラメータは書き込むデータを作成した際の
「$_data」を指定することで、先ほど作成したデータが「message.txt」に追記保存される。

メッセージは新しいものをファイルの未尾にどんどん追記するため、上から古い順に並ぶ。(fopen関数で「a」を指定してる)

'太郎','おいしかったです。','2020-05-12 11:56:14'
'次郎','まずかった','2020-05-12 11:56:41'

ファイルからデータを読み込んで、掲示板にメッセージを表示しする

メッセージのデータをファイルから取得する

fopen関数を使用してファイルにアクセスします。

if($file_handle=fopen(FILENAME,"r"))

今回は読み込みなのでパラメータは「r」にする。

while文の条件式の中で「fgets」関数を呼び出す。

while($data=fgets($file_handle))

コードをを実行すると、「message.txt」のデータが読み込まれて次のように表示される。

掲示板_fgets関数.png
👆
読み込んだデータが表示される。

「fgets関数」とはファイルから1行ずつデータを取得する関数
fgets関数は1度実行して1行読み込むと、ファイルポインターリソースの位置はそのたびに更新され、ファイルが終わるまで1行づつデータを読み込むとができる。(while文を使用)

読み込んだデータを配列に格納する

$split_data=preg_split('/\'/',$data);var_dump($split_data);

「preg_split関数」は文字列を特定の文字で分割する関数。

実行すると

array(7) { [0]=> string(0) "" [1]=> string(6) "太郎" [2]=> string(1) "," [3]=> string(27) "おいしかったです。" [4]=> string(1) "," [5]=> string(19) "2020-05-12 11:56:14" [6]=> string(1) " " } '太郎','おいしかったです。','2020-05-12 11:56:14'

👆
読み込まれたデータは配列に分割されます。

分かりやすく整理
array(7) {
[0]=> string(0) ""
[1]=> string(6) "太郎"
[2]=> string(1) ","
[3]=> string(27) "おいしかったです。"
[4]=> string(1) ","
[5]=> string(19) "2020-05-12 11:56:14"
[6]=> string(1) " "
}

表示名[1]、メッセージ[3]、投稿日時[5]
からアクセスできることがわかる。

$messageに連想配列の形で取得したデータを格納する。

$message=array('view_name'=>$split_data[1],'message'=>$split_data[3],'post_date'=>$split_data[5]);var_dump($message);echo"<br>";

👆実行すると
array(3) { ["view_name"]=> string(6) "太郎" ["message"]=> string(27) "おいしかったです。" ["post_date"]=> string(19) "2020-05-12 11:56:14" }

分かりやすく整理
array(3) {
["view_name"]=> string(6) "太郎"
["message"]=> string(27) "おいしかったです。"
["post_date"]=> string(19) "2020-05-12 11:56:14"
}

message_arrayにmessageごと格納します。

array_unshift($message_array,$message);

👆
この操作を投稿されたメッセージの数だけ繰り返すと、$message_arrayに全てのメッセージのデータが入る。
らしい・・・??

HTMLにメッセージを出力する

つづく


Viewing all articles
Browse latest Browse all 21093

Trending Articles