PHPソース解説 ~ PHP入門(8)の post.php ~

PHP入門

post.php 解説(初心者向け)

この記事は、次のページで紹介されている post.php ファイルについて、
PHPを初めて学ぶ人向けに、1行ずつ丁寧に解説する記事です。

元になっている記事


PHP 掲示板(BBS)を作る — 学習ページ


もとの post.php のソースコード


① PHPの開始とデータベース接続

<?php は、「ここからPHPのプログラムが始まります」という意味です。

require は、「別のPHPファイルを読み込んで、このファイルでも使えるようにする」
という命令です。

__DIR__ は、「この post.php が置かれているフォルダ」を表します。


② フォームから送られたデータを受け取る

変数とは「箱」

PHPでは、

これは、
「5 を $x という箱(変数)に入れる」
という意味になります。

$_POST とは何か

$_POST は、フォームから送信されたデータが入っている箱の集まりです。

  • $_POST['name'] → 名前欄に入力された文字
  • $_POST['body'] → 本文欄に入力された文字

??(ヌル合体演算子)の意味

この行は次の意味です。

  1. name が送られていれば、その値を $name に入れる
  2. 送られていなければ、空文字(”)を $name に入れる

つまり、
「$_POST[‘name’] があれば、それを $name という箱に入れる。
なければ、空の文字を $name に入れる」
という処理です。


③ 入力されているかのチェック

! の意味

! は「〜ではない」という意味です。

  • $name → 値が入っている
  • !$name → 値が入っていない

|| の意味

|| は「または(OR)」という意味です。


④ データベースにデータを書き込む処理の詳しい解説

ここからが、実際にデータベースへデータを保存している重要な部分です。


① SQL文を文字として変数に入れる

この行は、
「データベースに保存する命令文(SQL)を、$sql という箱に入れる」
という意味です。

INSERT INTO は、「データを追加する」という意味です。

posts は、データを保存するテーブル名です。

(name, body) は、
「name 列と body 列にデータを入れます」という指定です。

:name:body は、
あとで実際の値を入れるための目印です。

この時点では、まだデータベースには何も保存されていません。


② SQLを実行できる形に準備する

この行では、

  1. $sql に入っているSQL文を
  2. データベースで実行できる形に準備して
  3. $stmt という箱に入れています

prepare は、
「これからこのSQLを実行しますよ」という下準備です。

この方法を使うことで、
悪意のある文字が入力されても安全に処理できます。


③ 実際の値を入れてSQLを実行する

ここで、実際にデータベースへの保存が行われます。

この処理は、次の意味です。

  • :name の場所に、$name の中身を入れる
  • :body の場所に、$body の中身を入れる

つまり、


「フォームで入力された名前と本文を、posts テーブルに保存する」

という処理になります。

execute が実行された瞬間に、
データはデータベースに書き込まれます。


④ なぜ prepare と execute を分けるのか

SQL文の中に直接文字を書かず、

  • prepare で形を決める
  • execute で中身を入れる

という2段階にすることで、

  • エラーが起きにくい
  • 不正な入力に強い
  • 安全なプログラムになる

というメリットがあります。


まとめ

この3行の処理は、

  1. SQL文を箱に入れる
  2. 実行の準備をする
  3. 値を入れて保存する

という流れで動いています。

初心者のうちは、
「SQLもただの文字」「まず箱に入れる」
と考えると理解しやすくなります。

まとめ

この post.php は、

  • フォームの入力を受け取る
  • 入力があるか確認する
  • データベースに安全に保存する

という流れで動いています。

初心者のうちは、「変数は箱」「= は入れる」と考えると理解しやすくなります。

コメント

タイトルとURLをコピーしました