回答編集履歴

2

追記

2019/02/14 03:24

投稿

m.ts10806
m.ts10806

score213

test CHANGED
@@ -11,3 +11,215 @@
11
11
 
12
12
 
13
13
  原因は全く一緒ではないにしろ、原因の探し方は同じだと思います。
14
+
15
+
16
+
17
+ ------
18
+
19
+
20
+
21
+ コメントしたとおり、提示コードでは同エラーは起きません。
22
+
23
+ ただ、インデントがかなり荒れていて読みづらいので、整理したうえで、気になるところをコメントしてみました。
24
+
25
+ ```php
26
+
27
+ <?php
28
+
29
+ $named=$_POST['content'];
30
+
31
+ $commented=$_POST['content2'];
32
+
33
+ $deleted=$_POST['number'];
34
+
35
+ $edited=$_POST['edit'];
36
+
37
+ $editnumber=$_POST['content3']; //mts10806 取得してるけどどこにも使ってない
38
+
39
+ $passed=$_POST['pass'];
40
+
41
+ $pass2=$_POST['pass2'];
42
+
43
+ $pass3=$_POST['pass3'];
44
+
45
+ $timed = date('Y/n/d H:i:s');
46
+
47
+ // データベース接続
48
+
49
+ $dsn = 'mysql:dbname=test;host=localhost';
50
+
51
+ $user = 'root';
52
+
53
+ $password = '';
54
+
55
+ $pdo = new PDO($dsn, $user, $password, array(
56
+
57
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
58
+
59
+ ));
60
+
61
+
62
+
63
+ //mts10806 DBに関する処理を行うときはきちんとtry-catchしてException(今回はPDOException)を捕捉するようにしましょう
64
+
65
+
66
+
67
+ // テーブル作成
68
+
69
+ $sql = "CREATE TABLE IF NOT EXISTS mission_4_1" . "(" . "id INT auto_increment," . "name char(32)," . "comment TEXT," . "time DATETIME," . "pass INT," . "primary key(id)" . ");";
70
+
71
+ $stmt = $pdo->query($sql);
72
+
73
+
74
+
75
+ // テーブル作成確認
76
+
77
+ $sql1 = 'SHOW TABLES';
78
+
79
+ $result = $pdo->query($sql1);
80
+
81
+ foreach ($result as $row) {
82
+
83
+ echo $row[0];
84
+
85
+ echo '<br>';
86
+
87
+ }
88
+
89
+ echo "<hr>";
90
+
91
+
92
+
93
+ // テーブル 中身 確認
94
+
95
+ $sql2 = 'SHOW CREATE TABLE mission_4_1';
96
+
97
+ $result = $pdo->query($sql2);
98
+
99
+ foreach ($result as $row1) {
100
+
101
+ echo $row1[1];
102
+
103
+ }
104
+
105
+ echo "<hr>";
106
+
107
+
108
+
109
+ $sql3 = $pdo->prepare("INSERT INTO mission_4_1(id,name,comment,time,pass) VALUES(:id,:name,:comment,:time,:pass)");
110
+
111
+ //mts10806 auto_increment設定しているならinsertにidは基本不要
112
+
113
+ $sql3->bindParam(':name', $name, PDO::PARAM_STR);
114
+
115
+ $sql3->bindParam(':comment', $comment, PDO::PARAM_STR);
116
+
117
+ $sql3->bindValue(':time', $time, PDO::PARAM_STR);
118
+
119
+ $sql3->bindValue(':pass', $pass, PDO::PARAM_INT);
120
+
121
+ //mts10806 どっちかに統一を。bindValueの方がのぞましい。
122
+
123
+
124
+
125
+ $name = $named; //mts10806 ここで定義してもbindParam,BindValueで使うことにはならない
126
+
127
+ $comment = $commented;
128
+
129
+ $time = $timed;
130
+
131
+ $pass = $passed;
132
+
133
+
134
+
135
+ $sql3->execute(); //mts10806 SQLで用意したパラメータとセットしたパラメータの数があわないのでエラーでますよ。
136
+
137
+
138
+
139
+ if (! empty($pass3)) {
140
+
141
+ $sql7 = "SELECT*FROM mission_4_1 WHERE id=$edited";
142
+
143
+ $stmt = $pdo->query($sql7);
144
+
145
+ foreach ($stmt as $row) {
146
+
147
+ if ($row['id'] == $edited and $row['pass'] == $pass3) {
148
+
149
+
150
+
151
+ $id = "$edited";
152
+
153
+ $name = "$named";
154
+
155
+ $comment = "$commented";
156
+
157
+ $sql4 = 'update mission_4_1 set name=:name,comment=:comment where id=:id';
158
+
159
+ $stmt = $pdo->prepare($sql4);
160
+
161
+ $stmt->bindParam(':name', $name, PDO::PARAM_STR);
162
+
163
+ $stmt->bindParam(':comment', $comment, PDO::PARAM_STR);
164
+
165
+ $stmt->bindParam(':id', $id, PDO::PARAM_INT);
166
+
167
+ $stmt->execute();
168
+
169
+ }
170
+
171
+ }
172
+
173
+ } elseif (! empty($pass2)) {
174
+
175
+ $sql8 = "SELECT*FROM mission_4_1 WHERE id=$deleted";
176
+
177
+ $stmt = $pdo->query($sql8);
178
+
179
+ foreach ($stmt as $row) {
180
+
181
+ if ($row['id'] == $deleted) {
182
+
183
+
184
+
185
+ $id = "$deleted";
186
+
187
+ $sql5 = 'delete from mission_4_1 where id=:id';
188
+
189
+ $stmt = $pdo->prepare($sql5);
190
+
191
+ $stmt->bindParam(':id', $id, PDO::PARAM_INT);
192
+
193
+ $stmt->execute();
194
+
195
+ }
196
+
197
+ }
198
+
199
+ }
200
+
201
+
202
+
203
+ $sql6 = 'SELECT*FROM mission_4_1';
204
+
205
+ $stmt = $pdo->query($sql6);
206
+
207
+ $results = $stmt->fetchAll();
208
+
209
+ foreach ($results as $row2) {
210
+
211
+ // $rowの中にはテーブルのカラム名が入る
212
+
213
+ echo $row2['id'] . ',';
214
+
215
+ echo $row2['name'] . ',';
216
+
217
+ echo $row2['comment'] . ',';
218
+
219
+ echo $row2['time'] . '<br>';
220
+
221
+ }
222
+
223
+ ?>
224
+
225
+ ```

1

追記

2019/02/14 03:07

投稿

m.ts10806
m.ts10806

score213

test CHANGED
@@ -11,221 +11,3 @@
11
11
 
12
12
 
13
13
  原因は全く一緒ではないにしろ、原因の探し方は同じだと思います。
14
-
15
-
16
-
17
- ------
18
-
19
-
20
-
21
- コメントしたとおり、提示コードでは同エラーは起きません。
22
-
23
- ただ、インデントがかなり荒れていて読みづらいので、整理したうえで、気になるところをコメントしてみました。
24
-
25
- ```php
26
-
27
- <?php
28
-
29
- $named=$_POST['content'];
30
-
31
- $commented=$_POST['content2'];
32
-
33
- $deleted=$_POST['number'];
34
-
35
- $edited=$_POST['edit'];
36
-
37
- $editnumber=$_POST['content3']; //mts10806 取得してるけどどこにも使ってない
38
-
39
- $passed=$_POST['pass'];
40
-
41
- $pass2=$_POST['pass2'];
42
-
43
- $pass3=$_POST['pass3'];
44
-
45
- $timed = date('Y/n/d H:i:s');
46
-
47
- // データベース接続
48
-
49
- $dsn = 'mysql:dbname=test;host=localhost';
50
-
51
- $user = 'root';
52
-
53
- $password = '';
54
-
55
- $pdo = new PDO($dsn, $user, $password, array(
56
-
57
- PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
58
-
59
- ));
60
-
61
-
62
-
63
- //mts10806 DBに関する処理を行うときはきちんとtry-catchしてException(今回はPDOException)を捕捉するようにしましょう
64
-
65
-
66
-
67
- // テーブル作成
68
-
69
- $sql = "CREATE TABLE IF NOT EXISTS mission_4_1" . "(" . "id INT auto_increment," . "name char(32)," . "comment TEXT," . "time DATETIME," . "pass INT," . "primary key(id)" . ");";
70
-
71
- $stmt = $pdo->query($sql);
72
-
73
-
74
-
75
- // テーブル作成確認
76
-
77
- $sql1 = 'SHOW TABLES';
78
-
79
- $result = $pdo->query($sql1);
80
-
81
- foreach ($result as $row) {
82
-
83
- echo $row[0];
84
-
85
- echo '<br>';
86
-
87
- }
88
-
89
- echo "<hr>";
90
-
91
-
92
-
93
- // テーブル 中身 確認
94
-
95
- $sql2 = 'SHOW CREATE TABLE mission_4_1';
96
-
97
- $result = $pdo->query($sql2);
98
-
99
- foreach ($result as $row1) {
100
-
101
- echo $row1[1];
102
-
103
- }
104
-
105
- echo "<hr>";
106
-
107
-
108
-
109
- //mts10806 変数名や関数名にマジックナンバーは厳禁。何を保管しているものか、何をするものかわからない。prepareの返りはstatementなのでsqlという変数名もナンセンスです。
110
-
111
-
112
-
113
- $sql3 = $pdo->prepare("INSERT INTO mission_4_1(id,name,comment,time,pass) VALUES(:id,:name,:comment,:time,:pass)");
114
-
115
- //mts10806 auto_increment設定しているならinsertにidは基本不要
116
-
117
- $sql3->bindParam(':name', $name, PDO::PARAM_STR);
118
-
119
- $sql3->bindParam(':comment', $comment, PDO::PARAM_STR);
120
-
121
- $sql3->bindValue(':time', $time, PDO::PARAM_STR);
122
-
123
- $sql3->bindValue(':pass', $pass, PDO::PARAM_INT);
124
-
125
- //mts10806 どっちかに統一を。bindValueの方がのぞましい。
126
-
127
-
128
-
129
- $name = $named; //mts10806 ここで定義してもbindParam,BindValueで使うことにはならない
130
-
131
- $comment = $commented;
132
-
133
- $time = $timed;
134
-
135
- $pass = $passed;
136
-
137
-
138
-
139
- $sql3->execute(); //mts10806 SQLで用意したパラメータとセットしたパラメータの数があわないのでエラーでますよ。
140
-
141
-
142
-
143
- if (! empty($pass3)) {
144
-
145
- $sql7 = "SELECT*FROM mission_4_1 WHERE id=$edited";
146
-
147
- $stmt = $pdo->query($sql7);
148
-
149
- foreach ($stmt as $row) {
150
-
151
- if ($row['id'] == $edited and $row['pass'] == $pass3) {
152
-
153
-
154
-
155
- $id = "$edited";
156
-
157
- $name = "$named";
158
-
159
- $comment = "$commented";
160
-
161
- $sql4 = 'update mission_4_1 set name=:name,comment=:comment where id=:id';
162
-
163
- $stmt = $pdo->prepare($sql4);
164
-
165
- $stmt->bindParam(':name', $name, PDO::PARAM_STR);
166
-
167
- $stmt->bindParam(':comment', $comment, PDO::PARAM_STR);
168
-
169
- $stmt->bindParam(':id', $id, PDO::PARAM_INT);
170
-
171
- $stmt->execute();
172
-
173
- }
174
-
175
- }
176
-
177
- } elseif (! empty($pass2)) {
178
-
179
- //mts10806 なんでこの前までbindしてきてるのになぜここでやらない・・
180
-
181
- $sql8 = "SELECT*FROM mission_4_1 WHERE id=$deleted";
182
-
183
- $stmt = $pdo->query($sql8);
184
-
185
- foreach ($stmt as $row) {
186
-
187
- if ($row['id'] == $deleted) {
188
-
189
-
190
-
191
- $id = "$deleted";
192
-
193
- $sql5 = 'delete from mission_4_1 where id=:id';
194
-
195
- $stmt = $pdo->prepare($sql5);
196
-
197
- $stmt->bindParam(':id', $id, PDO::PARAM_INT);
198
-
199
- $stmt->execute();
200
-
201
- }
202
-
203
- }
204
-
205
- }
206
-
207
-
208
-
209
- $sql6 = 'SELECT*FROM mission_4_1';
210
-
211
- $stmt = $pdo->query($sql6);
212
-
213
- $results = $stmt->fetchAll();
214
-
215
- foreach ($results as $row2) {
216
-
217
- // $rowの中にはテーブルのカラム名が入る
218
-
219
- echo $row2['id'] . ',';
220
-
221
- echo $row2['name'] . ',';
222
-
223
- echo $row2['comment'] . ',';
224
-
225
- echo $row2['time'] . '<br>';
226
-
227
- }
228
-
229
- ?>
230
-
231
- ```