質問編集履歴

1

追記

2018/02/10 04:31

投稿

dog57
dog57

スコア131

test CHANGED
File without changes
test CHANGED
@@ -57,3 +57,737 @@
57
57
  </div>
58
58
 
59
59
  ```
60
+
61
+
62
+
63
+
64
+
65
+ registration_form.php 登録フォーム
66
+
67
+ ```php
68
+
69
+ <?php
70
+
71
+ // 開発時にこれを書かないのはNG
72
+
73
+ ini_set('display_errors', true);
74
+
75
+ error_reporting(E_ALL);
76
+
77
+
78
+
79
+ session_start();
80
+
81
+
82
+
83
+ // 文字化けを治す
84
+
85
+ header("Content-type: text/html; charset=utf-8");
86
+
87
+
88
+
89
+ // 変数の定義(初期化)
90
+
91
+ $name = "";
92
+
93
+ $email = "";
94
+
95
+ $password = "";
96
+
97
+ $tel = "";
98
+
99
+ $prefectures = "";
100
+
101
+ $hobby = "";
102
+
103
+ $gender = "";
104
+
105
+ $contact = "";
106
+
107
+
108
+
109
+ $errorMsg = '';
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+ // エラーメッセージ
118
+
119
+ if (isset($_SESSION['errorMsg'])) {
120
+
121
+
122
+
123
+ if (count($errorMsg) >= 1) {
124
+
125
+ $errorMsg = $_SESSION['errorMsg'];
126
+
127
+ }
128
+
129
+ }
130
+
131
+
132
+
133
+ //
134
+
135
+ // 確認フォームから戻った時のデータ保持
136
+
137
+ //
138
+
139
+
140
+
141
+ // name の入力データ保持
142
+
143
+ if (isset($_SESSION['email'])) {
144
+
145
+
146
+
147
+ if ($_SESSION['name'] === $_SESSION['name']) {
148
+
149
+ $name = $_SESSION['name'];
150
+
151
+
152
+
153
+ }
154
+
155
+ }
156
+
157
+
158
+
159
+ //email の入力データの保持
160
+
161
+ if (isset($_SESSION['email'])) {
162
+
163
+
164
+
165
+ if ($_SESSION['email'] === $_SESSION['email'] & isset($_SESSION['email'])) {
166
+
167
+ $email = $_SESSION['email'];
168
+
169
+
170
+
171
+ }
172
+
173
+ }
174
+
175
+
176
+
177
+
178
+
179
+ //password の入力データの保持
180
+
181
+ if (isset($_SESSION['password'])) {
182
+
183
+
184
+
185
+ if ($_SESSION['password'] === $_SESSION['password'] & isset($_SESSION['password'])) {
186
+
187
+ $password = $_SESSION['password'];
188
+
189
+
190
+
191
+ }
192
+
193
+ }
194
+
195
+
196
+
197
+
198
+
199
+ //tel の入力データの保持
200
+
201
+ if (isset($_SESSION['tel'])) {
202
+
203
+
204
+
205
+ if ($_SESSION['tel'] === $_SESSION['tel'] & isset($_SESSION['tel'])) {
206
+
207
+ $tel = $_SESSION['tel'];
208
+
209
+
210
+
211
+ }
212
+
213
+ }
214
+
215
+
216
+
217
+ //prefectures の入力データの保持
218
+
219
+ if (isset($_SESSION['prefectures'])) {
220
+
221
+
222
+
223
+ if ($_SESSION['prefectures'] === $_SESSION['prefectures'] & isset($_SESSION['prefectures'])) {
224
+
225
+ $prefectures = $_SESSION['prefectures'];
226
+
227
+
228
+
229
+ }
230
+
231
+ }
232
+
233
+
234
+
235
+ // hobby の入力データの保持
236
+
237
+ if (isset($_SESSION['hobby'])) {
238
+
239
+
240
+
241
+ if ($_SESSION['hobby'] === $_SESSION['hobby'] & isset($_SESSION['hobby'])) {
242
+
243
+ $hobby = $_SESSION['hobby'];
244
+
245
+
246
+
247
+ }
248
+
249
+ }
250
+
251
+
252
+
253
+
254
+
255
+ // gender の入力データの保持
256
+
257
+ if (isset($_SESSION['gender'])) {
258
+
259
+
260
+
261
+ if ($_SESSION['gender'] === $_SESSION['gender'] & isset($_SESSION['gender'])) {
262
+
263
+ $gender = $_SESSION['gender'];
264
+
265
+
266
+
267
+ }
268
+
269
+ }
270
+
271
+
272
+
273
+ // contact の入力データの保持
274
+
275
+ if (isset($_SESSION['gender'])) {
276
+
277
+
278
+
279
+ if ($_SESSION['contact'] === $_SESSION['contact'] & isset($_SESSION['contact'])) {
280
+
281
+ $contact = $_SESSION['contact'];
282
+
283
+
284
+
285
+ }
286
+
287
+ }
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+ //
300
+
301
+ // Twig
302
+
303
+ //
304
+
305
+
306
+
307
+
308
+
309
+ // Composerで作成されたautoload.phpを読み込む
310
+
311
+ require_once('../vendor/autoload.php');
312
+
313
+ // Twig_loader_Filesystemを使う。registration_form.phpからのtemplatesディレクトリを指定。(相対パス)
314
+
315
+ $loader = new Twig_Loader_filesystem('../templates');
316
+
317
+ // $loaderをTwigの環境設定として twig instance を生成
318
+
319
+ $twig = new Twig_Environment($loader);
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+ // render
328
+
329
+ echo $twig->render('registration_form.html', array(
330
+
331
+
332
+
333
+ 'name' => $name,
334
+
335
+ 'email' => $email,
336
+
337
+ 'password' => $password,
338
+
339
+ 'tel' => $tel,
340
+
341
+ 'prefectures' => $prefectures,
342
+
343
+ 'hobby' => $hobby,
344
+
345
+ 'gender' => $gender,
346
+
347
+ 'contact' => $contact,
348
+
349
+
350
+
351
+ 'errorMsg' => $errorMsg
352
+
353
+
354
+
355
+
356
+
357
+ )
358
+
359
+ );
360
+
361
+
362
+
363
+ ```
364
+
365
+
366
+
367
+
368
+
369
+ confirm.php 確認フォーム
370
+
371
+
372
+
373
+ ```php
374
+
375
+
376
+
377
+ / 開発時にこれを書かないのはNG
378
+
379
+ ini_set('display_errors', TRUE);
380
+
381
+ error_reporting(E_ALL);
382
+
383
+
384
+
385
+ session_start();
386
+
387
+
388
+
389
+
390
+
391
+ // 文字化けを治す
392
+
393
+ header("Content-type: text/html; charset=utf-8");
394
+
395
+
396
+
397
+ // 変数の定義(初期化)
398
+
399
+ $name = "";
400
+
401
+ $email = "";
402
+
403
+ $password = "";
404
+
405
+ $tel = "";
406
+
407
+ $prefectures = "";
408
+
409
+ $hobby = "";
410
+
411
+ $gender = "";
412
+
413
+ $contact = "";
414
+
415
+ $string = "";
416
+
417
+
418
+
419
+
420
+
421
+ $date = date_default_timezone_set('Asia/Tokyo');
422
+
423
+
424
+
425
+
426
+
427
+ $form_Content = array($name, $email, $password, $tel, $prefectures, $hobby, $gender, $contact);
428
+
429
+
430
+
431
+ // エラーメッセージの配列の初期化
432
+
433
+ $errorMsg = array();
434
+
435
+ // セッション変数の初期化
436
+
437
+ $_SESSION['errorMsg'] = array();
438
+
439
+ // 初期化
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+ // XSS対策 サニタイズ(無毒化)
448
+
449
+ function h($string) {
450
+
451
+
452
+
453
+ if(is_array($string)){
454
+
455
+ return array_map("h", $string);
456
+
457
+
458
+
459
+ } else {
460
+
461
+
462
+
463
+ return htmlspecialchars($string, ENT_QUOTES, "UTF-8");
464
+
465
+ }
466
+
467
+ }
468
+
469
+
470
+
471
+ // XSS対策 (hrefやsrcの値がURLか確認する)
472
+
473
+ function urlCheck($form_Content) {
474
+
475
+ if (!preg_match("/^(https?:.+)$/", $form_Content)) {
476
+
477
+ return $errorMsg[] = "不正を検知しました。";
478
+
479
+ } else {
480
+
481
+ return true;
482
+
483
+ }
484
+
485
+ }
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+ // POST時
494
+
495
+ if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') {
496
+
497
+
498
+
499
+
500
+
501
+ $_SESSION["name"] = filter_input(INPUT_POST, 'name');
502
+
503
+ $_SESSION["email"] = filter_input(INPUT_POST, 'email');
504
+
505
+ $_SESSION["password"] = filter_input(INPUT_POST, 'password');
506
+
507
+ $_SESSION["tel"] = filter_input(INPUT_POST, 'tel');
508
+
509
+ $_SESSION["prefectures"] = filter_input(INPUT_POST, 'prefectures');
510
+
511
+ $_SESSION["hobby"] = filter_input(INPUT_POST, 'hobby', FILTER_DEFAULT,FILTER_REQUIRE_ARRAY);
512
+
513
+ $_SESSION["gender"] = filter_input(INPUT_POST, 'gender');
514
+
515
+ $_SESSION["contact"] = filter_input(INPUT_POST, 'contact');
516
+
517
+
518
+
519
+ $name = $_SESSION["name"];
520
+
521
+ $email = $_SESSION["email"];
522
+
523
+ $password = $_SESSION["password"];
524
+
525
+ $tel = $_SESSION["tel"];
526
+
527
+ $prefectures = $_SESSION["prefectures"];
528
+
529
+ $hobby = $_SESSION["hobby"];
530
+
531
+ $gender = $_SESSION["gender"];
532
+
533
+ $contact = $_SESSION["contact"];
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+ //
542
+
543
+ // 未入力チェック
544
+
545
+ //
546
+
547
+
548
+
549
+ // エラーメッセージの配列の初期化
550
+
551
+ $errorMsg = array();
552
+
553
+
554
+
555
+ // 名前の未入力チェック
556
+
557
+ if (empty($_SESSION["name"])) {
558
+
559
+ $errorMsg[] = "名前を入力してください。";
560
+
561
+ }
562
+
563
+
564
+
565
+ // メールアドレスの未入力チェック
566
+
567
+ if (empty($_SESSION["email"])) {
568
+
569
+ $errorMsg[] = "メールアドレスを入力してください。";
570
+
571
+ }
572
+
573
+
574
+
575
+ // パスワードの未入力チェック
576
+
577
+ if (empty($_SESSION["password"])) {
578
+
579
+ $errorMsg[] = "パスワードを入力してください。";
580
+
581
+ }
582
+
583
+
584
+
585
+ // 電話番号の未入力チェック
586
+
587
+ if (empty($_SESSION["tel"])) {
588
+
589
+ $errorMsg[] = "電話番号を入力してください。";
590
+
591
+ }
592
+
593
+
594
+
595
+ // 都道府県の未入力チェック
596
+
597
+ if ($_SESSION["prefectures"] == "選択") {
598
+
599
+ $errorMsg[] = "都道府県を選択してください。";
600
+
601
+ }
602
+
603
+
604
+
605
+ //
606
+
607
+ // 文字数チェック
608
+
609
+ //
610
+
611
+
612
+
613
+ // 名前の文字数チェック
614
+
615
+ if (strlen($_SESSION["name"]) >= 60) {
616
+
617
+ $errorMsg[] = "氏名が長すぎます。";
618
+
619
+ }
620
+
621
+
622
+
623
+ // パスワード文字数チェック(8文字以上か)
624
+
625
+ if (preg_match("/^[a-zA-Z1-9]{1,7}$/", $_SESSION["password"])) {
626
+
627
+ $errorMsg[] = "パスワードは8文字以上で入力してください。";
628
+
629
+ }
630
+
631
+
632
+
633
+ // 電話番号の文字数チェック(10文字 or 11文字)
634
+
635
+ if (strlen($_SESSION["tel"]) >= 1 && strlen($_SESSION["tel"]) <= 9 && preg_match("/^[0-9]+$/", $_SESSION["tel"])) {
636
+
637
+ $errorMsg[] = "電話番号は10文字か11文字で入力してください。";
638
+
639
+ } elseif (strlen($_SESSION["tel"]) >= 12 && preg_match("/^[0-9]+$/", $_SESSION["tel"])) {
640
+
641
+ $errorMsg[] = "電話番号は10文字か11文字で入力してください。";
642
+
643
+ }
644
+
645
+
646
+
647
+ //
648
+
649
+ // 形式チェック
650
+
651
+ //
652
+
653
+
654
+
655
+ // メールアドレス形式チェック
656
+
657
+ if (!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_SESSION["email"]) && $_SESSION["email"] !== "") {
658
+
659
+ $errorMsg[] = "メールアドレスに間違いがあります。";
660
+
661
+ }
662
+
663
+
664
+
665
+ // 電話番号の形式チェック
666
+
667
+ if (preg_match("/[-]+/", $_SESSION["tel"])) {
668
+
669
+ $errorMsg[] = "電話番号はハイフンなしで入力してください。";
670
+
671
+ }
672
+
673
+
674
+
675
+ //
676
+
677
+ // 半角英数字チェック
678
+
679
+ //
680
+
681
+
682
+
683
+ // 電話番号の数字チェック
684
+
685
+ if (!preg_match("/[0-9]/", $_SESSION["tel"]) && $_SESSION["tel"] !== "") {
686
+
687
+ $errorMsg[] = "電話番号は半角数字で入力してください。";
688
+
689
+ }
690
+
691
+
692
+
693
+
694
+
695
+ // 電話番号の全角チェック Todo
696
+
697
+ //if (strlen($tel) !== mb_strlen($tel, "UTF-8")) {
698
+
699
+ // $errorMsg[] = "電話番号に全角が含まれています。";
700
+
701
+ //}
702
+
703
+
704
+
705
+
706
+
707
+ if (count($errorMsg) >= 1) {
708
+
709
+ $_SESSION['errorMsg'] = $errorMsg;
710
+
711
+
712
+
713
+ header("location: registration_form.php");
714
+
715
+ exit;
716
+
717
+
718
+
719
+ }
720
+
721
+
722
+
723
+ }
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+ //
732
+
733
+ // Twig
734
+
735
+ //
736
+
737
+
738
+
739
+ // Composerで作成されたautoload.phpを読み込む
740
+
741
+ require_once ('../vendor/autoload.php');
742
+
743
+ // Twig_loader_Filesystemを使う。confirm.phpからのtemplatesディレクトリを指定。(相対パス)
744
+
745
+ $loader = new Twig_Loader_filesystem('../templates');
746
+
747
+ // $loaderをTwigの環境設定として twig instance を生成
748
+
749
+ $twig = new Twig_Environment($loader);
750
+
751
+
752
+
753
+
754
+
755
+ // render
756
+
757
+ echo $twig->render('confirm.html', array (
758
+
759
+
760
+
761
+ 'name' => $name,
762
+
763
+ 'email' => $email,
764
+
765
+ 'password' => $password,
766
+
767
+ 'tel' => $tel,
768
+
769
+ 'prefectures' => $prefectures,
770
+
771
+ 'hobby' => $hobby,
772
+
773
+ 'gender' => $gender,
774
+
775
+ 'contact' => $contact,
776
+
777
+
778
+
779
+ 'errorMsg' => $errorMsg,
780
+
781
+ 'string' => $string
782
+
783
+
784
+
785
+
786
+
787
+ )
788
+
789
+ );
790
+
791
+
792
+
793
+ ```