PHPでCSVお気に入り機能を作る方法【サンプルコード付き】

php

PHPでCSVお気に入り機能を作る方法

PHPでCSVお気に入り機能を作る方法を紹介します。このサンプルでは、CSVファイルに登録されたデータを一覧表示し、お気に入りボタンで登録・解除できます。お気に入り状態はCSVファイルの「favorite」列に 0(未登録)または 1(登録済み)として保存されるため、ページを再読み込みしても状態が保持されます。商品管理や記事一覧、お気に入りリストを作成したい場合に利用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

CSVお気に入り機能
ID 商品名 お気に入り
1 商品A
2 商品B
3 商品C

コードをコピーして使おう!

<?php

// 使用するCSVファイル名です
$csv_file = 'data.csv';

// CSVデータを格納する配列です
$rows = [];

// CSVを読み込みます
if (file_exists($csv_file)) {

    $fp = fopen($csv_file, 'r');

    if ($fp) {

        // ヘッダー行を読み込みます
        $header = fgetcsv($fp);

        // データを配列へ格納します
        while (($data = fgetcsv($fp)) !== false) {

            $rows[] = $data;

        }

        fclose($fp);

    }

}

// お気に入りボタンが押された場合の処理です
if (isset($_GET['favorite'])) {

    $target = (int)$_GET['favorite'];

    foreach ($rows as $index => $row) {

        if ((int)$row[0] === $target) {

            // 0⇔1を切り替えます
            $rows[$index][2] = ($row[2] == '1') ? '0' : '1';

            break;

        }

    }

    // CSVへ保存します
    $fp = fopen($csv_file, 'w');

    fputcsv($fp, $header);

    foreach ($rows as $row) {

        fputcsv($fp, $row);

    }

    fclose($fp);

    // 二重送信防止
    header('Location: index.php');
    exit;

}

?>

<!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-favorite_wrap{
    max-width:800px;
    margin:0 auto;
    padding:24px;
    border:1px solid #e5e7eb;
    border-radius:18px;
    background:#ffffff;
}

.php-csv-favorite_title{
    font-size:22px;
    font-weight:bold;
    margin-bottom:20px;
}

.php-csv-favorite_table{
    width:100%;
    border-collapse:collapse;
}

.php-csv-favorite_table th,
.php-csv-favorite_table td{
    border:1px solid #d1d5db;
    padding:10px;
    text-align:left;
}

.php-csv-favorite_table th{
    background:#f1f5f9;
}

.php-csv-favorite_button{
    display:inline-block;
    padding:8px 16px;
    border-radius:6px;
    background:#0b6bff;
    color:#ffffff;
    text-decoration:none;
    font-weight:bold;
}

.php-csv-favorite_button.active{
    background:#e11d48;
}

</style>

</head>
<body>

<div class="php-csv-favorite_wrap">

    <div class="php-csv-favorite_title">
        CSVお気に入り機能
    </div>

    <table class="php-csv-favorite_table">

        <tr>
            <th>ID</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>

                <a
                    href="?favorite=<?= $row[0] ?>"
                    class="php-csv-favorite_button <?= ($row[2] == '1') ? 'active' : '' ?>"
                >

                    <?= ($row[2] == '1') ? '★ 登録済み' : '☆ 登録' ?>

                </a>

            </td>

        </tr>

        <?php endforeach; ?>

    </table>

</div>

</body>
</html>

ファイル構成と設置方法

このサンプルでは、index.phpdata.csv を同じフォルダに配置して使用します。CSVファイルの favorite 列には、お気に入り状態を 0(未登録)または 1(登録済み)で保存します。お気に入りボタンをクリックするたびに、この値が切り替わりCSVファイルへ保存されます。

sample/
├── index.php
└── data.csv
  

index.phpdata.csv をサーバーへアップロードし、ブラウザから index.php にアクセスしてください。「☆ 登録」「★ 登録済み」をクリックすると、お気に入り状態が切り替わり、favorite 列の値が 01 の間で更新されます。


コメント