回答編集履歴

2

a

2016/04/07 10:21

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -2,9 +2,13 @@
2
2
 
3
3
 
4
4
 
5
- - `$_POST`に関する未定義や型のチェックがやや不十分 (`filter_input`を使うと綺麗に書ける)
5
+ - `$_POST`に関する未定義や型のチェックがやや不十分
6
6
 
7
7
  - 正規表現の`$`は末尾に改行コードを許してしまうので`\z`を使うべき
8
+
9
+ - 正規表現の`[a-zA-Z0-9_]`は`\w`で十分
10
+
11
+ - ユーザIDに文字列長制限がない
8
12
 
9
13
  - `empty`は文字列の`"0"`を空とみなしてしまうので,文字列に対しては使うべきでない
10
14
 
@@ -12,8 +16,100 @@
12
16
 
13
17
 
14
18
 
15
- というところが気になりました.これに配慮して書き直すと
19
+ 以上の点が気になりました.これに配慮して書き直すと
16
20
 
17
21
 
18
22
 
23
+ ```HTML
24
+
25
+ <?php
26
+
27
+
28
+
29
+ // 各 $_POST 変数を受け取る
30
+
31
+ // 未定義の場合は空文字列になる
32
+
33
+ foreach (['user_id', 'submit'] as $key) {
34
+
35
+ $$key = (string)filter_input(INPUT_POST, $key);
36
+
37
+ }
38
+
39
+
40
+
41
+ // エラー配列初期化
42
+
43
+ $errors = [];
44
+
45
+
46
+
47
+ // POSTされたときだけ実行
48
+
49
+ if ($submit) {
50
+
51
+ if (!preg_match('/\A\w{4,15}\z/', $user_id)) {
52
+
53
+ $errors[] = 'ユーザ名は半角英数字またはアンダースコアで4〜15文字で入力してください';
54
+
55
+ }
56
+
19
- (ミスでふっとんだので修正中…
57
+ if (!$errors) {
58
+
59
+ /* 登録処理をここで実行 */
60
+
61
+ header('Location: finished.php');
62
+
63
+ exit;
64
+
65
+ }
66
+
67
+ }
68
+
69
+
70
+
71
+ function h($str) {
72
+
73
+ return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
74
+
75
+ }
76
+
77
+
78
+
79
+ header('Content-Type: text/html; charset=UTF-8');
80
+
81
+
82
+
83
+ ?>
84
+
85
+ <!DOCTYPE html>
86
+
87
+ <title>ユーザID登録</title>
88
+
89
+ <h1>ユーザID登録</h1>
90
+
91
+ <form action="" method="post">
92
+
93
+ ユーザID: <input type="text" name="user_id" value="<?=h($user_id)?>">
94
+
95
+ <input type="submit" name="submit" value="送信">
96
+
97
+ </form>
98
+
99
+ <?php if ($errors): ?>
100
+
101
+ <ul>
102
+
103
+ <?php foreach ($errors as $error): ?>
104
+
105
+ <li><?=h($error)?></li>
106
+
107
+ <?php endforeach; ?>
108
+
109
+ </ul>
110
+
111
+ <?php endif; ?>
112
+
113
+ ```
114
+
115
+

1

a

2016/04/07 10:21

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -16,36 +16,4 @@
16
16
 
17
17
 
18
18
 
19
- ```php
20
-
21
- if (isset($_POST['submit'])) {
22
-
23
- $user_id = (string)filter_input(INPUT_POST, 'user_id');
24
-
25
-
26
-
27
- $errorsuser = array();
28
-
29
- $pattern = "/^[a-zA-Z0-9_]+$/";
30
-
31
-
32
-
33
- // 空欄
19
+ (ミスでふっとんだので修正中…
34
-
35
- if ( empty($user_id) ) {
36
-
37
- array_push( $errorsuser, "ユーザー名を入力してください。" );
38
-
39
-
40
-
41
- // 形式
42
-
43
- } else if ( !preg_match ( $pattern, $user_id ) ) {
44
-
45
- array_push( $errorsuser, "ユーザー名の形式が正しくありません。" );
46
-
47
- }
48
-
49
- }
50
-
51
- ```