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

回答編集履歴

3

追記

2019/02/14 05:19

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -3,6 +3,66 @@
3
3
  そのPOSTのときにリダイレクト入れてるのでSELECTは永遠に実行されません。
4
4
  インデントきちんとそろえると分かりやすいですね。(前の質問の回答にヒントとなるキーワードはたくさんあったはずですが)
5
5
 
6
+ Eclipseのコードフォーマット機能使った結果
7
+ ```php
8
+ <!DOCTYPE html>
9
+ <html lang="en">
10
+ <head>
11
+ <meta charset="UTF-8">
12
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
13
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
14
+ <title>簡易掲示板</title>
15
+ </head>
16
+
17
+
18
+ <body>
19
+
20
+ <h1>ユーザー登録</h1>
21
+ <form method="post" action="DB.php">
22
+ Id:<input type="text" name="ID" value=""><br> Password:<input
23
+ type="text" name="NAME" value=""> <input type="submit" name="regist"
24
+ value="Post">
25
+ </form>
26
+
27
+ <?php
28
+ $host = '*******';
29
+ $dbname = '***********';
30
+ $dbuser = '*************';
31
+ $dbpassword = '*************';
32
+ $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", "$dbuser", "$dbpassword");
33
+
34
+ // データベースへの登録
35
+ if (isset($_POST['regist'])) {
36
+ $id = $_POST['ID'];
37
+ $name = $_POST['NAME'];
38
+ $sql = "INSERT INTO keijiban (id, name) VALUES ('$id', '$name')";
39
+ $res = $pdo->query($sql);
40
+
41
+ // テーブル内容の表示
42
+ // mts10806 ここでSELECT実行してるということはいつ実行される?
43
+ $sql = "SELECT * FROM keijiban ORDER BY id DESC";
44
+ $stmt = $pdo->query($sql);
45
+ foreach ($stmt as $row) {
46
+ echo $row['ID'] . ' ' . $row['NAME'];
47
+ echo '<br>';
48
+ }
49
+ }
50
+
51
+ // リロード時の二重投稿を防止
52
+ // mts10806 POSTだったらリダイレクト。SELECT結果は意味ない。というかheader()の前に出力があることになるのでNG
53
+ // http://php.net/manual/ja/function.header.php
54
+ // > 覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。
55
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
56
+ header('Location:DB.php', true, 303);
57
+ }
58
+ // 終了
59
+ $stmt = null;
60
+ $pdo = null;
61
+ ?>
62
+ </body>
63
+ </html>
64
+ ```
65
+
6
66
  > 項目を増やしたテーブルを新規に作り
7
67
 
8
68
  項目の設定を加味して整合性をとれば良いです。

2

修正

2019/02/14 05:19

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,3 +1,8 @@
1
+ 直接的な原因は既に回答にあるとおり。
2
+ 「POSTのときにしかSELECT実行していない」から。
3
+ そのPOSTのときにリダイレクト入れてるのでSELECTは永遠に実行されません。
4
+ インデントきちんとそろえると分かりやすいですね。(前の質問の回答にヒントとなるキーワードはたくさんあったはずですが)
5
+
1
6
  > 項目を増やしたテーブルを新規に作り
2
7
 
3
8
  項目の設定を加味して整合性をとれば良いです。
@@ -5,6 +10,7 @@
5
10
  エラーを捕捉するよな仕組みになってないのでそこに気づけません。
6
11
  ※[前の前の質問の回答](https://teratail.com/questions/174175#reply-259265)参照
7
12
 
13
+
8
14
  ------
9
15
 
10
16
 

1

修正

2019/02/14 05:15

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -18,6 +18,7 @@
18
18
  $dbname = '***********';
19
19
  $dbuser = '*************';
20
20
  $dbpassword = '*************';
21
+ $pdo = null;
21
22
  try{
22
23
  $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", "$dbuser", "$dbpassword");
23
24
  }catch(PDOException $e){
@@ -26,7 +27,7 @@
26
27
  }
27
28
 
28
29
  // データベースへの登録
29
- //if (isset($_POST['regist'])) {
30
+ //if (isset($_POST['regist'])) { //mts10806 だから、これは良くないコーディングですって
30
31
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
31
32
  $id = $_POST['ID'];
32
33
  $name = $_POST['NAME'];