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

質問編集履歴

2

~10/14追記~

2020/10/14 12:05

投稿

usk0930
usk0930

スコア7

title CHANGED
File without changes
body CHANGED
@@ -88,4 +88,140 @@
88
88
 
89
89
  プログラミング経験が浅く、使用語句の間違い等あった際はご教示をお願い致します。
90
90
  また、ほかに必要な情報あればご指摘いただければ追記させていただきます。
91
- 以上、宜しくお願い致します。
91
+ 以上、宜しくお願い致します。
92
+ 閲覧いただきありがとうございます。
93
+
94
+ ●概要
95
+ データベースを使用した簡易ブログのようなものを作成中で、
96
+ 現在編集機能を実装しようとして考えております。
97
+ 編集画面(editshow.php)で内容を編集すると
98
+ (edit.php)へ編集しているページの主キー(id)と一緒に各カラム情報が渡され
99
+ 同ファイル内でUPDATEコマンドにてデータベースの中身を更新できないかと考えておりますが、
100
+ エラーが発生しております。
101
+
102
+ ●editshow.php
103
+ ```php
104
+ //一部抜粋
105
+ <form action="edit.php" method="post" enctype="multipart/form-data">
106
+ <p>TITLE:<input type='text' name='title' rows='1'value=<?php echo $row['title'] ?>></p>
107
+ <p>LANGUAGE:
108
+ <select name="language">
109
+ <option value="php" <?php if($row['language'] == 'php'){echo 'checked';}?> >PHP</option>
110
+ <option value="javasctipt" <?php if($row['language']=='javascript'){echo 'checked';}?>>JavaScript</option>
111
+ <option value="htmlcss" <?php if($row['language']=='htmlcss'){echo 'checked';}?>>HTML/CSS</option>
112
+ <option value="other" <?php if($row['language']=='other'){echo 'checked';}?>>Other</option>
113
+ </select>
114
+ <!--<p>DATE:<input type=date name='date'></p>-->
115
+ <p>TAG:<textarea name="tag1" name="tag1" rows='1'><?php echo $row['tag1'] ?></textarea>
116
+ <textarea name="tag2" rows='1'>#</textarea>
117
+ <textarea name="tag3" rows='1'>#</textarea></p>
118
+ <p>REFERENCE:<input type="file" name="img"></p>
119
+ <p>MEMO:<textarea name="memo" cols="90" rows="15" maxlength="500" wrap=”hard”><?php echo $row['memo'] ?></textarea></p>
120
+ <p>TYPE:
121
+ <input type="radio" name="type" value="question" <?php if($row['type']=='question'){echo 'checked';}?>> Question
122
+ <input type="radio" name="type" value="progress" <?php if($row['type']=='progress'){echo 'checked';}?>>Progress
123
+ <input type="radio" name="type" value="test" <?php if($row['type']=='test'){echo 'checked';}?>> Test</p>
124
+ <input type="submit" value="POST">
125
+ <input type="hidden" name="id" value= <?php echo $id ?> />
126
+ </form>
127
+ <br>
128
+ ```
129
+ ●edit.php
130
+ ```php
131
+ <?php
132
+ $language = $_POST['language'];
133
+ $title = $_POST['title'];
134
+ $tag1 = $_POST['tag1'];
135
+ $date = $_POST['date'];
136
+ $memo = $_POST['memo'];
137
+ $type = $_POST['type'];
138
+ $id = $_POST['id'];
139
+
140
+ if ($language == '' || $title == ''){
141
+ header('Location: toppage.php');
142
+ exit();
143
+ }
144
+
145
+ $dsn = 'mysql:host=localhost;dbname=***;charset=utf8';
146
+ $user = '**';
147
+ $password = '*';
148
+
149
+ try{
150
+ $db = new PDO($dsn, $user, $password);
151
+ $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
152
+ //エラー箇所(コマンド記載箇所)
153
+ $stmt = $db->prepare("
154
+ UPDATE pile SET title = $title, language = $language, date = $date, tag1 = $tag1, memo = $memo, type = $type WHERE id = $id"
155
+ );
156
+ $stmt->execute();
157
+
158
+ header('Location: toppage.php');
159
+ exit();
160
+ } catch (PDOException $e){
161
+ exit('データベースに接続できませんでした'.$e->getMessage());
162
+ }
163
+
164
+ ?>
165
+ ```
166
+ ●エラーメッセージ
167
+ Fatal error: Uncaught Error: Call to a member function execute() on bool
168
+ in C:\xampp\htdocs\uskprogram\edit.php:(コマンド記載行)
169
+ Stack trace: #0 {main} thrown
170
+ in C:\xampp\htdocs\uskprogram\edit.php on line (コマンド記載行)
171
+
172
+ ●質問内容
173
+ エラーメッセージから、(edit.php)のコマンド内に誤りがあると考えております。
174
+ (editshow.php)から渡される主キーをもとにUPDATEしたく、コマンド内で変数を使用しておりますが
175
+ そもそもコマンド内での変数使用は不可能なのでしょうか?
176
+ 使用するための修正箇所、または根本的な考え方が間違っているのであれば
177
+ データベースを使用したサイトで編集機能を実装するための方法について
178
+ ヒントをいただけませんでしょうか。
179
+
180
+ プログラミング経験が浅く、使用語句の間違い等あった際はご教示をお願い致します。
181
+ また、ほかに必要な情報あればご指摘いただければ追記させていただきます。
182
+ 以上、宜しくお願い致します。
183
+
184
+ ~~10/14追記~~
185
+ tanat様からのご指導を受け、エラー箇所を特定するため、
186
+ ①SQL文の妥当性を①myadminにて検証→②PHP本文に戻りSQL文内をプレースホルダで置換→③値を固定値にてバインド→④値を変数にてバインド
187
+ との流れの中で②~③を確認しようとedit.phpを編集したところ、エラー文は発生しなくなりましたが、
188
+ ページの編集が反映されないまま、トップページに戻ってしまうという事象が発生しております。
189
+
190
+ ```php
191
+ <?php
192
+ $language = $_POST['language'];
193
+ $title = $_POST['title'];
194
+ $tag1 = $_POST['tag1'];
195
+
196
+ $memo = $_POST['memo'];
197
+ $type = $_POST['type'];
198
+ $id = $_POST['id'];
199
+
200
+ /*$answer = $_POST['answer'];*/
201
+
202
+ if ($language == '' || $title == ''){
203
+ header('Location: toppage.php');
204
+ exit();
205
+ }
206
+
207
+ $dsn = 'mysql:host=localhost;dbname=***;charset=utf8';
208
+ $user = '**';
209
+ $password = '*';
210
+
211
+
212
+
213
+ try{
214
+ $db = new PDO($dsn, $user, $password);
215
+ $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
216
+ $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
217
+ $stmt = $db->prepare("
218
+ UPDATE pile SET title = ':title', language = ':language', tag1 = ':tag1', memo = ':memo', type = ':type' WHERE id = ':id' ");
219
+ $stmt->execute(array(':title' => 'test', ':language' => 'test', ':tag1' => 'test', ':memo' => 'test', ':type' => 'test', ':id' => 1));
220
+ header('Location: toppage.php');
221
+ exit();
222
+ } catch (PDOException $e){
223
+ exit('データベースに接続できませんでした'.$e->getMessage());
224
+ }
225
+
226
+ ?>
227
+ ```

1

誤字修正

2020/10/14 12:05

投稿

usk0930
usk0930

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- MYSQL コマンド内での変数使用可否について教えてください
1
+ MYSQL コマンド(UPDATE構文)内での変数使用可否について教えてください
body CHANGED
@@ -82,9 +82,10 @@
82
82
  エラーメッセージから、(edit.php)のコマンド内に誤りがあると考えております。
83
83
  (editshow.php)から渡される主キーをもとにUPDATEしたく、コマンド内で変数を使用しておりますが
84
84
  そもそもコマンド内での変数使用は不可能なのでしょうか?
85
- 使用するための修正箇所、使用不可であれば上記概要記載の目的を達成するための方法について
85
+ 使用するための修正箇所、または根本的な考え方が間違っているのであれば
86
+ データベースを使用したサイトで編集機能を実装するための方法について
86
87
  ヒントをいただけませんでしょうか。
87
88
 
88
- プログラミング経験が浅く、使用語句の間違い等あった際は申し訳いません
89
+ プログラミング経験が浅く、使用語句の間違い等あった際はご教示をお願致し
89
- また、ほかに必要な情報あればご指摘いただければ追記致します。
90
+ また、ほかに必要な情報あればご指摘いただければ追記させていただきます。
90
91
  以上、宜しくお願い致します。