PHPでCSV登録フォームを作る方法
PHPでCSVファイルへデータを登録するフォームを作る方法を紹介します。フォームへ入力した名前やカテゴリー、メールアドレスをCSVファイルへ保存できます。データベースを使わずに簡単な登録機能を作りたい場合や、顧客情報・問い合わせ情報・商品情報などをCSVで管理したい場合に使えるサンプルコードです。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
登録が完了しました。
| 名前 | カテゴリー | メールアドレス |
|---|---|---|
| 山田 太郎 | 営業 | taro@example.com |
| 佐藤 花子 | 企画 | hanako@example.com |
コードをコピーして使おう!
<?php
$message = '';
$csv_file = __DIR__ . '/data.csv';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
$category = trim($_POST['category'] ?? '');
$email = trim($_POST['email'] ?? '');
if (
$name !== '' &&
$category !== '' &&
$email !== ''
) {
$fp = fopen($csv_file, 'a');
if ($fp !== false) {
flock($fp, LOCK_EX);
fputcsv($fp, [
$name,
$category,
$email
]);
flock($fp, LOCK_UN);
fclose($fp);
header('Location: ' . $_SERVER['PHP_SELF'] . '?saved=1');
exit;
}
}
}
if (isset($_GET['saved'])) {
$message = '登録が完了しました。';
}
$rows = [];
if (file_exists($csv_file)) {
if (($fp = fopen($csv_file, 'r')) !== false) {
while (($data = fgetcsv($fp)) !== false) {
$rows[] = $data;
}
fclose($fp);
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>CSV登録フォーム</title>
<style>
body{
font-family:sans-serif;
margin:20px;
}
.form-wrap{
max-width:700px;
border:1px solid #e5e7eb;
border-radius:20px;
padding:24px;
margin-bottom:24px;
}
.form-group{
margin-bottom:16px;
}
label{
display:block;
margin-bottom:6px;
font-weight:700;
}
input,
select{
width:100%;
padding:14px 16px;
border:1px solid #d1d5db;
border-radius:10px;
font-size:16px;
box-sizing:border-box;
}
.submit-btn{
border:none;
background:#ff6a00;
color:#fff;
padding:14px 24px;
border-radius:10px;
font-size:16px;
font-weight:700;
cursor:pointer;
}
.success{
margin-top:16px;
padding:12px 16px;
background:#ecfdf5;
border:1px solid #86efac;
border-radius:10px;
}
.table-wrap{
border:1px solid #e5e7eb;
border-radius:20px;
overflow:hidden;
}
table{
width:100%;
border-collapse:collapse;
}
th{
background:#f7f2e5;
}
th,
td{
padding:16px;
text-align:left;
border-bottom:1px solid #e5e7eb;
}
.success{
margin-top:16px;
padding:12px 16px;
background:#ecfdf5;
border:1px solid #86efac;
border-radius:10px;
animation:hideMessage 3s forwards;
}
@keyframes hideMessage{
0%{
opacity:1;
}
80%{
opacity:1;
}
100%{
opacity:0;
visibility:hidden;
height:0;
margin:0;
padding:0;
border:0;
overflow:hidden;
}
}
</style>
</head>
<body>
<div class="form-wrap">
<form method="post">
<div class="form-group">
<label>名前</label>
<input type="text" name="name" required>
</div>
<div class="form-group">
<label>カテゴリー</label>
<select name="category" required>
<option value="">選択してください</option>
<option value="営業">営業</option>
<option value="企画">企画</option>
<option value="開発">開発</option>
<option value="デザイン">デザイン</option>
</select>
</div>
<div class="form-group">
<label>メールアドレス</label>
<input type="email" name="email" required>
</div>
<button type="submit" class="submit-btn">
登録
</button>
</form>
<?php if ($message): ?>
<div class="success">
<?= htmlspecialchars($message, ENT_QUOTES, 'UTF-8') ?>
</div>
<?php endif; ?>
</div>
<div class="table-wrap">
<table>
<tr>
<th>名前</th>
<th>カテゴリー</th>
<th>メールアドレス</th>
</tr>
<?php foreach ($rows as $row): ?>
<tr>
<td><?= htmlspecialchars($row[0] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
<td><?= htmlspecialchars($row[1] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
<td><?= htmlspecialchars($row[2] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
</tr>
<?php endforeach; ?>
</table>
</div>
</body>
</html>
ファイル構成と設置方法
このサンプルで使用するファイル構成です。
下記のファイルを同じフォルダ(同じ階層)へ配置してください。
sample/
├─ index.php
└─ data.csv
index.php がCSV登録フォーム本体です。
data.csv は登録データを保存するCSVファイルです。あらかじめ空のCSVファイルを作成しておいてください。
サーバーへ設置する場合は、上記ファイルを同じフォルダ(同じ階層)へアップロードしてください。別フォルダへ配置する場合は、コード内のCSVパスを変更してください。
PHPはサーバー上で実行されるため、PHPファイルをダブルクリックしても動作しません。動作確認はレンタルサーバーへアップロードするか、PHPが利用できるローカル環境で行ってください。
コメント