質問編集履歴

4

編集

2019/06/19 10:14

投稿

ariiiiiga
ariiiiiga

スコア66

test CHANGED
@@ -1 +1 @@
1
- preg_matchでフォームの入力を制限した
1
+ preg_matchでフォームの入力を制限したら画面が真っ白になる
test CHANGED
File without changes

3

修正

2019/06/19 10:14

投稿

ariiiiiga
ariiiiiga

スコア66

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ②の確認画面(confirm.php)でpreg_matchを使って入力をを許可しデータベースへ入れるもしくははじくを選別したいのですが、現状form.phpで送信すると入力がなくてもerror.phpへ移動してしまいます。
5
+ ②の確認画面(confirm.php)でpreg_matchを使って入力をを許可しデータベースへ入れるもしくははじくを選別したいのですが、現状form.phpで送信するとconfirm.phpが真っ白になってしまいます。
6
6
 
7
7
 
8
8
 
@@ -64,7 +64,7 @@
64
64
 
65
65
  <?php
66
66
 
67
- if (preg_match("/\A[a-zA-Z0-90-9ぁ-んァ-ヶー一-龠、。\n\r]\z/mu",$_POST['comment'])){
67
+ if (preg_match("/\A[a-zA-Z0-90-9ぁ-んァ-ヶー一-龠、。\n\r]\z/mu",$_POST['comment'])|| ($_POST['comment'] == null)){
68
68
 
69
69
 
70
70
 

2

情報の追加

2019/06/19 10:13

投稿

ariiiiiga
ariiiiiga

スコア66

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- 完了画面(submit.php)でpreg_matchを使って日本語、数字、アルファベット、(、。)を許可しデータベースへ入れるもしくははじくを選別したいのですが<a href="#">URL</a>のようなURLがはじかれとなくそのままDB入ってしまいます。用意しているエラーメッセージも出力されずどこを直せばいいのかわかりません。
5
+ 確認画面(confirm.php)でpreg_matchを使って入力許可しデータベースへ入れるもしくははじくを選別したいのですが、現状form.phpで送信すると入力がなくてもerror.php移動してしまいます。
6
+
7
+
8
+
9
+ confrim.phpでpreg_matchのif文を追加するまでは動作していたので、そこが原因だと思うのですが、原因がわかりません。
6
10
 
7
11
 
8
12
 
@@ -16,36 +20,124 @@
16
20
 
17
21
 
18
22
 
23
+ 入力したい文字
19
24
 
25
+ 大小数字、日本語、大小アルファベット、空欄、改行、。
26
+
27
+
28
+
29
+ 拒否したい文字の例
30
+
31
+ <a href="">URL</a>
32
+
33
+ https://teratail.com/questionsのようなURL
34
+
35
+ javascript文
36
+
37
+ ```ここに言語を入力
38
+
39
+ form.php
40
+
41
+ var_dump($shop_result['shop_id']); //->数字
42
+
43
+ <form action="confirm.php?shop_id=<?=htmlspecialchars( $shop_result['shop_id'], ENT_QUOTES, 'UTF-8');?>" method="post">
44
+
45
+
46
+
47
+ <div class="form-group">
48
+
49
+ <label for="InputReserveComment" >コメント</label><br>
50
+
51
+ <textarea col="10" rows="2" name="comment" class="form-control" placeholder="予約条件など"></textarea><br><br>
52
+
53
+ </div>
54
+
55
+ <input id="send" name="reserve" type="submit" value="送信" >
56
+
57
+ </form>
58
+
59
+ ```
60
+
61
+ ```ここに言語を入力
62
+
63
+ confirm.php
64
+
65
+ <?php
66
+
67
+ if (preg_match("/\A[a-zA-Z0-90-9ぁ-んァ-ヶー一-龠、。\n\r]\z/mu",$_POST['comment'])){
68
+
69
+
70
+
71
+ $_SESSION['comment'] = $_POST['comment'];
72
+
73
+
74
+
75
+ exit;
76
+
77
+ } else {
78
+
79
+ header('Location: error.php');
80
+
81
+ }
82
+
83
+ ?>
84
+
85
+ <!DOCTYPE HTML>
86
+
87
+ <html lang="ja">
88
+
89
+ <head>
90
+
91
+ <meta charset="utf-8">
92
+
93
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
94
+
95
+ <meta name="viewport" content="width=device-width, initial-scale=1">
96
+
97
+ <title></title>
98
+
99
+ </head>
100
+
101
+ <body>
102
+
103
+ <form action="reserve_submit.php?shop_id=<?=htmlspecialchars($shop_result['shop_id']);?>" method="post" >
104
+
105
+ <table >
106
+
107
+ <tr><th > 店舗名: </th><td ><?=htmlspecialchars( $shop_result['shop_name'],ENT_QUOTES,'utf-8');?></td></tr>
108
+
109
+ <tr><th>コメント:</th><td><?php echo htmlspecialchars($_SESSION['comment'] ,ENT_QUOTES,'utf-8') ?></td></tr>
110
+
111
+ </table>
112
+
113
+ <input id="send" name="reserve" type="submit" value="登録する">
114
+
115
+ </form>
116
+
117
+ </body>
118
+
119
+ </html>
120
+
121
+ ```
20
122
 
21
123
  ```ここに言語を入力
22
124
 
23
125
  submit.php
24
126
 
127
+
25
128
 
26
-
27
- var_dump($_SESSION['comment']); //-> string(19) "URL"
28
-
29
- if (!preg_match("/^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9、。\n\r]+$/u",$_SESSION['comment'])){
30
-
31
- $NOmessage = 'コメントの入力文字を確認してください。';
32
-
33
- }
34
-
35
- if (preg_match("/^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9、。\n\r]+$/u",$_SESSION['comment'])){
36
-
37
- $comment = $_SESSION['comment'];
129
+ $comment = $_SESSION['comment'];
38
130
 
39
131
 
40
132
 
41
- // データの追加
133
+ // データの追加
42
134
 
43
- $sql = "INSERT INTO reserve(reserve_shop_id,reserve_comment,reserve_tel) VALUES('".$shop_id."','".$comment."','".$tel."')";
135
+ $sql = "INSERT INTO reserve(reserve_shop_id,reserve_comment,reserve_tel) VALUES(?,?,?)";
44
136
 
45
- $stmt = $pdo -> prepare($sql);
137
+ $stmt = $pdo -> prepare($sql);
46
138
 
47
- $stmt -> execute();
139
+ $stmt -> execute([$shop_id,$comment,$tel]);
48
140
 
49
- }
141
+
50
142
 
51
143
  ```

1

添削済み

2019/06/19 09:34

投稿

ariiiiiga
ariiiiiga

スコア66

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ③の完了画面でpreg_matchを使って日本語、数字、アルファベット、(、。)を許可してデータベースへ入れるもしくははじくを選別したいのですが<a href="#">URL</a>のようなURLがはじかれることなくそのままDBへ入ってしまいます。用意しているエラーメッセージも出力されずどこを直せばいいのかわかりません。
5
+ ③の完了画面(submit.php)でpreg_matchを使って日本語、数字、アルファベット、(、。)を許可してデータベースへ入れるもしくははじくを選別したいのですが<a href="#">URL</a>のようなURLがはじかれることなくそのままDBへ入ってしまいます。用意しているエラーメッセージも出力されずどこを直せばいいのかわかりません。
6
6
 
7
7
 
8
8
 
@@ -12,483 +12,19 @@
12
12
 
13
13
 
14
14
 
15
-
16
-
17
- ### 該当のソースコード
18
-
19
-
20
-
21
- ```ここ言語名を入力
15
+ *データベース接続確認済み
22
-
23
- form.php
24
-
25
- <?php
26
-
27
- error_reporting(E_ALL);
28
-
29
- ini_set("display_errors",1);
30
-
31
-
32
-
33
- try {
34
-
35
- session_start();
36
-
37
- $db['host'] = "localhost";
38
-
39
- $db['user'] = "root";
40
-
41
- $db['pass'] = "";
42
-
43
- $db['dbname'] = "reserve";
44
-
45
-
46
-
47
- // メッセージの初期化
48
-
49
- $NOmessage = "";
50
-
51
- $OKmessage = "";
52
-
53
-
54
-
55
- // 2. ユーザIDとパスワードが入力されていたら認証する
56
-
57
- $dsn = sprintf('mysql: host=%s; dbname=%s;charset=utf8', $db['host'], $db['dbname']);
58
-
59
- $pdo = new PDO($dsn, $db['user'], $db['pass']);
60
-
61
- $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
62
-
63
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
64
-
65
-
66
-
67
- // ①ユーザーIDからユーザー名を取り出す
68
-
69
- $query = "SELECT * FROM users WHERE user_id=:user_id";
70
-
71
- $user_stmt = $pdo->prepare($query);
72
-
73
- $user_stmt->bindValue(':user_id', $_SESSION['user'], PDO::PARAM_INT);
74
-
75
- $user_stmt->execute();
76
-
77
-
78
-
79
- // ユーザー情報の取り出し
80
-
81
- $row = $user_stmt->fetch(PDO::FETCH_ASSOC);
82
-
83
- $user_name = $row['user_name'];
84
-
85
- $user_id = $row['user_id'];
86
-
87
- $tel = $row['tel'];
88
-
89
-
90
-
91
- // 渡されたidを受け取る
92
-
93
- $shop_id = filter_input(INPUT_GET, 'shop_id', FILTER_SANITIZE_SPECIAL_CHARS);
94
-
95
- // 受け取ったidからレコード取得sqlを生成
96
-
97
- $sql = "SELECT * FROM shop WHERE shop_id = ".$shop_id;
98
-
99
- //SQL文を実行する
100
-
101
- $PostData = $pdo->query($sql);
102
-
103
- //実行結果を配列で受け取る
104
-
105
- $shop_result = $PostData->fetch( PDO::FETCH_ASSOC);
106
-
107
- // ユーザー情報の取り出し
108
-
109
- $shop_name = $shop_result['shop_name'];
110
-
111
-
112
-
113
-
114
-
115
- } catch (PDOException $e) {
116
-
117
- var_dump($e);
118
-
119
- die();
120
-
121
- }
122
-
123
- ?>
124
-
125
- <!DOCTYPE HTML>
126
-
127
- <html lang="ja">
128
-
129
- <head>
130
-
131
- <meta charset="utf-8">
132
-
133
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
134
-
135
- <meta name="viewport" content="width=device-width, initial-scale=1">
136
-
137
- <title>予約フォーム</title>
138
-
139
- </head>
140
-
141
- <body>
142
-
143
-
144
-
145
-  <header >
146
-
147
-   <div class="site_name" style="text-align:center;font-size:30px;">
148
-
149
-    <a href="home.php?user_id=<?= $user_id ?>" style="color:white;">サイト</a>
150
-
151
-   </div>
152
-
153
-   <div class="login" >
154
-
155
-    <div class="login_name" >
156
-
157
-   <span ><a href="change_profile_form.php?user_id=<?= $user_id ?>" ><?php echo htmlspecialchars($user_name,ENT_QUOTES); ?> ログイン中</a></span>
158
-
159
-   </div>
160
-
161
-  </div>
162
-
163
- </header>
164
-
165
- <main >
166
-
167
- <p class="alert alert-success" ><?=htmlspecialchars( $shop_result['shop_name'], ENT_QUOTES, 'UTF-8');?> 予約フォーム</p>
168
-
169
- <div class="container" >
170
-
171
- <div class="row">
172
-
173
- <div class="col-xl-12" >
174
-
175
- <form action="confirm.php?shop_id=<?=htmlspecialchars( $shop_result['shop_id'], ENT_QUOTES, 'UTF-8');?>" method="post">
176
-
177
- <div class="form-group">
178
-
179
- <label for="InputReserveComment" >コメント</label><br>
180
-
181
- <textarea col="10" rows="2" name="comment" class="form-control" placeholder="予約条件など"></textarea><br><br>
182
-
183
- </div>
184
-
185
- <input id="send" name="reserve" type="submit" value="送信" >
186
-
187
- </form>
188
-
189
- </div>
190
-
191
- </div>
192
-
193
- </div>
194
-
195
- </main>
196
-
197
- </div>
198
-
199
- </body>
200
-
201
- </html>
202
-
203
-
204
-
205
- ```
206
-
207
- ```ここに言語を入力
208
-
209
- confirm.php
210
-
211
- <?php
212
-
213
- error_reporting(E_ALL);
214
-
215
- ini_set("display_errors",1);
216
-
217
-
218
-
219
- try{
220
-
221
- session_start();
222
-
223
- $db['host'] = "localhost";
224
-
225
- $db['user'] = "root";
226
-
227
- $db['pass'] = "";
228
-
229
- $db['dbname'] = "reserve";
230
-
231
-
232
-
233
- // メッセージの初期化
234
-
235
- $NOmessage = "";
236
-
237
- $OKmessage = "";
238
-
239
-
240
-
241
- // 2. ユーザIDとパスワードが入力されていたら認証する
242
-
243
- $dsn = sprintf('mysql: host=%s; dbname=%s;charset=utf8', $db['host'], $db['dbname']);
244
-
245
- $pdo = new PDO($dsn, $db['user'], $db['pass']);
246
-
247
- $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
248
-
249
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
250
-
251
-
252
-
253
- // ①ユーザーIDからユーザー名を取り出す
254
-
255
- $query = "SELECT * FROM users WHERE user_id=:user_id";
256
-
257
- $user_stmt = $pdo->prepare($query);
258
-
259
- $user_stmt->bindValue(':user_id', $_SESSION['user'], PDO::PARAM_INT);
260
-
261
- $user_stmt->execute();
262
-
263
-
264
-
265
- // ユーザー情報の取り出し
266
-
267
- $row = $user_stmt->fetch(PDO::FETCH_ASSOC);
268
-
269
- $user_name = $row['user_name'];
270
-
271
- $user_id = $row['user_id'];
272
-
273
- $tel = $row['tel'];
274
-
275
-
276
-
277
- // 渡されたidを受け取る
278
-
279
- $shop_id = filter_input(INPUT_GET, 'shop_id', FILTER_SANITIZE_SPECIAL_CHARS);
280
-
281
- // 受け取ったidからレコード取得sqlを生成
282
-
283
- $sql = "SELECT * FROM shop WHERE shop_id = ".$shop_id;
284
-
285
- //SQL文を実行する
286
-
287
- $PostData = $pdo->query($sql);
288
-
289
- //実行結果を配列で受け取る
290
-
291
- $shop_result = $PostData->fetch( PDO::FETCH_ASSOC);
292
-
293
- // ユーザー情報の取り出し
294
-
295
- $shop_name = $shop_result['shop_name'];
296
-
297
-
298
-
299
- // 入力を格納
300
-
301
- $_SESSION['comment'] = $_POST['comment'];
302
16
 
303
17
 
304
18
 
305
19
 
306
20
 
307
- } catch (PDOException $e) {
308
-
309
- var_dump($e);
310
-
311
- die();
312
-
313
- }
314
-
315
- ?>
316
-
317
- <!DOCTYPE HTML>
318
-
319
- <html lang="ja">
320
-
321
- <head>
322
-
323
- <meta charset="utf-8">
324
-
325
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
326
-
327
- <meta name="viewport" content="width=device-width, initial-scale=1">
328
-
329
- <title>入力確認</title>
330
-
331
- </head>
332
-
333
- <body>
334
-
335
-
336
-
337
- <header >
338
-
339
-   <div class="site_name" style="text-align:center;font-size:30px;">
340
-
341
-    <a href="home.php?user_id=<?= $user_id ?>" style="color:white;">サイト</a>
342
-
343
-   </div>
344
-
345
-   <div class="login" >
346
-
347
-    <div class="login_name" >
348
-
349
-   <span ><a href="change_profile_form.php?user_id=<?= $user_id ?>" ><?php echo htmlspecialchars($user_name,ENT_QUOTES); ?> ログイン中</a></span>
350
-
351
-   </div>
352
-
353
- </div>
354
-
355
- </header>
356
-
357
-
358
-
359
- <main style="text-align:center;">
360
-
361
- <div class="container" >
362
-
363
- <div class="row">
364
-
365
- <div class="col-xl-12" style="background-color:rgb(242, 242, 242);height:400px;">
366
-
367
- <p class="alert alert-success" style="">予約内容確認画面</p>
368
-
369
- <form action="reserve_submit.php?shop_id=<?=htmlspecialchars($shop_result['shop_id']);?>" method="post" >
370
-
371
- <table style="text-align:center;font-weight:bold;font-size:25px;">
372
-
373
- <tr><th style="background-color:pink;"> 店舗名: </th><td ><?=htmlspecialchars( $shop_result['shop_name'],ENT_QUOTES,'utf-8');?></td></tr>
374
-
375
- <tr><th>コメント:</th><td><?php echo htmlspecialchars($_SESSION['comment'] ,ENT_QUOTES,'utf-8') ?></td></tr>
376
-
377
- </table>
378
-
379
- <input id="send" name="reserve" type="submit" value="登録する">
380
-
381
- </form>
382
-
383
- </div>
384
-
385
- </div>
386
-
387
- </div>
388
-
389
- </main>
390
-
391
- </div>
392
-
393
- </body>
394
-
395
- </html>
396
-
397
- ```
398
-
399
21
  ```ここに言語を入力
400
22
 
401
23
  submit.php
402
24
 
403
- <?php
404
25
 
405
26
 
406
-
407
- error_reporting(E_ALL);
408
-
409
- ini_set("display_errors",1);
410
-
411
-
412
-
413
- try {
414
-
415
- session_start();
416
-
417
- $db['host'] = "localhost";
418
-
419
- $db['user'] = "root";
420
-
421
- $db['pass'] = "";
422
-
423
- $db['dbname'] = "reserve";
424
-
425
-
426
-
427
- // メッセージの初期化
428
-
429
- $NOmessage = "";
430
-
431
- $OKmessage = "";
432
-
433
-
434
-
435
- // 2. ユーザIDとパスワードが入力されていたら認証する
436
-
437
- $dsn = sprintf('mysql: host=%s; dbname=%s;charset=utf8', $db['host'], $db['dbname']);
438
-
439
- $pdo = new PDO($dsn, $db['user'], $db['pass']);
440
-
441
- $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
442
-
443
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
444
-
445
-
446
-
447
- // ①ユーザーIDからユーザー名を取り出す
448
-
449
- $query = "SELECT * FROM users WHERE user_id=:user_id";
450
-
451
- $user_stmt = $pdo->prepare($query);
452
-
453
- $user_stmt->bindValue(':user_id', $_SESSION['user'], PDO::PARAM_INT);
27
+ var_dump($_SESSION['comment']); //-> string(19) "URL"
454
-
455
- $user_stmt->execute();
456
-
457
-
458
-
459
- // ユーザー情報の取り出し
460
-
461
- $row = $user_stmt->fetch(PDO::FETCH_ASSOC);
462
-
463
- $user_name = $row['user_name'];
464
-
465
- $user_id = $row['user_id'];
466
-
467
- $tel = $row['tel'];
468
-
469
-
470
-
471
- // 渡されたidを受け取る
472
-
473
- $shop_id = filter_input(INPUT_GET, 'shop_id', FILTER_SANITIZE_SPECIAL_CHARS);
474
-
475
- // 受け取ったidからレコード取得sqlを生成
476
-
477
- $sql = "SELECT * FROM shop WHERE shop_id = ".$shop_id;
478
-
479
- //SQL文を実行する
480
-
481
- $PostData = $pdo->query($sql);
482
-
483
- //実行結果を配列で受け取る
484
-
485
- $shop_result = $PostData->fetch( PDO::FETCH_ASSOC);
486
-
487
- // ユーザー情報の取り出し
488
-
489
- $shop_name = $shop_result['shop_name'];
490
-
491
-
492
28
 
493
29
  if (!preg_match("/^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9、。\n\r]+$/u",$_SESSION['comment'])){
494
30
 
@@ -497,10 +33,6 @@
497
33
  }
498
34
 
499
35
  if (preg_match("/^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9、。\n\r]+$/u",$_SESSION['comment'])){
500
-
501
- $count = $_SESSION['count'];
502
-
503
- $time = $_SESSION['time'];
504
36
 
505
37
  $comment = $_SESSION['comment'];
506
38
 
@@ -516,90 +48,4 @@
516
48
 
517
49
  }
518
50
 
519
-
520
-
521
-
522
-
523
-
524
-
525
- } catch (PDOException $e) {
526
-
527
- var_dump($e);
528
-
529
- die();
530
-
531
- }
532
-
533
- ?>
534
-
535
-
536
-
537
- <!DOCTYPE HTML>
538
-
539
- <html lang="ja">
540
-
541
- <head>
542
-
543
- <meta charset="utf-8" />
544
-
545
- <meta name="viewport" content="width=device-width, initial-scale=1">
546
-
547
- <title>PHPのマイページ機能</title>
548
-
549
- </head>
550
-
551
- <body>
552
-
553
-
554
-
555
- <header >
556
-
557
-   <div class="site_name" >
558
-
559
-    <a href="home.php?user_id=<?= $user_id ?>" >サイト</a>
560
-
561
-   </div>
562
-
563
-   <div class="login" >
564
-
565
-    <div class="login_name" >
566
-
567
-   <span ><a href="change_profile_form.php?user_id=<?= $user_id ?>" ><?php echo htmlspecialchars($user_name,ENT_QUOTES); ?> ログイン中</a></span>
568
-
569
-   </div>
570
-
571
- </div>
572
-
573
- </header>
574
-
575
- <div class="main">
576
-
577
- <div class="container" >
578
-
579
- <div class="row">
580
-
581
- <div class="col-xl-12" style="">
582
-
583
- <p class="alert alert-success" >予約完了</p>
584
-
585
-  <div class="content" >
586
-
587
- <h3 >予約店舗:<?php echo htmlspecialchars( $shop_name, ENT_QUOTES, 'UTF-8');?><br>予約完了しました</h3>
588
-
589
- </div>
590
-
591
- </div>
592
-
593
- </div>
594
-
595
- </div>
596
-
597
- </div>
598
-
599
- </body>
600
-
601
- </html>
602
-
603
-
604
-
605
51
  ```