データインポート


<手順>
①フォームから送られてきたデータ一覧
CSV形式)を文字列として読み込む
②データを配列に格納
③その配列をループさせてDBに登録


①-1

<form method="POST" enctype="multipart/form-data"><!--(※1)-->
  <input type="hidden" name="MAX_FILE_SIZE" value="1048576" /> <!—(※2)—>
  <input type="file" name="○○" />
  <input type="submit" value="アップロード">
</form>

(※1)取得時は $_FILES['○○'] の形で
(※2)value値はバイト単位

①-2

<?php
$data = file_get_contents($_FILES['upload_file']['tmp_name']);
mb_language("Japanese");
$data = mb_convert_encoding($data, 'UTF-8', 'auto');
$temp = tmpfile();
fwrite($temp, $data);
rewind($temp);
$data_array = array();
while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
	$data_array[] = $data;
}
fclose($temp);

〜ファイルチェック機能〜
if (!$_FILES['upload_file']['tmp_name']) {
$err['upload_file'] = 'ファイルが選択されていません。’;
}

<?php
$data = file_get_contents($_FILES['upload_file']['tmp_name']);
mb_language("Japanese");
$data = mb_convert_encoding($data, 'UTF-8', 'auto');
$temp = tmpfile();
fwrite($temp, $data);
rewind($temp);
$data_array = array();
while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
	$data_array[] = $data;
}
fclose($temp);

<?php
$err = array();

$complete_msg = "";

$data_count = 0;


  foreach ($data_array as $row) {
        $column_data = array();
        if (count($row) == 2) {
            for ($i = 0; $i < count($row); $i++) {
                if (strlen(mb_convert_encoding($row[$i], 'SJIS', 'UTF-8')) > 200) {
                    $column_data[$i+1] = "";
                } else {
                    $column_data[$i+1] = $row[$i];
           }
            }

            $sql = “インサート文”;
            $stmt = $pdo->prepare($sql);
            $params = array(:○○” => $column_data[1],
                ":○○" => $column_data[2]
            );
            $stmt->execute($params);
            $data_count++;
        }
    }

    $complete_msg = $data_count."件のデータが登録されました。";