①フォームから送られてきたデータ一覧
(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."件のデータが登録されました。";