質問編集履歴

1

当初コードを<code>内に入れておらず、見えにくかったので改善しました。

2021/05/30 09:08

投稿

tomato39
tomato39

スコア3

test CHANGED
File without changes
test CHANGED
@@ -26,77 +26,155 @@
26
26
 
27
27
  ここがおかしいからエラーが出ているのでは?という箇所ありましたら教えてください。
28
28
 
29
-
30
-
31
- ―――コード↓―――
29
+ ```ここに言語を入力
32
-
33
-
34
30
 
35
31
  <?php
36
32
 
37
- $host = 'localhost';
33
+ $host     = localhost’;
38
-
34
+
39
- $username = '割愛します';
35
+ $username = '割愛します';
40
-
36
+
41
- $password = '割愛します';
37
+ $password = '割愛します';
42
-
38
+
43
- $dbname = '割愛します';
39
+ $dbname = '割愛します';
44
-
40
+
45
- $charset = 'utf8';
41
+ $charset = 'utf8';
42
+
43
+
44
+
45
+ // MySQL用のDSN文字列
46
+
47
+ $dsn = 'mysql:dbname='.$dbname.';host='.$host.';charset='.$charset;
48
+
49
+
50
+
51
+ //エラー項目を入れる配列
52
+
53
+ $error = [];
54
+
55
+ //空配列
56
+
57
+ $data = [];
58
+
59
+ //画像
60
+
61
+ $img_dir = './img/';
62
+
63
+ $new_img_filename= '';
46
64
 
47
65
 
48
66
 
49
- // MySQL用のDSN文字列
50
-
51
- $dsn = 'mysql:dbname='.$dbname.';host='.$host.';charset='.$charset;
52
-
53
-
54
-
55
- //エラー項目入れ配列
67
+ //名前と値段調べ
56
-
68
+
57
- $error = [];
69
+ if($_SERVER['REQUEST_METHOD'] === 'POST'){
58
-
70
+
59
- //空配列
71
+ //名前がセットされているか確認
60
-
61
- $data = [];
72
+
62
-
63
- //画像
73
+ if(isset($_POST['drink_name'])==TRUE){
64
-
74
+
65
- $img_dir = './img/';
75
+ $drink_name = $_POST['drink_name'];
76
+
66
-
77
+ }
78
+
67
- $new_img_filename= '';
79
+ if($drink_name===''){
80
+
81
+ $error[] = '商品名を記入して下さい';
82
+
83
+ }
84
+
85
+ //値段がセットされているか・半角か確認
86
+
87
+ if(isset($_POST['price']) ===TRUE){
88
+
89
+ $price = $_POST['price'];
90
+
91
+ }
92
+
93
+ if(preg_match('/\A[0-9]+\z/',$price)==0){
94
+
95
+ $error[]='半角で数値を入力して下さい00';
96
+
97
+ }
98
+
99
+ }
68
100
 
69
101
 
70
102
 
103
+ // アップロード画像ファイルの保存
104
+
105
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
106
+
107
+ // HTTP POST でファイルがアップロードされたかどうかチェック
108
+
109
+ if (is_uploaded_file($_FILES['new_img']['tmp_name']) === TRUE) {
110
+
71
- //名前と値段調べる
111
+ // 画像の拡張子取得
112
+
113
+ $extension = pathinfo($_FILES['new_img']['name'], PATHINFO_EXTENSION);
114
+
115
+ // 指定の拡張子であるかどうかチェック
116
+
117
+ if ($extension === 'jpg' || $extension === 'jpeg') {
118
+
119
+ // 保存する新しいファイル名の生成(ユニークな値を設定する)
120
+
121
+ $new_img_filename = sha1(uniqid(mt_rand(), true)). '.' . $extension;
122
+
123
+ // 同名ファイルが存在するかどうかチェック
124
+
125
+ if (is_file($img_dir . $new_img_filename) !== TRUE) {
126
+
127
+ // アップロードされたファイルを指定ディレクトリに移動して保存
128
+
129
+ if (move_uploaded_file($_FILES['new_img']['tmp_name'], $img_dir . $new_img_filename) !== TRUE) {
130
+
131
+ $error[] = 'ファイルアップロードに失敗しました';
132
+
133
+ }
134
+
135
+ } else {
136
+
137
+ $error[] = 'ファイルアップロードに失敗しました。再度お試しください。';
138
+
139
+ }
140
+
141
+ } else {
142
+
143
+ $error[] = 'ファイル形式が異なります。画像ファイルはJPEGのみ利用可能です。';
144
+
145
+ }
146
+
147
+ } else {
148
+
149
+ $error[] = 'ファイルを選択してください';
150
+
151
+ }
152
+
153
+ }
154
+
155
+
156
+
157
+ //stock numberが半角かどうか調べる
158
+
159
+ /* ※エラー: Undefined variablesとでる。。*/
160
+
161
+ /*※エラー:数値をprice*に入れると 、こちらが反応する*/
72
162
 
73
163
  if($_SERVER['REQUEST_METHOD'] === 'POST'){
74
164
 
75
- //名前がセットされているか確認
165
+ //名前がセットされているか確認
76
-
166
+
77
- if(isset($_POST['drink_name'])==TRUE){
167
+ if(isset($_POST['stock'])==TRUE){
78
-
168
+
79
- $drink_name = $_POST['drink_name'];
169
+ $stock = $_POST['stock'];
80
-
170
+
81
- }
171
+ }
82
-
83
- if($drink_name===''){
172
+
84
-
85
- $error[] = '商品名を記入して下さい';
86
-
87
- }
88
-
89
- //値段がセットされているか・半角か確認
90
-
91
- if(isset($_POST['price']) ===TRUE){
92
-
93
- $price = $_POST['price'];
94
-
95
- }
96
-
97
- if(preg_match('/\A[0-9]+\z/',$price)==0){
173
+ if(preg_match('/\A[0-9]+\z/',$stock)==0){
98
-
174
+
99
- $error[]='半角で数値を入力して下さい00';
175
+ $error[]='半角で数値を入力して下さい01';
176
+
177
+ /*このエラーで判断する限り、エラーはここで既に発生している*/
100
178
 
101
179
  }
102
180
 
@@ -104,180 +182,98 @@
104
182
 
105
183
 
106
184
 
107
- // アップロード画像ファイルの
108
-
109
- if ($_SERVER['REQUEST_METHOD'] === 'POST') {
110
-
111
- // HTTP POST でファイルがアップロードされたかどうかチェック
112
-
113
- if (is_uploaded_file($_FILES['new_img']['tmp_name']) === TRUE) {
114
-
115
- // 画像の拡張子を取得
116
-
117
- $extension = pathinfo($_FILES['new_img']['name'], PATHINFO_EXTENSION);
118
-
119
- // 指定の拡張子であるかどうかチェッ
120
-
121
- if ($extension === 'jpg' || $extension === 'jpeg') {
122
-
123
- // 保存する新しいファイル名の生成(ユニークな値を設定する)
124
-
125
- $new_img_filename = sha1(uniqid(mt_rand(), true)). '.' . $extension;
126
-
127
- // 同名ファイルが存在するかどうかチェック
128
-
129
- if (is_file($img_dir . $new_img_filename) !== TRUE) {
130
-
131
- // アップロードされたファイルを指定ディレクトリに移動して保存
132
-
133
- if (move_uploaded_file($_FILES['new_img']['tmp_name'], $img_dir . $new_img_filename) !== TRUE) {
134
-
135
- $error[] = 'ファイルアップロードに失敗しました';
136
-
137
- }
138
-
139
- } else {
140
-
141
- $error[] = 'ファイルアップロードに失敗しました。再度お試しください。';
142
-
143
- }
144
-
145
- } else {
146
-
147
- $error[] = 'ファイル形式が異なります。画像ファイルはJPEGのみ利用可能です。';
148
-
149
- }
150
-
151
- } else {
152
-
153
- $error[] = 'ファイルを選択してください';
154
-
155
- }
185
+ // アップロードした新しい画像ファイル登録、既の画像ファイル名の取得
186
+
187
+ try {
188
+
189
+ $dbh = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4'));
190
+
191
+ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
192
+
193
+ $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
194
+
195
+
196
+
197
+ //トランザション開始
198
+
199
+ $dbh->beginTransaction();
200
+
201
+ // エラーがなければ、アップロードした新しい画像ファイル名・名前・保存 + stock数登録
202
+
203
+ try{
204
+
205
+ if(empty($error)===TRUE && $_SERVER['REQUEST_METHOD']==='POST'){
206
+
207
+ //「ドリンク商品情報テーブル」にデータ書き込み
208
+
209
+ $sql = 'INSERT INTO test_drink_master(img_file_name, drink_name, price, create_datetime) VALUES(?, ?, ?, NOW())';
210
+
211
+ $stmt = $dbh->prepare($sql);
212
+
213
+ $stmt->bindValue(1, $new_img_filename, PDO::PARAM_STR);
214
+
215
+ $stmt->bindValue(2, $drink_name, PDO::PARAM_STR);
216
+
217
+ $stmt->bindValue(3, $price, PDO::PARAM_STR);
218
+
219
+ var_dump($sql);
220
+
221
+ $stmt->execute();
222
+
223
+ //↓のテーブルにidを
224
+
225
+ $id=$sql->lastInsertId();
226
+
227
+
228
+
229
+ //「ドリンク在庫情報テーブル」にデータ書き込み
230
+
231
+ $sql = 'INSERT INTO test_drink_stock(drink_id, stock, create_datetime) VALUES(?, ?, NOW())';
232
+
233
+ $stmt = $dbh->prepare($sql);
234
+
235
+ $stmt->bindValue(1, $id, PDO::PARAM_STR);
236
+
237
+ $stmt->bindValue(2, $stock, PDO::PARAM_STR);
238
+
239
+ $stmt->execute();
240
+
241
+
242
+
243
+ //コミット処理
244
+
245
+ $dbh->commit();
246
+
247
+ }
248
+
249
+ } catch(PDOException $e){
250
+
251
+ //ロールバック処理
252
+
253
+ $dbh->rollback();
254
+
255
+ $error[] = '登録に失敗しました。理由:'.$e->getMessage();
256
+
257
+ }
258
+
259
+ //テーブルからの読み込み
260
+
261
+ $sql = 'SELECT * FROM test_drink_master ORDER BY create_datetime DESC';
262
+
263
+ $stmt = $dbh->prepare($sql);
264
+
265
+ $stmt->execute();
266
+
267
+ $data = $stmt->fetchAll();
156
268
 
157
269
  }
158
270
 
159
-
160
-
161
- //stock numberが半角かどうか調べる
162
-
163
- /* ※エラー: Undefined variablesとでる。。*/
164
-
165
- /*※エラー:数値をprice*に入れると 、こちらが反応する*/
166
-
167
- if($_SERVER['REQUEST_METHOD'] === 'POST'){
168
-
169
- //名前がセットされているか確認
170
-
171
- if(isset($_POST['stock'])==TRUE){
172
-
173
- $stock = $_POST['stock'];
174
-
175
- }
176
-
177
- if(preg_match('/\A[0-9]+\z/',$stock)==0){
178
-
179
- $error[]='半角で数値を入力して下さい01';
180
-
181
- /*このエラーで判断する限り、エラーはここで既に発生している*/
182
-
183
- }
184
-
185
- }
186
-
187
-
188
-
189
- // アップロードした新しい画像ファイル名の登録、既存の画像ファイル名の取得
190
-
191
- try {
192
-
193
- $dbh = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4'));
194
-
195
- $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
196
-
197
- $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
198
-
199
-
200
-
201
- //トランザクション開始
202
-
203
- $dbh->beginTransaction();
204
-
205
- // エラーがなければ、アップロードした新しい画像ファイル名・名前・値段を保存 + stock数登録
206
-
207
- try{
208
-
209
- if(empty($error)===TRUE && $_SERVER['REQUEST_METHOD']==='POST'){
210
-
211
- //「ドリンク商品情報テーブル」にデータ書き込み
212
-
213
- $sql = 'INSERT INTO test_drink_master(img_file_name, drink_name, price, create_datetime) VALUES(?, ?, ?, NOW())';
214
-
215
- $stmt = $dbh->prepare($sql);
216
-
217
- $stmt->bindValue(1, $new_img_filename, PDO::PARAM_STR);
218
-
219
- $stmt->bindValue(2, $drink_name, PDO::PARAM_STR);
220
-
221
- $stmt->bindValue(3, $price, PDO::PARAM_STR);
222
-
223
- var_dump($sql);
224
-
225
- $stmt->execute();
226
-
227
- //↓のテーブルにidを
228
-
229
- $id=$sql->lastInsertId();
230
-
231
-
232
-
233
- //「ドリンク在庫情報テーブル」にデータ書き込み
234
-
235
- $sql = 'INSERT INTO test_drink_stock(drink_id, stock, create_datetime) VALUES(?, ?, NOW())';
236
-
237
- $stmt = $dbh->prepare($sql);
238
-
239
- $stmt->bindValue(1, $id, PDO::PARAM_STR);
240
-
241
- $stmt->bindValue(2, $stock, PDO::PARAM_STR);
242
-
243
- $stmt->execute();
244
-
245
-
246
-
247
- //コミット処理
248
-
249
- $dbh->commit();
250
-
251
- }
252
-
253
- } catch(PDOException $e){
271
+ catch(PDOException $e){
254
-
255
- //ロールバック処理
272
+
256
-
257
- $dbh->rollback();
258
-
259
- $error[] = '登録に失敗しました。理由:'.$e->getMessage();
273
+ $error[] = '接続できせんでした。理由:'.$e->getMessage();
260
-
261
- }
262
-
263
- //テーブルからの読み込み
264
-
265
- $sql = 'SELECT * FROM test_drink_master ORDER BY create_datetime DESC';
266
-
267
- $stmt = $dbh->prepare($sql);
268
-
269
- $stmt->execute();
270
-
271
- $data = $stmt->fetchAll();
272
274
 
273
275
  }
274
276
 
275
- catch(PDOException $e){
276
-
277
- $error[] = '接続できませんでした。理由:'.$e->getMessage();
278
-
279
- }
280
-
281
277
  ?>
282
278
 
283
279
  <!DOCTYPE html>
@@ -389,3 +385,5 @@
389
385
   </body>
390
386
 
391
387
  </html>
388
+
389
+ ```