質問編集履歴

1

開発環境 本番環境 ソースコード

2017/09/12 00:36

投稿

Kobi0927i
Kobi0927i

スコア8

test CHANGED
File without changes
test CHANGED
@@ -31,3 +31,529 @@
31
31
  ちなみに開発環境では、遅延は無く
32
32
 
33
33
  本番環境(XSERVER)のみ発生しております。
34
+
35
+
36
+
37
+
38
+
39
+ 追記
40
+
41
+ サーバー環境
42
+
43
+ OS
44
+
45
+ 本番:CentOS Linux release 7.3.1611 (Core)
46
+
47
+ 開発:CentOS Linux release 7.3.1611 (Core)
48
+
49
+
50
+
51
+ PHP
52
+
53
+ 本番:PHP Version 7.0.18
54
+
55
+ 開発:PHP Version 7.1.8
56
+
57
+
58
+
59
+ MySql
60
+
61
+ 本番:mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
62
+
63
+ 開発:mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper
64
+
65
+
66
+
67
+ プログラム(抜粋)
68
+
69
+
70
+
71
+ プログラムは3本の構成となっておりまして
72
+
73
+ inq_phpは、データベースで検索した結果を表示して、
74
+
75
+ 画面からの入力を行います。
76
+
77
+ 入力された時に、inp.jsが呼び出され
78
+
79
+ inp.jsから、upd.phpを呼び出し
80
+
81
+ データベースの更新を行います。
82
+
83
+
84
+
85
+ 1.inq.php
86
+
87
+ <header>
88
+
89
+ <script src="./inp.js"></script>
90
+
91
+ </header>
92
+
93
+ <body>
94
+
95
+ <input type="number" onchange="isRegNum(this)" id=<?php echo htmlspecialchars($row['id']); ?>
96
+
97
+ name=<?php echo htmlspecialchars("pages|".$i); ?>
98
+
99
+ style ="background-color: #77c1e8;text-align:right;width:60px;"
100
+
101
+ type="textbox" value="<?php echo htmlspecialchars($row['pages'] ,ENT_QUOTES,'UTF-8'); ?>">
102
+
103
+ </input>
104
+
105
+ </body>
106
+
107
+
108
+
109
+ 2.inp.js
110
+
111
+ function isRegNum(obj){
112
+
113
+
114
+
115
+ var obj_value=obj.value; /* 入力値 */
116
+
117
+ var obj_name=obj.name; /* 更新カラム名 */
118
+
119
+ var obj_id=obj.id; /* DB側の更新行番号 */
120
+
121
+
122
+
123
+ result = obj_name.indexOf( "|" );
124
+
125
+ obj_names = obj_name.substr(0,result); /* DB側の更新カラム名*/
126
+
127
+ table_rows=Number(obj_name.substr(result+1)); /* 画面側の更新行番号*/
128
+
129
+
130
+
131
+ console.log(obj_value);
132
+
133
+ console.log(obj_names);
134
+
135
+ console.log(obj_id);
136
+
137
+
138
+
139
+ // 入力値のチェック
140
+
141
+ // 0から9 又は .(46)
142
+
143
+ //
144
+
145
+
146
+
147
+ var obj_value = obj_value.replace( /,/g ,"" ) ; /* カンマが入力されていたら抜き取る*/
148
+
149
+ if (obj_names !="spec") {
150
+
151
+ for(var i=0 ; i<obj_value.length; i++){
152
+
153
+ var code=obj_value.charCodeAt(i);
154
+
155
+ if ((48>code || code>57) ){
156
+
157
+ if (code != 46) {
158
+
159
+ /* 数値(0-9)と (.)以外の文字コード範囲 */
160
+
161
+ swal({
162
+
163
+ title: "エラー",
164
+
165
+ text: "半角数字とピリオド以外の文字が入力されています。"
166
+
167
+ });
168
+
169
+
170
+
171
+ //
172
+
173
+ obj.value="";
174
+
175
+ return false;
176
+
177
+ }
178
+
179
+ }
180
+
181
+ }
182
+
183
+ }
184
+
185
+
186
+
187
+ $.ajax({
188
+
189
+ type : "POST",
190
+
191
+ url:"upd.php",
192
+
193
+ datatype:"json",
194
+
195
+ data: {
196
+
197
+ arg1:obj_value,
198
+
199
+ arg2:obj_names,
200
+
201
+ arg3:obj_id
202
+
203
+ },
204
+
205
+ }) .done(function(data){
206
+
207
+
208
+
209
+ /* 計算値をカンマ付きにさせる。 */
210
+
211
+ var tables = document.getElementById("cost_tbl");
212
+
213
+ var shipping_fee_blk = Number(data[0]['shipping_fee_blk']);
214
+
215
+ var price1 = Number(data[0]['price1']);
216
+
217
+ var price2 = Number(data[0]['price2']);
218
+
219
+ var price3 = Number(data[0]['price3']);
220
+
221
+ var price4 = Number(data[0]['price4']);
222
+
223
+ var price5 = Number(data[0]['price5']);
224
+
225
+
226
+
227
+ /* 計算値を表示させる。 */
228
+
229
+ tables.rows[table_rows].cells[12].innerText=String(shipping_fee_blk).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
230
+
231
+ tables.rows[table_rows].cells[16].innerText=String(price1).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
232
+
233
+ tables.rows[table_rows].cells[17].innerText=String(price2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
234
+
235
+ tables.rows[table_rows].cells[18].innerText=String(price3).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
236
+
237
+ tables.rows[table_rows].cells[19].innerText=String(price4).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
238
+
239
+ tables.rows[table_rows].cells[20].innerText=String(price4).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
240
+
241
+
242
+
243
+
244
+
245
+ /*
246
+
247
+ 入力された値にもカンマを付けて再表示させる。
248
+
249
+ 注意:ここは
250
+
251
+ */
252
+
253
+ var values = String(obj_value).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
254
+
255
+
256
+
257
+ switch (obj_names){
258
+
259
+ case "exchange":
260
+
261
+ tables.rows[table_rows].cells[9].value=values;
262
+
263
+ break;
264
+
265
+ case "ratio":
266
+
267
+ tables.rows[table_rows].cells[10].value=values;
268
+
269
+ break;
270
+
271
+ case "carriage":
272
+
273
+ tables.rows[table_rows].cells[11].value=values;
274
+
275
+ break;
276
+
277
+ case "rate":
278
+
279
+ tables.rows[table_rows].cells[13].value=values;
280
+
281
+ break;
282
+
283
+ case "lic_fee":
284
+
285
+ tables.rows[table_rows].cells[14].value=values;
286
+
287
+ break;
288
+
289
+ case "adjust":
290
+
291
+ tables.rows[table_rows].cells[15].value=values;
292
+
293
+ break;
294
+
295
+ case "retail_price":
296
+
297
+ tables.rows[table_rows].cells[21].value=values;
298
+
299
+ break;
300
+
301
+ }
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+ })
310
+
311
+ .fail(function(jqXHR, textStatus, errorThrown) {
312
+
313
+ $("#XMLHttpRequest").html("XMLHttpRequest : " + jqXHR.status);
314
+
315
+ $("#textStatus").html("textStatus : " + textStatus);
316
+
317
+ $("#errorThrown").html("errorThrown : " + errorThrown);
318
+
319
+ })
320
+
321
+
322
+
323
+ }
324
+
325
+
326
+
327
+ 3.upd.php
328
+
329
+ <?php
330
+
331
+ // ------------------------------------------------------------------
332
+
333
+ // テキストボックスよりマウスが離れたときの処理
334
+
335
+
336
+
337
+ //
338
+
339
+ // Ajax通信ではなく、直接URLを叩かれた場合はエラーメッセージを表示
340
+
341
+ // ------------------------------------------------------------------
342
+
343
+
344
+
345
+ /* 本番サーバーではJSONが使えないので、代替えソースで対応する。 */
346
+
347
+
348
+
349
+ if (!function_exists('json_encode')) {
350
+
351
+ // JSON.phpを読み込んで
352
+
353
+ require_once './js/JSON.php';
354
+
355
+ // json_encode()関数を定義する
356
+
357
+ function json_encode($words) {
358
+
359
+ $s = new Services_JSON();
360
+
361
+ return $s->encodeUnsafe($words);
362
+
363
+ }
364
+
365
+ // json_decode()関数を定義する
366
+
367
+ function json_decode($json, $assoc = false) {
368
+
369
+ $s = new Services_JSON($assoc ? SERVICES_JSON_LOOSE_TYPE : 0);
370
+
371
+ return $s->decode($json);
372
+
373
+ }
374
+
375
+ }
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+ if (
384
+
385
+ !(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest')
386
+
387
+ && (!empty($_SERVER['SCRIPT_FILENAME']) && 'json.php' === basename($_SERVER['SCRIPT_FILENAME']))
388
+
389
+ )
390
+
391
+ {
392
+
393
+ die ('このページは直接ロードしないでください。');
394
+
395
+ }
396
+
397
+
398
+
399
+ include "./common/db/define.php";
400
+
401
+ include "./common/db/db_function.php";
402
+
403
+
404
+
405
+
406
+
407
+ try
408
+
409
+ {
410
+
411
+
412
+
413
+ // 入力情報を取得する。
414
+
415
+ $item_value = $_POST['arg1']; // 登録値
416
+
417
+ $item_col = $_POST['arg2']; // カラム名
418
+
419
+ $item_id = $_POST['arg3']; // 更新行番号
420
+
421
+ $item_value=mb_convert_kana($item_value, 'a');
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+ //DBに接続
430
+
431
+ try {
432
+
433
+ $dbh = new PDO('mysql:host='.$db['host'].';dbname='.$db['dbname'].';charset=utf8',$db['user'],$db['pass'],array(PDO::ATTR_EMULATE_PREPARES => false));
434
+
435
+ } catch (PDOException $e) {
436
+
437
+ echo "データベースへの接続に失敗しました。<br>";
438
+
439
+ die;
440
+
441
+ }
442
+
443
+
444
+
445
+ try{
446
+
447
+ if ($item_col =='pages'){
448
+
449
+ $sql="UPDATE mst_item SET ".$item_col." = :str WHERE id=:id";
450
+
451
+ }else{
452
+
453
+ $sql="UPDATE mst_item_price SET ".$item_col." = :str WHERE id=:id";
454
+
455
+ }
456
+
457
+ $stmt = $dbh->prepare($sql);
458
+
459
+
460
+
461
+ if ($debug_flag ==1){
462
+
463
+ sys_log_write($db,"upd_cost","3","販売強化表","SQL",$sql,"");
464
+
465
+ }
466
+
467
+
468
+
469
+ $stmt -> execute( array(':str'=>$item_value , ':id'=>$item_id ));
470
+
471
+ }catch (PDOException $e) {
472
+
473
+ echo "例外キャッチ:", $e->getMessage(), "<br>";
474
+
475
+ }
476
+
477
+
478
+
479
+
480
+
481
+ //
482
+
483
+ // パッケージをコールし、計算値をセットする。
484
+
485
+ //
486
+
487
+ $sql = 'call update_cost(?,@value)';
488
+
489
+ $stmt = $dbh->prepare($sql);
490
+
491
+ $stmt -> bindValue(1, $item_id, PDO::PARAM_INT);
492
+
493
+ $stmt->execute();
494
+
495
+
496
+
497
+ $dbh=null;
498
+
499
+ $stmt=null;
500
+
501
+
502
+
503
+
504
+
505
+ // 計算値を取得する。
506
+
507
+ $sql='SELECT round(shipping_fee_blk,0) AS shipping_fee_blk,round(price1,0) AS price1,round(price2,0) AS price2,round(price3,0) AS price3,round(price4,0) AS price4,round(price5,0) AS price5 FROM mst_item_price WHERE id =:id';
508
+
509
+
510
+
511
+ $stmt = $dbh->prepare('SELECT round(shipping_fee_blk,0) AS shipping_fee_blk,round(price1,0) AS price1,round(price2,0) AS price2,round(price3,0) AS price3,round(price4,0) AS price4,round(price5,0) AS price5 FROM mst_item_price WHERE id =:id');
512
+
513
+
514
+
515
+ $stmt -> execute( array(':id'=>$item_id ));
516
+
517
+
518
+
519
+ // execute the stored procedure
520
+
521
+ while($row = $stmt -> fetch(PDO::FETCH_ASSOC)) {
522
+
523
+ $rows[]=$row;
524
+
525
+ }
526
+
527
+ $dbh=null;
528
+
529
+ $stmt=null;
530
+
531
+
532
+
533
+
534
+
535
+ //JSON形式で出力する
536
+
537
+ header('Content-Type: application/json');
538
+
539
+ echo json_encode($rows);
540
+
541
+
542
+
543
+ }
544
+
545
+ catch (PDOException $e)
546
+
547
+ {
548
+
549
+ //例外処理
550
+
551
+ sys_log_write($db,"upd_cost","3","","エラー",$e->getMessage,"");
552
+
553
+ }
554
+
555
+
556
+
557
+
558
+
559
+ ?>