質問編集履歴

2

修正

2016/07/07 02:25

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  ```
20
20
 
21
- location.href = "http://-----.com/---/csv?sids="+sids+"&departments="+deps+"&manhour_date="+$this.m_ops.manhour_date;
21
+ location.href = "example.com/---/csv?sids="+sids+"&departments="+deps+"&manhour_date="+$this.m_ops.manhour_date;
22
22
 
23
23
  ```
24
24
 

1

修正

2016/07/07 02:25

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -21,3 +21,243 @@
21
21
  location.href = "http://-----.com/---/csv?sids="+sids+"&departments="+deps+"&manhour_date="+$this.m_ops.manhour_date;
22
22
 
23
23
  ```
24
+
25
+ ```
26
+
27
+ 非同期通信
28
+
29
+ var params = {
30
+
31
+ 'sids':sid_list,
32
+
33
+ 'departments':dep_list,
34
+
35
+ 'manhour_date':$this.m_ops.manhour_date
36
+
37
+ };
38
+
39
+ export_csv(params, function(res,err){
40
+
41
+ if(err==null){
42
+
43
+ }else{
44
+
45
+ console.log("エラー");
46
+
47
+ }
48
+
49
+ });
50
+
51
+ ```
52
+
53
+
54
+
55
+ 下記がPHPのコードになります。
56
+
57
+ ```
58
+
59
+ $sids = explode(",", $params['sids']); // sidsの分割
60
+
61
+ $departments = explode(",", $params['departments']);
62
+
63
+
64
+
65
+ try {
66
+
67
+
68
+
69
+ //CSV形式で情報をファイルに出力のための準備
70
+
71
+ $csvFileName = 'hoge'.time().'.csv';
72
+
73
+ header('Content-Type: application/octet-stream');
74
+
75
+ header("Content-Disposition: attachment; filename=".$csvFileName);
76
+
77
+
78
+
79
+
80
+
81
+ $res = fopen('php://output', 'w');
82
+
83
+ if ($res === FALSE) {
84
+
85
+ throw new Exception('ファイルの書き込みに失敗しました。');
86
+
87
+ }
88
+
89
+
90
+
91
+
92
+
93
+ $sql_pjdata = "SELECT `pname`,`department` FROM hogehoge";
94
+
95
+ $res_pjdata = db_query($sql_pjdata);
96
+
97
+ $header = ['年月','社員名','部署'];
98
+
99
+ $pj_arr = []; // プロジェクト一覧
100
+
101
+ $pj_dep_arr = []; // プロジェクトに対する部署一覧
102
+
103
+ foreach($res_pjdata as $pj_values){
104
+
105
+ foreach ($pj_values as $key => $value) {
106
+
107
+ if($key == "pname"){
108
+
109
+ if(!in_array($value, $header)){
110
+
111
+ array_push($header, $value);
112
+
113
+ array_push($pj_arr, $value);
114
+
115
+ }
116
+
117
+ }
118
+
119
+ }
120
+
121
+ }
122
+
123
+
124
+
125
+
126
+
127
+ mb_convert_variables('SJIS-win', 'UTF-8', $header); // 文字コード変換 & エクセルで開けるようにする
128
+
129
+ fputcsv($res, $header); // ファイルに書き出し
130
+
131
+
132
+
133
+ for($i=0; $i<count($sids); $i++){ // sidに対するデータを取得
134
+
135
+ $para = []; // 成形したすべてのデータを保存
136
+
137
+ $sql = "SELECT `sid`,`name`,`department`,`pname`,`percentage`,`psum`,`hour_sum` from manhour_logs where `sid`=:sid and `date` like '".$params['manhour_date']."-%' order by `department`";
138
+
139
+ $sql_res = db_query($sql, ['sid'=>$sids[$i]]);
140
+
141
+
142
+
143
+
144
+
145
+ if(!empty($sql_res)){
146
+
147
+ $sid = $sql_res[0]['sid'];
148
+
149
+ $name = $sql_res[0]['name'];
150
+
151
+ $department = $sql_res[0]['department'];
152
+
153
+ $pnames = explode(",", $sql_res[0]['pname']);
154
+
155
+
156
+
157
+
158
+
159
+ $percentages = [];
160
+
161
+ $count_ave = [];
162
+
163
+ foreach($sql_res as $value){
164
+
165
+ if($value['percentage'] != null){
166
+
167
+ $percentages[] = explode(",", $value['percentage']);
168
+
169
+ }else{
170
+
171
+ $percentages[] = 0;
172
+
173
+ }
174
+
175
+ }
176
+
177
+ $count_ave = count($percentages);
178
+
179
+
180
+
181
+
182
+
183
+ $arr_sum = [];
184
+
185
+ for($j=0; $j<count($pnames); $j++){ //
186
+
187
+ foreach($percentages as $per_logs){
188
+
189
+ $arr_sum[$j] += $per_logs[$j];
190
+
191
+ }
192
+
193
+ }
194
+
195
+
196
+
197
+
198
+
199
+ $contemporary = []; // 一時的に使用する配列
200
+
201
+ $contemporary['date'] = $params['manhour_date'];
202
+
203
+ $contemporary['sid'] = $sid;
204
+
205
+ $contemporary['name'] = $name;
206
+
207
+ $contemporary['department'] = $department;
208
+
209
+
210
+
211
+
212
+
213
+ for($k=0; $k<count($pj_arr); $k++){
214
+
215
+ $key = "sum".$k; // $contemporaryの合計値を代入
216
+
217
+ for($l=0; $l<count($pnames); $l++){
218
+
219
+ if($pj_arr[$k]==$pnames[$l]){
220
+
221
+ $contemporary[$key] = round(($arr_sum[$l]/$count_ave), 1);
222
+
223
+ continue 2;
224
+
225
+ }else{
226
+
227
+ $contemporary[$key] = '';
228
+
229
+ }
230
+
231
+ }
232
+
233
+ }
234
+
235
+ array_push($para, $contemporary);
236
+
237
+ }
238
+
239
+
240
+
241
+ foreach($para as $dataInfo){ // ループしながら出力
242
+
243
+ mb_convert_variables('SJIS-win', 'UTF-8', $dataInfo); // 文字コード変換。エクセルで開けるようにする
244
+
245
+ fputcsv($res, $dataInfo); // ファイルに書き出しをする
246
+
247
+ }
248
+
249
+ }
250
+
251
+
252
+
253
+ fclose($res); // ハンドル閉じる
254
+
255
+ exit;
256
+
257
+ }catch(Exception $e){
258
+
259
+ echo $e->getMessage(); // 例外処理
260
+
261
+ }
262
+
263
+ ```