【PHP】ChatGPTでメンテナンス画面を作ってみる

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;

項目名は多少変更したが、数分で書けたので便利だった。