PHPでCSV削除フォームを作る方法
PHPでCSVファイルに保存されたデータを削除するフォームを作る方法を紹介します。一覧表示されたデータから削除ボタンを押すだけで、対象データをCSVファイルから削除できます。データベースを使わずに、CSVだけで削除機能を実装したい場合に使えるサンプルコードです。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
| 名前 | カテゴリー | メールアドレス | 操作 |
|---|---|---|---|
| 山田 太郎 | 営業 | taro@example.com | |
| 佐藤 花子 | 企画 | hanako@example.com | |
| 鈴木 一郎 | 開発 | ichiro@example.com |
コードをコピーして使おう!
<?php
$message = '';
$rows = [];
if (file_exists('data.csv')) {
if (($fp = fopen('data.csv', 'r')) !== false) {
while (($data = fgetcsv($fp)) !== false) {
$rows[] = $data;
}
fclose($fp);
}
}
if (
$_SERVER['REQUEST_METHOD'] === 'POST' &&
isset($_POST['delete_id'])
) {
$delete_id = (int)$_POST['delete_id'];
if (isset($rows[$delete_id])) {
unset($rows[$delete_id]);
$fp = fopen('data.csv', 'w');
foreach ($rows as $row) {
fputcsv($fp, $row);
}
fclose($fp);
$message = '削除が完了しました。';
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>CSV削除フォーム</title>
<style>
body{
font-family:sans-serif;
margin:20px;
}
.success{
margin-bottom: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;
}
.delete-btn{
border:none;
background:#ef4444;
color:#fff;
padding:10px 14px;
border-radius:8px;
cursor:pointer;
font-weight:700;
}
.delete-btn:hover{
opacity:.9;
}
.inline-form{
margin:0;
}
</style>
</head>
<body>
<?php if ($message): ?>
<div class="success" id="successMessage">
<?= htmlspecialchars($message, ENT_QUOTES, 'UTF-8') ?>
</div>
<?php endif; ?>
<div class="table-wrap">
<table>
<tr>
<th>名前</th>
<th>カテゴリー</th>
<th>メールアドレス</th>
<th>操作</th>
</tr>
<?php foreach ($rows as $index => $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>
<td>
<form method="post" class="inline-form"
onsubmit="return confirm('このデータを削除しますか?');">
<input
type="hidden"
name="delete_id"
value="<?= $index ?>">
<button
type="submit"
class="delete-btn">
削除
</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
<script>
setTimeout(function(){
const message =
document.getElementById('successMessage');
if(message){
message.style.display='none';
}
},3000);
</script>
</body>
</html>
ファイル構成と設置方法
このサンプルで使用するファイル構成です。
下記のファイルを同じフォルダ(同じ階層)へ配置してください。
sample/
├─ index.php
└─ data.csv
index.php がCSV削除フォーム本体です。data.csv に保存されているデータを一覧表示し、削除ボタンから不要なデータを削除できます。
サーバーへ設置する場合は、上記ファイルを同じフォルダ(同じ階層)へアップロードしてください。別フォルダへ配置する場合は、コード内のCSVファイルパスを変更してください。
PHPはサーバー上で実行されるため、PHPファイルをダブルクリックしても動作しません。動作確認はレンタルサーバーへアップロードするか、PHPが利用できるローカル環境で行ってください。
コメント