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

回答編集履歴

6

デバッグ追記

2017/08/29 10:15

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -87,6 +87,7 @@
87
87
  echo "直にアクセスは出来ません";
88
88
  exit;
89
89
  }else{
90
+ //var_dump($_POST);exit;
90
91
  $name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
91
92
  $message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
92
93
  }
@@ -120,6 +121,7 @@
120
121
  echo "直にアクセスは出来ません";
121
122
  exit;
122
123
  }else{
124
+ //var_dump($_POST);exit;
123
125
  $dataname = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
124
126
  $datamessage = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
125
127
  try{

5

修正

2017/08/29 10:15

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -139,7 +139,7 @@
139
139
  $complete_message = '追加失敗';
140
140
  }
141
141
  }catch(Exception $e){
142
- $complete_message = $e->message();
142
+ $complete_message = $e->getMessage();
143
143
  };
144
144
  }
145
145
  ?>

4

サンプルコード追記

2017/08/29 10:10

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -55,4 +55,106 @@
55
55
  //エラーが合った場合の処理
56
56
  }
57
57
  ```
58
- - [例外(exceptions) ](http://php.net/manual/ja/language.exceptions.php)
58
+ - [例外(exceptions) ](http://php.net/manual/ja/language.exceptions.php)
59
+
60
+ # サンプルコード
61
+ 入力画面
62
+ ```html
63
+ <!DOCTYPE html>
64
+ <html>
65
+ <head>
66
+ <meta charset="utf-8">
67
+ <title>
68
+ 投稿
69
+ </title>
70
+ </head>
71
+ <body>
72
+ <form action="confirm.php" method="post"><br>
73
+ <p>名前:<input type="text" name="name"></p>
74
+ <p>メッセージ:<br>
75
+ <textarea name="message"></textarea></p>
76
+ <input type="submit">
77
+ </form>
78
+ </body>
79
+ </html>
80
+ ```
81
+ 確認画面(confirm.php)
82
+ ```php
83
+ <?php
84
+ header('Content-Type: text/html; charset=UTF-8');
85
+ //POSTでなければアクセスさせない
86
+ if($_SERVER["REQUEST_METHOD"] != "POST"){
87
+ echo "直にアクセスは出来ません";
88
+ exit;
89
+ }else{
90
+ $name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
91
+ $message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
92
+ }
93
+ ?>
94
+ <!DOCTYPE html>
95
+ <html>
96
+ <head>
97
+ <meta charset="utf-8">
98
+ <title>
99
+ 確認画面
100
+ </title>
101
+ </head>
102
+ <body>
103
+ <?php
104
+ echo '<form action="complete.php" method="POST">';
105
+ echo '<p>名前:'.$name.'<input type="hidden" name="name" value="'.$name.'"></p>';
106
+ echo '<p>メッセージ:<br />';
107
+ echo nl2br($message).'<input type="hidden" name="message" value="'.$message.'"></p>';
108
+ echo '<input type="submit">';
109
+ echo '</form>';
110
+ ?>
111
+ </body>
112
+ </html>
113
+ ```
114
+ 完了画面(complete.php)
115
+ ```php
116
+ <?php
117
+ header('Content-Type: text/html; charset=UTF-8');
118
+ //POSTでなければアクセスさせない
119
+ if($_SERVER["REQUEST_METHOD"] != "POST"){
120
+ echo "直にアクセスは出来ません";
121
+ exit;
122
+ }else{
123
+ $dataname = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
124
+ $datamessage = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
125
+ try{
126
+ $dsn = 'mysql:dbname=***;host=localhost;charset=utf8';
127
+ $user = '****';
128
+ $password = '****';
129
+ $dbh = new PDO($dsn,$user,$password);
130
+ $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
131
+ $sql = 'insert into test(name,message)values(?,?)';
132
+ $stmt = $dbh->prepare($sql);
133
+ $data[] = $dataname;
134
+ $data[] = $datamessage;
135
+ $dbh = null;
136
+ if($stmt->execute($data)){
137
+ $complete_message = '無事追加できました';
138
+ }else{
139
+ $complete_message = '追加失敗';
140
+ }
141
+ }catch(Exception $e){
142
+ $complete_message = $e->message();
143
+ };
144
+ }
145
+ ?>
146
+ <!DOCTYPE html>
147
+ <html>
148
+ <head>
149
+ <meta charset="utf-8">
150
+ <title>
151
+ 完了画面
152
+ </title>
153
+ </head>
154
+ <body>
155
+ <?php
156
+ echo '<p>'.$complete_message.'</p>';
157
+ ?>
158
+ </body>
159
+ </html>
160
+ ```

3

エラーについて追記

2017/08/29 10:06

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -41,4 +41,18 @@
41
41
  print '追加失敗';
42
42
  }
43
43
  ```
44
- - [PDOStatement::execute](http://php.net/manual/ja/pdostatement.execute.php)
44
+ - [PDOStatement::execute](http://php.net/manual/ja/pdostatement.execute.php)
45
+
46
+ エラーについて追記:
47
+ try-catchの構文エラーです。
48
+ 例外を捕捉する処理が書かれていません。
49
+ 下記のような形式にする必要があります。
50
+ ```php
51
+ try{
52
+ //何かしらの処理
53
+
54
+ }catch(Exception $e){
55
+ //エラーが合った場合の処理
56
+ }
57
+ ```
58
+ - [例外(exceptions) ](http://php.net/manual/ja/language.exceptions.php)

2

修正

2017/08/29 07:52

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -32,7 +32,7 @@
32
32
  ```
33
33
  これだと$data[]に空文字を代入しているだけになっています。
34
34
  if文の条件としては```if($data[] == ''){```のような書き方が正しいですね。
35
- ただ、これだと「無事にデータが追加できた」担保にはならないので、
35
+ ただ、これだと「無事にデータが追加できた」担保にはならないですし、配列エラーが出そうなので、
36
36
  追加処理実行結果の成否で判断すると良いです。
37
37
  ```php
38
38
  if($stmt->execute($data)){

1

追記

2017/08/29 07:04

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -21,4 +21,24 @@
21
21
  ```
22
22
 
23
23
  このデータを受け渡す流れは下記の記事が参考になるかもしれません。
24
- - [入力データを複数ページに渡って送る[hidden][PHP]](http://noumenon-th.net/programming/2016/01/15/hidden/)
24
+ - [入力データを複数ページに渡って送る[hidden][PHP]](http://noumenon-th.net/programming/2016/01/15/hidden/)
25
+
26
+
27
+ 追記:
28
+ 「何も表示されない」原因はおそらく下記にあります。
29
+
30
+ ```php
31
+ if($data[] = ''){
32
+ ```
33
+ これだと$data[]に空文字を代入しているだけになっています。
34
+ if文の条件としては```if($data[] == ''){```のような書き方が正しいですね。
35
+ ただ、これだと「無事にデータが追加できた」担保にはならないので、
36
+ 追加処理実行結果の成否で判断すると良いです。
37
+ ```php
38
+ if($stmt->execute($data)){
39
+ print '無事追加できました';
40
+ }else{
41
+ print '追加失敗';
42
+ }
43
+ ```
44
+ - [PDOStatement::execute](http://php.net/manual/ja/pdostatement.execute.php)