質問編集履歴

4

2018/08/07 09:04

投稿

mumumoon
mumumoon

スコア16

test CHANGED
File without changes
test CHANGED
@@ -48,205 +48,621 @@
48
48
 
49
49
  <?php
50
50
 
51
+
52
+
51
- //DB接続
53
+ //ファイルのアップロード部分
52
-
53
- try{
54
+
54
-
55
- function connect_db()
55
+ function file_upload()
56
-
56
+
57
- {
57
+ {
58
+
58
-
59
+ // POSTではないとき何もしない
60
+
61
+ if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') !== 'POST') {
62
+
63
+ return;
64
+
65
+ }
66
+
67
+
68
+
69
+
70
+
71
+ // アップロードファイル
72
+
73
+ $upfile = $_FILES['upfile'];
74
+
75
+
76
+
77
+ if (!$upfile['error'] > 0) {
78
+
59
- $dsn = 'mysql:host=localhost;dbname=blog;charset=utf8';
79
+ throw new Exception('ファイルアップロードに失敗しました。');
80
+
60
-
81
+ }else{
82
+
83
+
84
+
85
+
86
+
87
+
88
+
61
- $username = 'root';
89
+ $tmp_name = $upfile['tmp_name'];
90
+
62
-
91
+ //$tmp_name = $_FILES['upfile']['tmp_name'];
92
+
93
+
94
+
63
- $password = '...';
95
+ // ファイルタイプチェック
96
+
64
-
97
+ $finfo = finfo_open(FILEINFO_MIME_TYPE);
98
+
99
+ $mimetype = finfo_file($finfo, $tmp_name);
100
+
101
+
102
+
103
+ // 許可するMIMETYPE
104
+
65
- $options = [
105
+ $allowed_types = [
106
+
66
-
107
+ 'jpg' => 'image/jpeg'
108
+
67
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
109
+ , 'png' => 'image/png'
68
-
110
+
69
- , PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
111
+ , 'gif' => 'image/gif'
70
112
 
71
113
  ];
72
114
 
115
+ if (!in_array($mimetype, $allowed_types)) {
116
+
117
+ throw new Exception('許可されていないファイルタイプです。');
118
+
119
+ }
120
+
121
+
122
+
123
+ // ファイル名(ハッシュ値でファイル名を決定するため、同一ファイルは同盟で上書きされる)
124
+
125
+ $filename = sha1_file($tmp_name);
126
+
127
+
128
+
129
+ // 拡張子
130
+
131
+ $ext = array_search($mimetype, $allowed_types);
132
+
133
+
134
+
135
+
136
+
137
+ //画像の新しい名前 テキストに入力する部分
138
+
139
+ $new_name = $_FILES['upfile']['name'];
140
+
141
+
142
+
143
+ // 保存作ファイルパス 
144
+
145
+ $destination = sprintf('/%s/%s'
146
+
147
+ , "Users/・・・/Blog/upfiles"
148
+
149
+ , $new_name
150
+
151
+ );
152
+
153
+
154
+
155
+
156
+
157
+ // アップロードディレクトリに移動
158
+
73
- return new PDO($dsn, $username, $password, $options);
159
+ if (!move_uploaded_file($tmp_name, $destination)) {
160
+
161
+ throw new Exception('ファイルの保存に失敗しました。');
74
162
 
75
163
  }
76
164
 
77
165
 
78
166
 
79
- /**
167
+ // Exif 情報の削除
80
-
168
+
81
- * insert
169
+ $imagick = new Imagick($destination);
82
-
170
+
83
- * @param string $sql
171
+ $imagick->stripimage();
84
-
85
- * @param array $arr
172
+
86
-
87
- * @return int lastInsertId
173
+ $imagick->writeimage($destination);
174
+
175
+
176
+
177
+
178
+
88
-
179
+ // データベースに登録
180
+
181
+ $sql = 'INSERT INTO `images` (`id`, `path`) VALUES (NULL, :path) ';
182
+
89
- */
183
+ $arr = [];
184
+
90
-
185
+ $arr[':path'] = $destination;
186
+
91
- function insert($sql, $arr = [])
187
+ $lastInsertId = insert($sql, $arr);
188
+
189
+
190
+
92
-
191
+ // 成功時にページを移動する
192
+
193
+ header(sprintf('Location: User_TopPage.php', $lastInsertId));
194
+
195
+
196
+
93
- {
197
+ }
198
+
199
+
200
+
201
+
202
+
94
-
203
+ // ファイルアップロード
204
+
95
- $pdo = connect_db();
205
+ file_upload();
96
-
97
- $stmt = $pdo->prepare($sql);
98
-
99
- $stmt->execute($arr);
100
-
101
- return $pdo->lastInsertId();
102
206
 
103
207
  }
104
208
 
105
-
106
-
107
- /**
108
-
109
- * select
110
-
111
- * @param string $sql
209
+ } catch (Exception $e) {
112
-
113
- * @param array $arr
210
+
114
-
115
- * @return array $rows
116
-
117
- */
118
-
119
- function select($sql, $arr = [])
120
-
121
- {
122
-
123
- $pdo = connect_db();
124
-
125
- $stmt = $pdo->prepare($sql);
126
-
127
- $stmt->execute($arr);
128
-
129
- return $stmt->fetchAll();
211
+ $error = $e->getMessage();
130
212
 
131
213
  }
132
214
 
133
215
 
134
216
 
135
- /**
136
-
137
- * htmlspecialchars
138
-
139
- * @param string $string
140
-
141
- * @return $string
142
-
143
- */
144
-
145
- function h($string)
146
-
147
- {
148
-
149
- return htmlspecialchars($string, ENT_QUOTES, 'utf-8');
150
-
151
- }
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
- //ファイルのアップロード部分
160
-
161
- function file_upload()
162
-
163
- {
164
-
165
- // POSTではないとき何もしない
166
-
167
- if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') !== 'POST') {
168
-
169
- return;
170
-
171
- }
172
-
173
-
174
-
175
-
176
-
177
- // アップロードファイル
178
-
179
- $upfile = $_FILES['upfile'];
180
-
181
-
182
-
183
- if (!$upfile['error'] > 0) {
184
-
185
- throw new Exception('ファイルアップロードに失敗しました。');
186
-
187
- }else{
188
-
189
-
217
+
218
+
219
+
220
+
221
+
222
+
223
+ //タイトルと本文部分
224
+
225
+ if(isset($_POST['submit'])){
226
+
227
+ echo '';
228
+
229
+
230
+
231
+ $title = $_POST['title'];
232
+
233
+ $content = $_POST['content'];
234
+
235
+
236
+
237
+ if (!$title) $error .= 'タイトルがありません。<br>';
238
+
239
+ if (mb_strlen($title) > 80) $error .= 'タイトルが長すぎます。<br>';
240
+
241
+ if (!$content) $error .= '本文がありません。<br>';
242
+
243
+
244
+
245
+ if (!$error) {
246
+
247
+ $pdo = new PDO("mysql:dbname=blog", "root","...");
248
+
249
+ $st = $pdo->query("INSERT INTO post(title,content) VALUES('$title','$content')");
250
+
251
+
252
+
253
+
254
+
255
+ header('Location: User_TopPage.php');
256
+
257
+ exit();
258
+
259
+ }
260
+
261
+ }
262
+
263
+ ?>
264
+
265
+
266
+
267
+
268
+
269
+ <!DOCTYPE html>
270
+
271
+ <html lang="ja">
272
+
273
+ <head>
274
+
275
+ <meta charset="utf-8">
276
+
277
+ <title>記事投稿</title>
278
+
279
+ <link rel="stylesheet" href="blog.css">
280
+
281
+ </head>
282
+
283
+ <body>
284
+
285
+ <form method="post" action=""enctype="multipart/form-data">
286
+
287
+   <div class="posting">
288
+
289
+ <h2>記事投稿</h2>
290
+
291
+ <p>題名</p>
292
+
293
+ <p><input name="title" type="text" size="40"></p>
294
+
295
+ <p>本文</p>
296
+
297
+ <p><textarea name="content" rows="8" cols="40"></textarea></p>
298
+
299
+ <p><label for="upfile">画像ファイル</label>
300
+
301
+ <input type="file" name="upfile" id="upfile" /></p>
302
+
303
+ <input name="submit" type="submit" value="投稿">
304
+
305
+ </form>
306
+
307
+ <p><input type="button" onclick="window.history.back('http://localhost/Blog/User_TopPage.php');" value="戻る"></p>
308
+
309
+ <p><?php echo $error ?></p>
310
+
311
+ </div>
312
+
313
+ </body>
314
+
315
+ </html>
316
+
317
+ ```
318
+
319
+
320
+
321
+ ```PHP
322
+
323
+ <User_TopPage>
324
+
325
+
326
+
327
+ <!DOCTYPE html>
328
+
329
+ <html lang="ja">
330
+
331
+ <head>
332
+
333
+ <meta charset="UTF-8">
334
+
335
+ <title>TEST Blog</title>
336
+
337
+ <link rel="stylesheet" type="text/css" href="blog.css">
338
+
339
+ </head>
340
+
341
+ <body>
342
+
343
+ <a href="User_TopPage.php"><label class="toptest"><h1>TEST Blog</h1></label></a>
344
+
345
+ <a href="t_post.php"><label class="contentTop"><h4>記事作成</h4></label></a>
346
+
347
+ <a href="Logout.php"><label class="Logout"><h5>ログアウト</h5></label></a>
348
+
349
+
350
+
351
+ </body>
352
+
353
+ </html>
354
+
355
+
356
+
357
+ <?php
358
+
359
+ $pdo = new PDO("mysql:dbname=blog", "root","...",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
360
+
361
+
362
+
363
+
364
+
365
+ //tableの全部(*)を記事番号の大きい順、すなわち新しい記事から順番に並び替えられる
366
+
367
+ //fetchAllメソッドは、全てのレコードを配列として返します。$posts[0]に最も新しい記事、$posts[1]に次の記事…と順番に入ります
368
+
369
+ $stmt = $pdo->prepare("SELECT * FROM post ORDER BY no DESC");
370
+
371
+ $stmt->execute();
372
+
373
+ $posts = $stmt->fetchAll();
374
+
375
+
376
+
377
+
378
+
379
+ $sql =
380
+
381
+ "CREATE VIEW
382
+
383
+ blogview
384
+
385
+ (
386
+
387
+ no,
388
+
389
+ title,
390
+
391
+ content,
392
+
393
+ time,
394
+
395
+ path,
396
+
397
+ name,
398
+
399
+ comment
400
+
401
+
402
+
403
+ )
404
+
405
+ AS
406
+
407
+ SELECT
408
+
409
+ post.no,
410
+
411
+ post.title,
412
+
413
+ post.content,
414
+
415
+ post.time,
416
+
417
+ images.path,
418
+
419
+ comment.name,
420
+
421
+ comment.comment
422
+
423
+ FROM
424
+
425
+ post AS post
426
+
427
+ LEFT JOIN
428
+
429
+ comment AS comment
430
+
431
+ ON
432
+
433
+ post.no = comment.post_no
434
+
435
+ LEFT JOIN
436
+
437
+ images AS images
438
+
439
+ ON
440
+
441
+ post.time = images.time"
442
+
443
+ ;
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+ $blogview['comments'] = $stmt->fetchAll();
452
+
453
+ $stmt->execute();
454
+
455
+
456
+
457
+ $sql = 'SELECT `no`, `path` FROM `blogview`ORDER BY no DESC';
458
+
459
+ $result = $pdo->query($sql);
460
+
461
+
462
+
463
+
464
+
465
+ //for ループの中でSQLを実行するのはNGです。JOINを使ってテーブルを連結し、SQLの発行回数を一回で住むようにしよう (質問部分)
466
+
467
+ // for ($i = 0; $i < count($posts); $i++) {
468
+
469
+ // $st = $pdo->query("SELECT * FROM comment WHERE post_no={$posts[$i]['no']} ORDER BY no DESC");
470
+
471
+ // $posts[$i]['comments'] = $st->fetchAll();
472
+
473
+ // }
474
+
475
+
476
+
477
+
478
+
479
+ require 't_index.php';
480
+
481
+ ```
482
+
483
+
484
+
485
+
486
+
487
+ ```PHP
488
+
489
+ <表示部分>
490
+
491
+
492
+
493
+ <?php
494
+
495
+ $pdo = new PDO("mysql:dbname=blog", "root","…",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
496
+
497
+ ?>
498
+
499
+
500
+
501
+ <!DOCTYPE html>
502
+
503
+ <html>
504
+
505
+ <head>
506
+
507
+ <meta charset="UTF-8">
508
+
509
+ <title>TEST Blog</title>
510
+
511
+ <link rel="stylesheet" href="blog.css">
512
+
513
+ </head>
514
+
515
+ <body>
516
+
517
+ <?php foreach ($posts as $post) { ?>
518
+
519
+ <div class="post">
520
+
521
+ <h2><?php echo $post['title'] ?></h2>
522
+
523
+ <p><?php echo nl2br($post['content']) ?></p>
190
524
 
191
525
 
192
526
 
193
-
194
-
195
- $tmp_name = $upfile['tmp_name'];
196
-
197
- //$tmp_name = $_FILES['upfile']['tmp_name'];
198
-
199
-
200
-
201
- // ファイルタイプチェック
202
-
203
- $finfo = finfo_open(FILEINFO_MIME_TYPE);
204
-
205
- $mimetype = finfo_file($finfo, $tmp_name);
206
-
207
-
208
-
209
- // 許可するMIMETYPE
210
-
211
- $allowed_types = [
212
-
213
- 'jpg' => 'image/jpeg'
214
-
215
- , 'png' => 'image/png'
216
-
217
- , 'gif' => 'image/gif'
218
-
219
- ];
220
-
221
- if (!in_array($mimetype, $allowed_types)) {
222
-
223
- throw new Exception('許可されていないファイルタイプです。');
224
-
225
- }
226
-
227
-
228
-
229
- // ファイル名(ハッシュ値でファイル名を決定するため、同一ファイルは同盟で上書きされる)
230
-
231
- $filename = sha1_file($tmp_name);
232
-
233
-
234
-
235
- // 拡張子
236
-
237
- $ext = array_search($mimetype, $allowed_types);
238
-
239
-
240
-
241
-
242
-
243
- //画像の新しい名前 テキストに入力する部分
527
+ <!-- image -->
528
+
529
+ <?php foreach ($result as $row) { ?>
530
+
531
+ <div class="iamges">
532
+
533
+ <?php echo '<img src="'.$row['path'];?>
534
+
535
+ </div>
536
+
537
+ <?php } ?>
538
+
539
+
540
+
541
+ <!-- コメント部分 -->
542
+
543
+ <?php foreach ($blogviews['comments'] as $blogview) { ?>
544
+
545
+ <div class="comment">
546
+
547
+ <h3><?php echo $blogview['name'] ?></h3>
548
+
549
+ <p><?php echo nl2br($blogview['comment']) ?></p>
550
+
551
+ <!-- <p>>?php echo ($) -->
552
+
553
+ </div>
554
+
555
+ <?php } ?>
556
+
557
+
558
+
559
+ <p class="commment_link">
560
+
561
+ 投稿日:<?php echo $post['time'] ?> 
562
+
563
+ <a href="comment.php?no=<?php echo $post['no'] ?>">コメント</a>
564
+
565
+ </p>
566
+
567
+ </div>
568
+
569
+ <?php } ?>
570
+
571
+ </body>
572
+
573
+
574
+
575
+ </html>
576
+
577
+ ```
578
+
579
+
580
+
581
+ ### 変更点
582
+
583
+
584
+
585
+ imagesのテーブル構造です。
586
+
587
+ ![](f5d0a1e1bbb3a4cdbb6b60011a3d898e.png)
588
+
589
+
590
+
591
+ - なぜ画像がDBに保存できなきなくなるのか。 はもう一度書き直したところ、Permissionエラーが出たので、ファイルの権限を変えたらDB内に保存できるようになりました。
592
+
593
+
594
+
595
+ ###変更点2
596
+
597
+ CREATE viewで作成したものです。
598
+
599
+ これを使ってコメントと画像を上手くtitle,conetnt を使って表示させようとしているところです。
600
+
601
+ ![](66b11231070066acf736c466463f9637.png)
602
+
603
+ ---
604
+
605
+ User_TopPageの部分に
606
+
607
+ ```PHP
608
+
609
+ $blogview['comments'] = $stmt->fetchAll();
610
+
611
+  $stmt->execute();
612
+
613
+
614
+
615
+ $sql = 'SELECT `no`, `path` FROM `blogview`ORDER BY no DESC';
616
+
617
+ $result = $pdo->query($sql);
618
+
619
+
620
+
621
+ ```
622
+
623
+
624
+
625
+ 表示部分のところにimgタグを入れました。
626
+
627
+ ```PHP
628
+
629
+ <?php foreach ($result as $row) { ?>
630
+
631
+ <div class="iamges">
632
+
633
+ <?php echo '<img src="'.$row['path'];?>
634
+
635
+ </div>
636
+
637
+ <?php } ?>
638
+
639
+ ```
640
+
641
+
642
+
643
+ この2つを追加したところ
644
+
645
+ ![](dd1e883d367f94ce7033a6cf59a985e6.png)
646
+
647
+ このような地獄絵図になりました。
648
+
649
+
650
+
651
+ ---
652
+
653
+ ```
654
+
655
+ - path部分は(pathについて理解はあまりできていません)
656
+
657
+ ```php
658
+
659
+ //画像の新しい名前 テキストに入力する部分
244
660
 
245
661
  $new_name = $_FILES['upfile']['name'];
246
662
 
247
663
 
248
664
 
249
- // 保存作ファイルパス 移動先 今回は絶対パス
665
+ // 保存作ファイルパス 
250
666
 
251
667
  $destination = sprintf('/%s/%s'
252
668
 
@@ -256,502 +672,4 @@
256
672
 
257
673
  );
258
674
 
259
-
260
-
261
-
262
-
263
- // アップロードディレクトリに移動
264
-
265
- if (!move_uploaded_file($tmp_name, $destination)) {
266
-
267
- throw new Exception('ファイルの保存に失敗しました。');
268
-
269
- }
270
-
271
-
272
-
273
- // Exif 情報の削除
274
-
275
- $imagick = new Imagick($destination);
276
-
277
- $imagick->stripimage();
278
-
279
- $imagick->writeimage($destination);
280
-
281
-
282
-
283
-
284
-
285
- // データベースに登録
286
-
287
- $sql = 'INSERT INTO `images` (`id`, `path`) VALUES (NULL, :path) ';
288
-
289
- $arr = [];
290
-
291
- $arr[':path'] = $destination;
292
-
293
- $lastInsertId = insert($sql, $arr);
294
-
295
-
296
-
297
- // 成功時にページを移動する
298
-
299
- header(sprintf('Location: User_TopPage.php', $lastInsertId));
300
-
301
-
302
-
303
- }
304
-
305
-
306
-
307
-
308
-
309
- // ファイルアップロード
310
-
311
- file_upload();
312
-
313
- }
314
-
315
- } catch (Exception $e) {
316
-
317
- $error = $e->getMessage();
318
-
319
- }
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
-
329
- //タイトルと本文部分
330
-
331
- if(isset($_POST['submit'])){
332
-
333
- echo '';
334
-
335
-
336
-
337
- $title = $_POST['title'];
338
-
339
- $content = $_POST['content'];
340
-
341
-
342
-
343
- if (!$title) $error .= 'タイトルがありません。<br>';
344
-
345
- if (mb_strlen($title) > 80) $error .= 'タイトルが長すぎます。<br>';
346
-
347
- if (!$content) $error .= '本文がありません。<br>';
348
-
349
-
350
-
351
- if (!$error) {
352
-
353
- $pdo = new PDO("mysql:dbname=blog", "root","...");
354
-
355
- $st = $pdo->query("INSERT INTO post(title,content) VALUES('$title','$content')");
356
-
357
-
358
-
359
-
360
-
361
- header('Location: User_TopPage.php');
362
-
363
- exit();
364
-
365
- }
366
-
367
- }
368
-
369
- ?>
370
-
371
-
372
-
373
-
374
-
375
- <!DOCTYPE html>
376
-
377
- <html lang="ja">
378
-
379
- <head>
380
-
381
- <meta charset="utf-8">
382
-
383
- <title>記事投稿</title>
384
-
385
- <link rel="stylesheet" href="blog.css">
386
-
387
- </head>
388
-
389
- <body>
390
-
391
- <form method="post" action=""enctype="multipart/form-data">
392
-
393
-   <div class="posting">
394
-
395
- <h2>記事投稿</h2>
396
-
397
- <p>題名</p>
398
-
399
- <p><input name="title" type="text" size="40"></p>
400
-
401
- <p>本文</p>
402
-
403
- <p><textarea name="content" rows="8" cols="40"></textarea></p>
404
-
405
- <p><label for="upfile">画像ファイル</label>
406
-
407
- <input type="file" name="upfile" id="upfile" /></p>
408
-
409
- <input name="submit" type="submit" value="投稿">
410
-
411
- </form>
412
-
413
- <p><input type="button" onclick="window.history.back('http://localhost/Blog/User_TopPage.php');" value="戻る"></p>
414
-
415
- <p><?php echo $error ?></p>
416
-
417
- </div>
418
-
419
- </body>
420
-
421
- </html>
422
-
423
675
  ```
424
-
425
-
426
-
427
- ```PHP
428
-
429
- <User_TopPage>
430
-
431
-
432
-
433
- <!DOCTYPE html>
434
-
435
- <html lang="ja">
436
-
437
- <head>
438
-
439
- <meta charset="UTF-8">
440
-
441
- <title>TEST Blog</title>
442
-
443
- <link rel="stylesheet" type="text/css" href="blog.css">
444
-
445
- </head>
446
-
447
- <body>
448
-
449
- <a href="User_TopPage.php"><label class="toptest"><h1>TEST Blog</h1></label></a>
450
-
451
- <a href="t_post.php"><label class="contentTop"><h4>記事作成</h4></label></a>
452
-
453
- <a href="Logout.php"><label class="Logout"><h5>ログアウト</h5></label></a>
454
-
455
-
456
-
457
- </body>
458
-
459
- </html>
460
-
461
-
462
-
463
- <?php
464
-
465
- $pdo = new PDO("mysql:dbname=blog", "root","...",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
466
-
467
-
468
-
469
-
470
-
471
- //tableの全部(*)を記事番号の大きい順、すなわち新しい記事から順番に並び替えられる
472
-
473
- //fetchAllメソッドは、全てのレコードを配列として返します。$posts[0]に最も新しい記事、$posts[1]に次の記事…と順番に入ります
474
-
475
- $stmt = $pdo->prepare("SELECT * FROM post ORDER BY no DESC");
476
-
477
- $stmt->execute();
478
-
479
- $posts = $stmt->fetchAll();
480
-
481
-
482
-
483
-
484
-
485
- $sql =
486
-
487
- "CREATE VIEW
488
-
489
- blogview
490
-
491
- (
492
-
493
- no,
494
-
495
- title,
496
-
497
- content,
498
-
499
- time,
500
-
501
- path,
502
-
503
- name,
504
-
505
- comment
506
-
507
-
508
-
509
- )
510
-
511
- AS
512
-
513
- SELECT
514
-
515
- post.no,
516
-
517
- post.title,
518
-
519
- post.content,
520
-
521
- post.time,
522
-
523
- images.path,
524
-
525
- comment.name,
526
-
527
- comment.comment
528
-
529
- FROM
530
-
531
- post AS post
532
-
533
- LEFT JOIN
534
-
535
- comment AS comment
536
-
537
- ON
538
-
539
- post.no = comment.post_no
540
-
541
- LEFT JOIN
542
-
543
- images AS images
544
-
545
- ON
546
-
547
- post.time = images.time"
548
-
549
- ;
550
-
551
-
552
-
553
-
554
-
555
-
556
-
557
- $blogview['comments'] = $stmt->fetchAll();
558
-
559
- $stmt->execute();
560
-
561
-
562
-
563
- $sql = 'SELECT `no`, `path` FROM `blogview`ORDER BY no DESC';
564
-
565
- $result = $pdo->query($sql);
566
-
567
-
568
-
569
-
570
-
571
- //for ループの中でSQLを実行するのはNGです。JOINを使ってテーブルを連結し、SQLの発行回数を一回で住むようにしよう (質問部分)
572
-
573
- // for ($i = 0; $i < count($posts); $i++) {
574
-
575
- // $st = $pdo->query("SELECT * FROM comment WHERE post_no={$posts[$i]['no']} ORDER BY no DESC");
576
-
577
- // $posts[$i]['comments'] = $st->fetchAll();
578
-
579
- // }
580
-
581
-
582
-
583
-
584
-
585
- require 't_index.php';
586
-
587
- ```
588
-
589
-
590
-
591
-
592
-
593
- ```PHP
594
-
595
- <表示部分>
596
-
597
-
598
-
599
- <?php
600
-
601
- $pdo = new PDO("mysql:dbname=blog", "root","…",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
602
-
603
- ?>
604
-
605
-
606
-
607
- <!DOCTYPE html>
608
-
609
- <html>
610
-
611
- <head>
612
-
613
- <meta charset="UTF-8">
614
-
615
- <title>TEST Blog</title>
616
-
617
- <link rel="stylesheet" href="blog.css">
618
-
619
- </head>
620
-
621
- <body>
622
-
623
- <?php foreach ($posts as $post) { ?>
624
-
625
- <div class="post">
626
-
627
- <h2><?php echo $post['title'] ?></h2>
628
-
629
- <p><?php echo nl2br($post['content']) ?></p>
630
-
631
-
632
-
633
- <!-- image -->
634
-
635
- <?php foreach ($result as $row) { ?>
636
-
637
- <div class="iamges">
638
-
639
- <?php echo '<img src="'.$row['path'];?>
640
-
641
- </div>
642
-
643
- <?php } ?>
644
-
645
-
646
-
647
- <!-- コメント部分 -->
648
-
649
- <?php foreach ($blogviews['comments'] as $blogview) { ?>
650
-
651
- <div class="comment">
652
-
653
- <h3><?php echo $blogview['name'] ?></h3>
654
-
655
- <p><?php echo nl2br($blogview['comment']) ?></p>
656
-
657
- <!-- <p>>?php echo ($) -->
658
-
659
- </div>
660
-
661
- <?php } ?>
662
-
663
-
664
-
665
- <p class="commment_link">
666
-
667
- 投稿日:<?php echo $post['time'] ?> 
668
-
669
- <a href="comment.php?no=<?php echo $post['no'] ?>">コメント</a>
670
-
671
- </p>
672
-
673
- </div>
674
-
675
- <?php } ?>
676
-
677
- </body>
678
-
679
-
680
-
681
- </html>
682
-
683
- ```
684
-
685
-
686
-
687
- ### 変更点
688
-
689
-
690
-
691
- imagesのテーブル構造です。
692
-
693
- ![](f5d0a1e1bbb3a4cdbb6b60011a3d898e.png)
694
-
695
-
696
-
697
- ・なぜ画像がDBに保存できなきなくなるのか。 はもう一度書き直したところ、Permissionエラーが出たので、ファイルの権限を変えたらDB内に保存できるようになりました。
698
-
699
- また、今回は練習も含めなので絶対パスにしたところもあります。
700
-
701
-
702
-
703
- ###変更点2
704
-
705
- CREATE viewで作成したものです。
706
-
707
- これを使ってコメントと画像を上手くtitle,conetnt を使って表示させようとしているところです。
708
-
709
- ![](66b11231070066acf736c466463f9637.png)
710
-
711
- ---
712
-
713
- User_TopPageの部分に
714
-
715
- ```PHP
716
-
717
- $blogview['comments'] = $stmt->fetchAll();
718
-
719
-  $stmt->execute();
720
-
721
-
722
-
723
- $sql = 'SELECT `no`, `path` FROM `blogview`ORDER BY no DESC';
724
-
725
- $result = $pdo->query($sql);
726
-
727
-
728
-
729
- ```
730
-
731
-
732
-
733
- 表示部分のところにimgタグを入れました。
734
-
735
- ```PHP
736
-
737
- <?php foreach ($result as $row) { ?>
738
-
739
- <div class="iamges">
740
-
741
- <?php echo '<img src="'.$row['path'];?>
742
-
743
- </div>
744
-
745
- <?php } ?>
746
-
747
-
748
-
749
- ```
750
-
751
-
752
-
753
- この2つを追加したところ
754
-
755
- ![](dd1e883d367f94ce7033a6cf59a985e6.png)
756
-
757
- このような地獄絵図になりました。

3

変更点記載しました。

2018/08/07 09:04

投稿

mumumoon
mumumoon

スコア16

test CHANGED
File without changes
test CHANGED
@@ -22,11 +22,15 @@
22
22
 
23
23
 
24
24
 
25
- **知りたいこと**
25
+ ### **知りたいこと**
26
26
 
27
27
  ~~・なぜ画像がDBに保存できなきなくなるのか。~~
28
28
 
29
- DBの紐付けた部分をどのように表示をすれば良いのか。コードも含め。
29
+ - DBの紐付けた部分をどのように表示をすれば良いのか。コードも含め。
30
+
31
+ - 1つの記事に複数のコメント、1つの画像の付け方
32
+
33
+
30
34
 
31
35
 
32
36
 
@@ -242,403 +246,499 @@
242
246
 
243
247
 
244
248
 
245
- // 保存作ファイルパス 移動先
249
+ // 保存作ファイルパス 移動先 今回は絶対パス
246
-
250
+
247
- $destination = sprintf('./%s.%s'
251
+ $destination = sprintf('/%s/%s'
248
-
252
+
249
- , 'upfiles'
253
+ , "Users/・・・/Blog/upfiles"
250
-
254
+
251
- , $new_name
255
+ , $new_name
256
+
257
+ );
258
+
259
+
260
+
261
+
262
+
263
+ // アップロードディレクトリに移動
264
+
265
+ if (!move_uploaded_file($tmp_name, $destination)) {
266
+
267
+ throw new Exception('ファイルの保存に失敗しました。');
268
+
269
+ }
270
+
271
+
272
+
273
+ // Exif 情報の削除
274
+
275
+ $imagick = new Imagick($destination);
276
+
277
+ $imagick->stripimage();
278
+
279
+ $imagick->writeimage($destination);
280
+
281
+
282
+
283
+
284
+
285
+ // データベースに登録
286
+
287
+ $sql = 'INSERT INTO `images` (`id`, `path`) VALUES (NULL, :path) ';
288
+
289
+ $arr = [];
290
+
291
+ $arr[':path'] = $destination;
292
+
293
+ $lastInsertId = insert($sql, $arr);
294
+
295
+
296
+
297
+ // 成功時にページを移動する
298
+
299
+ header(sprintf('Location: User_TopPage.php', $lastInsertId));
300
+
301
+
302
+
303
+ }
304
+
305
+
306
+
307
+
308
+
309
+ // ファイルアップロード
310
+
311
+ file_upload();
312
+
313
+ }
314
+
315
+ } catch (Exception $e) {
316
+
317
+ $error = $e->getMessage();
318
+
319
+ }
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+ //タイトルと本文部分
330
+
331
+ if(isset($_POST['submit'])){
332
+
333
+ echo '';
334
+
335
+
336
+
337
+ $title = $_POST['title'];
338
+
339
+ $content = $_POST['content'];
340
+
341
+
342
+
343
+ if (!$title) $error .= 'タイトルがありません。<br>';
344
+
345
+ if (mb_strlen($title) > 80) $error .= 'タイトルが長すぎます。<br>';
346
+
347
+ if (!$content) $error .= '本文がありません。<br>';
252
348
 
253
349
 
254
350
 
351
+ if (!$error) {
352
+
353
+ $pdo = new PDO("mysql:dbname=blog", "root","...");
354
+
355
+ $st = $pdo->query("INSERT INTO post(title,content) VALUES('$title','$content')");
356
+
357
+
358
+
359
+
360
+
361
+ header('Location: User_TopPage.php');
362
+
363
+ exit();
364
+
365
+ }
366
+
367
+ }
368
+
369
+ ?>
370
+
371
+
372
+
373
+
374
+
375
+ <!DOCTYPE html>
376
+
377
+ <html lang="ja">
378
+
379
+ <head>
380
+
381
+ <meta charset="utf-8">
382
+
383
+ <title>記事投稿</title>
384
+
385
+ <link rel="stylesheet" href="blog.css">
386
+
387
+ </head>
388
+
389
+ <body>
390
+
391
+ <form method="post" action=""enctype="multipart/form-data">
392
+
393
+   <div class="posting">
394
+
395
+ <h2>記事投稿</h2>
396
+
397
+ <p>題名</p>
398
+
399
+ <p><input name="title" type="text" size="40"></p>
400
+
401
+ <p>本文</p>
402
+
403
+ <p><textarea name="content" rows="8" cols="40"></textarea></p>
404
+
405
+ <p><label for="upfile">画像ファイル</label>
406
+
407
+ <input type="file" name="upfile" id="upfile" /></p>
408
+
409
+ <input name="submit" type="submit" value="投稿">
410
+
411
+ </form>
412
+
413
+ <p><input type="button" onclick="window.history.back('http://localhost/Blog/User_TopPage.php');" value="戻る"></p>
414
+
415
+ <p><?php echo $error ?></p>
416
+
417
+ </div>
418
+
419
+ </body>
420
+
421
+ </html>
422
+
423
+ ```
424
+
425
+
426
+
427
+ ```PHP
428
+
429
+ <User_TopPage>
430
+
431
+
432
+
433
+ <!DOCTYPE html>
434
+
435
+ <html lang="ja">
436
+
437
+ <head>
438
+
439
+ <meta charset="UTF-8">
440
+
441
+ <title>TEST Blog</title>
442
+
443
+ <link rel="stylesheet" type="text/css" href="blog.css">
444
+
445
+ </head>
446
+
447
+ <body>
448
+
449
+ <a href="User_TopPage.php"><label class="toptest"><h1>TEST Blog</h1></label></a>
450
+
451
+ <a href="t_post.php"><label class="contentTop"><h4>記事作成</h4></label></a>
452
+
453
+ <a href="Logout.php"><label class="Logout"><h5>ログアウト</h5></label></a>
454
+
455
+
456
+
457
+ </body>
458
+
459
+ </html>
460
+
461
+
462
+
463
+ <?php
464
+
465
+ $pdo = new PDO("mysql:dbname=blog", "root","...",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
466
+
467
+
468
+
469
+
470
+
471
+ //tableの全部(*)を記事番号の大きい順、すなわち新しい記事から順番に並び替えられる
472
+
473
+ //fetchAllメソッドは、全てのレコードを配列として返します。$posts[0]に最も新しい記事、$posts[1]に次の記事…と順番に入ります
474
+
475
+ $stmt = $pdo->prepare("SELECT * FROM post ORDER BY no DESC");
476
+
477
+ $stmt->execute();
478
+
479
+ $posts = $stmt->fetchAll();
480
+
481
+
482
+
483
+
484
+
485
+ $sql =
486
+
487
+ "CREATE VIEW
488
+
489
+ blogview
490
+
491
+ (
492
+
493
+ no,
494
+
495
+ title,
496
+
497
+ content,
498
+
499
+ time,
500
+
501
+ path,
502
+
503
+ name,
504
+
505
+ comment
506
+
507
+
508
+
255
- );
509
+ )
510
+
256
-
511
+ AS
512
+
513
+ SELECT
514
+
515
+ post.no,
516
+
517
+ post.title,
518
+
519
+ post.content,
520
+
521
+ post.time,
522
+
523
+ images.path,
524
+
525
+ comment.name,
526
+
527
+ comment.comment
528
+
529
+ FROM
530
+
531
+ post AS post
532
+
533
+ LEFT JOIN
534
+
535
+ comment AS comment
536
+
537
+ ON
538
+
539
+ post.no = comment.post_no
540
+
541
+ LEFT JOIN
542
+
543
+ images AS images
544
+
545
+ ON
546
+
547
+ post.time = images.time"
548
+
549
+ ;
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+ $blogview['comments'] = $stmt->fetchAll();
558
+
559
+ $stmt->execute();
560
+
561
+
562
+
563
+ $sql = 'SELECT `no`, `path` FROM `blogview`ORDER BY no DESC';
564
+
565
+ $result = $pdo->query($sql);
566
+
567
+
568
+
569
+
570
+
571
+ //for ループの中でSQLを実行するのはNGです。JOINを使ってテーブルを連結し、SQLの発行回数を一回で住むようにしよう (質問部分)
572
+
257
- //上手くいかない。画像ファイルはなぜかBlogの中に保存される。権限も_wwwにしないとだめ
573
+ // for ($i = 0; $i < count($posts); $i++) {
574
+
575
+ // $st = $pdo->query("SELECT * FROM comment WHERE post_no={$posts[$i]['no']} ORDER BY no DESC");
576
+
577
+ // $posts[$i]['comments'] = $st->fetchAll();
578
+
579
+ // }
580
+
581
+
582
+
583
+
584
+
585
+ require 't_index.php';
586
+
587
+ ```
588
+
589
+
590
+
591
+
592
+
593
+ ```PHP
594
+
595
+ <表示部分>
596
+
597
+
598
+
599
+ <?php
600
+
601
+ $pdo = new PDO("mysql:dbname=blog", "root","…",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
602
+
603
+ ?>
604
+
605
+
606
+
607
+ <!DOCTYPE html>
608
+
609
+ <html>
610
+
611
+ <head>
612
+
613
+ <meta charset="UTF-8">
614
+
615
+ <title>TEST Blog</title>
616
+
617
+ <link rel="stylesheet" href="blog.css">
618
+
619
+ </head>
620
+
621
+ <body>
622
+
623
+ <?php foreach ($posts as $post) { ?>
624
+
625
+ <div class="post">
626
+
627
+ <h2><?php echo $post['title'] ?></h2>
628
+
629
+ <p><?php echo nl2br($post['content']) ?></p>
258
630
 
259
631
 
260
632
 
261
-
262
-
263
- // アップロードディレクトリに移動
264
-
265
- if (!move_uploaded_file($tmp_name, $destination)) {
266
-
267
- throw new Exception('ファイルの保存に失敗しました。');
268
-
269
- }
270
-
271
-
272
-
273
- // Exif 情報の削除
274
-
275
- $imagick = new Imagick($destination);
276
-
277
- $imagick->stripimage();
278
-
279
- $imagick->writeimage($destination);
280
-
281
-
282
-
283
-
284
-
285
- // データベースに登録
286
-
287
- $sql = 'INSERT INTO `images` (`id`, `path`) VALUES (NULL, :path) ';
288
-
289
- $arr = [];
290
-
291
- $arr[':path'] = $destination;
292
-
293
- $lastInsertId = insert($sql, $arr);
294
-
295
-
296
-
297
- // 成功時にページを移動する
298
-
299
- header(sprintf('Location: User_TopPage.php', $lastInsertId));
300
-
301
-
302
-
303
- }
304
-
305
-
306
-
307
-
308
-
309
- // ファイルアップロード
310
-
311
- file_upload();
312
-
313
- }
314
-
315
- } catch (Exception $e) {
316
-
317
- $error = $e->getMessage();
318
-
319
- }
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
-
329
- //タイトルと本文部分
330
-
331
- if(isset($_POST['submit'])){
332
-
333
- echo '';
334
-
335
-
336
-
337
- $title = $_POST['title'];
338
-
339
- $content = $_POST['content'];
340
-
341
-
342
-
343
- if (!$title) $error .= 'タイトルがありません。<br>';
344
-
345
- if (mb_strlen($title) > 80) $error .= 'タイトルが長すぎます。<br>';
346
-
347
- if (!$content) $error .= '本文がありません。<br>';
348
-
349
-
350
-
351
- if (!$error) {
352
-
353
- $pdo = new PDO("mysql:dbname=blog", "root","...");
354
-
355
- $st = $pdo->query("INSERT INTO post(title,content) VALUES('$title','$content')");
356
-
357
-
358
-
359
-
360
-
361
- header('Location: User_TopPage.php');
362
-
363
- exit();
364
-
365
- }
366
-
367
- }
368
-
369
- ?>
370
-
371
-
372
-
373
-
374
-
375
- <!DOCTYPE html>
376
-
377
- <html lang="ja">
378
-
379
- <head>
380
-
381
- <meta charset="utf-8">
382
-
383
- <title>記事投稿</title>
384
-
385
- <link rel="stylesheet" href="blog.css">
386
-
387
- </head>
388
-
389
- <body>
390
-
391
- <form method="post" action=""enctype="multipart/form-data">
392
-
393
-   <div class="posting">
394
-
395
- <h2>記事投稿</h2>
396
-
397
- <p>題名</p>
398
-
399
- <p><input name="title" type="text" size="40"></p>
400
-
401
- <p>本文</p>
402
-
403
- <p><textarea name="content" rows="8" cols="40"></textarea></p>
404
-
405
- <p><label for="upfile">画像ファイル</label>
406
-
407
- <input type="file" name="upfile" id="upfile" /></p>
408
-
409
- <input name="submit" type="submit" value="投稿">
410
-
411
- </form>
412
-
413
- <p><input type="button" onclick="window.history.back('http://localhost/Blog/User_TopPage.php');" value="戻る"></p>
414
-
415
- <p><?php echo $error ?></p>
416
-
417
- </div>
633
+ <!-- image -->
634
+
635
+ <?php foreach ($result as $row) { ?>
636
+
637
+ <div class="iamges">
638
+
639
+ <?php echo '<img src="'.$row['path'];?>
640
+
641
+ </div>
642
+
643
+ <?php } ?>
644
+
645
+
646
+
647
+ <!-- コメント部分 -->
648
+
649
+ <?php foreach ($blogviews['comments'] as $blogview) { ?>
650
+
651
+ <div class="comment">
652
+
653
+ <h3><?php echo $blogview['name'] ?></h3>
654
+
655
+ <p><?php echo nl2br($blogview['comment']) ?></p>
656
+
657
+ <!-- <p>>?php echo ($) -->
658
+
659
+ </div>
660
+
661
+ <?php } ?>
662
+
663
+
664
+
665
+ <p class="commment_link">
666
+
667
+ 投稿日:<?php echo $post['time'] ?> 
668
+
669
+ <a href="comment.php?no=<?php echo $post['no'] ?>">コメント</a>
670
+
671
+ </p>
672
+
673
+ </div>
674
+
675
+ <?php } ?>
418
676
 
419
677
  </body>
420
678
 
679
+
680
+
421
681
  </html>
422
682
 
423
683
  ```
424
684
 
425
685
 
426
686
 
687
+ ### 変更点
688
+
689
+
690
+
691
+ imagesのテーブル構造です。
692
+
693
+ ![](f5d0a1e1bbb3a4cdbb6b60011a3d898e.png)
694
+
695
+
696
+
697
+ ・なぜ画像がDBに保存できなきなくなるのか。 はもう一度書き直したところ、Permissionエラーが出たので、ファイルの権限を変えたらDB内に保存できるようになりました。
698
+
699
+ また、今回は練習も含めなので絶対パスにしたところもあります。
700
+
701
+
702
+
703
+ ###変更点2
704
+
705
+ CREATE viewで作成したものです。
706
+
707
+ これを使ってコメントと画像を上手くtitle,conetnt を使って表示させようとしているところです。
708
+
709
+ ![](66b11231070066acf736c466463f9637.png)
710
+
711
+ ---
712
+
713
+ User_TopPageの部分に
714
+
427
715
  ```PHP
428
716
 
429
- <User_TopPage>
430
-
431
-
432
-
433
- <!DOCTYPE html>
434
-
435
- <html lang="ja">
436
-
437
- <head>
438
-
439
- <meta charset="UTF-8">
440
-
441
- <title>TEST Blog</title>
717
+ $blogview['comments'] = $stmt->fetchAll();
442
-
443
- <link rel="stylesheet" type="text/css" href="blog.css">
718
+
444
-
445
- </head>
446
-
447
- <body>
448
-
449
- <a href="User_TopPage.php"><label class="toptest"><h1>TEST Blog</h1></label></a>
450
-
451
- <a href="t_post.php"><label class="contentTop"><h4>記事作成</h4></label></a>
452
-
453
- <a href="Logout.php"><label class="Logout"><h5>ログアウト</h5></label></a>
454
-
455
-
456
-
457
- </body>
458
-
459
- </html>
460
-
461
-
462
-
463
- <?php
464
-
465
- $pdo = new PDO("mysql:dbname=blog", "root","...",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
466
-
467
-
468
-
469
-
470
-
471
- //tableの全部(*)を記事番号の大きい順、すなわち新しい記事から順番に並び替えられる
472
-
473
- //fetchAllメソッドは、全てのレコードを配列として返します。$posts[0]に最も新しい記事、$posts[1]に次の記事…と順番に入ります
474
-
475
- $stmt = $pdo->prepare("SELECT * FROM post ORDER BY no DESC");
476
-
477
- $stmt->execute();
719
+  $stmt->execute();
720
+
721
+
722
+
478
-
723
+ $sql = 'SELECT `no`, `path` FROM `blogview`ORDER BY no DESC';
724
+
479
- $posts = $stmt->fetchAll();
725
+ $result = $pdo->query($sql);
480
-
481
-
482
-
483
-
484
-
485
- $sql =
726
+
486
-
487
- "CREATE VIEW
727
+
488
-
489
- blogview
490
-
491
- (
492
-
493
- no,
494
-
495
- title,
496
-
497
- content,
498
-
499
- time,
500
-
501
- path,
502
-
503
- name,
504
-
505
- comment
506
-
507
-
508
-
509
- )
510
-
511
- AS
512
-
513
- SELECT
514
-
515
- post.no,
516
-
517
- post.title,
518
-
519
- post.content,
520
-
521
- post.time,
522
-
523
- images.path,
524
-
525
- comment.name,
526
-
527
- comment.comment
528
-
529
- FROM
530
-
531
- post AS post
532
-
533
- LEFT JOIN
534
-
535
- comment AS comment
536
-
537
- ON
538
-
539
- post.no = comment.post_no
540
-
541
- LEFT JOIN
542
-
543
- images AS images
544
-
545
- ON
546
-
547
- post.time = images.time"
548
-
549
- ;
550
-
551
-
552
-
553
-
554
-
555
- $stmt = $pdo->prepare("SELECT post.no, comment.post_no FROM post LEFT OUTER JOIN comment ON post.no = comment.post_no");
556
-
557
- $blogview['comments'] = $stmt->fetchAll();
558
-
559
- $stmt->execute();
560
-
561
-
562
-
563
-
564
-
565
-
566
-
567
- //for ループの中でSQLを実行するのはNGです。JOINを使ってテーブルを連結し、SQLの発行回数を一回で住むようにしよう (質問部分)
568
-
569
- // for ($i = 0; $i < count($posts); $i++) {
570
-
571
- // $st = $pdo->query("SELECT * FROM comment WHERE post_no={$posts[$i]['no']} ORDER BY no DESC");
572
-
573
- // $posts[$i]['comments'] = $st->fetchAll();
574
-
575
- // }
576
-
577
-
578
-
579
-
580
-
581
- require 't_index.php';
582
728
 
583
729
  ```
584
730
 
585
731
 
586
732
 
587
-
733
+ 表示部分のところにimgタグを入れました。
588
734
 
589
735
  ```PHP
590
736
 
591
- <表示部分>
592
-
593
-
594
-
595
- <?php
596
-
597
- $pdo = new PDO("mysql:dbname=blog", "root","…",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
598
-
599
- ?>
600
-
601
-
602
-
603
- <!DOCTYPE html>
604
-
605
- <html>
606
-
607
- <head>
608
-
609
- <meta charset="UTF-8">
610
-
611
- <title>TEST Blog</title>
612
-
613
- <link rel="stylesheet" href="blog.css">
614
-
615
- </head>
616
-
617
- <body>
618
-
619
- <?php foreach ($posts as $post) { ?>
737
+ <?php foreach ($result as $row) { ?>
620
-
621
- <div class="post">
738
+
622
-
623
- <h2><?php echo $post['title'] ?></h2>
624
-
625
- <p><?php echo nl2br($post['content']) ?></p>
626
-
627
-
628
-
629
-
630
-
631
- <!-- コメント部分 -->
632
-
633
- <?php foreach ($blogview['comments'] as $blogview) { ?>
634
-
635
- <div class="comment">
739
+ <div class="iamges">
636
-
637
- <h3><?php echo $blogview['name'] ?></h3>
740
+
638
-
639
- <p><?php echo nl2br($blogview['comment']) ?></p>
741
+ <?php echo '<img src="'.$row['path'];?>
640
-
641
- <!-- <p>>?php echo ($) -->
642
742
 
643
743
  </div>
644
744
 
@@ -646,36 +746,12 @@
646
746
 
647
747
 
648
748
 
649
- <p class="commment_link">
650
-
651
- 投稿日:<?php echo $post['time'] ?> 
652
-
653
- <a href="comment.php?no=<?php echo $post['no'] ?>">コメント</a>
654
-
655
- </p>
656
-
657
- </div>
658
-
659
- <?php } ?>
660
-
661
- </body>
662
-
663
-
664
-
665
- </html>
666
-
667
749
  ```
668
750
 
669
751
 
670
752
 
671
- ### 変更点
672
-
673
-
674
-
675
- imagesテーブル構造です。
753
+ 2つを追加したところ
676
-
754
+
677
- ![](f5d0a1e1bbb3a4cdbb6b60011a3d898e.png)
755
+ ![](dd1e883d367f94ce7033a6cf59a985e6.png)
678
-
679
-
680
-
756
+
681
- ・なぜ画像がDBに保存できなきなくなるのか。 はもう一度書き直したとろ、Permissionエラーが出たで、ファイルの権限を変えたらDB内に保存できるようになりました。
757
+ このような地獄絵図になりました。

2

変更点を追記させていただきました。

2018/07/31 11:19

投稿

mumumoon
mumumoon

スコア16

test CHANGED
File without changes
test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  **知りたいこと**
26
26
 
27
- ・なぜ画像がDBに保存できなきなくなるのか。
27
+ ~~・なぜ画像がDBに保存できなきなくなるのか。~~
28
28
 
29
29
  ・DBの紐付けた部分をどのように表示をすれば良いのか。コードも含め。
30
30
 
@@ -668,6 +668,14 @@
668
668
 
669
669
 
670
670
 
671
+ ### 変更点
672
+
673
+
674
+
671
675
  imagesのテーブル構造です。
672
676
 
673
677
  ![](f5d0a1e1bbb3a4cdbb6b60011a3d898e.png)
678
+
679
+
680
+
681
+ ・なぜ画像がDBに保存できなきなくなるのか。 はもう一度書き直したところ、Permissionエラーが出たので、ファイルの権限を変えたらDB内に保存できるようになりました。

1

User_TopPageの中に追加したSQL文、その下のPDO->prepare文と表示部分のコメント部分を修正しました。がコメントの表示と画像の表示、保存は現在解決は未解決なので試行錯誤中です。

2018/07/31 01:53

投稿

mumumoon
mumumoon

スコア16

test CHANGED
@@ -1 +1 @@
1
- 続き:PHP、MySQL、HTML画像テキストを同時にDB保存とトップページで表示るブログのようなものを作りたい。
1
+ 続き:PHP、MySQL、HTMLを使って、画像テキストを同時にDB保存とトップページで表示できるブログのようなものを作りたい。
test CHANGED
@@ -482,9 +482,79 @@
482
482
 
483
483
 
484
484
 
485
+ $sql =
486
+
487
+ "CREATE VIEW
488
+
489
+ blogview
490
+
491
+ (
492
+
493
+ no,
494
+
495
+ title,
496
+
497
+ content,
498
+
499
+ time,
500
+
501
+ path,
502
+
503
+ name,
504
+
505
+ comment
506
+
507
+
508
+
509
+ )
510
+
511
+ AS
512
+
513
+ SELECT
514
+
515
+ post.no,
516
+
517
+ post.title,
518
+
519
+ post.content,
520
+
521
+ post.time,
522
+
523
+ images.path,
524
+
525
+ comment.name,
526
+
527
+ comment.comment
528
+
529
+ FROM
530
+
531
+ post AS post
532
+
533
+ LEFT JOIN
534
+
535
+ comment AS comment
536
+
537
+ ON
538
+
539
+ post.no = comment.post_no
540
+
541
+ LEFT JOIN
542
+
543
+ images AS images
544
+
545
+ ON
546
+
547
+ post.time = images.time"
548
+
549
+ ;
550
+
551
+
552
+
553
+
554
+
485
- $stmt = $pdo->prepare("SELECT post.no, comment.post_no FROM post RIGHT OUTER JOIN comment ON post.no = comment.post_no");
555
+ $stmt = $pdo->prepare("SELECT post.no, comment.post_no FROM post LEFT OUTER JOIN comment ON post.no = comment.post_no");
486
-
556
+
487
- $posts['comments'] = $stmt->fetchAll();
557
+ $blogview['comments'] = $stmt->fetchAll();
488
558
 
489
559
  $stmt->execute();
490
560
 
@@ -520,6 +590,8 @@
520
590
 
521
591
  <表示部分>
522
592
 
593
+
594
+
523
595
  <?php
524
596
 
525
597
  $pdo = new PDO("mysql:dbname=blog", "root","…",[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
@@ -554,23 +626,17 @@
554
626
 
555
627
 
556
628
 
557
- <!--<?php //foreach ?>
629
+
558
-
559
- <div class="image">
630
+
560
-
561
- <a></a> 画像挿入場所-->
562
-
563
-
564
-
565
- <!-- コメント部分 -->
631
+ <!-- コメント部分 -->
566
-
632
+
567
- <?php foreach ($post['comments'] as $comment) { ?>
633
+ <?php foreach ($blogview['comments'] as $blogview) { ?>
568
634
 
569
635
  <div class="comment">
570
636
 
571
- <h3><?php echo $comment['name'] ?></h3>
637
+ <h3><?php echo $blogview['name'] ?></h3>
572
-
638
+
573
- <p><?php echo nl2br($comment['content']) ?></p>
639
+ <p><?php echo nl2br($blogview['comment']) ?></p>
574
640
 
575
641
  <!-- <p>>?php echo ($) -->
576
642
 
@@ -599,3 +665,9 @@
599
665
  </html>
600
666
 
601
667
  ```
668
+
669
+
670
+
671
+ imagesのテーブル構造です。
672
+
673
+ ![](f5d0a1e1bbb3a4cdbb6b60011a3d898e.png)