質問編集履歴

1

teratailの記法を参考に編集&PDOメソッドだと知ることができたのでアロー演算子でメソッドを使っているがいまだデータベースに登録されないので独習PHPのオブジェクト志向の部分を読んでから再チャレ

2020/05/17 08:55

投稿

cawauchi
cawauchi

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-
4
-
5
- ここに質問内容を詳しく書いてください。
3
+ データベースへ値の登録
6
-
7
- (例)PHP(CakePHP)で●●なシステムを作っています。
8
-
9
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
10
-
11
-
12
4
 
13
5
  ### 発生している問題・エラーメッセージ
14
6
 
@@ -16,416 +8,402 @@
16
8
 
17
9
  エラーは出ておらず、DB連携のtryは接続に成功しています。
18
10
 
11
+ ### 該当のソースコード
12
+
13
+ ```php
14
+
15
+ register.php
16
+
17
+ <?php
18
+
19
+ // ここでセッションに記録しないとページが遷移した時にPOSTの情報が保持されない
20
+
21
+ session_start();
22
+
23
+
24
+
25
+ if (!empty($_POST)) {
26
+
27
+
28
+
29
+ // フォームのバリデーション
30
+
31
+ if ($_POST['your_name'] =='') {
32
+
33
+ $error['your_name'] = 'blank';
34
+
35
+ }
36
+
37
+
38
+
39
+ if ($_POST['email'] =='') {
40
+
41
+ $error['your_email'] = 'blank';
42
+
43
+ }
44
+
45
+
46
+
47
+ if ($_POST['your_name'] =='') {
48
+
49
+ $error['your_name'] = 'blank';
50
+
51
+ }
52
+
53
+
54
+
55
+ // 最初ここcount()で判定してたけどcountは配列の要素の数にしか使えないのだった
56
+
57
+ if (strlen($_POST['password']) < 4) {
58
+
59
+ $error['password'] = 'lnegth';
60
+
61
+ }
62
+
63
+
64
+
65
+ if ($_POST['password'] != $_POST['password2']) {
66
+
67
+ $error['password'] = 'wrong';
68
+
69
+ }
70
+
71
+ if (!isset($_POST['check'])) {
72
+
73
+ $error['check'] = 'empty';
74
+
75
+ }
76
+
77
+
78
+
79
+ if (empty($error)) {
80
+
81
+ // $_POSTの情報を$_SESSION['join']の中に格納している
82
+
83
+ // 次のページで使うには$_SESSION['join']['hogeehoge']で利用できる
84
+
85
+ $_SESSION['join'] = $_POST;
86
+
87
+ header('Location:confirm.php');
88
+
89
+ exit();
90
+
91
+ }
92
+
93
+ }
94
+
95
+
96
+
97
+ print_r($error);
98
+
99
+
100
+
101
+ ?>
102
+
103
+ <!DOCTYPE html>
104
+
105
+ <html lang="ja">
106
+
107
+ <head>
108
+
109
+ <meta charset="UTF-8" />
110
+
111
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
112
+
113
+ <title>Document</title>
114
+
115
+ </head>
116
+
117
+ <body>
118
+
119
+ <form action="./register.php" method="post">
120
+
121
+ <label for="name"
122
+
123
+ >お名前<br />
124
+
125
+ <?php if($error['your_name'] === 'blank'): ?>
126
+
127
+ <p>空白です</p>
128
+
129
+ <?php endif; ?>
130
+
131
+ <input type="text" name="your_name" id="name" /> </label
132
+
133
+ ><br /><br />
134
+
135
+ <label for="email"
136
+
137
+ >メールアドレス<br />
138
+
139
+ <?php if($error['email'] === 'blank'): ?>
140
+
141
+ <p>空白です</p>
142
+
143
+ <?php endif; ?>
144
+
145
+ <input type="email" name="email" autocomplete="off"/> </label
146
+
147
+ ><br /><br />
148
+
149
+ <label for="password"
150
+
151
+ >パスワード<br />
152
+
153
+ <?php if($error['password'] === 'blank'): ?>
154
+
155
+ <p>空白です</p>
156
+
157
+ <?php endif; ?>
158
+
159
+ <?php if($error['password'] === 'length'): ?>
160
+
161
+ <p>長さがたりません</p>
162
+
163
+ <?php endif; ?>
164
+
165
+ <?php if($error['password'] === 'wrong'): ?>
166
+
167
+ <p>確認用のパスワードと違います</p>
168
+
169
+ <?php endif; ?>
170
+
171
+ <input type="password" name="password" id="password" /> </label
172
+
173
+ ><br /><br />
174
+
175
+ <label for="password2"
176
+
177
+ >パスワード再入力<br />
178
+
179
+ <input type="password" name="password2" id="password2" /> </label
180
+
181
+ ><br /><br />
182
+
183
+ <label for="url"
184
+
185
+ >ホームページ<br />
186
+
187
+ <input type="text" name="url" /> </label
188
+
189
+ ><br /><br />
190
+
191
+ <label for="gender"
192
+
193
+ >性別<br />
194
+
195
+ <input type="radio" name="gender" value="man" />男性
196
+
197
+ <input type="radio" name="gender" value="woman" />女性 </label
198
+
199
+ ><br /><br />
200
+
201
+ <label for="age"
202
+
203
+ >年齢<br />
204
+
205
+ <input
206
+
207
+ type="number"
208
+
209
+ name="age"
210
+
211
+ id="age"
212
+
213
+ placeholder="選択してください"
214
+
215
+ /> </label
216
+
217
+ ><br /><br />
218
+
219
+ <label for="check"> <input type="checkbox" name="check" /> </label
220
+
221
+ >注意事項に同意する<br /><br />
222
+
223
+ <?php if($error['check'] === 'empty'): ?>
224
+
225
+ <p>チェックがされていません</p>
226
+
227
+ <?php endif; ?>
228
+
229
+ <input type="submit" value="送信する" name="submited" />
230
+
231
+ </form>
232
+
233
+ </body>
234
+
235
+ </html>
236
+
237
+
238
+
19
239
  ```
20
240
 
21
-
22
-
23
-
24
-
25
- ### 該当のソースコード
241
+ ```PHP
26
-
27
-
28
-
29
- ---------------------------------------------------------------------------------------
242
+
30
-
31
- register.php
243
+ confirm.php
32
244
 
33
245
  <?php
34
246
 
35
-
36
-
37
- // ここでセッションに記録しないとページが遷移した時にPOSTの情報が保持されない
247
+ // if(!isset($_SESSION['join'])) {
248
+
249
+ // header('Location:register.php');
250
+
251
+ // exit();
252
+
253
+ // }
38
254
 
39
255
  session_start();
40
256
 
41
257
 
42
258
 
43
- if (!empty($_POST)) {
44
-
45
-
46
-
47
- // フォームのバリデーション
48
-
49
- if ($_POST['your_name'] =='') {
50
-
51
- $error['your_name'] = 'blank';
52
-
53
- }
54
-
55
-
56
-
57
- if ($_POST['email'] =='') {
58
-
59
- $error['your_email'] = 'blank';
60
-
61
- }
62
-
63
-
64
-
65
- if ($_POST['your_name'] =='') {
66
-
67
- $error['your_name'] = 'blank';
68
-
69
- }
70
-
71
-
72
-
73
- // 最初ここcount()で判定してたけどcountは配列の要素の数にしか使えないのだった
74
-
75
- if (strlen($_POST['password']) < 4) {
76
-
77
- $error['password'] = 'lnegth';
78
-
79
- }
80
-
81
-
82
-
83
- if ($_POST['password'] != $_POST['password2']) {
84
-
85
- $error['password'] = 'wrong';
86
-
87
- }
88
-
89
- if (!isset($_POST['check'])) {
90
-
91
- $error['check'] = 'empty';
92
-
93
- }
94
-
95
-
96
-
97
- if (empty($error)) {
98
-
99
- // $_POSTの情報を$_SESSION['join']の中に格納している
100
-
101
- // 次のページで使うには$_SESSION['join']['hogeehoge']で利用できる
102
-
103
- $_SESSION['join'] = $_POST;
104
-
105
- header('Location:confirm.php');
259
+ require './db_connetction.php';
260
+
261
+
262
+
106
-
263
+ // htmlspecialcharsで入力でのXSS防止
264
+
107
- exit();
265
+ function h($str) {
108
-
266
+
109
- }
267
+ return htmlspecialchars($str,ENT_QUOTES);
110
268
 
111
269
  }
112
270
 
113
271
 
114
272
 
273
+ // データベースに入力ができない
274
+
275
+ if(!empty($_POST)) {
276
+
277
+ $stmt = $pdo->prepare('INSERT INTO users SET name = ? , email = ? , password = ? , gender = ? , age = ?');
278
+
279
+ $stmt->bindValue(1 , $_SESSION['join']['your_name']);
280
+
281
+ $stmt->bindValue(2 , $_SESSION['join']['email']);
282
+
283
+ $stmt->bindValue(3 , sha1($_SESSION['join']['password']));
284
+
285
+ $stmt->bindValue(4 , $_SESSION['join']['gender']);
286
+
287
+ $stmt->bindValue(5 , $_SESSION['join']['age']);
288
+
115
- print_r($error);
289
+ $stmt-> execute();
290
+
291
+ }
292
+
293
+
294
+
295
+ var_dump($_SESSION['join']);
296
+
297
+
116
298
 
117
299
 
118
300
 
119
301
  ?>
120
302
 
303
+
304
+
121
305
  <!DOCTYPE html>
122
306
 
123
307
  <html lang="ja">
124
308
 
125
- <head>
126
-
127
- <meta charset="UTF-8" />
128
-
129
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
130
-
131
- <title>Document</title>
132
-
133
- </head>
134
-
135
- <body>
136
-
137
- <form action="./register.php" method="post">
138
-
139
- <label for="name"
140
-
141
- >お名前<br />
142
-
143
- <?php if($error['your_name'] === 'blank'): ?>
144
-
145
- <p>空白です</p>
146
-
147
- <?php endif; ?>
148
-
149
- <input type="text" name="your_name" id="name" /> </label
150
-
151
- ><br /><br />
152
-
153
- <label for="email"
154
-
155
- >メールアドレス<br />
156
-
157
- <?php if($error['email'] === 'blank'): ?>
158
-
159
- <p>空白です</p>
160
-
161
- <?php endif; ?>
162
-
163
- <input type="email" name="email" autocomplete="off"/> </label
164
-
165
- ><br /><br />
166
-
167
- <label for="password"
168
-
169
- >パスワード<br />
170
-
171
- <?php if($error['password'] === 'blank'): ?>
172
-
173
- <p>空白です</p>
174
-
175
- <?php endif; ?>
176
-
177
- <?php if($error['password'] === 'length'): ?>
178
-
179
- <p>長さがたりません</p>
180
-
181
- <?php endif; ?>
182
-
183
- <?php if($error['password'] === 'wrong'): ?>
184
-
185
- <p>確認用のパスワードと違います</p>
186
-
187
- <?php endif; ?>
188
-
189
- <input type="password" name="password" id="password" /> </label
190
-
191
- ><br /><br />
192
-
193
- <label for="password2"
194
-
195
- >パスワード再入力<br />
196
-
197
- <input type="password" name="password2" id="password2" /> </label
198
-
199
- ><br /><br />
200
-
201
- <label for="url"
202
-
203
- >ホームページ<br />
204
-
205
- <input type="text" name="url" /> </label
206
-
207
- ><br /><br />
208
-
209
- <label for="gender"
210
-
211
- >性別<br />
212
-
213
- <input type="radio" name="gender" value="man" />男性
214
-
215
- <input type="radio" name="gender" value="woman" />女性 </label
216
-
217
- ><br /><br />
218
-
219
- <label for="age"
220
-
221
- >年齢<br />
222
-
223
- <input
224
-
225
- type="number"
226
-
227
- name="age"
228
-
229
- id="age"
230
-
231
- placeholder="選択してください"
232
-
233
- /> </label
234
-
235
- ><br /><br />
236
-
237
- <label for="check"> <input type="checkbox" name="check" /> </label
238
-
239
- >注意事項に同意する<br /><br />
240
-
241
- <?php if($error['check'] === 'empty'): ?>
242
-
243
- <p>チェックがされていません</p>
244
-
245
- <?php endif; ?>
246
-
247
- <input type="submit" value="送信する" name="submited" />
248
-
249
- </form>
250
-
251
- </body>
309
+ <head>
310
+
311
+ <meta charset="UTF-8">
312
+
313
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
314
+
315
+ <title>Document</title>
316
+
317
+ </head>
318
+
319
+ <body>
320
+
321
+ <form action="./thanks.php" method="post">
322
+
323
+ <label for="name">お名前:<?php echo h($_SESSION['join']['your_name']) ?><br>
324
+
325
+ </label><br><br>
326
+
327
+ <label for="email">メールアドレス:<?php echo h($_SESSION['join']['email']) ?><br>
328
+
329
+ </label><br><br>
330
+
331
+ <label for="password">パスワード:表示されません<br>
332
+
333
+ </label><br><br>
334
+
335
+ <label for="url">ホームページ:<?php echo h($_SESSION['join']['url']) ?>
336
+
337
+ </label><br><br>
338
+
339
+ <label for="gender">性別:<?php echo h($_SESSION['join']['gender']) ?><br>
340
+
341
+ </label><br><br>
342
+
343
+ <label for="age">年齢<?php echo h($_SESSION['join']['age']) ?><br>
344
+
345
+ </label><br><br>
346
+
347
+ <p>この情報でお間違い無いですか?</p>
348
+
349
+ <input type="submit" value="間違い無いので送信する" name="submited">
350
+
351
+ </form>
352
+
353
+ </body>
252
354
 
253
355
  </html>
254
356
 
255
-
357
+ ```
256
-
358
+
359
+
360
+
257
- ```PHP
361
+ ```php
258
-
259
- コード
362
+
260
-
261
- ----------------------------------------------------------------------------
262
-
263
- confirm.php
363
+ db_connection.php
264
364
 
265
365
  <?php
266
366
 
267
- session_start();
367
+
268
-
269
-
270
-
368
+
271
- require './db_connetction.php';
369
+ const DB_HOST = 'mysql:dbname=udemy_php;host=127.0.0.1';
272
-
273
-
274
-
275
- // htmlspecialcharsで入力でのXSS防止
370
+
276
-
277
- function h($str) {
278
-
279
- return htmlspecialchars($str,ENT_QUOTES);
280
-
281
- }
282
-
283
-
284
-
285
- // データベースに入力ができない
286
-
287
- if(!empty($_POST)) {
288
-
289
- $stmt = $pdo->prepare('INSERT INTO users SET name = ? , email = ? , password = ? , gender = ? , age = ?');
290
-
291
- $stmt =bindValue(1 , $_SESSION['join']['your_name']);
292
-
293
- $stmt =bindValue(2 , $_SESSION['join']['email']);
294
-
295
- $stmt =bindValue(3 , sha1($_SESSION['join']['password']));
296
-
297
- $stmt =bindValue(4 , $_SESSION['join']['gender']);
298
-
299
- $stmt =bindValue(5 , $_SESSION['join']['age']);
300
-
301
- $stmt = execute();
302
-
303
- }
304
-
305
-
306
-
307
- var_dump($_SESSION['join']);
371
+ const DB_USER = 'php_user';
308
-
372
+
309
- if(!isset($_SESSION['join'])) {
373
+ const DB_PASSWORD = 'password123';
374
+
375
+
376
+
377
+
378
+
310
-
379
+ try {
380
+
381
+ $pdo = new PDO(DB_HOST,DB_USER,DB_PASSWORD,[
382
+
383
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
384
+
385
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
386
+
387
+ PDO::ATTR_EMULATE_PREPARES => false,
388
+
389
+ ]);
390
+
311
- header('Location:register.php');
391
+ echo '接続成功';
392
+
393
+
394
+
395
+ } catch(PDOException $e){
396
+
397
+ echo '接続失敗' . $e->getMessage() . "\n";
312
398
 
313
399
  exit();
314
400
 
315
- }
401
+ };
316
-
317
-
318
-
319
- ?>
320
-
321
-
322
-
323
- <!DOCTYPE html>
324
-
325
- <html lang="ja">
326
-
327
- <head>
328
-
329
- <meta charset="UTF-8">
330
-
331
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
332
-
333
- <title>Document</title>
334
-
335
- </head>
336
-
337
- <body>
338
-
339
- <form action="./thanks.php" method="post">
340
-
341
- <label for="name">お名前:<?php echo h($_SESSION['join']['your_name']) ?><br>
342
-
343
- </label><br><br>
344
-
345
- <label for="email">メールアドレス:<?php echo h($_SESSION['join']['email']) ?><br>
346
-
347
- </label><br><br>
348
-
349
- <label for="password">パスワード:表示されません<br>
350
-
351
- </label><br><br>
352
-
353
- <label for="url">ホームページ:<?php echo h($_SESSION['join']['url']) ?>
354
-
355
- </label><br><br>
356
-
357
- <label for="gender">性別:<?php echo h($_SESSION['join']['gender']) ?><br>
358
-
359
- </label><br><br>
360
-
361
- <label for="age">年齢<?php echo h($_SESSION['join']['age']) ?><br>
362
-
363
- </label><br><br>
364
-
365
- <p>この情報でお間違い無いですか?</p>
366
-
367
- <input type="submit" value="間違い無いので送信する" name="submited">
368
-
369
- </form>
370
-
371
- </body>
372
-
373
- </html>
374
402
 
375
403
  ```
376
404
 
377
405
 
378
406
 
379
- ```
380
-
381
- ----------------------------------------------------------------------------
382
-
383
- db_connection.php
384
-
385
-
386
-
387
- <?php
388
-
389
-
390
-
391
- const DB_HOST = 'mysql:dbname=udemy_php;host=127.0.0.1';
392
-
393
- const DB_USER = 'php_user';
394
-
395
- const DB_PASSWORD = 'password123';
396
-
397
-
398
-
399
-
400
-
401
- try {
402
-
403
- $pdo = new PDO(DB_HOST,DB_USER,DB_PASSWORD,[
404
-
405
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
406
-
407
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
408
-
409
- PDO::ATTR_EMULATE_PREPARES => false,
410
-
411
- ]);
412
-
413
- echo '接続成功';
414
-
415
-
416
-
417
- } catch(PDOException $e){
418
-
419
- echo '接続失敗' . $e->getMessage() . "\n";
420
-
421
- exit();
422
-
423
- };
424
-
425
- ---------------------------------------------------------------------------
426
-
427
-
428
-
429
407
 
430
408
 
431
409