PHPでCSVコメント機能を作る方法
PHPでCSVコメント機能を作る方法を紹介します。このサンプルでは、名前とコメントを入力してCSVファイルへ保存し、投稿済みのコメントを一覧表示できます。コメントは投稿日時とともにCSVファイルへ追記されるため、ページを再読み込みしても内容が保持されます。簡易掲示板やレビュー機能、お問い合わせ履歴などを作成したい場合に利用できます。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
CSVコメント機能
山田
2026-06-11 22:15:30
とても参考になりました。
佐藤
2026-06-11 21:48:05
コピペで動作しました。
コードをコピーして使おう!
<?php
// コメントを保存するCSVファイル名です
$csv_file = 'data.csv';
$message = '';
// HTMLエスケープ用の関数です
function h($value) {
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
// フォーム送信時の処理です
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 入力内容を取得します
$name = trim($_POST['name'] ?? '');
$comment = trim($_POST['comment'] ?? '');
// 入力チェックを行います
if ($name === '' || $comment === '') {
$message = '名前とコメントを入力してください。';
} else {
// CSVファイルへコメントを追記します
$fp = fopen($csv_file, 'a');
if ($fp) {
fputcsv($fp, [
date('Y-m-d H:i:s'),
$name,
$comment
]);
fclose($fp);
// 二重送信を防ぐためにリダイレクトします
header('Location: index.php');
exit;
} else {
$message = 'コメントの保存に失敗しました。';
}
}
}
// コメント一覧を読み込みます
$comments = [];
if (file_exists($csv_file)) {
$fp = fopen($csv_file, 'r');
if ($fp) {
// 1行目の見出しを読み飛ばします
fgetcsv($fp);
while (($data = fgetcsv($fp)) !== false) {
if (count($data) >= 3) {
$comments[] = [
'datetime' => $data[0],
'name' => $data[1],
'comment' => $data[2]
];
}
}
fclose($fp);
}
}
// 新しいコメントを上に表示します
$comments = array_reverse($comments);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>CSVコメント機能</title>
<style>
body{
font-family:sans-serif;
background:#f8fafc;
margin:40px;
}
.php-csv-comment_wrap{
max-width:800px;
margin:0 auto;
padding:24px;
border:1px solid #e5e7eb;
border-radius:18px;
background:#ffffff;
}
.php-csv-comment_title{
font-size:22px;
font-weight:bold;
margin-bottom:20px;
}
.php-csv-comment_input,
.php-csv-comment_textarea{
width:100%;
box-sizing:border-box;
padding:10px;
margin-bottom:12px;
border:1px solid #d1d5db;
border-radius:8px;
font-size:16px;
}
.php-csv-comment_textarea{
height:120px;
resize:none;
}
.php-csv-comment_button{
padding:10px 24px;
border:none;
border-radius:8px;
background:#0b6bff;
color:#ffffff;
font-weight:bold;
cursor:pointer;
margin-bottom:24px;
}
.php-csv-comment_message{
padding:12px;
margin-bottom:16px;
border:1px solid #fecaca;
border-radius:10px;
background:#fef2f2;
color:#b91c1c;
}
.php-csv-comment_item{
padding:16px;
margin-top:12px;
background:#ffffff;
border:1px solid #d1d5db;
border-radius:10px;
}
.php-csv-comment_name{
font-weight:bold;
margin-bottom:4px;
}
.php-csv-comment_date{
font-size:13px;
color:#6b7280;
margin-bottom:8px;
}
.php-csv-comment_empty{
padding:16px;
background:#f8fafc;
border:1px solid #d1d5db;
border-radius:10px;
}
</style>
</head>
<body>
<div class="php-csv-comment_wrap">
<div class="php-csv-comment_title">
CSVコメント機能
</div>
<?php if ($message !== ''): ?>
<div class="php-csv-comment_message">
<?= h($message) ?>
</div>
<?php endif; ?>
<form method="post">
<input
class="php-csv-comment_input"
type="text"
name="name"
placeholder="名前"
>
<textarea
class="php-csv-comment_textarea"
name="comment"
placeholder="コメントを入力してください"
></textarea>
<button class="php-csv-comment_button" type="submit">
投稿
</button>
</form>
<?php if (!empty($comments)): ?>
<?php foreach ($comments as $comment): ?>
<div class="php-csv-comment_item">
<div class="php-csv-comment_name">
<?= h($comment['name']) ?>
</div>
<div class="php-csv-comment_date">
<?= h($comment['datetime']) ?>
</div>
<div>
<?= nl2br(h($comment['comment'])) ?>
</div>
</div>
<?php endforeach; ?>
<?php else: ?>
<div class="php-csv-comment_empty">
まだコメントはありません。
</div>
<?php endif; ?>
</div>
</body>
</html>
ファイル構成と設置方法
このサンプルでは、index.php と data.csv を同じフォルダに配置して使用します。投稿された名前・コメント・投稿日時は data.csv に追記保存されます。
sample/
├── index.php
└── data.csv
index.php と data.csv をサーバーへアップロードし、ブラウザから index.php にアクセスしてください。名前とコメントを入力して投稿すると、内容が data.csv に保存され、コメント一覧に新しい順で表示されます。
コメント