質問編集履歴

7

コードを全表記

2017/08/31 09:11

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -76,326 +76,288 @@
76
76
 
77
77
  ```
78
78
 
79
+
80
+
81
+
82
+
83
+ 追記
84
+
85
+ ```js
86
+
87
+ $(".uploadFile").change(function() {
88
+
79
- 表示したいプダウンはphpにて処理しています。
89
+ // ファイ分タスクを作成
90
+
91
+ $.each(this.files, function(i, file){
92
+
93
+ promise = promise.pipe(function(response){
94
+
95
+
96
+
97
+ var newPromise = $.Deferred();
98
+
99
+ var formData = new FormData();
100
+
101
+
102
+
103
+ formData.enctype = "multipart/form-data";
104
+
105
+ formData.append("file", file);
106
+
107
+ $("#progress-container").append(progressTemplate);
108
+
109
+ $.ajax({
110
+
111
+ url: "/hogehoge/add",
112
+
113
+ type: 'POST',
114
+
115
+ dataType: 'text',
116
+
117
+ data: formData,
118
+
119
+ cache: false,
120
+
121
+ contentType: false,
122
+
123
+ processData: false,
124
+
125
+ xhr: function() {
126
+
127
+ var xhr = $.ajaxSettings.xhr();
128
+
129
+ if (xhr.upload) {
130
+
131
+ $('#submitBtn').attr('disabled', 'disabled');
132
+
133
+ xhr.upload.addEventListener('progress', function(evt) {
134
+
135
+ var percent = (evt.loaded / evt.total) * 100;
136
+
137
+ $("#progress-container").find(".progress-bar").width(percent + "%");
138
+
139
+
140
+
141
+ }, false);
142
+
143
+ }
144
+
145
+ return xhr;
146
+
147
+ },
148
+
149
+ success: function(imageData, status, xhr) {
150
+
151
+ var res = {};
152
+
153
+ try {
154
+
155
+ res = $.parseJSON(xhr.responseText);
156
+
157
+ }catch (e) {}
158
+
159
+ $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
160
+
161
+ $('<input>').attr({
162
+
163
+ type: 'textarea',
164
+
165
+ name: "body["+res.img_id+"]",
166
+
167
+ value: "",
168
+
169
+ size: 30,
170
+
171
+ maxlength: 140,
172
+
173
+ "data-imgid": res.img_id
174
+
175
+ }).appendTo("#image-files div");
176
+
177
+ $('<input>').attr({
178
+
179
+ "class" : "deleteBtn",
180
+
181
+ type: "button",
182
+
183
+ name: res.img_id,
184
+
185
+ value: "削除",
186
+
187
+ "data-imgid": res.img_id
188
+
189
+ }).appendTo("#image-files div");
190
+
191
+ $('#submitBtn').removeAttr('disabled');
192
+
193
+ if ($("#image-files ul img").length > 10){
194
+
195
+ $('#submitBtn').prop('disabled', true);
196
+
197
+ }
198
+
199
+ },
200
+
201
+ error: function(xhr, textStatus, errorThrown) {
202
+
203
+ var res = {};
204
+
205
+ try {
206
+
207
+ res = $.parseJSON(xhr.responseText);
208
+
209
+ } catch (e) {}
210
+
211
+ alert(res.errorMessage);
212
+
213
+ $('#submitBtn').attr('disabled', 'disabled');
214
+
215
+ },
216
+
217
+ complete: function() {
218
+
219
+ $("#progress-container").children().remove();
220
+
221
+ newPromise.resolve();
222
+
223
+ }
224
+
225
+ });
226
+
227
+ return newPromise;
228
+
229
+ });
230
+
231
+ });
232
+
233
+ def.resolve();
234
+
235
+ });
236
+
237
+ ```
238
+
239
+
80
240
 
81
241
  ```php
82
242
 
243
+ コントーローラー
244
+
245
+
246
+
247
+
248
+
249
+ if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) {
250
+
251
+ try
252
+
253
+ {
254
+
255
+
256
+
257
+ switch ($_FILES['file']['error']) {
258
+
259
+ case UPLOAD_ERR_OK:
260
+
261
+ break;
262
+
263
+ case UPLOAD_ERR_NO_FILE:
264
+
265
+ throw new RuntimeException('ファイルが選択されていません');
266
+
267
+ case UPLOAD_ERR_INI_SIZE:
268
+
269
+ case UPLOAD_ERR_FORM_SIZE:
270
+
271
+ throw new RuntimeException('ファイルサイズが大きすぎます');
272
+
273
+ default:
274
+
275
+ throw new RuntimeException('その他のエラーが発生しました');
276
+
277
+ }
278
+
279
+
280
+
281
+ // MIMEタイプチェック
282
+
283
+ $mimeTypeCode = @exif_imagetype($_FILES['file']['tmp_name']);
284
+
285
+ if (!in_array($mimeTypeCode, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG), true)) {
286
+
287
+ throw new RuntimeException('画像でないファイル、又は未対応の画像形式です');
288
+
289
+ }
290
+
291
+
292
+
293
+
294
+
295
+ // 作成したサムネイルデータを取得してbase64エンコード
296
+
297
+ $imageFile = @base64_encode(@file_get_contents($_FILES['file']['tmp_name']));
298
+
299
+ $mimeTypeStr = @image_type_to_mime_type($mimeTypeCode);
300
+
301
+
302
+
303
+ if ($imageFile && $mimeTypeStr) {
304
+
305
+
306
+
307
+ // 画像を出力
308
+
309
+ $json = array();
310
+
83
- <?php echo Form::select("category","",$channel_list) ?>
311
+ $json['img'] = "data:" . $mimeTypeStr . ";base64," . $imageFile;
312
+
313
+ $json['img_id'] = $piy_post->img_id;
314
+
315
+
316
+
317
+ // 画像を出力
318
+
319
+ echo json_encode($json,JSON_UNESCAPED_UNICODE);
320
+
321
+ }
322
+
323
+ } else {
324
+
325
+ // 作成したサムネイルが見つからない、MIMEタイプが取れていない際のエラー
326
+
327
+ throw new RuntimeException('画像表示前になんらかのエラーが発生しました');
328
+
329
+ }
330
+
331
+
332
+
333
+ }
334
+
335
+ catch (RuntimeException $e)
336
+
337
+ {
338
+
339
+
340
+
341
+ // レスポンスにエラー情報をセットする
342
+
343
+ header('HTTP', true, 400); // bad requestを返すことにする
344
+
345
+
346
+
347
+ $json = array();
348
+
349
+ $json['errorMessage'] = $e->getMessage();
350
+
351
+ echo json_encode($json,JSON_UNESCAPED_UNICODE);
352
+
353
+ exit;
354
+
355
+ }
356
+
357
+ }
358
+
359
+ exit;
360
+
361
+ }
84
362
 
85
363
  ```
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
- 現在のコード
94
-
95
-
96
-
97
- phpのselectデータは
98
-
99
- ```ここに言語を入力
100
-
101
- public static function getChannelList()
102
-
103
- {
104
-
105
- $ret = array(
106
-
107
- "0" => "hogehoge",
108
-
109
- "1" => "hogehoge1",
110
-
111
- "2" => "hogehoge2",
112
-
113
- "3" => "hogehoge3",
114
-
115
- );
116
-
117
-
118
-
119
- return $ret;
120
-
121
- }
122
-
123
- ```
124
-
125
-
126
-
127
- 追記
128
-
129
- ```
130
-
131
- $(".uploadFile").change(function() {
132
-
133
- // ファイル分タスクを作成
134
-
135
- $.each(this.files, function(i, file){
136
-
137
- promise = promise.pipe(function(response){
138
-
139
-
140
-
141
- var newPromise = $.Deferred();
142
-
143
- var formData = new FormData();
144
-
145
-
146
-
147
- formData.enctype = "multipart/form-data";
148
-
149
- formData.append("file", file);
150
-
151
- $("#progress-container").append(progressTemplate);
152
-
153
- $.ajax({
154
-
155
- url: "/hogehoge/add",
156
-
157
- type: 'POST',
158
-
159
- dataType: 'text',
160
-
161
- data: formData,
162
-
163
- cache: false,
164
-
165
- contentType: false,
166
-
167
- processData: false,
168
-
169
- xhr: function() {
170
-
171
- var xhr = $.ajaxSettings.xhr();
172
-
173
- if (xhr.upload) {
174
-
175
- $('#submitBtn').attr('disabled', 'disabled');
176
-
177
- xhr.upload.addEventListener('progress', function(evt) {
178
-
179
- var percent = (evt.loaded / evt.total) * 100;
180
-
181
- $("#progress-container").find(".progress-bar").width(percent + "%");
182
-
183
-
184
-
185
- }, false);
186
-
187
- }
188
-
189
- return xhr;
190
-
191
- },
192
-
193
- success: function(imageData, status, xhr) {
194
-
195
- var res = {};
196
-
197
- try {
198
-
199
- res = $.parseJSON(xhr.responseText);
200
-
201
- }catch (e) {}
202
-
203
- $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
204
-
205
- $('<input>').attr({
206
-
207
- type: 'textarea',
208
-
209
- name: "body["+res.img_id+"]",
210
-
211
- value: "",
212
-
213
- size: 30,
214
-
215
- maxlength: 140,
216
-
217
- "data-imgid": res.img_id
218
-
219
- }).appendTo("#image-files div");
220
-
221
- $('<input>').attr({
222
-
223
- "class" : "deleteBtn",
224
-
225
- type: "button",
226
-
227
- name: res.img_id,
228
-
229
- value: "削除",
230
-
231
- "data-imgid": res.img_id
232
-
233
- }).appendTo("#image-files div");
234
-
235
- $('#submitBtn').removeAttr('disabled');
236
-
237
- if ($("#image-files ul img").length > 10){
238
-
239
- $('#submitBtn').prop('disabled', true);
240
-
241
- }
242
-
243
- },
244
-
245
- error: function(xhr, textStatus, errorThrown) {
246
-
247
- var res = {};
248
-
249
- try {
250
-
251
- res = $.parseJSON(xhr.responseText);
252
-
253
- } catch (e) {}
254
-
255
- alert(res.errorMessage);
256
-
257
- $('#submitBtn').attr('disabled', 'disabled');
258
-
259
- },
260
-
261
- complete: function() {
262
-
263
- $("#progress-container").children().remove();
264
-
265
- newPromise.resolve();
266
-
267
- }
268
-
269
- });
270
-
271
- return newPromise;
272
-
273
- });
274
-
275
- });
276
-
277
- def.resolve();
278
-
279
- });
280
-
281
- ```
282
-
283
-
284
-
285
- ```ここに言語を入力
286
-
287
- if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) {
288
-
289
- try
290
-
291
- {
292
-
293
-
294
-
295
- switch ($_FILES['file']['error']) {
296
-
297
- case UPLOAD_ERR_OK:
298
-
299
- break;
300
-
301
- case UPLOAD_ERR_NO_FILE:
302
-
303
- throw new RuntimeException('ファイルが選択されていません');
304
-
305
- case UPLOAD_ERR_INI_SIZE:
306
-
307
- case UPLOAD_ERR_FORM_SIZE:
308
-
309
- throw new RuntimeException('ファイルサイズが大きすぎます');
310
-
311
- default:
312
-
313
- throw new RuntimeException('その他のエラーが発生しました');
314
-
315
- }
316
-
317
-
318
-
319
- // MIMEタイプチェック
320
-
321
- $mimeTypeCode = @exif_imagetype($_FILES['file']['tmp_name']);
322
-
323
- if (!in_array($mimeTypeCode, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG), true)) {
324
-
325
- throw new RuntimeException('画像でないファイル、又は未対応の画像形式です');
326
-
327
- }
328
-
329
-
330
-
331
-
332
-
333
- // 作成したサムネイルデータを取得してbase64エンコード
334
-
335
- $imageFile = @base64_encode(@file_get_contents($_FILES['file']['tmp_name']));
336
-
337
- $mimeTypeStr = @image_type_to_mime_type($mimeTypeCode);
338
-
339
-
340
-
341
- if ($imageFile && $mimeTypeStr) {
342
-
343
-
344
-
345
- // 画像を出力
346
-
347
- $json = array();
348
-
349
- $json['img'] = "data:" . $mimeTypeStr . ";base64," . $imageFile;
350
-
351
- $json['img_id'] = $piy_post->img_id;
352
-
353
-
354
-
355
- // 画像を出力
356
-
357
- echo json_encode($json,JSON_UNESCAPED_UNICODE);
358
-
359
- }
360
-
361
- } else {
362
-
363
- // 作成したサムネイルが見つからない、MIMEタイプが取れていない際のエラー
364
-
365
- throw new RuntimeException('画像表示前になんらかのエラーが発生しました');
366
-
367
- }
368
-
369
-
370
-
371
- }
372
-
373
- catch (RuntimeException $e)
374
-
375
- {
376
-
377
-
378
-
379
- // レスポンスにエラー情報をセットする
380
-
381
- header('HTTP', true, 400); // bad requestを返すことにする
382
-
383
-
384
-
385
- $json = array();
386
-
387
- $json['errorMessage'] = $e->getMessage();
388
-
389
- echo json_encode($json,JSON_UNESCAPED_UNICODE);
390
-
391
- exit;
392
-
393
- }
394
-
395
- }
396
-
397
- exit;
398
-
399
- }
400
-
401
- ```

6

現在のコードに修正

2017/08/31 09:11

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -90,298 +90,312 @@
90
90
 
91
91
 
92
92
 
93
+ 現在のコード
94
+
95
+
96
+
97
+ phpのselectデータは
98
+
99
+ ```ここに言語を入力
100
+
101
+ public static function getChannelList()
102
+
103
+ {
104
+
105
+ $ret = array(
106
+
107
+ "0" => "hogehoge",
108
+
109
+ "1" => "hogehoge1",
110
+
111
+ "2" => "hogehoge2",
112
+
113
+ "3" => "hogehoge3",
114
+
115
+ );
116
+
117
+
118
+
119
+ return $ret;
120
+
121
+ }
122
+
123
+ ```
124
+
125
+
126
+
93
127
  追記
94
128
 
129
+ ```
130
+
131
+ $(".uploadFile").change(function() {
132
+
133
+ // ファイル分タスクを作成
134
+
135
+ $.each(this.files, function(i, file){
136
+
137
+ promise = promise.pipe(function(response){
138
+
139
+
140
+
141
+ var newPromise = $.Deferred();
142
+
143
+ var formData = new FormData();
144
+
145
+
146
+
147
+ formData.enctype = "multipart/form-data";
148
+
149
+ formData.append("file", file);
150
+
151
+ $("#progress-container").append(progressTemplate);
152
+
95
- わからないことは
153
+ $.ajax({
154
+
96
-
155
+ url: "/hogehoge/add",
156
+
157
+ type: 'POST',
158
+
159
+ dataType: 'text',
160
+
161
+ data: formData,
162
+
163
+ cache: false,
164
+
165
+ contentType: false,
166
+
167
+ processData: false,
168
+
169
+ xhr: function() {
170
+
171
+ var xhr = $.ajaxSettings.xhr();
172
+
173
+ if (xhr.upload) {
174
+
175
+ $('#submitBtn').attr('disabled', 'disabled');
176
+
177
+ xhr.upload.addEventListener('progress', function(evt) {
178
+
179
+ var percent = (evt.loaded / evt.total) * 100;
180
+
181
+ $("#progress-container").find(".progress-bar").width(percent + "%");
182
+
183
+
184
+
185
+ }, false);
186
+
187
+ }
188
+
189
+ return xhr;
190
+
191
+ },
192
+
193
+ success: function(imageData, status, xhr) {
194
+
195
+ var res = {};
196
+
197
+ try {
198
+
199
+ res = $.parseJSON(xhr.responseText);
200
+
201
+ }catch (e) {}
202
+
203
+ $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
204
+
205
+ $('<input>').attr({
206
+
207
+ type: 'textarea',
208
+
209
+ name: "body["+res.img_id+"]",
210
+
211
+ value: "",
212
+
213
+ size: 30,
214
+
215
+ maxlength: 140,
216
+
97
- プルダウンをajax処理時に作成する方法がそもそもわかりません。
217
+ "data-imgid": res.img_id
218
+
98
-
219
+ }).appendTo("#image-files div");
220
+
221
+ $('<input>').attr({
222
+
223
+ "class" : "deleteBtn",
224
+
99
- 調べてみたのですが求める回答のものは得られませんでした
225
+ type: "button",
226
+
100
-
227
+ name: res.img_id,
228
+
229
+ value: "削除",
230
+
231
+ "data-imgid": res.img_id
232
+
233
+ }).appendTo("#image-files div");
234
+
235
+ $('#submitBtn').removeAttr('disabled');
236
+
237
+ if ($("#image-files ul img").length > 10){
238
+
239
+ $('#submitBtn').prop('disabled', true);
240
+
241
+ }
242
+
243
+ },
244
+
245
+ error: function(xhr, textStatus, errorThrown) {
246
+
247
+ var res = {};
248
+
101
- 試してみたものは
249
+ try {
250
+
251
+ res = $.parseJSON(xhr.responseText);
252
+
253
+ } catch (e) {}
254
+
255
+ alert(res.errorMessage);
256
+
257
+ $('#submitBtn').attr('disabled', 'disabled');
258
+
259
+ },
260
+
261
+ complete: function() {
262
+
263
+ $("#progress-container").children().remove();
264
+
265
+ newPromise.resolve();
266
+
267
+ }
268
+
269
+ });
270
+
271
+ return newPromise;
272
+
273
+ });
274
+
275
+ });
276
+
277
+ def.resolve();
278
+
279
+ });
280
+
281
+ ```
282
+
283
+
102
284
 
103
285
  ```ここに言語を入力
104
286
 
105
- $('<input>').attr({
106
-
107
- type: "select",
108
-
109
- name: res.img_id,
110
-
111
- value: "",
112
-
113
- "data-imgid": res.img_id
114
-
115
- }).appendTo("#image-files div");
116
-
117
- ```
118
-
119
- のようにタイプを変更してみたり
120
-
121
- ```ここに言語を入力
122
-
123
- $("#image-files ul").append("
124
-
125
- <select name="category" id="form_category">
126
-
127
- <option value="0">hogehoge</option>
128
-
129
- </select>
130
-
131
- ");
132
-
133
- ```
134
-
135
- 動作しませんでした。
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
- phpのselectデータ
144
-
145
- ```ここに言語を入力
146
-
147
- public static function getChannelList()
148
-
149
- {
150
-
151
- $ret = array(
152
-
153
- "0" => "hogehoge",
154
-
155
- "1" => "hogehoge1",
156
-
157
- "2" => "hogehoge2",
158
-
159
- "3" => "hogehoge3",
160
-
161
- );
162
-
163
-
164
-
165
- return $ret;
287
+ if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) {
288
+
289
+ try
290
+
291
+ {
292
+
293
+
294
+
295
+ switch ($_FILES['file']['error']) {
296
+
297
+ case UPLOAD_ERR_OK:
298
+
299
+ break;
300
+
301
+ case UPLOAD_ERR_NO_FILE:
302
+
303
+ throw new RuntimeException('ファイルが選択されていません');
304
+
305
+ case UPLOAD_ERR_INI_SIZE:
306
+
307
+ case UPLOAD_ERR_FORM_SIZE:
308
+
309
+ throw new RuntimeException('ファイルサイズが大きすぎます');
310
+
311
+ default:
312
+
313
+ throw new RuntimeException('その他のエラーが発生しました');
314
+
315
+ }
316
+
317
+
318
+
319
+ // MIMEタイプチェック
320
+
321
+ $mimeTypeCode = @exif_imagetype($_FILES['file']['tmp_name']);
322
+
323
+ if (!in_array($mimeTypeCode, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG), true)) {
324
+
325
+ throw new RuntimeException('画像でないファイル、又未対応の画像形式です');
326
+
327
+ }
328
+
329
+
330
+
331
+
332
+
333
+ // 作成したサムネイルデータを取得してbase64エンコード
334
+
335
+ $imageFile = @base64_encode(@file_get_contents($_FILES['file']['tmp_name']));
336
+
337
+ $mimeTypeStr = @image_type_to_mime_type($mimeTypeCode);
338
+
339
+
340
+
341
+ if ($imageFile && $mimeTypeStr) {
342
+
343
+
344
+
345
+ // 画像を出力
346
+
347
+ $json = array();
348
+
349
+ $json['img'] = "data:" . $mimeTypeStr . ";base64," . $imageFile;
350
+
351
+ $json['img_id'] = $piy_post->img_id;
352
+
353
+
354
+
355
+ // 画像を出力
356
+
357
+ echo json_encode($json,JSON_UNESCAPED_UNICODE);
358
+
359
+ }
360
+
361
+ } else {
362
+
363
+ // 作成したサムネイルが見つからない、MIMEタイプが取れていない際のエラー
364
+
365
+ throw new RuntimeException('画像表示前になんらかのエラーが発生しました');
366
+
367
+ }
368
+
369
+
370
+
371
+ }
372
+
373
+ catch (RuntimeException $e)
374
+
375
+ {
376
+
377
+
378
+
379
+ // レスポンスにエラー情報をセットする
380
+
381
+ header('HTTP', true, 400); // bad requestを返すことにする
382
+
383
+
384
+
385
+ $json = array();
386
+
387
+ $json['errorMessage'] = $e->getMessage();
388
+
389
+ echo json_encode($json,JSON_UNESCAPED_UNICODE);
390
+
391
+ exit;
392
+
393
+ }
394
+
395
+ }
396
+
397
+ exit;
166
398
 
167
399
  }
168
400
 
169
401
  ```
170
-
171
-
172
-
173
- 追記
174
-
175
- ```
176
-
177
- success: function(imageData, status, xhr) {
178
-
179
- var res = {};
180
-
181
- try {
182
-
183
- res = $.parseJSON(xhr.responseText);
184
-
185
- }catch (e) {}
186
-
187
- $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
188
-
189
- $("#image-files ul").append();
190
-
191
- $('<input>').attr({
192
-
193
- type: 'textarea',
194
-
195
- name: "body["+res.img_id+"]",
196
-
197
- value: "",
198
-
199
- size: 30,
200
-
201
- maxlength: 140,
202
-
203
- "data-imgid": res.img_id
204
-
205
- }).appendTo("#image-files div");
206
-
207
- $('<input>').attr({
208
-
209
- "class" : "deleteBtn",
210
-
211
- type: "button",
212
-
213
- name: res.img_id,
214
-
215
- value: "削除",
216
-
217
- "data-imgid": res.img_id
218
-
219
- }).appendTo("#image-files div");
220
-
221
- $('#submitBtn').removeAttr('disabled');
222
-
223
- if ($("#image-files ul img").length > 10){
224
-
225
- $('#submitBtn').prop('disabled', true);
226
-
227
- }
228
-
229
- },
230
-
231
- error: function(xhr, textStatus, errorThrown) {
232
-
233
- var res = {};
234
-
235
- try {
236
-
237
- res = $.parseJSON(xhr.responseText);
238
-
239
- } catch (e) {}
240
-
241
- alert(res.errorMessage);
242
-
243
- $('#submitBtn').attr('disabled', 'disabled');
244
-
245
- },
246
-
247
- complete: function() {
248
-
249
- $("#progress-container").children().remove();
250
-
251
- newPromise.resolve();
252
-
253
- }
254
-
255
- });
256
-
257
- return newPromise;
258
-
259
- ```
260
-
261
- にすることによりプルダウンの作成はできましたが
262
-
263
- <option value=''> を
264
-
265
- <?php echo Form::select("category","",$channel_list) ?>で使用している
266
-
267
- $channel_listの中身「public static function getChannelList()」を利用したいです
268
-
269
- どうすれば利用できますでしょうか?
270
-
271
- ```ここに言語を入力
272
-
273
- if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) {
274
-
275
- try
276
-
277
- {
278
-
279
-
280
-
281
- switch ($_FILES['file']['error']) {
282
-
283
- case UPLOAD_ERR_OK:
284
-
285
- break;
286
-
287
- case UPLOAD_ERR_NO_FILE:
288
-
289
- throw new RuntimeException('ファイルが選択されていません');
290
-
291
- case UPLOAD_ERR_INI_SIZE:
292
-
293
- case UPLOAD_ERR_FORM_SIZE:
294
-
295
- throw new RuntimeException('ファイルサイズが大きすぎます');
296
-
297
- default:
298
-
299
- throw new RuntimeException('その他のエラーが発生しました');
300
-
301
- }
302
-
303
-
304
-
305
- // MIMEタイプチェック
306
-
307
- $mimeTypeCode = @exif_imagetype($_FILES['file']['tmp_name']);
308
-
309
- if (!in_array($mimeTypeCode, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG), true)) {
310
-
311
- throw new RuntimeException('画像でないファイル、又は未対応の画像形式です');
312
-
313
- }
314
-
315
-
316
-
317
-
318
-
319
- // 作成したサムネイルデータを取得してbase64エンコード
320
-
321
- $imageFile = @base64_encode(@file_get_contents($_FILES['file']['tmp_name']));
322
-
323
- $mimeTypeStr = @image_type_to_mime_type($mimeTypeCode);
324
-
325
-
326
-
327
- if ($imageFile && $mimeTypeStr) {
328
-
329
-
330
-
331
- // 画像を出力
332
-
333
- $json = array();
334
-
335
- $json['img'] = "data:" . $mimeTypeStr . ";base64," . $imageFile;
336
-
337
- $json['img_id'] = $piy_post->img_id;
338
-
339
-
340
-
341
- // 画像を出力
342
-
343
- echo json_encode($json,JSON_UNESCAPED_UNICODE);
344
-
345
- }
346
-
347
- } else {
348
-
349
- // 作成したサムネイルが見つからない、MIMEタイプが取れていない際のエラー
350
-
351
- throw new RuntimeException('画像表示前になんらかのエラーが発生しました');
352
-
353
- }
354
-
355
-
356
-
357
- }
358
-
359
- catch (RuntimeException $e)
360
-
361
- {
362
-
363
-
364
-
365
- // レスポンスにエラー情報をセットする
366
-
367
- header('HTTP', true, 400); // bad requestを返すことにする
368
-
369
-
370
-
371
- $json = array();
372
-
373
- $json['errorMessage'] = $e->getMessage();
374
-
375
- echo json_encode($json,JSON_UNESCAPED_UNICODE);
376
-
377
- exit;
378
-
379
- }
380
-
381
- }
382
-
383
- exit;
384
-
385
- }
386
-
387
- ```

5

追加

2017/08/31 09:04

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -267,3 +267,121 @@
267
267
  $channel_listの中身「public static function getChannelList()」を利用したいです
268
268
 
269
269
  どうすれば利用できますでしょうか?
270
+
271
+ ```ここに言語を入力
272
+
273
+ if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) {
274
+
275
+ try
276
+
277
+ {
278
+
279
+
280
+
281
+ switch ($_FILES['file']['error']) {
282
+
283
+ case UPLOAD_ERR_OK:
284
+
285
+ break;
286
+
287
+ case UPLOAD_ERR_NO_FILE:
288
+
289
+ throw new RuntimeException('ファイルが選択されていません');
290
+
291
+ case UPLOAD_ERR_INI_SIZE:
292
+
293
+ case UPLOAD_ERR_FORM_SIZE:
294
+
295
+ throw new RuntimeException('ファイルサイズが大きすぎます');
296
+
297
+ default:
298
+
299
+ throw new RuntimeException('その他のエラーが発生しました');
300
+
301
+ }
302
+
303
+
304
+
305
+ // MIMEタイプチェック
306
+
307
+ $mimeTypeCode = @exif_imagetype($_FILES['file']['tmp_name']);
308
+
309
+ if (!in_array($mimeTypeCode, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG), true)) {
310
+
311
+ throw new RuntimeException('画像でないファイル、又は未対応の画像形式です');
312
+
313
+ }
314
+
315
+
316
+
317
+
318
+
319
+ // 作成したサムネイルデータを取得してbase64エンコード
320
+
321
+ $imageFile = @base64_encode(@file_get_contents($_FILES['file']['tmp_name']));
322
+
323
+ $mimeTypeStr = @image_type_to_mime_type($mimeTypeCode);
324
+
325
+
326
+
327
+ if ($imageFile && $mimeTypeStr) {
328
+
329
+
330
+
331
+ // 画像を出力
332
+
333
+ $json = array();
334
+
335
+ $json['img'] = "data:" . $mimeTypeStr . ";base64," . $imageFile;
336
+
337
+ $json['img_id'] = $piy_post->img_id;
338
+
339
+
340
+
341
+ // 画像を出力
342
+
343
+ echo json_encode($json,JSON_UNESCAPED_UNICODE);
344
+
345
+ }
346
+
347
+ } else {
348
+
349
+ // 作成したサムネイルが見つからない、MIMEタイプが取れていない際のエラー
350
+
351
+ throw new RuntimeException('画像表示前になんらかのエラーが発生しました');
352
+
353
+ }
354
+
355
+
356
+
357
+ }
358
+
359
+ catch (RuntimeException $e)
360
+
361
+ {
362
+
363
+
364
+
365
+ // レスポンスにエラー情報をセットする
366
+
367
+ header('HTTP', true, 400); // bad requestを返すことにする
368
+
369
+
370
+
371
+ $json = array();
372
+
373
+ $json['errorMessage'] = $e->getMessage();
374
+
375
+ echo json_encode($json,JSON_UNESCAPED_UNICODE);
376
+
377
+ exit;
378
+
379
+ }
380
+
381
+ }
382
+
383
+ exit;
384
+
385
+ }
386
+
387
+ ```

4

追加

2017/08/31 09:00

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -174,7 +174,7 @@
174
174
 
175
175
  ```
176
176
 
177
- success: function(imageData, status, xhr) {
177
+ success: function(imageData, status, xhr) {
178
178
 
179
179
  var res = {};
180
180
 
@@ -186,7 +186,7 @@
186
186
 
187
187
  $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
188
188
 
189
- $("#image-files ul").append("<select name='category' id='form_category'> <option value='0'>hogehoge</option> </select>");
189
+ $("#image-files ul").append();
190
190
 
191
191
  $('<input>').attr({
192
192
 
@@ -228,6 +228,34 @@
228
228
 
229
229
  },
230
230
 
231
+ error: function(xhr, textStatus, errorThrown) {
232
+
233
+ var res = {};
234
+
235
+ try {
236
+
237
+ res = $.parseJSON(xhr.responseText);
238
+
239
+ } catch (e) {}
240
+
241
+ alert(res.errorMessage);
242
+
243
+ $('#submitBtn').attr('disabled', 'disabled');
244
+
245
+ },
246
+
247
+ complete: function() {
248
+
249
+ $("#progress-container").children().remove();
250
+
251
+ newPromise.resolve();
252
+
253
+ }
254
+
255
+ });
256
+
257
+ return newPromise;
258
+
231
259
  ```
232
260
 
233
261
  にすることによりプルダウンの作成はできましたが

3

情報の追記

2017/08/31 08:39

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -167,3 +167,75 @@
167
167
  }
168
168
 
169
169
  ```
170
+
171
+
172
+
173
+ 追記
174
+
175
+ ```
176
+
177
+ success: function(imageData, status, xhr) {
178
+
179
+ var res = {};
180
+
181
+ try {
182
+
183
+ res = $.parseJSON(xhr.responseText);
184
+
185
+ }catch (e) {}
186
+
187
+ $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
188
+
189
+ $("#image-files ul").append("<select name='category' id='form_category'> <option value='0'>hogehoge</option> </select>");
190
+
191
+ $('<input>').attr({
192
+
193
+ type: 'textarea',
194
+
195
+ name: "body["+res.img_id+"]",
196
+
197
+ value: "",
198
+
199
+ size: 30,
200
+
201
+ maxlength: 140,
202
+
203
+ "data-imgid": res.img_id
204
+
205
+ }).appendTo("#image-files div");
206
+
207
+ $('<input>').attr({
208
+
209
+ "class" : "deleteBtn",
210
+
211
+ type: "button",
212
+
213
+ name: res.img_id,
214
+
215
+ value: "削除",
216
+
217
+ "data-imgid": res.img_id
218
+
219
+ }).appendTo("#image-files div");
220
+
221
+ $('#submitBtn').removeAttr('disabled');
222
+
223
+ if ($("#image-files ul img").length > 10){
224
+
225
+ $('#submitBtn').prop('disabled', true);
226
+
227
+ }
228
+
229
+ },
230
+
231
+ ```
232
+
233
+ にすることによりプルダウンの作成はできましたが
234
+
235
+ <option value=''> を
236
+
237
+ <?php echo Form::select("category","",$channel_list) ?>で使用している
238
+
239
+ $channel_listの中身「public static function getChannelList()」を利用したいです
240
+
241
+ どうすれば利用できますでしょうか?

2

Form::selectの中身追記

2017/08/31 03:46

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -92,7 +92,9 @@
92
92
 
93
93
  追記
94
94
 
95
+ わからないことは
96
+
95
- プルダウンをajax作成する方法がそもそもわかりません。
97
+ プルダウンをajax処理時に作成する方法がそもそもわかりません。
96
98
 
97
99
  調べてみたのですが求める回答のものは得られませんでした
98
100
 
@@ -131,3 +133,37 @@
131
133
  ```
132
134
 
133
135
  動作しませんでした。
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+ phpのselectデータは
144
+
145
+ ```ここに言語を入力
146
+
147
+ public static function getChannelList()
148
+
149
+ {
150
+
151
+ $ret = array(
152
+
153
+ "0" => "hogehoge",
154
+
155
+ "1" => "hogehoge1",
156
+
157
+ "2" => "hogehoge2",
158
+
159
+ "3" => "hogehoge3",
160
+
161
+ );
162
+
163
+
164
+
165
+ return $ret;
166
+
167
+ }
168
+
169
+ ```

1

試してみたコード追記

2017/08/31 02:41

投稿

amaguri
amaguri

スコア227

test CHANGED
File without changes
test CHANGED
@@ -83,3 +83,51 @@
83
83
  <?php echo Form::select("category","",$channel_list) ?>
84
84
 
85
85
  ```
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ 追記
94
+
95
+ プルダウンをajaxで作成する方法がそもそもわかりません。
96
+
97
+ 調べてみたのですが求める回答のものは得られませんでした
98
+
99
+ 試してみたものは
100
+
101
+ ```ここに言語を入力
102
+
103
+ $('<input>').attr({
104
+
105
+ type: "select",
106
+
107
+ name: res.img_id,
108
+
109
+ value: "",
110
+
111
+ "data-imgid": res.img_id
112
+
113
+ }).appendTo("#image-files div");
114
+
115
+ ```
116
+
117
+ のようにタイプを変更してみたり
118
+
119
+ ```ここに言語を入力
120
+
121
+ $("#image-files ul").append("
122
+
123
+ <select name="category" id="form_category">
124
+
125
+ <option value="0">hogehoge</option>
126
+
127
+ </select>
128
+
129
+ ");
130
+
131
+ ```
132
+
133
+ 動作しませんでした。