post.php 解説(初心者向け)
この記事は、次のページで紹介されている post.php ファイルについて、
PHPを初めて学ぶ人向けに、1行ずつ丁寧に解説する記事です。
元になっている記事
もとの post.php のソースコード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php require __DIR__ . '/connect_pdo.php'; $name = $_POST['name'] ?? ''; $body = $_POST['body'] ?? ''; if (!$name || !$body) { exit('入力が不足しています。'); } $sql = 'INSERT INTO posts (name, body) VALUES (:name, :body)'; $stmt = $pdo->prepare($sql); $stmt->execute([ ':name' => $name, ':body' => $body, ]); ?> |
① PHPの開始とデータベース接続
|
1 2 3 |
<?php require __DIR__ . '/connect_pdo.php'; ?> |
<?php は、「ここからPHPのプログラムが始まります」という意味です。
require は、「別のPHPファイルを読み込んで、このファイルでも使えるようにする」
という命令です。
__DIR__ は、「この post.php が置かれているフォルダ」を表します。
② フォームから送られたデータを受け取る
|
1 2 |
$name = $_POST['name'] ?? ''; $body = $_POST['body'] ?? ''; |
変数とは「箱」
PHPでは、
|
1 |
$x = 5; |
これは、
「5 を $x という箱(変数)に入れる」
という意味になります。
$_POST とは何か
$_POST は、フォームから送信されたデータが入っている箱の集まりです。
$_POST['name']→ 名前欄に入力された文字$_POST['body']→ 本文欄に入力された文字
??(ヌル合体演算子)の意味
|
1 |
$name = $_POST['name'] ?? ''; |
この行は次の意味です。
- name が送られていれば、その値を $name に入れる
- 送られていなければ、空文字(”)を $name に入れる
つまり、
「$_POST[‘name’] があれば、それを $name という箱に入れる。
なければ、空の文字を $name に入れる」
という処理です。
③ 入力されているかのチェック
|
1 2 3 |
if (!$name || !$body) { exit('入力が不足しています。'); } |
! の意味
! は「〜ではない」という意味です。
- $name → 値が入っている
- !$name → 値が入っていない
|| の意味
|| は「または(OR)」という意味です。
④ データベースにデータを書き込む処理の詳しい解説
ここからが、実際にデータベースへデータを保存している重要な部分です。
|
1 2 3 4 5 6 |
$sql = 'INSERT INTO posts (name, body) VALUES (:name, :body)'; $stmt = $pdo->prepare($sql); $stmt->execute([ ':name' => $name, ':body' => $body, ]); |
① SQL文を文字として変数に入れる
|
1 |
$sql = 'INSERT INTO posts (name, body) VALUES (:name, :body)'; |
この行は、
「データベースに保存する命令文(SQL)を、$sql という箱に入れる」
という意味です。
INSERT INTO は、「データを追加する」という意味です。
posts は、データを保存するテーブル名です。
(name, body) は、
「name 列と body 列にデータを入れます」という指定です。
:name や :body は、
あとで実際の値を入れるための目印です。
この時点では、まだデータベースには何も保存されていません。
② SQLを実行できる形に準備する
|
1 |
$stmt = $pdo->prepare($sql); |
この行では、
- $sql に入っているSQL文を
- データベースで実行できる形に準備して
- $stmt という箱に入れています
prepare は、
「これからこのSQLを実行しますよ」という下準備です。
この方法を使うことで、
悪意のある文字が入力されても安全に処理できます。
③ 実際の値を入れてSQLを実行する
|
1 2 3 4 |
$stmt->execute([ ':name' => $name, ':body' => $body, ]); |
ここで、実際にデータベースへの保存が行われます。
この処理は、次の意味です。
:nameの場所に、$name の中身を入れる:bodyの場所に、$body の中身を入れる
つまり、
「フォームで入力された名前と本文を、posts テーブルに保存する」
という処理になります。
execute が実行された瞬間に、
データはデータベースに書き込まれます。
④ なぜ prepare と execute を分けるのか
SQL文の中に直接文字を書かず、
- prepare で形を決める
- execute で中身を入れる
という2段階にすることで、
- エラーが起きにくい
- 不正な入力に強い
- 安全なプログラムになる
というメリットがあります。
まとめ
この3行の処理は、
- SQL文を箱に入れる
- 実行の準備をする
- 値を入れて保存する
という流れで動いています。
初心者のうちは、
「SQLもただの文字」「まず箱に入れる」
と考えると理解しやすくなります。
まとめ
この post.php は、
- フォームの入力を受け取る
- 入力があるか確認する
- データベースに安全に保存する
という流れで動いています。
初心者のうちは、「変数は箱」「= は入れる」と考えると理解しやすくなります。
コメント