PHPでCSV削除フォームを作る方法【サンプルコード付き】

php

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が利用できるローカル環境で行ってください。


コメント