回答編集履歴

3

追記

2019/02/14 05:19

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -8,6 +8,126 @@
8
8
 
9
9
 
10
10
 
11
+ Eclipseのコードフォーマット機能使った結果
12
+
13
+ ```php
14
+
15
+ <!DOCTYPE html>
16
+
17
+ <html lang="en">
18
+
19
+ <head>
20
+
21
+ <meta charset="UTF-8">
22
+
23
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
24
+
25
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
26
+
27
+ <title>簡易掲示板</title>
28
+
29
+ </head>
30
+
31
+
32
+
33
+
34
+
35
+ <body>
36
+
37
+
38
+
39
+ <h1>ユーザー登録</h1>
40
+
41
+ <form method="post" action="DB.php">
42
+
43
+ Id:<input type="text" name="ID" value=""><br> Password:<input
44
+
45
+ type="text" name="NAME" value=""> <input type="submit" name="regist"
46
+
47
+ value="Post">
48
+
49
+ </form>
50
+
51
+
52
+
53
+ <?php
54
+
55
+ $host = '*******';
56
+
57
+ $dbname = '***********';
58
+
59
+ $dbuser = '*************';
60
+
61
+ $dbpassword = '*************';
62
+
63
+ $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", "$dbuser", "$dbpassword");
64
+
65
+
66
+
67
+ // データベースへの登録
68
+
69
+ if (isset($_POST['regist'])) {
70
+
71
+ $id = $_POST['ID'];
72
+
73
+ $name = $_POST['NAME'];
74
+
75
+ $sql = "INSERT INTO keijiban (id, name) VALUES ('$id', '$name')";
76
+
77
+ $res = $pdo->query($sql);
78
+
79
+
80
+
81
+ // テーブル内容の表示
82
+
83
+ // mts10806 ここでSELECT実行してるということはいつ実行される?
84
+
85
+ $sql = "SELECT * FROM keijiban ORDER BY id DESC";
86
+
87
+ $stmt = $pdo->query($sql);
88
+
89
+ foreach ($stmt as $row) {
90
+
91
+ echo $row['ID'] . ' ' . $row['NAME'];
92
+
93
+ echo '<br>';
94
+
95
+ }
96
+
97
+ }
98
+
99
+
100
+
101
+ // リロード時の二重投稿を防止
102
+
103
+ // mts10806 POSTだったらリダイレクト。SELECT結果は意味ない。というかheader()の前に出力があることになるのでNG
104
+
105
+ // http://php.net/manual/ja/function.header.php
106
+
107
+ // > 覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。
108
+
109
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
110
+
111
+ header('Location:DB.php', true, 303);
112
+
113
+ }
114
+
115
+ // 終了
116
+
117
+ $stmt = null;
118
+
119
+ $pdo = null;
120
+
121
+ ?>
122
+
123
+ </body>
124
+
125
+ </html>
126
+
127
+ ```
128
+
129
+
130
+
11
131
  > 項目を増やしたテーブルを新規に作り
12
132
 
13
133
 

2

修正

2019/02/14 05:19

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -1,3 +1,13 @@
1
+ 直接的な原因は既に回答にあるとおり。
2
+
3
+ 「POSTのときにしかSELECT実行していない」から。
4
+
5
+ そのPOSTのときにリダイレクト入れてるのでSELECTは永遠に実行されません。
6
+
7
+ インデントきちんとそろえると分かりやすいですね。(前の質問の回答にヒントとなるキーワードはたくさんあったはずですが)
8
+
9
+
10
+
1
11
  > 項目を増やしたテーブルを新規に作り
2
12
 
3
13
 
@@ -12,6 +22,8 @@
12
22
 
13
23
 
14
24
 
25
+
26
+
15
27
  ------
16
28
 
17
29
 

1

修正

2019/02/14 05:15

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -38,6 +38,8 @@
38
38
 
39
39
  $dbpassword = '*************';
40
40
 
41
+ $pdo = null;
42
+
41
43
  try{
42
44
 
43
45
  $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", "$dbuser", "$dbpassword");
@@ -54,7 +56,7 @@
54
56
 
55
57
  // データベースへの登録
56
58
 
57
- //if (isset($_POST['regist'])) {
59
+ //if (isset($_POST['regist'])) { //mts10806 だから、これは良くないコーディングですって
58
60
 
59
61
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
60
62