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

質問編集履歴

1

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

2017/09/12 00:36

投稿

Kobi0927i
Kobi0927i

スコア8

title CHANGED
File without changes
body CHANGED
@@ -14,4 +14,267 @@
14
14
  分かりませんが、ご教授お願いします。
15
15
 
16
16
  ちなみに開発環境では、遅延は無く
17
- 本番環境(XSERVER)のみ発生しております。
17
+ 本番環境(XSERVER)のみ発生しております。
18
+
19
+
20
+ 追記
21
+ サーバー環境
22
+ OS
23
+ 本番:CentOS Linux release 7.3.1611 (Core)
24
+ 開発:CentOS Linux release 7.3.1611 (Core)
25
+
26
+ PHP
27
+ 本番:PHP Version 7.0.18
28
+ 開発:PHP Version 7.1.8
29
+
30
+ MySql
31
+ 本番:mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
32
+ 開発:mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper
33
+
34
+ プログラム(抜粋)
35
+
36
+ プログラムは3本の構成となっておりまして
37
+ inq_phpは、データベースで検索した結果を表示して、
38
+ 画面からの入力を行います。
39
+ 入力された時に、inp.jsが呼び出され
40
+ inp.jsから、upd.phpを呼び出し
41
+ データベースの更新を行います。
42
+
43
+ 1.inq.php
44
+ <header>
45
+ <script src="./inp.js"></script>
46
+ </header>
47
+ <body>
48
+ <input type="number" onchange="isRegNum(this)" id=<?php echo htmlspecialchars($row['id']); ?>
49
+ name=<?php echo htmlspecialchars("pages|".$i); ?>
50
+ style ="background-color: #77c1e8;text-align:right;width:60px;"
51
+ type="textbox" value="<?php echo htmlspecialchars($row['pages'] ,ENT_QUOTES,'UTF-8'); ?>">
52
+ </input>
53
+ </body>
54
+
55
+ 2.inp.js
56
+ function isRegNum(obj){
57
+
58
+ var obj_value=obj.value; /* 入力値 */
59
+ var obj_name=obj.name; /* 更新カラム名 */
60
+ var obj_id=obj.id; /* DB側の更新行番号 */
61
+
62
+ result = obj_name.indexOf( "|" );
63
+ obj_names = obj_name.substr(0,result); /* DB側の更新カラム名*/
64
+ table_rows=Number(obj_name.substr(result+1)); /* 画面側の更新行番号*/
65
+
66
+ console.log(obj_value);
67
+ console.log(obj_names);
68
+ console.log(obj_id);
69
+
70
+ // 入力値のチェック
71
+ // 0から9 又は .(46)
72
+ //
73
+
74
+ var obj_value = obj_value.replace( /,/g ,"" ) ; /* カンマが入力されていたら抜き取る*/
75
+ if (obj_names !="spec") {
76
+ for(var i=0 ; i<obj_value.length; i++){
77
+ var code=obj_value.charCodeAt(i);
78
+ if ((48>code || code>57) ){
79
+ if (code != 46) {
80
+ /* 数値(0-9)と (.)以外の文字コード範囲 */
81
+ swal({
82
+ title: "エラー",
83
+ text: "半角数字とピリオド以外の文字が入力されています。"
84
+ });
85
+
86
+ //
87
+ obj.value="";
88
+ return false;
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ $.ajax({
95
+ type : "POST",
96
+ url:"upd.php",
97
+ datatype:"json",
98
+ data: {
99
+ arg1:obj_value,
100
+ arg2:obj_names,
101
+ arg3:obj_id
102
+ },
103
+ }) .done(function(data){
104
+
105
+ /* 計算値をカンマ付きにさせる。 */
106
+ var tables = document.getElementById("cost_tbl");
107
+ var shipping_fee_blk = Number(data[0]['shipping_fee_blk']);
108
+ var price1 = Number(data[0]['price1']);
109
+ var price2 = Number(data[0]['price2']);
110
+ var price3 = Number(data[0]['price3']);
111
+ var price4 = Number(data[0]['price4']);
112
+ var price5 = Number(data[0]['price5']);
113
+
114
+ /* 計算値を表示させる。 */
115
+ tables.rows[table_rows].cells[12].innerText=String(shipping_fee_blk).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
116
+ tables.rows[table_rows].cells[16].innerText=String(price1).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
117
+ tables.rows[table_rows].cells[17].innerText=String(price2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
118
+ tables.rows[table_rows].cells[18].innerText=String(price3).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
119
+ tables.rows[table_rows].cells[19].innerText=String(price4).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
120
+ tables.rows[table_rows].cells[20].innerText=String(price4).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
121
+
122
+
123
+ /*
124
+ 入力された値にもカンマを付けて再表示させる。
125
+ 注意:ここは
126
+ */
127
+ var values = String(obj_value).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
128
+
129
+ switch (obj_names){
130
+ case "exchange":
131
+ tables.rows[table_rows].cells[9].value=values;
132
+ break;
133
+ case "ratio":
134
+ tables.rows[table_rows].cells[10].value=values;
135
+ break;
136
+ case "carriage":
137
+ tables.rows[table_rows].cells[11].value=values;
138
+ break;
139
+ case "rate":
140
+ tables.rows[table_rows].cells[13].value=values;
141
+ break;
142
+ case "lic_fee":
143
+ tables.rows[table_rows].cells[14].value=values;
144
+ break;
145
+ case "adjust":
146
+ tables.rows[table_rows].cells[15].value=values;
147
+ break;
148
+ case "retail_price":
149
+ tables.rows[table_rows].cells[21].value=values;
150
+ break;
151
+ }
152
+
153
+
154
+
155
+ })
156
+ .fail(function(jqXHR, textStatus, errorThrown) {
157
+ $("#XMLHttpRequest").html("XMLHttpRequest : " + jqXHR.status);
158
+ $("#textStatus").html("textStatus : " + textStatus);
159
+ $("#errorThrown").html("errorThrown : " + errorThrown);
160
+ })
161
+
162
+ }
163
+
164
+ 3.upd.php
165
+ <?php
166
+ // ------------------------------------------------------------------
167
+ // テキストボックスよりマウスが離れたときの処理
168
+
169
+ //
170
+ // Ajax通信ではなく、直接URLを叩かれた場合はエラーメッセージを表示
171
+ // ------------------------------------------------------------------
172
+
173
+ /* 本番サーバーではJSONが使えないので、代替えソースで対応する。 */
174
+
175
+ if (!function_exists('json_encode')) {
176
+ // JSON.phpを読み込んで
177
+ require_once './js/JSON.php';
178
+ // json_encode()関数を定義する
179
+ function json_encode($words) {
180
+ $s = new Services_JSON();
181
+ return $s->encodeUnsafe($words);
182
+ }
183
+ // json_decode()関数を定義する
184
+ function json_decode($json, $assoc = false) {
185
+ $s = new Services_JSON($assoc ? SERVICES_JSON_LOOSE_TYPE : 0);
186
+ return $s->decode($json);
187
+ }
188
+ }
189
+
190
+
191
+
192
+ if (
193
+ !(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest')
194
+ && (!empty($_SERVER['SCRIPT_FILENAME']) && 'json.php' === basename($_SERVER['SCRIPT_FILENAME']))
195
+ )
196
+ {
197
+ die ('このページは直接ロードしないでください。');
198
+ }
199
+
200
+ include "./common/db/define.php";
201
+ include "./common/db/db_function.php";
202
+
203
+
204
+ try
205
+ {
206
+
207
+ // 入力情報を取得する。
208
+ $item_value = $_POST['arg1']; // 登録値
209
+ $item_col = $_POST['arg2']; // カラム名
210
+ $item_id = $_POST['arg3']; // 更新行番号
211
+ $item_value=mb_convert_kana($item_value, 'a');
212
+
213
+
214
+
215
+ //DBに接続
216
+ try {
217
+ $dbh = new PDO('mysql:host='.$db['host'].';dbname='.$db['dbname'].';charset=utf8',$db['user'],$db['pass'],array(PDO::ATTR_EMULATE_PREPARES => false));
218
+ } catch (PDOException $e) {
219
+ echo "データベースへの接続に失敗しました。<br>";
220
+ die;
221
+ }
222
+
223
+ try{
224
+ if ($item_col =='pages'){
225
+ $sql="UPDATE mst_item SET ".$item_col." = :str WHERE id=:id";
226
+ }else{
227
+ $sql="UPDATE mst_item_price SET ".$item_col." = :str WHERE id=:id";
228
+ }
229
+ $stmt = $dbh->prepare($sql);
230
+
231
+ if ($debug_flag ==1){
232
+ sys_log_write($db,"upd_cost","3","販売強化表","SQL",$sql,"");
233
+ }
234
+
235
+ $stmt -> execute( array(':str'=>$item_value , ':id'=>$item_id ));
236
+ }catch (PDOException $e) {
237
+ echo "例外キャッチ:", $e->getMessage(), "<br>";
238
+ }
239
+
240
+
241
+ //
242
+ // パッケージをコールし、計算値をセットする。
243
+ //
244
+ $sql = 'call update_cost(?,@value)';
245
+ $stmt = $dbh->prepare($sql);
246
+ $stmt -> bindValue(1, $item_id, PDO::PARAM_INT);
247
+ $stmt->execute();
248
+
249
+ $dbh=null;
250
+ $stmt=null;
251
+
252
+
253
+ // 計算値を取得する。
254
+ $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';
255
+
256
+ $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');
257
+
258
+ $stmt -> execute( array(':id'=>$item_id ));
259
+
260
+ // execute the stored procedure
261
+ while($row = $stmt -> fetch(PDO::FETCH_ASSOC)) {
262
+ $rows[]=$row;
263
+ }
264
+ $dbh=null;
265
+ $stmt=null;
266
+
267
+
268
+ //JSON形式で出力する
269
+ header('Content-Type: application/json');
270
+ echo json_encode($rows);
271
+
272
+ }
273
+ catch (PDOException $e)
274
+ {
275
+ //例外処理
276
+ sys_log_write($db,"upd_cost","3","","エラー",$e->getMessage,"");
277
+ }
278
+
279
+
280
+ ?>