質問編集履歴

1

前職の社外秘の内容が含まれていたため、可能であれば投稿を削除してほしいです。

2024/03/25 09:01

投稿

tomotomo4322
tomotomo4322

スコア7

test CHANGED
File without changes
test CHANGED
@@ -1,248 +1,4 @@
1
1
  ### 前提
2
2
 
3
3
  お問い合わせフォームをMVCに分けて作成したい。
4
- 現在Viewsフォルダにcontact.php,confirm.php,complete.phpを作成。
5
- ContorollersフォルダにContactControl.phpを作成。
6
- ModelsフォルダにDb.phpを作成してます。
7
4
 
8
- ContactControl.phpにcontact.phpにて入力された内容のバリデーション処理等を記載した関数を作りました。
9
- その関数をcontact.phpにて呼び出し、エラー発覚時にはエラー内容を表示したいです。
10
-
11
- ### 実現したいこと
12
-
13
- ここに実現したいことを箇条書きで書いてください。
14
- contact.phpにContactControl.php内の関数を呼び出してcontact.phpに入力された内容をバリデーション処理等を行い、エラー発覚時にはエラー内容を表示したい。
15
-
16
- ### 発生している問題・エラーメッセージ
17
- contact.phpにてContactControl.phpをrequire_onceで呼び出したのですが、エラーメッセージが表示され正しく実行されません。
18
- エラー表示を調べたところcontact.phpにて呼び出したContactControl.phpの関数内に定義した変数に値が無いようです。
19
-
20
- これは関数を呼び出す際に$_POST値を渡す必要があるのでしょうか?
21
-
22
- ```
23
- Notice: Undefined variable: errmessage in /Users//geekation/PHP応用_演習/Views/contact.php on line 17
24
-
25
- Notice: Trying to get property '' of non-object in /Users//geekation/PHP応用_演習/Views/contact.php on line 17
26
- ```
27
-
28
-
29
- ### 該当のソースコード
30
-
31
- ```contact.php
32
- <?php
33
- ini_set('display_errors', "On");
34
- session_start();
35
- header('Expires:-1');
36
- header('Cache-Control:');
37
- header('Pragma:');
38
-
39
- if (empty($_POST)) {
40
- $_SESSION['fullname'] = '';
41
- $_SESSION['furigana'] = '';
42
- $_SESSION['tellNumber'] = '';
43
- $_SESSION['email'] = '';
44
- $_SESSION['message'] = '';
45
- }
46
-
47
- require_once(ROOT_PATH .'Controllers/ContactControl.php');
48
- checkMessage() -> $errmessage;
49
-
50
- // if (isset($_POST['check']) && $_POST['check']) {
51
-
52
- // $errmessage = array();
53
-
54
- // if (!$_POST['fullname']) {
55
- // $errmessage[] = "名前を入力してください";
56
- // } elseif (mb_strlen($_POST['fullname']) > 10) {
57
- // $errmessage[] = "名前は10文字以内にしてください";
58
- // }
59
- // $_SESSION['fullname'] = htmlspecialchars($_POST['fullname'], ENT_QUOTES);
60
-
61
- // if (!$_POST['furigana']) {
62
- // $errmessage[] = "フリガナを入力してください";
63
- // } elseif (mb_strlen($_POST['furigana']) > 10) {
64
- // $errmessage[] = "フリガナは10文字以内にしてください";
65
- // }
66
- // $_SESSION['furigana'] = htmlspecialchars($_POST['furigana'], ENT_QUOTES);
67
-
68
- // if (!preg_match("/^[0-9]+$/", $_POST['tellNumber'])) {
69
- // $errmessage[] = "正しい電話番号を入力してください";
70
- // }
71
- // $_SESSION['tellNumber'] = htmlspecialchars($_POST['tellNumber'], ENT_QUOTES);
72
-
73
- // if (!$_POST['email']) {
74
- // $errmessage[] = "メールアドレスを入力してください";
75
- // } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
76
- // $errmessage[] = "正しく入力してください";
77
- // }
78
- // $_SESSION['email'] = htmlspecialchars($_POST['email'], ENT_QUOTES);
79
-
80
- // if (!$_POST['message']) {
81
- // $errmessage[] = "お問い合わせを入力してください";
82
- // }
83
- // $_SESSION['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES);
84
-
85
- // if (empty($errmessage)) {
86
- // $errmessage = array();
87
- // header('Location: confirm.php', true, 307);
88
- // }
89
- // }
90
-
91
-
92
-
93
-
94
- ?>
95
-
96
- <!DOCTYPE html>
97
- <html lang="ja">
98
- <head>
99
- <meta charset="utf-8">
100
- <title>お問い合わせフォーム</title>
101
- <link rel="stylesheet" href="../public/css/style.css">
102
- </head>
103
- <body>
104
- <div class="container">
105
- <h1 class="contact_title">お問い合わせ</h1>
106
- <?php if (!empty($errmessage)) {
107
- echo implode('<br>', $errmessage);
108
- }
109
- ?>
110
- <form action="./contact.php" method="post" name="form">
111
- <table class="contact-table">
112
- <tr>
113
- <th class="contact-item">氏名</th>
114
- <td class="contact-body">
115
- <input type="text" name="fullname" class="form-text" value="<?php echo $_SESSION['fullname']; ?>"/>
116
- </td>
117
- </tr>
118
- <tr>
119
- <th class="contact-item">フリガナ</th>
120
- <td class="contact-body">
121
- <input type="text" name="furigana" class="form-text" value="<?php echo $_SESSION['furigana']; ?>"/>
122
- </td>
123
- </tr>
124
- <tr>
125
- <th class="contact-item">電話番号</th>
126
- <td class="contact-body">
127
- <input type="tell" name="tellNumber" class="form-text" value="<?php echo $_SESSION['tellNumber']; ?>"/>
128
- </td>
129
- </tr>
130
- <tr>
131
- <th class="contact-item">メールアドレス</th>
132
- <td class="contact-body">
133
- <input type="email" name="email" class="form-text" value="<?php echo $_SESSION['email'];?>"/>
134
- </td>
135
- </tr>
136
- <tr>
137
- <th class="contact-item">お問い合わせ内容</th>
138
- <td class="contact-body">
139
- <textarea cols="40" rows="8" name="message"><?php echo nl2br($_SESSION['message']); ?></textarea>
140
- </td>
141
- </tr>
142
- </table>
143
- <input type="submit" name="check" class="btn" value="確認画面へ">
144
-
145
- </form>
146
- <div>
147
- </body>
148
-
149
-
150
- ```
151
-
152
- ```ContactControl.php
153
- function checkMessage()
154
- {
155
-
156
- if (isset($_POST['check']) && $_POST['check']) {
157
-
158
- $errmessage = array();
159
-
160
- if (!$_POST['fullname']) {
161
- $errmessage[] = "名前を入力してください";
162
- } elseif (mb_strlen($_POST['fullname']) > 10) {
163
- $errmessage[] = "名前は10文字以内にしてください";
164
- }
165
- $_SESSION['fullname'] = htmlspecialchars($_POST['fullname'], ENT_QUOTES);
166
-
167
- if (!$_POST['furigana']) {
168
- $errmessage[] = "フリガナを入力してください";
169
- } elseif (mb_strlen($_POST['furigana']) > 10) {
170
- $errmessage[] = "フリガナは10文字以内にしてください";
171
- }
172
- $_SESSION['furigana'] = htmlspecialchars($_POST['furigana'], ENT_QUOTES);
173
-
174
- if (!preg_match("/^[0-9]+$/", $_POST['tellNumber'])) {
175
- $errmessage[] = "正しい電話番号を入力してください";
176
- }
177
- $_SESSION['tellNumber'] = htmlspecialchars($_POST['tellNumber'], ENT_QUOTES);
178
-
179
- if (!$_POST['email']) {
180
- $errmessage[] = "メールアドレスを入力してください";
181
- } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
182
- $errmessage[] = "正しく入力してください";
183
- }
184
- $_SESSION['email'] = htmlspecialchars($_POST['email'], ENT_QUOTES);
185
-
186
- if (!$_POST['message']) {
187
- $errmessage[] = "お問い合わせを入力してください";
188
- }
189
- $_SESSION['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES);
190
-
191
- if (empty($errmessage)) {
192
- header('Location: confirm.php', true, 307);
193
- }
194
- }
195
- }
196
-
197
- // class Contact //phpcs:ignore
198
- // {
199
- // private $fullname;
200
- // private $furigana;
201
- // private $tellNumber;
202
- // private $email;
203
- // private $message;
204
-
205
- // public function checkMessage($fullname, $furigana, $tellNumber, $email, $message)
206
- // {
207
- // $errmessage = array();
208
-
209
- // if (!$fullname) {
210
- // $errmessage[] = "名前を入力してください";
211
- // } elseif (mb_strlen($fullname) > 10) {
212
- // $errmessage[] = "名前は10文字以内にしてください";
213
- // }
214
-
215
- // if (!$furigana) {
216
- // $errmessage[] = "フリガナを入力してください";
217
- // } elseif (mb_strlen($furigana) > 10) {
218
- // $errmessage[] = "フリガナは10文字以内にしてください";
219
- // }
220
-
221
- // if (!preg_match("/^[0-9]+$/", $tellNumber)) {
222
- // $errmessage[] = "正しい電話番号を入力してください";
223
- // }
224
-
225
- // if (!$email) {
226
- // $error_message[] = "メールアドレスを入力してください";
227
- // } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
228
- // $error_message[] = "正しく入力してください";
229
- // }
230
-
231
- // if (!$message) {
232
- // $errmessage[] = "メールアドレスを入力してください";
233
- // }
234
- // }
235
- // }
236
-
237
-
238
-
239
- ### 試したこと
240
-
241
- ContactControl.php内に作成したクラスや関数をcontact.phpにて呼び出す際にPOST値を渡したりしたのですが上手くいきませんでした。
242
-
243
- ### 補足情報(FW/ツールのバージョンなど)
244
-
245
- VScode、MAMPを使用しています。
246
-
247
- わかりづらい質問で申し訳ございませんが、どうかよろしくお願いいたします。
248
-