質問編集履歴

2

~10/14追記~

2020/10/14 12:05

投稿

usk0930
usk0930

スコア7

test CHANGED
File without changes
test CHANGED
@@ -179,3 +179,275 @@
179
179
  また、ほかに必要な情報あればご指摘いただければ追記させていただきます。
180
180
 
181
181
  以上、宜しくお願い致します。
182
+
183
+ 閲覧いただきありがとうございます。
184
+
185
+
186
+
187
+ ●概要
188
+
189
+ データベースを使用した簡易ブログのようなものを作成中で、
190
+
191
+ 現在編集機能を実装しようとして考えております。
192
+
193
+ 編集画面(editshow.php)で内容を編集すると
194
+
195
+ (edit.php)へ編集しているページの主キー(id)と一緒に各カラム情報が渡され
196
+
197
+ 同ファイル内でUPDATEコマンドにてデータベースの中身を更新できないかと考えておりますが、
198
+
199
+ エラーが発生しております。
200
+
201
+
202
+
203
+ ●editshow.php
204
+
205
+ ```php
206
+
207
+ //一部抜粋
208
+
209
+ <form action="edit.php" method="post" enctype="multipart/form-data">
210
+
211
+ <p>TITLE:<input type='text' name='title' rows='1'value=<?php echo $row['title'] ?>></p>
212
+
213
+ <p>LANGUAGE:
214
+
215
+ <select name="language">
216
+
217
+ <option value="php" <?php if($row['language'] == 'php'){echo 'checked';}?> >PHP</option>
218
+
219
+ <option value="javasctipt" <?php if($row['language']=='javascript'){echo 'checked';}?>>JavaScript</option>
220
+
221
+ <option value="htmlcss" <?php if($row['language']=='htmlcss'){echo 'checked';}?>>HTML/CSS</option>
222
+
223
+ <option value="other" <?php if($row['language']=='other'){echo 'checked';}?>>Other</option>
224
+
225
+ </select>
226
+
227
+ <!--<p>DATE:<input type=date name='date'></p>-->
228
+
229
+ <p>TAG:<textarea name="tag1" name="tag1" rows='1'><?php echo $row['tag1'] ?></textarea>
230
+
231
+ <textarea name="tag2" rows='1'>#</textarea>
232
+
233
+ <textarea name="tag3" rows='1'>#</textarea></p>
234
+
235
+ <p>REFERENCE:<input type="file" name="img"></p>
236
+
237
+ <p>MEMO:<textarea name="memo" cols="90" rows="15" maxlength="500" wrap=”hard”><?php echo $row['memo'] ?></textarea></p>
238
+
239
+ <p>TYPE:
240
+
241
+ <input type="radio" name="type" value="question" <?php if($row['type']=='question'){echo 'checked';}?>> Question
242
+
243
+ <input type="radio" name="type" value="progress" <?php if($row['type']=='progress'){echo 'checked';}?>>Progress
244
+
245
+ <input type="radio" name="type" value="test" <?php if($row['type']=='test'){echo 'checked';}?>> Test</p>
246
+
247
+ <input type="submit" value="POST">
248
+
249
+ <input type="hidden" name="id" value= <?php echo $id ?> />
250
+
251
+ </form>
252
+
253
+ <br>
254
+
255
+ ```
256
+
257
+ ●edit.php
258
+
259
+ ```php
260
+
261
+ <?php
262
+
263
+ $language = $_POST['language'];
264
+
265
+ $title = $_POST['title'];
266
+
267
+ $tag1 = $_POST['tag1'];
268
+
269
+ $date = $_POST['date'];
270
+
271
+ $memo = $_POST['memo'];
272
+
273
+ $type = $_POST['type'];
274
+
275
+ $id = $_POST['id'];
276
+
277
+
278
+
279
+ if ($language == '' || $title == ''){
280
+
281
+ header('Location: toppage.php');
282
+
283
+ exit();
284
+
285
+ }
286
+
287
+
288
+
289
+ $dsn = 'mysql:host=localhost;dbname=***;charset=utf8';
290
+
291
+ $user = '**';
292
+
293
+ $password = '*';
294
+
295
+
296
+
297
+ try{
298
+
299
+ $db = new PDO($dsn, $user, $password);
300
+
301
+ $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
302
+
303
+ //エラー箇所(コマンド記載箇所)
304
+
305
+ $stmt = $db->prepare("
306
+
307
+ UPDATE pile SET title = $title, language = $language, date = $date, tag1 = $tag1, memo = $memo, type = $type WHERE id = $id"
308
+
309
+ );
310
+
311
+ $stmt->execute();
312
+
313
+
314
+
315
+ header('Location: toppage.php');
316
+
317
+ exit();
318
+
319
+ } catch (PDOException $e){
320
+
321
+ exit('データベースに接続できませんでした'.$e->getMessage());
322
+
323
+ }
324
+
325
+
326
+
327
+ ?>
328
+
329
+ ```
330
+
331
+ ●エラーメッセージ
332
+
333
+ Fatal error: Uncaught Error: Call to a member function execute() on bool
334
+
335
+ in C:\xampp\htdocs\uskprogram\edit.php:(コマンド記載行)
336
+
337
+ Stack trace: #0 {main} thrown
338
+
339
+ in C:\xampp\htdocs\uskprogram\edit.php on line (コマンド記載行)
340
+
341
+
342
+
343
+ ●質問内容
344
+
345
+ エラーメッセージから、(edit.php)のコマンド内に誤りがあると考えております。
346
+
347
+ (editshow.php)から渡される主キーをもとにUPDATEしたく、コマンド内で変数を使用しておりますが
348
+
349
+ そもそもコマンド内での変数使用は不可能なのでしょうか?
350
+
351
+ 使用するための修正箇所、または根本的な考え方が間違っているのであれば
352
+
353
+ データベースを使用したサイトで編集機能を実装するための方法について
354
+
355
+ ヒントをいただけませんでしょうか。
356
+
357
+
358
+
359
+ プログラミング経験が浅く、使用語句の間違い等あった際はご教示をお願い致します。
360
+
361
+ また、ほかに必要な情報あればご指摘いただければ追記させていただきます。
362
+
363
+ 以上、宜しくお願い致します。
364
+
365
+
366
+
367
+ ~~10/14追記~~
368
+
369
+ tanat様からのご指導を受け、エラー箇所を特定するため、
370
+
371
+ ①SQL文の妥当性を①myadminにて検証→②PHP本文に戻りSQL文内をプレースホルダで置換→③値を固定値にてバインド→④値を変数にてバインド
372
+
373
+ との流れの中で②~③を確認しようとedit.phpを編集したところ、エラー文は発生しなくなりましたが、
374
+
375
+ ページの編集が反映されないまま、トップページに戻ってしまうという事象が発生しております。
376
+
377
+
378
+
379
+ ```php
380
+
381
+ <?php
382
+
383
+ $language = $_POST['language'];
384
+
385
+ $title = $_POST['title'];
386
+
387
+ $tag1 = $_POST['tag1'];
388
+
389
+
390
+
391
+ $memo = $_POST['memo'];
392
+
393
+ $type = $_POST['type'];
394
+
395
+ $id = $_POST['id'];
396
+
397
+
398
+
399
+ /*$answer = $_POST['answer'];*/
400
+
401
+
402
+
403
+ if ($language == '' || $title == ''){
404
+
405
+ header('Location: toppage.php');
406
+
407
+ exit();
408
+
409
+ }
410
+
411
+
412
+
413
+ $dsn = 'mysql:host=localhost;dbname=***;charset=utf8';
414
+
415
+ $user = '**';
416
+
417
+ $password = '*';
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+ try{
426
+
427
+ $db = new PDO($dsn, $user, $password);
428
+
429
+ $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
430
+
431
+ $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
432
+
433
+ $stmt = $db->prepare("
434
+
435
+ UPDATE pile SET title = ':title', language = ':language', tag1 = ':tag1', memo = ':memo', type = ':type' WHERE id = ':id' ");
436
+
437
+ $stmt->execute(array(':title' => 'test', ':language' => 'test', ':tag1' => 'test', ':memo' => 'test', ':type' => 'test', ':id' => 1));
438
+
439
+ header('Location: toppage.php');
440
+
441
+ exit();
442
+
443
+ } catch (PDOException $e){
444
+
445
+ exit('データベースに接続できませんでした'.$e->getMessage());
446
+
447
+ }
448
+
449
+
450
+
451
+ ?>
452
+
453
+ ```

1

誤字修正

2020/10/14 12:05

投稿

usk0930
usk0930

スコア7

test CHANGED
@@ -1 +1 @@
1
- MYSQL コマンド内での変数使用可否について教えてください
1
+ MYSQL コマンド(UPDATE構文)内での変数使用可否について教えてください
test CHANGED
@@ -166,14 +166,16 @@
166
166
 
167
167
  そもそもコマンド内での変数使用は不可能なのでしょうか?
168
168
 
169
- 使用するための修正箇所、使用不可であれば上記概要記載の目的を達成するための方法について
169
+ 使用するための修正箇所、または根本的な考え方が間違っているのであれば
170
+
171
+ データベースを使用したサイトで編集機能を実装するための方法について
170
172
 
171
173
  ヒントをいただけませんでしょうか。
172
174
 
173
175
 
174
176
 
175
- プログラミング経験が浅く、使用語句の間違い等あった際は申し訳いません
177
+ プログラミング経験が浅く、使用語句の間違い等あった際はご教示をお願致し
176
178
 
177
- また、ほかに必要な情報あればご指摘いただければ追記致します。
179
+ また、ほかに必要な情報あればご指摘いただければ追記させていただきます。
178
180
 
179
181
  以上、宜しくお願い致します。