#はじめに
プログラミングに興味があったのでudemyでweb開発のコースを購入し、3日間ぐらいハンズオンで勉強したのでとりあえず掲示板を作ってみようと思い、せっかくなので記事としてもアウトプットしようと思い立ちました。
私の初めてのプログラミングなので優しい方ご教授いただければ幸いです。m(_ _)m
#環境
PHP 7.2.1
MAMP
参考サイト
https://dotinstall.com/lessons/bbs_php_v2
#作業
#####1.MAMPのhtdocsにphpファイルの作成
#####2.HTMLで画面の作成
ローカル環境で表示すると
はい、そのままです。
#####3.htdocsにデータファイル(bbs.dat)の作成
#####4.phpで実装
実装したはいいもののPHPの文法が全くわからないので順番にみていきます。
・$
は変数。
・$_SERVER['REQUEST_METHOD']
はページにアクセスする際に使用されたリクエストのメソッド名で'GET', 'HEAD', 'POST', 'PUT' などがある
・$_POST
はスーパーグローバル変数(なんやそれ?なんかすごそうな変数やな。連想配列ってなんやって感じ)
・\t
と\n
はタブと改行(なんで必要なんや??)
・fopen($dataFile, 'a')
はfopen 関数でファイルを開く。引数に「開きたいファイル」と「モード」をそれぞれ指定する。モードにはそれぞれ'a','r','w'があり追記、読み込み、書き込みモードを指す。
・fwrite($fp, $newData)
はファイルをバイナリ・モードで書き込む。(つまり$fp
に$newData
を書き込むということね)
・ fclose($fp);
fopenとセット。開けたら閉じる。じゃないと親に怒られるぞ
・formタグのaction属性はフォームの送信ボタンを押して送信されるデータの送信先を指定する。
・method属性は送信するときの転送方法を指定する。
なおpostとgetがあり、postは入力したフォーム内容はURLとは別の場所に保管されてデータが送信される。安全的な?
getは入力したフォーム内容のデータがURLにくっついて送信される。google的な?
すると、、、表示されない。しかしbbs.datファイルをみると
ちゃんと書き込みされていました。
・isset は変数がセットされていること、そして NULL でないことを検査する関数。
・trim はトリミング。例えば「顔をトリミングしたい」って時に使う。
・ if($message !== '')
はメッセージが空でない場合、という意味
・ $user = ($user === '') ? 'anonymous' : $user;
これ意味は分かるんですけどなんていう文法?関数?ですか。教えてください。
・date_default_timezone_set('Asia/Tokyo');
は現在の時刻を取得。
・ $postedAt = date('Y-m-d H:i:s');
date関数を使って格納。
・ "\t"
. $postedAt
. を加えることで掲示板に時刻を表示
ちなみに
・str_replace
はタブをどうのこうの~という感じでわかりません。ちゃんちゃん
なにはともあれ
datファイルには時刻がきちんと表示されました。
#####8.投稿データを表示する
・function はユーザー定義関数というもので好きなように自分で関数を定義できる(あってる?)
・htmlspecialchars($s, ENT_QUOTES, 'UTF-8')
は特殊文字を HTML エンティティに変換する。らしい、、、
・ENT_QUOTES
はダブルクォート、シングルクォートの両方を変換する。らしい、、、
つまりこのコードは、htmlspecialchars
関数を使って$s
にUTF-8のダブルクォート、シングルクォートの両方を変換する処理を格納してるということ?
それをh()
で呼び出すということであってますか先生?教えてください。
(続き)
・file() はファイル全体を読み込んで配列に格納する関数。
・FILE_IGNORE_NEW_LINES
は配列の各要素の最後に改行文字を追加しない。(なにこれ。なくていいんじゃないの?)
・<?php foreach($posts as $post) : ?>
は配列を反復処理するための関数。foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになる。
ここでは$posts
に入れた配列を$post
として実行するということ。
・<?php list($message, $user, $postedAt) = explode("\t", $post); ?>
list()関数: 配列と同様の形式で、複数の変数への代入を行う
explode()関数:文字列を文字列により分割する
$post
の中にあるlist()
が受け取る各変数に含まれるタブをexplode()関数を使って分割する。ということでおk?
・<?php echo h($message); ?>(<?php echo h($user); ?>)-<?php echo h($postedAt); ?>
このh()って結局どういう意味をもってるの?
##おわり