teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

a

2016/04/07 10:21

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -1,10 +1,57 @@
1
1
  細かいところですが,
2
2
 
3
- - `$_POST`に関する未定義や型のチェックがやや不十分 (`filter_input`を使うと綺麗に書ける)
3
+ - `$_POST`に関する未定義や型のチェックがやや不十分
4
4
  - 正規表現の`$`は末尾に改行コードを許してしまうので`\z`を使うべき
5
+ - 正規表現の`[a-zA-Z0-9_]`は`\w`で十分
6
+ - ユーザIDに文字列長制限がない
5
7
  - `empty`は文字列の`"0"`を空とみなしてしまうので,文字列に対しては使うべきでない
6
8
  - `array_push`は冗長で`[]`演算子を使うだけで十分
7
9
 
8
- というところが気になりました.これに配慮して書き直すと
10
+ 以上の点が気になりました.これに配慮して書き直すと
9
11
 
12
+ ```HTML
13
+ <?php
14
+
15
+ // 各 $_POST 変数を受け取る
16
+ // 未定義の場合は空文字列になる
17
+ foreach (['user_id', 'submit'] as $key) {
18
+ $$key = (string)filter_input(INPUT_POST, $key);
19
+ }
20
+
21
+ // エラー配列初期化
22
+ $errors = [];
23
+
24
+ // POSTされたときだけ実行
25
+ if ($submit) {
26
+ if (!preg_match('/\A\w{4,15}\z/', $user_id)) {
27
+ $errors[] = 'ユーザ名は半角英数字またはアンダースコアで4〜15文字で入力してください';
28
+ }
10
- (ミスでふっとんだので修正中…
29
+ if (!$errors) {
30
+ /* 登録処理をここで実行 */
31
+ header('Location: finished.php');
32
+ exit;
33
+ }
34
+ }
35
+
36
+ function h($str) {
37
+ return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
38
+ }
39
+
40
+ header('Content-Type: text/html; charset=UTF-8');
41
+
42
+ ?>
43
+ <!DOCTYPE html>
44
+ <title>ユーザID登録</title>
45
+ <h1>ユーザID登録</h1>
46
+ <form action="" method="post">
47
+ ユーザID: <input type="text" name="user_id" value="<?=h($user_id)?>">
48
+ <input type="submit" name="submit" value="送信">
49
+ </form>
50
+ <?php if ($errors): ?>
51
+ <ul>
52
+ <?php foreach ($errors as $error): ?>
53
+ <li><?=h($error)?></li>
54
+ <?php endforeach; ?>
55
+ </ul>
56
+ <?php endif; ?>
57
+ ```

1

a

2016/04/07 10:21

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -7,20 +7,4 @@
7
7
 
8
8
  というところが気になりました.これに配慮して書き直すと
9
9
 
10
- ```php
11
- if (isset($_POST['submit'])) {
12
- $user_id = (string)filter_input(INPUT_POST, 'user_id');
13
-
14
- $errorsuser = array();
15
- $pattern = "/^[a-zA-Z0-9_]+$/";
16
-
17
- // 空欄
10
+ (ミスでふっとんだので修正中…
18
- if ( empty($user_id) ) {
19
- array_push( $errorsuser, "ユーザー名を入力してください。" );
20
-
21
- // 形式
22
- } else if ( !preg_match ( $pattern, $user_id ) ) {
23
- array_push( $errorsuser, "ユーザー名の形式が正しくありません。" );
24
- }
25
- }
26
- ```