回答編集履歴

6

デバッグ追記

2017/08/29 10:15

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -176,6 +176,8 @@
176
176
 
177
177
  }else{
178
178
 
179
+ //var_dump($_POST);exit;
180
+
179
181
  $name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
180
182
 
181
183
  $message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
@@ -242,6 +244,8 @@
242
244
 
243
245
  }else{
244
246
 
247
+ //var_dump($_POST);exit;
248
+
245
249
  $dataname = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
246
250
 
247
251
  $datamessage = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');

5

修正

2017/08/29 10:15

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -280,7 +280,7 @@
280
280
 
281
281
  }catch(Exception $e){
282
282
 
283
- $complete_message = $e->message();
283
+ $complete_message = $e->getMessage();
284
284
 
285
285
  };
286
286
 

4

サンプルコード追記

2017/08/29 10:10

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -113,3 +113,207 @@
113
113
  ```
114
114
 
115
115
  - [例外(exceptions) ](http://php.net/manual/ja/language.exceptions.php)
116
+
117
+
118
+
119
+ # サンプルコード
120
+
121
+ 入力画面
122
+
123
+ ```html
124
+
125
+ <!DOCTYPE html>
126
+
127
+ <html>
128
+
129
+ <head>
130
+
131
+ <meta charset="utf-8">
132
+
133
+ <title>
134
+
135
+ 投稿
136
+
137
+ </title>
138
+
139
+ </head>
140
+
141
+ <body>
142
+
143
+ <form action="confirm.php" method="post"><br>
144
+
145
+ <p>名前:<input type="text" name="name"></p>
146
+
147
+ <p>メッセージ:<br>
148
+
149
+ <textarea name="message"></textarea></p>
150
+
151
+ <input type="submit">
152
+
153
+ </form>
154
+
155
+ </body>
156
+
157
+ </html>
158
+
159
+ ```
160
+
161
+ 確認画面(confirm.php)
162
+
163
+ ```php
164
+
165
+ <?php
166
+
167
+ header('Content-Type: text/html; charset=UTF-8');
168
+
169
+ //POSTでなければアクセスさせない
170
+
171
+ if($_SERVER["REQUEST_METHOD"] != "POST"){
172
+
173
+ echo "直にアクセスは出来ません";
174
+
175
+ exit;
176
+
177
+ }else{
178
+
179
+ $name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
180
+
181
+ $message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
182
+
183
+ }
184
+
185
+ ?>
186
+
187
+ <!DOCTYPE html>
188
+
189
+ <html>
190
+
191
+ <head>
192
+
193
+ <meta charset="utf-8">
194
+
195
+ <title>
196
+
197
+ 確認画面
198
+
199
+ </title>
200
+
201
+ </head>
202
+
203
+ <body>
204
+
205
+ <?php
206
+
207
+ echo '<form action="complete.php" method="POST">';
208
+
209
+ echo '<p>名前:'.$name.'<input type="hidden" name="name" value="'.$name.'"></p>';
210
+
211
+ echo '<p>メッセージ:<br />';
212
+
213
+ echo nl2br($message).'<input type="hidden" name="message" value="'.$message.'"></p>';
214
+
215
+ echo '<input type="submit">';
216
+
217
+ echo '</form>';
218
+
219
+ ?>
220
+
221
+ </body>
222
+
223
+ </html>
224
+
225
+ ```
226
+
227
+ 完了画面(complete.php)
228
+
229
+ ```php
230
+
231
+ <?php
232
+
233
+ header('Content-Type: text/html; charset=UTF-8');
234
+
235
+ //POSTでなければアクセスさせない
236
+
237
+ if($_SERVER["REQUEST_METHOD"] != "POST"){
238
+
239
+ echo "直にアクセスは出来ません";
240
+
241
+ exit;
242
+
243
+ }else{
244
+
245
+ $dataname = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
246
+
247
+ $datamessage = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
248
+
249
+ try{
250
+
251
+ $dsn = 'mysql:dbname=***;host=localhost;charset=utf8';
252
+
253
+ $user = '****';
254
+
255
+ $password = '****';
256
+
257
+ $dbh = new PDO($dsn,$user,$password);
258
+
259
+ $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
260
+
261
+ $sql = 'insert into test(name,message)values(?,?)';
262
+
263
+ $stmt = $dbh->prepare($sql);
264
+
265
+ $data[] = $dataname;
266
+
267
+ $data[] = $datamessage;
268
+
269
+ $dbh = null;
270
+
271
+ if($stmt->execute($data)){
272
+
273
+ $complete_message = '無事追加できました';
274
+
275
+ }else{
276
+
277
+ $complete_message = '追加失敗';
278
+
279
+ }
280
+
281
+ }catch(Exception $e){
282
+
283
+ $complete_message = $e->message();
284
+
285
+ };
286
+
287
+ }
288
+
289
+ ?>
290
+
291
+ <!DOCTYPE html>
292
+
293
+ <html>
294
+
295
+ <head>
296
+
297
+ <meta charset="utf-8">
298
+
299
+ <title>
300
+
301
+ 完了画面
302
+
303
+ </title>
304
+
305
+ </head>
306
+
307
+ <body>
308
+
309
+ <?php
310
+
311
+ echo '<p>'.$complete_message.'</p>';
312
+
313
+ ?>
314
+
315
+ </body>
316
+
317
+ </html>
318
+
319
+ ```

3

エラーについて追記

2017/08/29 10:06

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -85,3 +85,31 @@
85
85
  ```
86
86
 
87
87
  - [PDOStatement::execute](http://php.net/manual/ja/pdostatement.execute.php)
88
+
89
+
90
+
91
+ エラーについて追記:
92
+
93
+ try-catchの構文エラーです。
94
+
95
+ 例外を捕捉する処理が書かれていません。
96
+
97
+ 下記のような形式にする必要があります。
98
+
99
+ ```php
100
+
101
+ try{
102
+
103
+ //何かしらの処理
104
+
105
+
106
+
107
+ }catch(Exception $e){
108
+
109
+ //エラーが合った場合の処理
110
+
111
+ }
112
+
113
+ ```
114
+
115
+ - [例外(exceptions) ](http://php.net/manual/ja/language.exceptions.php)

2

修正

2017/08/29 07:52

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
  if文の条件としては```if($data[] == ''){```のような書き方が正しいですね。
68
68
 
69
- ただ、これだと「無事にデータが追加できた」担保にはならないので、
69
+ ただ、これだと「無事にデータが追加できた」担保にはならないですし、配列エラーが出そうなので、
70
70
 
71
71
  追加処理実行結果の成否で判断すると良いです。
72
72
 

1

追記

2017/08/29 07:04

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -45,3 +45,43 @@
45
45
  このデータを受け渡す流れは下記の記事が参考になるかもしれません。
46
46
 
47
47
  - [入力データを複数ページに渡って送る[hidden][PHP]](http://noumenon-th.net/programming/2016/01/15/hidden/)
48
+
49
+
50
+
51
+
52
+
53
+ 追記:
54
+
55
+ 「何も表示されない」原因はおそらく下記にあります。
56
+
57
+
58
+
59
+ ```php
60
+
61
+ if($data[] = ''){
62
+
63
+ ```
64
+
65
+ これだと$data[]に空文字を代入しているだけになっています。
66
+
67
+ if文の条件としては```if($data[] == ''){```のような書き方が正しいですね。
68
+
69
+ ただ、これだと「無事にデータが追加できた」担保にはならないので、
70
+
71
+ 追加処理実行結果の成否で判断すると良いです。
72
+
73
+ ```php
74
+
75
+ if($stmt->execute($data)){
76
+
77
+ print '無事追加できました';
78
+
79
+ }else{
80
+
81
+ print '追加失敗';
82
+
83
+ }
84
+
85
+ ```
86
+
87
+ - [PDOStatement::execute](http://php.net/manual/ja/pdostatement.execute.php)