回答編集履歴

1

修正

2020/01/27 12:07

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -4,4 +4,78 @@
4
4
 
5
5
 
6
6
 
7
- あとNoticeはきっとスコープの問題。
7
+ ~~あとNoticeはきっとスコープの問題。~~
8
+
9
+ 上記勘違い。既に指摘がある通りそもそもPDOのnewに失敗してて$pdoが存在しないものと思います。
10
+
11
+ というか同じロジック内でtry-catchをわけるメリットってほぼ皆無なのでひとくくりにしてしまっても差し支えないのでは。
12
+
13
+ ※ただし先に指摘したように毎回CREATE TABLEでお伺いを立てることになり、初回以外CREATEされないのでこの実装が不要です。先にテーブル作っておけば済む話。
14
+
15
+
16
+
17
+ # 以下、実装に対する指摘
18
+
19
+
20
+
21
+ ```php
22
+
23
+ } catch (Exception $e) {
24
+
25
+ ```
26
+
27
+ PDOなら[PDOException](https://www.php.net/manual/ja/class.pdoexception.php)を拾うべき。
28
+
29
+
30
+
31
+ ```php
32
+
33
+ return false;
34
+
35
+ ```
36
+
37
+ [exit()](https://www.php.net/manual/ja/function.exit.php)のほうが適切では。
38
+
39
+
40
+
41
+ ただ、今の実装だとブラウザの「戻る」押すしかないですけど、ここで止めるのは悪手のように思います。
42
+
43
+ 関連性のないバリデーションは全て表示させるように実装した方がユーザーには優しいです。
44
+
45
+
46
+
47
+
48
+
49
+ ```php
50
+
51
+ if (var_dump($_POST['username'])) {
52
+
53
+ ```
54
+
55
+ [var_dump()](https://www.php.net/manual/ja/function.var-dump.php)の結果を判定して何がしたいのでしょう。
56
+
57
+ ちなみにPHPマニュアルの通り、voidで返却値がないので、例え定義されている変数を与えてもifはfalseとなって絶対にこのif内は通りません。
58
+
59
+
60
+
61
+ ```php
62
+
63
+ } catch (\Exception $e) {
64
+
65
+ ```
66
+
67
+ 始めの方には`\`入ってなかったけど。実装が統一されてない。
68
+
69
+
70
+
71
+ ```php
72
+
73
+ echo '登録済みのメールアドレスです。';
74
+
75
+ ```
76
+
77
+ いえ、「Exceptionが起きる=重複のメールアドレス」とは限りません。
78
+
79
+ きちんとメールアドレスでSELECTかけて**INSERTする前に弾きましょう。**
80
+
81
+ これもバリデーションの範疇です。