質問するログイン新規登録

質問編集履歴

7

コードを全表記

2017/08/31 09:11

投稿

amaguri
amaguri

スコア227

title CHANGED
File without changes
body CHANGED
@@ -37,32 +37,10 @@
37
37
  }
38
38
 
39
39
  ```
40
- 表示したいプルダウンはphpにて処理しています。
41
- ```php
42
- <?php echo Form::select("category","",$channel_list) ?>
43
- ```
44
40
 
45
41
 
46
-
47
- 現在のコード
48
-
49
- phpのselectデータは
50
- ```ここに言語を入力
51
- public static function getChannelList()
52
- {
53
- $ret = array(
54
- "0" => "hogehoge",
55
- "1" => "hogehoge1",
56
- "2" => "hogehoge2",
57
- "3" => "hogehoge3",
58
- );
59
-
60
- return $ret;
61
- }
62
- ```
63
-
64
42
  追記
65
- ```
43
+ ```js
66
44
  $(".uploadFile").change(function() {
67
45
  // ファイル分タスクを作成
68
46
  $.each(this.files, function(i, file){
@@ -140,7 +118,10 @@
140
118
  });
141
119
  ```
142
120
 
143
- ```ここに言語を入力
121
+ ```php
122
+ コントーローラー
123
+
124
+
144
125
  if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) {
145
126
  try
146
127
  {

6

現在のコードに修正

2017/08/31 09:11

投稿

amaguri
amaguri

スコア227

title CHANGED
File without changes
body CHANGED
@@ -44,31 +44,8 @@
44
44
 
45
45
 
46
46
 
47
- 追記
48
- わからないことは
47
+ 現在のコード
49
- プルダウンをajax処理時に作成する方法がそもそもわかりません。
50
- 調べてみたのですが求める回答のものは得られませんでした
51
- 試してみたものは
52
- ```ここに言語を入力
53
- $('<input>').attr({
54
- type: "select",
55
- name: res.img_id,
56
- value: "",
57
- "data-imgid": res.img_id
58
- }).appendTo("#image-files div");
59
- ```
60
- のようにタイプを変更してみたり
61
- ```ここに言語を入力
62
- $("#image-files ul").append("
63
- <select name="category" id="form_category">
64
- <option value="0">hogehoge</option>
65
- </select>
66
- ");
67
- ```
68
- 動作しませんでした。
69
48
 
70
-
71
-
72
49
  phpのselectデータは
73
50
  ```ここに言語を入力
74
51
  public static function getChannelList()
@@ -86,13 +63,43 @@
86
63
 
87
64
  追記
88
65
  ```
66
+ $(".uploadFile").change(function() {
67
+ // ファイル分タスクを作成
68
+ $.each(this.files, function(i, file){
69
+ promise = promise.pipe(function(response){
70
+
71
+ var newPromise = $.Deferred();
72
+ var formData = new FormData();
73
+
74
+ formData.enctype = "multipart/form-data";
75
+ formData.append("file", file);
76
+ $("#progress-container").append(progressTemplate);
77
+ $.ajax({
78
+ url: "/hogehoge/add",
79
+ type: 'POST',
80
+ dataType: 'text',
81
+ data: formData,
82
+ cache: false,
83
+ contentType: false,
84
+ processData: false,
85
+ xhr: function() {
86
+ var xhr = $.ajaxSettings.xhr();
87
+ if (xhr.upload) {
88
+ $('#submitBtn').attr('disabled', 'disabled');
89
+ xhr.upload.addEventListener('progress', function(evt) {
90
+ var percent = (evt.loaded / evt.total) * 100;
91
+ $("#progress-container").find(".progress-bar").width(percent + "%");
92
+
93
+ }, false);
94
+ }
95
+ return xhr;
96
+ },
89
97
  success: function(imageData, status, xhr) {
90
98
  var res = {};
91
99
  try {
92
100
  res = $.parseJSON(xhr.responseText);
93
101
  }catch (e) {}
94
102
  $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
95
- $("#image-files ul").append();
96
103
  $('<input>').attr({
97
104
  type: 'textarea',
98
105
  name: "body["+res.img_id+"]",
@@ -127,12 +134,12 @@
127
134
  }
128
135
  });
129
136
  return newPromise;
137
+ });
138
+ });
139
+ def.resolve();
140
+ });
130
141
  ```
131
- にすることによりプルダウンの作成はできましたが
142
+
132
- <option value=''> を
133
- <?php echo Form::select("category","",$channel_list) ?>で使用している
134
- $channel_listの中身「public static function getChannelList()」を利用したいです
135
- どうすれば利用できますでしょうか?
136
143
  ```ここに言語を入力
137
144
  if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) {
138
145
  try

5

追加

2017/08/31 09:04

投稿

amaguri
amaguri

スコア227

title CHANGED
File without changes
body CHANGED
@@ -132,4 +132,63 @@
132
132
  <option value=''> を
133
133
  <?php echo Form::select("category","",$channel_list) ?>で使用している
134
134
  $channel_listの中身「public static function getChannelList()」を利用したいです
135
- どうすれば利用できますでしょうか?
135
+ どうすれば利用できますでしょうか?
136
+ ```ここに言語を入力
137
+ if (isset($_FILES['file']['error']) && is_int($_FILES['file']['error'])) {
138
+ try
139
+ {
140
+
141
+ switch ($_FILES['file']['error']) {
142
+ case UPLOAD_ERR_OK:
143
+ break;
144
+ case UPLOAD_ERR_NO_FILE:
145
+ throw new RuntimeException('ファイルが選択されていません');
146
+ case UPLOAD_ERR_INI_SIZE:
147
+ case UPLOAD_ERR_FORM_SIZE:
148
+ throw new RuntimeException('ファイルサイズが大きすぎます');
149
+ default:
150
+ throw new RuntimeException('その他のエラーが発生しました');
151
+ }
152
+
153
+ // MIMEタイプチェック
154
+ $mimeTypeCode = @exif_imagetype($_FILES['file']['tmp_name']);
155
+ if (!in_array($mimeTypeCode, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG), true)) {
156
+ throw new RuntimeException('画像でないファイル、又は未対応の画像形式です');
157
+ }
158
+
159
+
160
+ // 作成したサムネイルデータを取得してbase64エンコード
161
+ $imageFile = @base64_encode(@file_get_contents($_FILES['file']['tmp_name']));
162
+ $mimeTypeStr = @image_type_to_mime_type($mimeTypeCode);
163
+
164
+ if ($imageFile && $mimeTypeStr) {
165
+
166
+ // 画像を出力
167
+ $json = array();
168
+ $json['img'] = "data:" . $mimeTypeStr . ";base64," . $imageFile;
169
+ $json['img_id'] = $piy_post->img_id;
170
+
171
+ // 画像を出力
172
+ echo json_encode($json,JSON_UNESCAPED_UNICODE);
173
+ }
174
+ } else {
175
+ // 作成したサムネイルが見つからない、MIMEタイプが取れていない際のエラー
176
+ throw new RuntimeException('画像表示前になんらかのエラーが発生しました');
177
+ }
178
+
179
+ }
180
+ catch (RuntimeException $e)
181
+ {
182
+
183
+ // レスポンスにエラー情報をセットする
184
+ header('HTTP', true, 400); // bad requestを返すことにする
185
+
186
+ $json = array();
187
+ $json['errorMessage'] = $e->getMessage();
188
+ echo json_encode($json,JSON_UNESCAPED_UNICODE);
189
+ exit;
190
+ }
191
+ }
192
+ exit;
193
+ }
194
+ ```

4

追加

2017/08/31 09:00

投稿

amaguri
amaguri

スコア227

title CHANGED
File without changes
body CHANGED
@@ -86,13 +86,13 @@
86
86
 
87
87
  追記
88
88
  ```
89
- success: function(imageData, status, xhr) {
89
+ success: function(imageData, status, xhr) {
90
90
  var res = {};
91
91
  try {
92
92
  res = $.parseJSON(xhr.responseText);
93
93
  }catch (e) {}
94
94
  $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
95
- $("#image-files ul").append("<select name='category' id='form_category'> <option value='0'>hogehoge</option> </select>");
95
+ $("#image-files ul").append();
96
96
  $('<input>').attr({
97
97
  type: 'textarea',
98
98
  name: "body["+res.img_id+"]",
@@ -113,6 +113,20 @@
113
113
  $('#submitBtn').prop('disabled', true);
114
114
  }
115
115
  },
116
+ error: function(xhr, textStatus, errorThrown) {
117
+ var res = {};
118
+ try {
119
+ res = $.parseJSON(xhr.responseText);
120
+ } catch (e) {}
121
+ alert(res.errorMessage);
122
+ $('#submitBtn').attr('disabled', 'disabled');
123
+ },
124
+ complete: function() {
125
+ $("#progress-container").children().remove();
126
+ newPromise.resolve();
127
+ }
128
+ });
129
+ return newPromise;
116
130
  ```
117
131
  にすることによりプルダウンの作成はできましたが
118
132
  <option value=''> を

3

情報の追記

2017/08/31 08:39

投稿

amaguri
amaguri

スコア227

title CHANGED
File without changes
body CHANGED
@@ -82,4 +82,40 @@
82
82
 
83
83
  return $ret;
84
84
  }
85
- ```
85
+ ```
86
+
87
+ 追記
88
+ ```
89
+ success: function(imageData, status, xhr) {
90
+ var res = {};
91
+ try {
92
+ res = $.parseJSON(xhr.responseText);
93
+ }catch (e) {}
94
+ $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" data-imgid=\"" + res.img_id + "\"/ >");
95
+ $("#image-files ul").append("<select name='category' id='form_category'> <option value='0'>hogehoge</option> </select>");
96
+ $('<input>').attr({
97
+ type: 'textarea',
98
+ name: "body["+res.img_id+"]",
99
+ value: "",
100
+ size: 30,
101
+ maxlength: 140,
102
+ "data-imgid": res.img_id
103
+ }).appendTo("#image-files div");
104
+ $('<input>').attr({
105
+ "class" : "deleteBtn",
106
+ type: "button",
107
+ name: res.img_id,
108
+ value: "削除",
109
+ "data-imgid": res.img_id
110
+ }).appendTo("#image-files div");
111
+ $('#submitBtn').removeAttr('disabled');
112
+ if ($("#image-files ul img").length > 10){
113
+ $('#submitBtn').prop('disabled', true);
114
+ }
115
+ },
116
+ ```
117
+ にすることによりプルダウンの作成はできましたが
118
+ <option value=''> を
119
+ <?php echo Form::select("category","",$channel_list) ?>で使用している
120
+ $channel_listの中身「public static function getChannelList()」を利用したいです
121
+ どうすれば利用できますでしょうか?

2

Form::selectの中身追記

2017/08/31 03:46

投稿

amaguri
amaguri

スコア227

title CHANGED
File without changes
body CHANGED
@@ -45,7 +45,8 @@
45
45
 
46
46
 
47
47
  追記
48
+ わからないことは
48
- プルダウンをajax作成する方法がそもそもわかりません。
49
+ プルダウンをajax処理時に作成する方法がそもそもわかりません。
49
50
  調べてみたのですが求める回答のものは得られませんでした
50
51
  試してみたものは
51
52
  ```ここに言語を入力
@@ -64,4 +65,21 @@
64
65
  </select>
65
66
  ");
66
67
  ```
67
- 動作しませんでした。
68
+ 動作しませんでした。
69
+
70
+
71
+
72
+ phpのselectデータは
73
+ ```ここに言語を入力
74
+ public static function getChannelList()
75
+ {
76
+ $ret = array(
77
+ "0" => "hogehoge",
78
+ "1" => "hogehoge1",
79
+ "2" => "hogehoge2",
80
+ "3" => "hogehoge3",
81
+ );
82
+
83
+ return $ret;
84
+ }
85
+ ```

1

試してみたコード追記

2017/08/31 02:41

投稿

amaguri
amaguri

スコア227

title CHANGED
File without changes
body CHANGED
@@ -40,4 +40,28 @@
40
40
  表示したいプルダウンはphpにて処理しています。
41
41
  ```php
42
42
  <?php echo Form::select("category","",$channel_list) ?>
43
- ```
43
+ ```
44
+
45
+
46
+
47
+ 追記
48
+ プルダウンをajaxで作成する方法がそもそもわかりません。
49
+ 調べてみたのですが求める回答のものは得られませんでした
50
+ 試してみたものは
51
+ ```ここに言語を入力
52
+ $('<input>').attr({
53
+ type: "select",
54
+ name: res.img_id,
55
+ value: "",
56
+ "data-imgid": res.img_id
57
+ }).appendTo("#image-files div");
58
+ ```
59
+ のようにタイプを変更してみたり
60
+ ```ここに言語を入力
61
+ $("#image-files ul").append("
62
+ <select name="category" id="form_category">
63
+ <option value="0">hogehoge</option>
64
+ </select>
65
+ ");
66
+ ```
67
+ 動作しませんでした。