案件に必須!CSVインポート&エクスポート機能をPHPで作る方法【テンプレ付き】

「CSVで登録データを管理したいんですが、実装できますか?」

クライアントや社内から、こんなふうに相談された経験はありませんか?
でも、CSVの読み取りや書き出し、DBとの連携って、意外と手間がかかりそうで不安になりますよね。

そんな方にこそ知ってほしいのが、今回紹介する【CSVインポート&エクスポート機能の完全ガイド】です。
実務でそのまま使えるコードと構成を、PHPとMySQLを使ってやさしく解説しました。

しかも、ChatGPTを使って実装スピードを上げるコツやプロンプト例も公開!
初心者でも「ちゃんと動くものが作れる」実践的な記事です。


目次

🎬 完成イメージ

  • 管理画面上からCSVファイルをアップロード(インポート)
  • DBに保存されたデータをCSV形式でダウンロード(エクスポート)
  • ファイル名・文字コード・バリデーション対応済み

📂 ファイル構成

csv-manager/
├─ upload.php        ← CSVファイルアップロード&保存
├─ import.php        ← アップロードしたCSVの読み取り&DB登録
├─ export.php        ← DBデータのCSV出力処理
├─ config.php        ← DB接続設定
├─ uploads/          ← アップロードファイルの保存先
└─ db.sql            ← 初期テーブル作成用SQL

STEP1|ファイルアップロードの仕組みを作ろう

このSTEPでは、ユーザーがCSVファイルをフォームから選択してアップロードし、サーバー上に保存できるようにする基本の仕組みを作成します。
フォーム設計の基礎や、アップロードされたファイルの保存処理を一通り学ぶことで、CSVインポートの準備が整います。

実装するのは以下の内容です

  1. アップロード用フォームの作成(HTML)
  2. ファイルの保存処理(move_uploaded_file)
  3. 保存先ディレクトリの作成とパーミッション設定

まずは、CSVファイルをWeb上からアップロードできるように、ファイル選択フォームとアップロード処理を作ります。

これは「CSVインポート」の第一歩。
フォームの書き方と、PHPでアップロードされたファイルを処理する基本の流れを押さえましょう。


✅ アップロード用フォームを作成しよう(HTML)

<!-- upload.php -->
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>CSVアップロード</title>
</head>
<body>
  <h2>CSVファイルをアップロード</h2>
  <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="csv_file" accept=".csv" required>
    <button type="submit">アップロード</button>
  </form>
</body>
</html>

🔍 解説

  • enctype=”multipart/form-data” を必ず指定します。これがないとファイルは送信されません。
  • accept=”.csv” を使うと、選択できるファイルをCSV形式に限定できます。
  • name=”csv_file” が、PHP側でファイルを受け取るキーになります。

✅ PHPでファイルを受け取って保存しよう(upload.php)

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (isset($_FILES['csv_file']) && $_FILES['csv_file']['error'] === 0) {
    $uploadDir = 'uploads/';
    $fileName = basename($_FILES['csv_file']['name']);
    $uploadPath = $uploadDir . $fileName;

    // アップロード先フォルダがなければ作成
    if (!is_dir($uploadDir)) {
      mkdir($uploadDir, 0755, true);
    }

    // ファイルを保存
    if (move_uploaded_file($_FILES['csv_file']['tmp_name'], $uploadPath)) {
      echo "アップロード成功:{$fileName}";
    } else {
      echo "ファイルの保存に失敗しました。";
    }
  } else {
    echo "ファイルが正しくアップロードされていません。";
  }
}
?>

🔍 解説

  • $_FILES[‘csv_file’][‘tmp_name’] で一時保存されたファイルを取得します。
  • move_uploaded_file() で、任意のディレクトリに保存します。
  • uploads/ フォルダがない場合は mkdir() で作成します(実用的な処理)。

このSTEPでは、ユーザーがCSVファイルを選んでアップロードし、それをサーバーに保存するという基本の仕組みを作りました。


STEP2|CSVファイルを読み取ってデータベースに登録しよう

このSTEPでは、アップロードされたCSVファイルを読み取り、その内容をデータベースに登録する処理を実装していきます。
よくある例として、CSVに記載された「名前」と「メールアドレス」をデータベースに一括登録するような使い方が挙げられます。

次のような処理を順番に実装します。

  1. CSVファイルの読み込み(fopen / fgetcsv)
  2. データの1行ごとの取り出しと整形
  3. データベース(MySQL)への登録(INSERT)
  4. 入力チェックや重複エラーへの対処

STEP1でアップロードしたCSVファイルを、いよいよデータベースへ登録する処理に進めていきます。

このSTEPでは以下のことを実装します

  • アップロード済みCSVファイルの読み取り
  • fopen + fgetcsv を使った1行ずつの処理
  • PDOでDBに登録するINSERT文
  • 簡単なバリデーション(空行・不正な行をスキップ)

✅ 事前準備|MySQLのテーブルを用意しよう

まずは、CSVで登録したいデータを保存するためのDBテーブルを作成します。

-- db.sql
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

🔍 解説

  • name:ユーザー名
  • email:メールアドレス(重複不可)
  • created_at:登録日時を自動記録します

このSQLはMySQLで先に実行してテーブルを作っておいてください。


✅ CSV読み込み→DB登録(import.php)

<?php
require 'config.php';

$csvPath = 'uploads/sample.csv'; // STEP1で保存されたファイル名

if (!file_exists($csvPath)) {
  die("CSVファイルが見つかりません。");
}

$handle = fopen($csvPath, 'r');
$inserted = 0;

while (($data = fgetcsv($handle)) !== false) {
  // 空行・不完全な行をスキップ
  if (count($data) < 2) continue;

  $name = trim($data[0]);
  $email = trim($data[1]);

  if ($name && $email) {
    $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
    try {
      $stmt->execute([$name, $email]);
      $inserted++;
    } catch (PDOException $e) {
      // 例:メールアドレス重複など
      continue;
    }
  }
}

fclose($handle);

echo "{$inserted} 件のユーザーを登録しました。";
?>

🔍 解説ポイント

このコードでは、アップロードしたCSVファイルを1行ずつ読み込みながら、データベースに登録しています。
前後の空白を除去し、不正なデータはスキップ、登録済みメールアドレスは重複登録を防止する仕組みも含まれています。
安全で正確なデータ登録を行うための、実務でもよく使われる基本的な構成です。

  • CSVを1行ずつ配列に変換(fgetcsv)
  • 空白を除去(trim)
  • 不正な行や空の値をスキップ
  • 登録済みメールはUNIQUE制約で排除

このSTEPを終えると、CSVファイルから自動でデータベースに登録できる機能が完成します。

アップロード → 読み取り → DB登録の流れがつながりました!


STEP3|登録されたデータをCSV形式で出力する

このSTEPでは、データベースに登録された情報をCSV形式で出力する処理を作成します。
たとえば管理画面などから「登録ユーザーをCSVで出力したい」といった要望に対応できるようになります。

以下の処理を順に解説します

  1. 文字コード変換(UTF-8 → Shift-JIS)でExcel対応
  2. DBのデータ取得
  3. ブラウザ上へのCSV出力

この先の実装こそが本番!

  • アップロードされたCSVを正確にDB登録する方法
  • CSV文字化け・不正フォーマットへの対処法
  • 登録済みデータをCSV形式で出力し、Excelでも開けるようにするコツ
  • テンプレート形式で再利用できる構成の整理
  • ChatGPTプロンプトを活用して、自動化・高速化を実現

これらは、実務での評価や信頼につながるスキルであり、
習得することでクライアントからの依頼にも堂々と応えられるようになります。

「使える技術」として武器にしたい方は、ぜひ続きを読んでみてください。


次回予告|検索ボックス&ハイライト付きの絞り込み機能を作る!

次回は、JavaScriptで「リアルタイム検索UI」を作る方法をご紹介します。
データの一部だけを表示し、キーワードをハイライトするインターフェースは、
商品一覧やFAQページなどにも応用可能です!


定期購読で、もっと実務に強くなる!

noteメンバーシップでは、以下のような特典をご用意しています!

  • あなたのコードを添削&アドバイス(HTML/CSS/JavaScript/PHP対応)
  • Zoom相談での個別サポート(月1回)
  • 実務にも使えるテンプレートの先行配布
  • ChatGPT活用ノウハウやプロンプト共有

「今より一歩、実務に強くなりたい」という方は、ぜひメンバー登録をご検討ください!

👉 あなたの“できた!”を、これからも一緒にサポートします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

愛知県を拠点に、AIを活用した業務改善支援、WEB制作、マーケティング戦略サポートを行っています。

営業、マーケティング、WEB開発など多分野で20年以上実務経験を積み、現場視点を持った提案と問題解決を強みとしています。

「誰でも気軽にAIを活用できる世界をつくる」をモットーに、中小企業や個人事業主向けに、成果につながる実践的なノウハウを提供。
ブログやYouTubeを通じて、わかりやすく実用的な情報発信にも力を入れています。

AI活用・業務効率化・マーケティング(集客)でお困りの際は、ぜひご相談ください。

目次