PHPで、登録・編集・削除ができるメンテナンス画面を
作る機会があったが、面倒なので、ChatGPTにコードを書いてもらった。
db_test.sql
CREATE DATABASE db_test CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
tbl_test.sql
CREATE TABLE tbl_test (
seq INT AUTO_INCREMENT PRIMARY KEY,
id VARCHAR(10) NOT NULL,
name VARCHAR(255) NOT NULL,
memo TEXT
);
config.php
<?php
$host = 'localhost';
$dbname = 'db_test';
$user = 'root';
$pass = 'root';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);
} catch (PDOException $e) {
exit('DB接続エラー: ' . $e->getMessage());
}
?>
index.php
<?php
require 'config.php';
$stmt = $pdo->query('SELECT * FROM tbl_test');
$items = $stmt->fetchAll();
?>
<!DOCTYPE html>
<html>
<head><title>アイテム一覧</title></head>
<body>
<h1>アイテム一覧</h1>
<a href="create.php">新規作成</a>
<table border="1">
<tr><th>SEQ</th><th>ID</th><th>名前</th><th>メモ</th><th>操作</th></tr>
<?php foreach ($items as $item): ?>
<tr>
<td><?= htmlspecialchars($item['seq']) ?></td>
<td><?= htmlspecialchars($item['id']) ?></td>
<td><?= htmlspecialchars($item['name']) ?></td>
<td><?= nl2br(htmlspecialchars($item['memo'])) ?></td>
<td>
<a href="edit.php?seq=<?= $item['seq'] ?>">編集</a> |
<a href="delete.php?seq=<?= $item['seq'] ?>" onclick="return confirm('削除しますか?');">削除</a>
</td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
create.php
<?php
require 'config.php';
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$id = $_POST['id'] ?? '';
$name = $_POST['name'] ?? '';
$memo = $_POST['memo'] ?? '';
$stmt = $pdo->prepare("INSERT INTO tbl_test (id, name, memo) VALUES (?, ?, ?)");
$stmt->execute([$id, $name, $memo]);
header("Location: index.php");
exit;
}
?>
<!DOCTYPE html>
<html>
<head><title>新規作成</title></head>
<body>
<h1>新規作成</h1>
<form method="post">
ID: <input type="text" name="id" required><br>
名前: <input type="text" name="name" required><br>
メモ:<br><textarea name="memo"></textarea><br>
<button type="submit">登録</button>
</form>
<a href="index.php">戻る</a>
</body>
</html>
edit.php
<?php
require 'config.php';
$seq = $_GET['seq'] ?? null;
if (!$seq) exit('SEQが不正です');
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$id = $_POST['id'];
$name = $_POST['name'];
$memo = $_POST['memo'];
$stmt = $pdo->prepare("UPDATE tbl_test SET id = ?, name = ?, memo = ? WHERE seq = ?");
$stmt->execute([$id, $name, $memo, $seq]);
header("Location: index.php");
exit;
} else {
$stmt = $pdo->prepare("SELECT * FROM tbl_test WHERE seq = ?");
$stmt->execute([$seq]);
$item = $stmt->fetch();
if (!$item) exit('データが見つかりません');
}
?>
<!DOCTYPE html>
<html>
<head><title>編集</title></head>
<body>
<h1>編集</h1>
<form method="post">
ID: <input type="text" name="id" value="<?= htmlspecialchars($item['id']) ?>"><br>
名前: <input type="text" name="name" value="<?= htmlspecialchars($item['name']) ?>"><br>
メモ:<br><textarea name="memo"><?= htmlspecialchars($item['memo']) ?></textarea><br>
<button type="submit">更新</button>
</form>
<a href="index.php">戻る</a>
</body>
</html>
delete.php
<?php
require 'config.php';
$seq = $_GET['seq'] ?? null;
if (!$seq) exit('SEQが不正です');
$stmt = $pdo->prepare("DELETE FROM tbl_test WHERE seq = ?");
$stmt->execute([$seq]);
header("Location: index.php");
exit;
項目名は多少変更したが、数分で書けたので便利だった。