ここまででPHPとMySQLの基本が身についたら、次は実践的な「ミニWebアプリ」の開発にチャレンジしましょう。
本記事では、PHPとMySQLを使った以下3つの簡単なアプリケーションを紹介します:
- ① 会員登録とログイン機能
- ② お問い合わせフォーム
- ③ TODOリストや掲示板(DB連携)

目次
① 会員登録とログイン機能(セッション管理)
usersテーブル例
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, password VARCHAR(255) NOT NULL );
register.php(新規登録)
<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");
$message = "";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$user = trim($_POST["username"]);
$pass = password_hash($_POST["password"], PASSWORD_DEFAULT);
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->execute([$user, $pass]);
$message = "登録が完了しました。";
}
>
<form method="post"> ユーザー名<input name="username"&><br>
パスワード:<input type="password" name="password"><br>
<input type="submit" value="登録"></form>
<p><?= $message ?></p>
login.php(ログイン)
<?php
session_start();
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");
$error = "";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$user = $_POST["username"];
$pass = $_POST["password"];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$user]);
$data = $stmt->fetch();
if ($data && password_verify($pass, $data["password"])) {
$_SESSION["user"] = $user; header("Location: dashboard.php");
exit;
} else {
$error = "ログインに失敗しました。";
}
}
>
<form method="post">ユーザー名:<input name="username"><br>
パスワード:<input type="password" name="password"><br>
<input type="submit" value="ログイン"></form>
<p><?= $error ?></p>
② お問い合わせフォーム(バリデーション+DB保存)
contactsテーブル例
CREATE TABLE contacts ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100), message TEXT );
contact.php
<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");
$msg = "";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$name = trim($_POST["name"]);
$email = trim($_POST["email"]);
$message = trim($_POST["message"]);
if ($name && filter_var($email, FILTER_VALIDATE_EMAIL)) {
$stmt = $pdo->prepare("INSERT INTO contacts (name, email, message) VALUES (?, ?, ?)");
$stmt->execute([$name, $email, $message]);
$msg = "お問い合わせを受け付けました。";
} else {
$msg = "入力内容に不備があります。";
}
}
>
<form method="post">名前:<input name="name"><br>
メール:<input name="email"><br>
メッセージ:<textarea name="message"></textarea><br>
<input type="submit" value="送信"></form>
<p><?= $msg ?></p>
③ TODOリスト/掲示板アプリ(DB操作と一覧表示)
todosテーブル例
CREATE TABLE todos ( id INT AUTO_INCREMENT PRIMARY KEY, content TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
todo.php(追加+表示)
<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");
if ($_SERVER["REQUEST_METHOD"] === "POST" && !empty($_POST["task"])) {
$task = trim($_POST["task"]);
$stmt = $pdo->prepare("INSERT INTO todos (content) VALUES (?)");
$stmt->execute([$task]);
}
$todos = $pdo->query("SELECT * FROM todos ORDER BY id DESC")->fetchAll();
>
<h2>TODOリスト</h2>
<form method="post">やること:<input name="task"><input type="submit" value="追加"></form><ul><?php foreach ($todos as $todo): >
<li><?= htmlspecialchars($todo["content"]) ?>
(<?= $todo["created_at"] ?>)
</li>
<?php endforeach >
</ul>
まとめ
今回は、PHPとMySQLを使って以下の3つの簡単なWebアプリを構築しました。
- 会員登録+ログイン機能: セッションとパスワード管理
- お問い合わせフォーム: バリデーションとDB保存
- TODOリスト/掲示板: DBからデータを追加&表示
このような小規模アプリから始めて、機能追加(削除・編集・ページネーション)へと発展させることで、実務レベルのスキルが身につきます。