回答編集履歴

1

実装PGを一部変更したものを追記

2018/01/16 05:58

投稿

taiyo-2017
taiyo-2017

スコア49

test CHANGED
@@ -1 +1,213 @@
1
- 自己解決ではありませんが、参考のためにPGを記載させていただきます。
1
+ 自己解決ではありませんが、参考のために参考PGを記載させていただきます。
2
+
3
+
4
+
5
+ ctp
6
+
7
+ ---
8
+
9
+ ```ここに言語を入力
10
+
11
+ <?=$this->Form->create(null, ['type' => 'file','url' => ['action' => 'check_csv'],'onsubmit' => 'return false;', 'name' =>'myform', 'id' =>'myform', 'enctype' => 'multipart/form-data' ])?>
12
+
13
+ <input id="filReadDep" name="filReadDep" type="file" value="" onChange="chgReadDep()" class="DisplayNone"/>
14
+
15
+ <button class="btnMa mt5px" onClick="imgReadDep()"><?= $this->Html->image("buttons_ma1.png", $ma1_options)?></button>
16
+
17
+ <?= $this->Form->end(); ?>
18
+
19
+ <input id="hoge" type="hidden" value="hoge">
20
+
21
+ ```
22
+
23
+ js
24
+
25
+ ---
26
+
27
+ ```ここに言語を入力
28
+
29
+ /* ボタンをクリックした際にファイル選択ダイアログを表示 */
30
+
31
+ function imgReadDep() {
32
+
33
+ document.getElementById("filReadDep").value = "";
34
+
35
+ document.getElementById("filReadDep").click();
36
+
37
+ }
38
+
39
+
40
+
41
+ /* ファイルを選択した際にファイルを読み込み */
42
+
43
+ function chgReadDep() {
44
+
45
+ var fd = new FormData();
46
+
47
+ if ($("input[name='filReadDep']").val() !== '') {
48
+
49
+ fd.append("file", $("input[name='filReadDep']").prop("files")[0]); // 選択したファイル
50
+
51
+ }
52
+
53
+ fd.append("dir", $("#hoge").val()); // パラメータを追加
54
+
55
+ // for(item of fd) console.log(item); // データ内容を確認できる
56
+
57
+ var postData = {
58
+
59
+ type : "POST",
60
+
61
+ url : $('#test').text(), // action(今回は「check_csv」)が格納されている
62
+
63
+ data : fd,
64
+
65
+ dataType : 'json',
66
+
67
+ processData : false,
68
+
69
+ contentType : false
70
+
71
+ };
72
+
73
+ $.ajax(postData).done(function(data) {
74
+
75
+ if (data.check) {
76
+
77
+ if (data.result) {
78
+
79
+ // 処理
80
+
81
+ }
82
+
83
+ if (!window.confirm("ファイルの内容を登録します。よろしいですか?")) {
84
+
85
+ alert("登録がキャンセルされました。");
86
+
87
+ return;
88
+
89
+ }
90
+
91
+ alert("登録しました。");
92
+
93
+ } else {
94
+
95
+ alert(data.message); // エラーメッセージ
96
+
97
+ return;
98
+
99
+ }
100
+
101
+ }).fail(function(data) {
102
+
103
+ alert("読み込み処理に失敗しました。");
104
+
105
+ }).always(function(data) {
106
+
107
+ });
108
+
109
+ }
110
+
111
+ ```
112
+
113
+ Controller
114
+
115
+ ---
116
+
117
+ ```ここに言語を入力
118
+
119
+ public function checkCsv(...$path)
120
+
121
+ {
122
+
123
+ $select_table = $_POST["dir"];
124
+
125
+
126
+
127
+ $result = [
128
+
129
+ "check" => false,
130
+
131
+ "result" => false,
132
+
133
+ "message" => ""
134
+
135
+ ];
136
+
137
+ // ファイルパスチェック
138
+
139
+ if (empty($_FILES["file"]["tmp_name"])) {
140
+
141
+ $result["message"] = "ファイルが読み込めませんでした。";
142
+
143
+ $this->autoRender = false;
144
+
145
+ echo json_encode($result);
146
+
147
+ }
148
+
149
+
150
+
151
+ // 拡張子チェック
152
+
153
+ $fileNm = $_FILES["file"]["name"];
154
+
155
+ $tmpAry = explode('.', $fileNm);
156
+
157
+ $extension = $tmpAry[count($tmpAry) - 1];
158
+
159
+
160
+
161
+ if ($extension != 'csv') {
162
+
163
+ $result["message"] = "拡張子がCSVではありません。";
164
+
165
+ $this->autoRender = false;
166
+
167
+ echo json_encode($result);
168
+
169
+ }
170
+
171
+
172
+
173
+ // CSVファイルを配列に保存
174
+
175
+ $tmp = fopen($_FILES["file"]["tmp_name"], "r");
176
+
177
+ while ($csv[] = fgetcsv($tmp, "1024")) {}
178
+
179
+ // 配列 $csv の文字コードをSJIS-winからUTF-8に変換
180
+
181
+ mb_convert_variables("UTF-8", "SJIS-win", $csv);
182
+
183
+
184
+
185
+ // csv内容チェック
186
+
187
+ // csvの1列目1項目目を判断
188
+
189
+ if($csv[0][0] == "aaa"){
190
+
191
+ // 処理
192
+
193
+ }
194
+
195
+ // csvの1列目2項目目を判断
196
+
197
+ if($csv[0][1] == "bbb"){
198
+
199
+ // 処理
200
+
201
+ }
202
+
203
+ // その他の処理
204
+
205
+
206
+
207
+ $this->autoRender = false;
208
+
209
+ echo json_encode($result);
210
+
211
+ }
212
+
213
+ ```