お世話になります。
作りたい処理としては、
- web画面上でボタンをクリック
- ファイル選択ダイアログが表示される
- ファイルを選択したらCSVファイルを読み込む
- Controllerにてファイル名が合っているか、項目数が合っているか、項目名は合っているかをチェック
- 内容が正しい場合は「登録しますか?」といったダイアログを表示
- 「はい」の場合にCSVのデータを登録する
といったことになります。
submitをすることで
1~4までのCSVの内容を確認することはできたのですが、
submitしてしまった後では確認ダイアログを表示することができないのでは?と思い
実装に悩んでいるところです。
アドバイス等をいただければと思います。
現状の、CSVの内容を取得するPGを記載しておきます。
ctp
<?=$this->Form->create(null, ['type' => 'file','url' => ['action' => 'check_csv'],'onsubmit' => 'return false;', 'name' =>'myform' ])?> <form enctype="multipart/form-data" method="post"> <input id="filReadDep" name="filReadDep" type="file" value="" onChange="chgReadDep()"/> <button onClick="imgReadDep()"><?= $this->Html->image("buttons.png")?></button> </form> <?= $this->Form->end(); ?>
javascript
function imgReadDep() { document.getElementById("filReadDep").value = ""; document.getElementById("filReadDep").click(); } function chgReadDep() { document.myform.submit(); }
Controller
//ファイルパスチェック if (empty($this->request->data['filReadDep']['tmp_name'])) { $this->Flash->error(__('select {0}', __('csv'))); \Cake\Log\Log::info(__('select {0}', __('csv')) . "\n", 'csv_import'); \Cake\Log\Log::info(__('failed_import'), 'csv_import'); return; } //拡張子チェック $fileNm = $this->request->data['filReadDep']['name']; $tmpAry = explode('.', $fileNm); $extension = $tmpAry[count($tmpAry) - 1]; if ($extension != 'csv') { $this->Flash->error(__('different {0}', __('File_Format'))); \Cake\Log\Log::info(__('different {0}', __('File_Format')) . "\n", 'csv_import'); \Cake\Log\Log::info(__('failed_import'), 'csv_import'); return; } //CSVファイルを配列に保存 $tmp = fopen($this->request->data['filReadDep']['tmp_name'], "r"); while ($csv[] = fgetcsv($tmp, "1024")) { } //配列 $csv の文字コードをSJIS-winからUTF-8に変換 mb_convert_variables("UTF-8", "SJIS-win", $csv);

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/15 08:20
2018/01/15 08:25
2018/01/15 12:06 編集
2018/01/15 12:45
2018/01/15 23:53 編集
2018/01/16 00:51
2018/01/16 04:24
2018/01/16 04:32
2018/01/16 05:32