7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPで掲示板を作る

Last updated at Posted at 2018-11-30

#はじめに
プログラミングに興味があったのでudemyでweb開発のコースを購入し、3日間ぐらいハンズオンで勉強したのでとりあえず掲示板を作ってみようと思い、せっかくなので記事としてもアウトプットしようと思い立ちました。
私の初めてのプログラミングなので優しい方ご教授いただければ幸いです。m(_ _)m

#環境
PHP 7.2.1
MAMP
参考サイト
https://dotinstall.com/lessons/bbs_php_v2

#作業
#####1.MAMPのhtdocsにphpファイルの作成
#####2.HTMLで画面の作成
index.jpg
ローカル環境で表示すると
bbs.jpg

はい、そのままです。

#####3.htdocsにデータファイル(bbs.dat)の作成
#####4.phpで実装
index1.jpg
index2.jpg

実装したはいいものの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的な?

#####5.書き込みできるか確認
bbs1.jpg

すると、、、表示されない。しかしbbs.datファイルをみると
data.jpg
ちゃんと書き込みされていました。

#####6.さらに編集
index3.jpg

・isset は変数がセットされていること、そして NULL でないことを検査する関数。

・trim はトリミング。例えば「顔をトリミングしたい」って時に使う。

if($message !== '') はメッセージが空でない場合、という意味

$user = ($user === '') ? 'anonymous' : $user; これ意味は分かるんですけどなんていう文法?関数?ですか。教えてください。

#####7.時刻を表示
index4.jpg

date_default_timezone_set('Asia/Tokyo'); は現在の時刻を取得。

$postedAt = date('Y-m-d H:i:s'); date関数を使って格納。

"\t". $postedAt. を加えることで掲示板に時刻を表示

ちなみに
str_replace はタブをどうのこうの~という感じでわかりません。ちゃんちゃん

なにはともあれ
data1.jpg
datファイルには時刻がきちんと表示されました。

#####8.投稿データを表示する
index5.jpg
・function はユーザー定義関数というもので好きなように自分で関数を定義できる(あってる?)

htmlspecialchars($s, ENT_QUOTES, 'UTF-8')は特殊文字を HTML エンティティに変換する。らしい、、、

ENT_QUOTESはダブルクォート、シングルクォートの両方を変換する。らしい、、、

つまりこのコードは、htmlspecialchars関数を使って$sにUTF-8のダブルクォート、シングルクォートの両方を変換する処理を格納してるということ?
それをh()で呼び出すということであってますか先生?教えてください。

(続き)
index6.jpg
・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()って結局どういう意味をもってるの?

##おわり

7
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?