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

質問編集履歴

3

さらに追記

2021/02/27 06:42

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -96,4 +96,80 @@
96
96
  <?php if(isset($_POST['tel'])): ?>
97
97
  <div class="vali"><?php echo $errors['tel']; ?></div>
98
98
  <?php endif; ?>
99
- ```
99
+ ```
100
+
101
+ さらに追記:
102
+ ・バリデーションエラーのメッセージは出るが、画面上部にエラーが出力されてしまう
103
+ ```
104
+ <?php if(isset($errors)): ?>
105
+ <div class="mb-3">
106
+ <label>氏名</label><label class="kome">*</label><br>
107
+ <div class="vali"><?php echo $errors['name']; ?></div>
108
+ <input type="text" id="f-name" name="name" value="" placeholder="山田太郎">
109
+ </div>
110
+ <div class="mb-3">
111
+ <label>フリガナ</label><label class="kome">*</label><br>
112
+ <div class="vali"><?php echo $errors['kana']; ?></div>
113
+ <input type="text" id="f-kana" name="kana" value="" placeholder="ヤマダタロウ">
114
+ </div>
115
+ <div class="mb-3">
116
+ <label>電話番号</label><label class="kome">*</label><br>
117
+ <div class="vali"><?php echo $errors['tel']; ?></div>
118
+ <input type="text" id="f-tel" name="tel" value="" placeholder="09012345678">
119
+ </div>
120
+ <div class="mb-3">
121
+ <label>メールアドレス</label><label class="kome">*</label><br>
122
+ <div class="vali"><?php echo $errors['email']; ?></div>
123
+ <input type="text" id="f-email" name="email" value="" placeholder="test@test.co.jp">
124
+ </div>
125
+ <div class="f-title f-bottom">
126
+ <h3>お問い合わせ内容をご記入ください<label class="kome">*</label></h3>
127
+ </div>
128
+ <div class="vali"><?php echo $errors['contact']; ?></div>
129
+ <div class="mb-3">
130
+ <textarea id="contact" name="contact" rows="7"></textarea>
131
+ </div>
132
+ <input type="hidden" name="csrf_token" value="<?php echo setToken(); ?>">
133
+ <button type="submit" class="btn" name="btn_confirm">送信</button>
134
+ <?php endif; ?>
135
+ ```
136
+
137
+ ```
138
+ <?php
139
+
140
+ $errors = [];
141
+
142
+ // 名前の空欄チェック
143
+ if(empty($_POST['name']) || mb_strlen($_POST['name']) > 10) {
144
+ $errors['name'] = "名前は必須です。10文字以内で入力してください。";
145
+ }
146
+ // $_SESSION['name'] = htmlspecialchars($_POST['name'], ENT_QUOTES, "UTF-8");
147
+ // フリガナの空欄チェック
148
+ if(empty($_POST['kana']) || mb_strlen($_POST['kana']) > 10) {
149
+ $errors['kana'] = "フリガナは必須です。フリガナは10文字以内で入力してください";
150
+ }
151
+
152
+ // 電話番号のチェック
153
+ // if(isset($_POST['email'])) {
154
+ if(!preg_match("/^[0-9]+$/", $_POST['tel'])) {
155
+ $errors['tel'] = "電話番号は0-9までの数字を入力してください";
156
+ }
157
+ // }
158
+
159
+ // 正しいEmailの形式化どうか
160
+ // if(isset($_POST['email'])) {
161
+ if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
162
+ $errors['email'] = "正しいメールアドレスを指定してください";
163
+ }
164
+ // }
165
+
166
+ // お問い合わせ内容の空欄チェック
167
+ if(empty($_POST['contact'])) {
168
+ $errors['contact'] = "お問い合わせ内容は必須です";
169
+ }
170
+ ?>
171
+ ```
172
+ ![イメージ説明](dde457e3a60c413bb683a37f01ba2c0a.png)
173
+
174
+ ただ、 // if(isset($_POST['email'])) {のコメントアウトを外すと、画面上部にエラ〜メッセージは出力されないが、バリデーションメッセージが無効になってしまう。
175
+ ![イメージ説明](be0c53d160b00af5bf0089c3a8e3ed8a.png)

2

追記

2021/02/27 06:42

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -88,4 +88,12 @@
88
88
  ##試したこと
89
89
  Notice: Undefined indexなので、バリデーションする前にif(isset($_POST['tel']))をつけたが解決できない。
90
90
 
91
- お願いいたします。
91
+ お願いいたします。
92
+
93
+ 追記:
94
+ 問題のcontact.phpに以下を追記しましたが、バリデーションのメッセージが表示されない。
95
+ ```
96
+ <?php if(isset($_POST['tel'])): ?>
97
+ <div class="vali"><?php echo $errors['tel']; ?></div>
98
+ <?php endif; ?>
99
+ ```

1

追記

2021/02/27 03:56

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
  ![イメージ説明](324a17237b2c4d7a38c87a16a9662f5b.png)
4
4
 
5
5
  ##該当のソースコード
6
-
6
+ contact.php
7
7
  ```
8
8
  <form action="confirm.php" method="POST">
9
9
  <div class="mb-3">
@@ -73,7 +73,18 @@
73
73
  }
74
74
  ?>
75
75
  ```
76
+ contact.phpの100行目
77
+ ```
78
+ <div class="vali"><?php echo $errors['tel']; ?></div>
79
+ ```
76
80
 
81
+ contact.phpの105行目
82
+ ```
83
+ <div class="vali"><?php echo $errors['email']; ?></div>
84
+
85
+ ```
86
+
87
+
77
88
  ##試したこと
78
89
  Notice: Undefined indexなので、バリデーションする前にif(isset($_POST['tel']))をつけたが解決できない。
79
90