質問編集履歴

6

全投稿取得できました

2021/08/27 08:07

投稿

halu_0366
halu_0366

スコア1

test CHANGED
File without changes
test CHANGED
@@ -40,6 +40,8 @@
40
40
 
41
41
  $posts = $db->prepare('SELECT m.name, m.picture, p.*, COUNT(l.post_id) AS like_cnt FROM members m, posts p LEFT JOIN likes l ON p.id=l.post_id WHERE m.id=p.member_id GROUP BY l.post_id ORDER BY p.created DESC LIMIT ?, 5');
42
42
 
43
+ // 8/27追記 ↑このGROUP BY をp.idにしたところ”いいね”有り無しの全投稿取得できました!!
44
+
43
45
 
44
46
 
45
47
  // 3,これが元のSQL 全件取得できる 
@@ -344,80 +346,56 @@
344
346
 
345
347
  今回の質問にはおそらく影響ないPHP部分
346
348
 
347
- // ログイン出来た人だけこのページに来れる処理
349
+ // メッセージを登録
350
+
348
-
351
+ if (!empty($_POST)) {
352
+
353
+ if ($_POST['message'] !== '') {
354
+
349
- if (isset($_SESSION['id']) && $_SESSION['time'] + 60 * 60 > time()) {
355
+ if ($_POST['reply_post_id'] == '') {
350
-
356
+
351
- $_SESSION['time'] = time();
357
+ $_POST['reply_post_id'] = 0;
358
+
352
-
359
+ }
353
-
354
-
360
+
361
+
362
+
355
- $members = $db->prepare('SELECT * FROM members WHERE id=?');
363
+ $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, reply_message_id=?, created=NOW()');
356
-
364
+
357
- $members->execute(array($_SESSION['id']));
365
+ $message->execute(array(
358
-
366
+
359
- $member = $members->fetch();
367
+ $member['id'],
360
-
368
+
361
- } else {
369
+ $_POST['message'],
370
+
362
-
371
+ $_POST['reply_post_id']
372
+
373
+ ));
374
+
375
+
376
+
377
+ // もう一度このページにジャンプすることで$_POSTを空にする
378
+
363
- header('Location: login.php');
379
+ header('Location: index.php');
364
-
380
+
365
- exit();
381
+ exit();
382
+
383
+ }
366
384
 
367
385
  }
368
386
 
369
387
 
370
388
 
371
- // メッセージを登録
389
+ // 投稿を取得 ページネーションも
372
-
373
- if (!empty($_POST)) {
390
+
374
-
375
- if ($_POST['message'] !== '') {
376
-
377
- if ($_POST['reply_post_id'] == '') {
378
-
379
- $_POST['reply_post_id'] = 0;
380
-
381
- }
382
-
383
-
384
-
385
- $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, reply_message_id=?, created=NOW()');
386
-
387
- $message->execute(array(
388
-
389
- $member['id'],
390
-
391
- $_POST['message'],
391
+ $page = $_REQUEST['page'];
392
-
393
- $_POST['reply_post_id']
392
+
394
-
395
- ));
396
-
397
-
398
-
399
- // もう一度このページにジャンプすることで$_POSTを空にする
400
-
401
- header('Location: index.php');
393
+ if ($page == '') {
402
-
394
+
403
- exit();
395
+ $page = 1;
404
-
405
- }
406
396
 
407
397
  }
408
398
 
409
-
410
-
411
- // 投稿を取得 ページネーションも
412
-
413
- $page = $_REQUEST['page'];
414
-
415
- if ($page == '') {
416
-
417
- $page = 1;
418
-
419
- }
420
-
421
399
  $page = max($page, 1);
422
400
 
423
401
  $counts = $db->query('SELECT COUNT(*) AS cnt FROM posts');
@@ -430,12 +408,14 @@
430
408
 
431
409
  $start = ($page - 1) * 5;
432
410
 
433
-
434
-
435
411
  ```
436
412
 
413
+
414
+
437
415
  ```
438
416
 
417
+ サンプルデータ
418
+
439
419
  CREATE TABLE `likes` (
440
420
 
441
421
  `id` int(11) NOT NULL,
@@ -530,6 +510,8 @@
530
510
 
531
511
 
532
512
 
513
+
514
+
533
515
  ### 試したこと
534
516
 
535
517
 
@@ -540,14 +522,18 @@
540
522
 
541
523
 
542
524
 
543
- ほとんど写しのコードになってしまっていますが、「どのコードで何をしようとしているか」は把握しているつもりです。やはりSQL文に問題があるのでしょうか?
525
+ 「どのコードで何をしようとしているか」は把握しているつもりです。やはりSQL文に問題があるのでしょうか?
544
-
545
-
546
-
526
+
527
+
528
+
547
- 8/26 追記
529
+ 8/26 **追記**
548
530
 
549
531
  「$post['id']はforeach内かな」と思い移動したところハートマークに色付きましたが、まだSQL文が間違っているのか”いいね”有り無しの全件取得はできていません。
550
532
 
533
+ 8/27 **追記**
534
+
535
+ 全件取得は解決しました(コード参照)、ハートマークに色も付いて横にいいね数も表示できました。とりあえずは解決です、ありがとうございました。
536
+
551
537
 
552
538
 
553
539
  ### 補足情報(FW/ツールのバージョンなど)
@@ -555,5 +541,3 @@
555
541
 
556
542
 
557
543
  PHP7.4.1 MAMP PHPMyAdmin Chromeブラウザ VSCode を使っています。
558
-
559
- 「ここがおかしいかも」「これを変えてみたら?」「この情報がわかれば答えられるかも」などでも構いません。回答よろしくお願いします。

5

ハートマークに色付きました

2021/08/27 08:06

投稿

halu_0366
halu_0366

スコア1

test CHANGED
File without changes
test CHANGED
@@ -138,418 +138,394 @@
138
138
 
139
139
 
140
140
 
141
+ ?>
142
+
143
+ ```
144
+
145
+
146
+
147
+ ```ここに言語名を入力
148
+
149
+ <body>
150
+
151
+ <div id="wrap">
152
+
153
+ <div id="head">
154
+
155
+ <h1><a href="index.php">PHPで簡単SNS</a></h1>
156
+
157
+ </div>
158
+
159
+ <div id="content">
160
+
161
+
162
+
163
+ <div class="top">
164
+
165
+ <form action="" method="post">
166
+
167
+ <dl>
168
+
169
+ <dt><?php echo h($member['name']); ?>さん、メッセージをどうぞ</dt>
170
+
171
+ <dd>
172
+
173
+ <textarea name="message" cols="50" rows="5"><?php echo h($message); ?></textarea>
174
+
175
+ <input type="hidden" name="reply_post_id" value="<?php echo h($_REQUEST['res']); ?>" />
176
+
177
+ </dd>
178
+
179
+ </dl>
180
+
181
+ <div>
182
+
183
+ <p>
184
+
185
+ <input type="submit" class="btn-border" value="投稿する" />
186
+
187
+ </p>
188
+
189
+ </div>
190
+
191
+ </form>
192
+
193
+ <div>
194
+
195
+ <a href="logout.php" class="btn-border">ログアウト</a>
196
+
197
+ </div>
198
+
199
+ </div>
200
+
201
+
202
+
203
+ <?php foreach ($posts as $post) : ?>
204
+
205
+ <div class="msg">
206
+
207
+ <div class="msg_left">
208
+
209
+ <img src="member_picture/<?php echo h($post['picture']); ?>" width="48" height="48" alt="<?php echo h($post['name']); ?>" />
210
+
211
+ </div>
212
+
213
+
214
+
215
+ <div class="msg_right">
216
+
217
+ <div class="msg_right_head">
218
+
219
+ <div class="name"><a href="profile.php?id=<?php echo h($post['member_id']); ?>"><?php echo h($post['name']); ?></a></div>
220
+
221
+ <div class="day"><a href="view.php?id=<?php echo h($post['id']); ?>"><?php echo h($post['created']); ?></a></div>
222
+
223
+ </div>
224
+
225
+
226
+
227
+ <div class="msg_body">
228
+
229
+ <?php echo mb_strimwidth(htmlspecialchars($post['message']), 0, 150, '...', "UTF-8"); ?>
230
+
231
+ </div>
232
+
233
+
234
+
235
+ <div class="msg_footer">
236
+
237
+ <!-- いいね機能をここに書いています -->
238
+
239
+         <?php
240
+
141
- //2-1. ログインしている人がいいねしたメッセージをすべて取得
241
+ //2-1. ログインしている人がいいねしたメッセージをすべて取得 この2つ「$like = ~~」と「$my_like_cnt ~~」を上の大枠phpからこのforeach文の中に入れたらハートマークに色が付いた
142
-
242
+
143
- $like = $db->prepare('SELECT post_id FROM likes WHERE member_id=?');
243
+ $like = $db->prepare('SELECT post_id FROM likes WHERE member_id=?');
144
-
244
+
145
- $like->execute(array($_SESSION['id']));
245
+ $like->execute(array($_SESSION['id']));
146
-
246
+
147
- while ($like_record = $like->fetch()) {
247
+ while ($like_record = $like->fetch()) {
148
-
248
+
149
- $my_like[] = $like_record;
249
+ $my_like[] = $like_record;
250
+
251
+ }
252
+
253
+
254
+
255
+ $my_like_cnt = 0;
256
+
257
+ if (!empty($my_like)) {
258
+
259
+ foreach ($my_like as $like_post) {
260
+
261
+ foreach ($like_post as $like_post_id) {
262
+
263
+ if ($like_post_id == $post['id']) {
264
+
265
+ $my_like_cnt = 1;
266
+
267
+ }
268
+
269
+ }
270
+
271
+ }
272
+
273
+ }
274
+
275
+ <?php if ($my_like_cnt < 1) : ?>
276
+
277
+ <a class="heart" href="index.php?like=<?php echo h($post['id']); ?>&page=<?php echo h($page); ?>">&#9825;</a>
278
+
279
+ <?php else : ?>
280
+
281
+ <a class="heart red" href="index.php?like=<?php echo h($post['id']); ?>&page=<?php echo h($page); ?>">&#9829;</a>
282
+
283
+ <?php endif; ?>
284
+
285
+ <span>
286
+
287
+ <?php echo h($post['like_cnt']); ?>
288
+
289
+ </span>
290
+
291
+
292
+
293
+ [<a href="index.php?res=<?php echo h($post['id']); ?>">コメント</a>]
294
+
295
+
296
+
297
+ <?php if ($_SESSION['id'] == $post['member_id']) : ?>
298
+
299
+ [<a href="delete.php?id=<?php echo h($post['id']); ?>" style="color: #F33;">削除</a>]
300
+
301
+ <?php endif; ?>
302
+
303
+
304
+
305
+ <?php if ($post['reply_message_id'] > 0) : ?>
306
+
307
+ [<a href="view.php?id=<?php echo h($post['reply_message_id']); ?>">
308
+
309
+ 返信元のメッセージ</a>]
310
+
311
+ <?php endif; ?>
312
+
313
+ </div>
314
+
315
+
316
+
317
+ </div>
318
+
319
+ </div>
320
+
321
+ <?php endforeach; ?>
322
+
323
+
324
+
325
+    -- ここにページネーション
326
+
327
+
328
+
329
+ </div>
330
+
331
+ </div>
332
+
333
+ </body>
334
+
335
+
336
+
337
+ </html>
338
+
339
+ ```
340
+
341
+
342
+
343
+ ```
344
+
345
+ 今回の質問にはおそらく影響ないPHP部分
346
+
347
+ // ログイン出来た人だけこのページに来れる処理
348
+
349
+ if (isset($_SESSION['id']) && $_SESSION['time'] + 60 * 60 > time()) {
350
+
351
+ $_SESSION['time'] = time();
352
+
353
+
354
+
355
+ $members = $db->prepare('SELECT * FROM members WHERE id=?');
356
+
357
+ $members->execute(array($_SESSION['id']));
358
+
359
+ $member = $members->fetch();
360
+
361
+ } else {
362
+
363
+ header('Location: login.php');
364
+
365
+ exit();
150
366
 
151
367
  }
152
368
 
153
369
 
154
370
 
155
- $my_like_cnt = 0;
371
+ // メッセージを登録
156
-
372
+
157
- if (!empty($my_like)) {
373
+ if (!empty($_POST)) {
158
-
159
- foreach ($my_like as $like_post) {
374
+
160
-
161
- foreach ($like_post as $like_post_id) {
375
+ if ($_POST['message'] !== '') {
162
-
376
+
163
- if ($like_post_id == $post['id']) {
377
+ if ($_POST['reply_post_id'] == '') {
164
-
378
+
165
- $my_like_cnt = 1;
379
+ $_POST['reply_post_id'] = 0;
166
-
167
- }
168
-
169
- }
170
380
 
171
381
  }
172
382
 
383
+
384
+
385
+ $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, reply_message_id=?, created=NOW()');
386
+
387
+ $message->execute(array(
388
+
389
+ $member['id'],
390
+
391
+ $_POST['message'],
392
+
393
+ $_POST['reply_post_id']
394
+
395
+ ));
396
+
397
+
398
+
399
+ // もう一度このページにジャンプすることで$_POSTを空にする
400
+
401
+ header('Location: index.php');
402
+
403
+ exit();
404
+
173
405
  }
174
406
 
407
+ }
408
+
409
+
410
+
411
+ // 投稿を取得 ページネーションも
412
+
413
+ $page = $_REQUEST['page'];
414
+
415
+ if ($page == '') {
416
+
175
- ?>
417
+ $page = 1;
418
+
419
+ }
420
+
421
+ $page = max($page, 1);
422
+
423
+ $counts = $db->query('SELECT COUNT(*) AS cnt FROM posts');
424
+
425
+ $cnt = $counts->fetch();
426
+
427
+ $maxPage = ceil($cnt['cnt'] / 5);
428
+
429
+ $page = min($page, $maxPage);
430
+
431
+ $start = ($page - 1) * 5;
432
+
433
+
176
434
 
177
435
  ```
178
436
 
179
-
180
-
181
- ```ここに言語名を入力
182
-
183
- <!DOCTYPE html>
184
-
185
- <html lang="ja">
186
-
187
-
188
-
189
- <head>
190
-
191
- <meta charset="UTF-8">
192
-
193
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
194
-
195
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
196
-
197
- <title>PHPで簡単SNS</title>
198
-
199
-
200
-
201
- <link rel="stylesheet" href="css/style.css" />
202
-
203
- </head>
204
-
205
-
206
-
207
- <body>
208
-
209
- <div id="wrap">
210
-
211
- <div id="head">
212
-
213
- <h1><a href="index.php">PHPで簡単SNS</a></h1>
214
-
215
- </div>
216
-
217
- <div id="content">
218
-
219
-
220
-
221
- <div class="top">
222
-
223
- <form action="" method="post">
224
-
225
- <dl>
226
-
227
- <dt><?php echo h($member['name']); ?>さん、メッセージをどうぞ</dt>
228
-
229
- <dd>
230
-
231
- <textarea name="message" cols="50" rows="5"><?php echo h($message); ?></textarea>
232
-
233
- <input type="hidden" name="reply_post_id" value="<?php echo h($_REQUEST['res']); ?>" />
234
-
235
- </dd>
236
-
237
- </dl>
238
-
239
- <div>
240
-
241
- <p>
242
-
243
- <input type="submit" class="btn-border" value="投稿する" />
244
-
245
- </p>
246
-
247
- </div>
248
-
249
- </form>
250
-
251
- <div>
252
-
253
- <a href="logout.php" class="btn-border">ログアウト</a>
254
-
255
- </div>
256
-
257
- </div>
258
-
259
-
260
-
261
- <?php foreach ($posts as $post) : ?>
262
-
263
- <div class="msg">
264
-
265
- <div class="msg_left">
266
-
267
- <img src="member_picture/<?php echo h($post['picture']); ?>" width="48" height="48" alt="<?php echo h($post['name']); ?>" />
268
-
269
- </div>
270
-
271
-
272
-
273
- <div class="msg_right">
274
-
275
- <div class="msg_right_head">
276
-
277
- <div class="name"><a href="profile.php?id=<?php echo h($post['member_id']); ?>"><?php echo h($post['name']); ?></a></div>
278
-
279
- <div class="day"><a href="view.php?id=<?php echo h($post['id']); ?>"><?php echo h($post['created']); ?></a></div>
280
-
281
- </div>
282
-
283
-
284
-
285
- <div class="msg_body">
286
-
287
- <?php echo mb_strimwidth(htmlspecialchars($post['message']), 0, 150, '...', "UTF-8"); ?>
288
-
289
- </div>
290
-
291
-
292
-
293
- <div class="msg_footer">
294
-
295
- <!-- いいね機能をここに書いています -->
296
-
297
- <?php if ($my_like_cnt < 1) : ?>
298
-
299
- <a class="heart" href="index.php?like=<?php echo h($post['id']); ?>&page=<?php echo h($page); ?>">&#9825;</a>
300
-
301
- <?php else : ?>
302
-
303
- <a class="heart red" href="index.php?like=<?php echo h($post['id']); ?>&page=<?php echo h($page); ?>">&#9829;</a>
304
-
305
- <?php endif; ?>
306
-
307
- <span>
308
-
309
- <?php echo h($post['like_cnt']); ?>
310
-
311
- </span>
312
-
313
-
314
-
315
- [<a href="index.php?res=<?php echo h($post['id']); ?>">コメント</a>]
316
-
317
-
318
-
319
- <?php if ($_SESSION['id'] == $post['member_id']) : ?>
320
-
321
- [<a href="delete.php?id=<?php echo h($post['id']); ?>" style="color: #F33;">削除</a>]
322
-
323
- <?php endif; ?>
324
-
325
-
326
-
327
- <?php if ($post['reply_message_id'] > 0) : ?>
328
-
329
- [<a href="view.php?id=<?php echo h($post['reply_message_id']); ?>">
330
-
331
- 返信元のメッセージ</a>]
332
-
333
- <?php endif; ?>
334
-
335
- </div>
336
-
337
-
338
-
339
- </div>
340
-
341
- </div>
342
-
343
- <?php endforeach; ?>
344
-
345
-
346
-
347
-    -- ここにページネーション
348
-
349
-
350
-
351
- </div>
352
-
353
- </div>
354
-
355
- </body>
356
-
357
-
358
-
359
- </html>
360
-
361
437
  ```
362
438
 
363
-
439
+ CREATE TABLE `likes` (
440
+
441
+ `id` int(11) NOT NULL,
442
+
443
+ `post_id` int(11) NOT NULL,
444
+
445
+ `member_id` int(11) NOT NULL,
446
+
447
+ `created` datetime NOT NULL,
448
+
449
+ `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
450
+
451
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
452
+
453
+
454
+
455
+ INSERT INTO `likes` (`id`, `post_id`, `member_id`, `created`, `modified`) VALUES
456
+
457
+ (11, 19, 1, '2021-08-24 23:51:11', '2021-08-24 14:51:11'),
458
+
459
+ (15, 14, 1, '2021-08-25 09:32:31', '2021-08-25 00:32:31'),
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+ CREATE TABLE `members` (
468
+
469
+ `id` int(11) NOT NULL,
470
+
471
+ `name` varchar(255) NOT NULL,
472
+
473
+ `email` varchar(255) NOT NULL,
474
+
475
+ `password` varchar(100) NOT NULL,
476
+
477
+ `picture` varchar(255) NOT NULL,
478
+
479
+ `introduce` varchar(200) NOT NULL,
480
+
481
+ `created` datetime NOT NULL,
482
+
483
+ `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
484
+
485
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
486
+
487
+
488
+
489
+ INSERT INTO `members` (`id`, `name`, `email`, `password`, `picture`, `introduce`, `created`, `modified`) VALUES
490
+
491
+ (1, 'sakura', 'sakura-example@gmail.com', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', '20210823233156atom.jpg', '初めまして、sakuraです。プログラミング勉強中です。自己紹介文をupdate.phpから編集できるようになりました。日々なんとか成長中', '2021-08-17 13:54:57', '2021-08-23 14:31:56'),
492
+
493
+ (2, 'wakaba', 'wakaba-example@yahoo.ne.jp', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', '20210821103031animals.jpg', 'どうも、神奈川の大学通ってる学生です。趣味は登山です。', '2021-08-17 21:41:43', '2021-08-21 01:30:31'),
494
+
495
+
496
+
497
+
498
+
499
+ CREATE TABLE `posts` (
500
+
501
+ `id` int(11) NOT NULL,
502
+
503
+ `message` text NOT NULL,
504
+
505
+ `member_id` int(11) NOT NULL,
506
+
507
+ `reply_message_id` int(11) NOT NULL DEFAULT '0',
508
+
509
+ `created` datetime NOT NULL,
510
+
511
+ `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
512
+
513
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
514
+
515
+
516
+
517
+ INSERT INTO `posts` (`id`, `message`, `member_id`, `reply_message_id`, `created`, `modified`) VALUES
518
+
519
+ (3, '一覧を作りました。', 1, 0, '2021-08-17 16:30:47', '2021-08-17 07:30:47'),
520
+
521
+ (4, '初めまして、よろしくお願いします。', 2, 0, '2021-08-17 21:42:13', '2021-08-17 12:42:13'),
522
+
523
+ (5, '返信機能のため、投稿', 2, 0, '2021-08-17 21:42:31', '2021-08-17 12:42:31'),
524
+
525
+ (6, 'もう一つ増やします', 2, 0, '2021-08-17 21:42:46', '2021-08-17 12:42:46'),
364
526
 
365
527
  ```
366
528
 
367
- 今回の質問にはおそらく影響ないPHP部分
368
-
369
- // ログイン出来た人だけこのページに来れる処理
370
-
371
- if (isset($_SESSION['id']) && $_SESSION['time'] + 60 * 60 > time()) {
372
-
373
- $_SESSION['time'] = time();
374
-
375
-
376
-
377
- $members = $db->prepare('SELECT * FROM members WHERE id=?');
378
-
379
- $members->execute(array($_SESSION['id']));
380
-
381
- $member = $members->fetch();
382
-
383
- } else {
384
-
385
- header('Location: login.php');
386
-
387
- exit();
388
-
389
- }
390
-
391
-
392
-
393
- // メッセージを登録
394
-
395
- if (!empty($_POST)) {
396
-
397
- if ($_POST['message'] !== '') {
398
-
399
- // Sec5-85の修正点 返信できると新規できなくなる問題
400
-
401
- if ($_POST['reply_post_id'] == '') {
402
-
403
- $_POST['reply_post_id'] = 0;
404
-
405
- }
406
-
407
-
408
-
409
- $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, reply_message_id=?, created=NOW()');
410
-
411
- $message->execute(array(
412
-
413
- $member['id'],
414
-
415
- $_POST['message'],
416
-
417
- $_POST['reply_post_id']
418
-
419
- ));
420
-
421
-
422
-
423
- // もう一度このページにジャンプすることで$_POSTを空にする
424
-
425
- header('Location: index.php');
426
-
427
- exit();
428
-
429
- }
430
-
431
- }
432
-
433
-
434
-
435
- // 投稿を取得 ページネーションも
436
-
437
- $page = $_REQUEST['page'];
438
-
439
- if ($page == '') {
440
-
441
- $page = 1;
442
-
443
- }
444
-
445
- $page = max($page, 1);
446
-
447
- $counts = $db->query('SELECT COUNT(*) AS cnt FROM posts');
448
-
449
- $cnt = $counts->fetch();
450
-
451
- $maxPage = ceil($cnt['cnt'] / 5);
452
-
453
- $page = min($page, $maxPage);
454
-
455
- $start = ($page - 1) * 5;
456
-
457
-
458
-
459
- ```
460
-
461
- ```
462
-
463
- CREATE TABLE `likes` (
464
-
465
- `id` int(11) NOT NULL,
466
-
467
- `post_id` int(11) NOT NULL,
468
-
469
- `member_id` int(11) NOT NULL,
470
-
471
- `created` datetime NOT NULL,
472
-
473
- `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
474
-
475
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
476
-
477
-
478
-
479
- INSERT INTO `likes` (`id`, `post_id`, `member_id`, `created`, `modified`) VALUES
480
-
481
- (11, 19, 1, '2021-08-24 23:51:11', '2021-08-24 14:51:11'),
482
-
483
- (15, 14, 1, '2021-08-25 09:32:31', '2021-08-25 00:32:31'),
484
-
485
-
486
-
487
-
488
-
489
-
490
-
491
- CREATE TABLE `members` (
492
-
493
- `id` int(11) NOT NULL,
494
-
495
- `name` varchar(255) NOT NULL,
496
-
497
- `email` varchar(255) NOT NULL,
498
-
499
- `password` varchar(100) NOT NULL,
500
-
501
- `picture` varchar(255) NOT NULL,
502
-
503
- `introduce` varchar(200) NOT NULL,
504
-
505
- `created` datetime NOT NULL,
506
-
507
- `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
508
-
509
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
510
-
511
-
512
-
513
- INSERT INTO `members` (`id`, `name`, `email`, `password`, `picture`, `introduce`, `created`, `modified`) VALUES
514
-
515
- (1, 'sakura', 'sakura-example@gmail.com', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', '20210823233156atom.jpg', '初めまして、sakuraです。プログラミング勉強中です。自己紹介文をupdate.phpから編集できるようになりました。日々なんとか成長中', '2021-08-17 13:54:57', '2021-08-23 14:31:56'),
516
-
517
- (2, 'wakaba', 'wakaba-example@yahoo.ne.jp', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', '20210821103031animals.jpg', 'どうも、神奈川の大学通ってる学生です。趣味は登山です。', '2021-08-17 21:41:43', '2021-08-21 01:30:31'),
518
-
519
-
520
-
521
-
522
-
523
- CREATE TABLE `posts` (
524
-
525
- `id` int(11) NOT NULL,
526
-
527
- `message` text NOT NULL,
528
-
529
- `member_id` int(11) NOT NULL,
530
-
531
- `reply_message_id` int(11) NOT NULL DEFAULT '0',
532
-
533
- `created` datetime NOT NULL,
534
-
535
- `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
536
-
537
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
538
-
539
-
540
-
541
- INSERT INTO `posts` (`id`, `message`, `member_id`, `reply_message_id`, `created`, `modified`) VALUES
542
-
543
- (3, '一覧を作りました。', 1, 0, '2021-08-17 16:30:47', '2021-08-17 07:30:47'),
544
-
545
- (4, '初めまして、よろしくお願いします。', 2, 0, '2021-08-17 21:42:13', '2021-08-17 12:42:13'),
546
-
547
- (5, '返信機能のため、投稿', 2, 0, '2021-08-17 21:42:31', '2021-08-17 12:42:31'),
548
-
549
- (6, 'もう一つ増やします', 2, 0, '2021-08-17 21:42:46', '2021-08-17 12:42:46'),
550
-
551
- ```
552
-
553
529
 
554
530
 
555
531
 
@@ -568,6 +544,12 @@
568
544
 
569
545
 
570
546
 
547
+ 8/26 追記
548
+
549
+ 「$post['id']はforeach内かな」と思い移動したところハートマークに色付きましたが、まだSQL文が間違っているのか”いいね”有り無しの全件取得はできていません。
550
+
551
+
552
+
571
553
  ### 補足情報(FW/ツールのバージョンなど)
572
554
 
573
555
 

4

サンプルデータ追加

2021/08/26 05:37

投稿

halu_0366
halu_0366

スコア1

test CHANGED
File without changes
test CHANGED
@@ -344,51 +344,9 @@
344
344
 
345
345
 
346
346
 
347
-
348
-
349
- <ul class="paging">
350
-
351
- <?php if ($page > 1) : ?>
352
-
353
- <li><a href="index.php?page=<?php print($page - 1); ?>">
354
-
355
- << </a>
356
-
357
- </li>
347
+    -- ここにページネーション
358
-
359
- <?php endif; ?>
348
+
360
-
361
-
362
-
363
- <?php for ($x = 1; $x <= $maxPage; $x++) : ?>
349
+
364
-
365
- <li>
366
-
367
- <?php if ($x == $_REQUEST['page']) : ?>
368
-
369
- <a href="index.php?page=<?php print($x); ?>" class="now_page"><?php print $x; ?></a>
370
-
371
- <?php else : ?>
372
-
373
- <a href="index.php?page=<?php print($x); ?>"><?php print $x; ?></a>
374
-
375
- <?php endif; ?>
376
-
377
- </li>
378
-
379
- <?php endfor; ?>
380
-
381
-
382
-
383
- <?php if ($page < $maxPage) : ?>
384
-
385
- <li><a href="index.php?page=<?php print($page + 1); ?>"> >> </a></li>
386
-
387
- <?php endif; ?>
388
-
389
- </ul>
390
-
391
-
392
350
 
393
351
  </div>
394
352
 
@@ -498,35 +456,101 @@
498
456
 
499
457
 
500
458
 
501
- // 返信処理
502
-
503
- if (isset($_REQUEST['res'])) {
504
-
505
- $response = $db->prepare('SELECT m.name, m.picture, p.* FROM members m, posts p WHERE m.id=p.member_id AND p.id=?');
506
-
507
- $response->execute(array($_REQUEST['res']));
508
-
509
-
510
-
511
- $table = $response->fetch();
512
-
513
- $message = '@' . $table['name'] . ' ' . $table['message'];
514
-
515
- }
516
-
517
-
518
-
519
459
  ```
520
460
 
521
-
522
-
523
-
524
-
525
- ![![イメージ説明](a77929724bd0177e46948832afbb2986.jpeg)(likesテーブル)
526
-
527
- ![イメージ説明](31e36750f794de7a41fb92e456ac1f12.jpeg)(membersテーブル)
528
-
529
- ![イメージ説明](220d92dfbd4930830908b9efef904cef.jpeg)(postsテーブル)
461
+ ```
462
+
463
+ CREATE TABLE `likes` (
464
+
465
+ `id` int(11) NOT NULL,
466
+
467
+ `post_id` int(11) NOT NULL,
468
+
469
+ `member_id` int(11) NOT NULL,
470
+
471
+ `created` datetime NOT NULL,
472
+
473
+ `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
474
+
475
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
476
+
477
+
478
+
479
+ INSERT INTO `likes` (`id`, `post_id`, `member_id`, `created`, `modified`) VALUES
480
+
481
+ (11, 19, 1, '2021-08-24 23:51:11', '2021-08-24 14:51:11'),
482
+
483
+ (15, 14, 1, '2021-08-25 09:32:31', '2021-08-25 00:32:31'),
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+ CREATE TABLE `members` (
492
+
493
+ `id` int(11) NOT NULL,
494
+
495
+ `name` varchar(255) NOT NULL,
496
+
497
+ `email` varchar(255) NOT NULL,
498
+
499
+ `password` varchar(100) NOT NULL,
500
+
501
+ `picture` varchar(255) NOT NULL,
502
+
503
+ `introduce` varchar(200) NOT NULL,
504
+
505
+ `created` datetime NOT NULL,
506
+
507
+ `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
508
+
509
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
510
+
511
+
512
+
513
+ INSERT INTO `members` (`id`, `name`, `email`, `password`, `picture`, `introduce`, `created`, `modified`) VALUES
514
+
515
+ (1, 'sakura', 'sakura-example@gmail.com', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', '20210823233156atom.jpg', '初めまして、sakuraです。プログラミング勉強中です。自己紹介文をupdate.phpから編集できるようになりました。日々なんとか成長中', '2021-08-17 13:54:57', '2021-08-23 14:31:56'),
516
+
517
+ (2, 'wakaba', 'wakaba-example@yahoo.ne.jp', '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8', '20210821103031animals.jpg', 'どうも、神奈川の大学通ってる学生です。趣味は登山です。', '2021-08-17 21:41:43', '2021-08-21 01:30:31'),
518
+
519
+
520
+
521
+
522
+
523
+ CREATE TABLE `posts` (
524
+
525
+ `id` int(11) NOT NULL,
526
+
527
+ `message` text NOT NULL,
528
+
529
+ `member_id` int(11) NOT NULL,
530
+
531
+ `reply_message_id` int(11) NOT NULL DEFAULT '0',
532
+
533
+ `created` datetime NOT NULL,
534
+
535
+ `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
536
+
537
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
538
+
539
+
540
+
541
+ INSERT INTO `posts` (`id`, `message`, `member_id`, `reply_message_id`, `created`, `modified`) VALUES
542
+
543
+ (3, '一覧を作りました。', 1, 0, '2021-08-17 16:30:47', '2021-08-17 07:30:47'),
544
+
545
+ (4, '初めまして、よろしくお願いします。', 2, 0, '2021-08-17 21:42:13', '2021-08-17 12:42:13'),
546
+
547
+ (5, '返信機能のため、投稿', 2, 0, '2021-08-17 21:42:31', '2021-08-17 12:42:31'),
548
+
549
+ (6, 'もう一つ増やします', 2, 0, '2021-08-17 21:42:46', '2021-08-17 12:42:46'),
550
+
551
+ ```
552
+
553
+
530
554
 
531
555
 
532
556
 

3

画像を添付

2021/08/26 02:51

投稿

halu_0366
halu_0366

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,4 @@
1
- ```ここに言語を入力
2
-
3
- コード
4
-
5
- ```### 前提・実現したいこと
1
+ ### 前提・実現したいこと
6
2
 
7
3
  PHPでいいね機能を作っています。データベースと連携し、ハートマークをクリックして”いいね”の付け外しまでは既にできていますが、全投稿を取得し”いいね”が付いた投稿にはTwitterのようにハートマーク横に数字を表示する段階で躓いています。
8
4
 

2

SQLのデータをエクスポートで追加したいが10000字超えは送れない

2021/08/25 13:05

投稿

halu_0366
halu_0366

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,8 @@
1
+ ```ここに言語を入力
2
+
3
+ コード
4
+
1
- ### 前提・実現したいこと
5
+ ```### 前提・実現したいこと
2
6
 
3
7
  PHPでいいね機能を作っています。データベースと連携し、ハートマークをクリックして”いいね”の付け外しまでは既にできていますが、全投稿を取得し”いいね”が付いた投稿にはTwitterのようにハートマーク横に数字を表示する段階で躓いています。
4
8
 
@@ -30,19 +34,19 @@
30
34
 
31
35
 
32
36
 
33
- // これでいいねが付いてる投稿だけ取得
37
+ // 1,これでいいねが付いてる投稿だけ取得
34
38
 
35
39
  $posts = $db->prepare('SELECT m.name, m.picture, p.*, COUNT(l.post_id) AS like_cnt FROM members m, posts p, likes l WHERE m.id=p.member_id AND p.id=l.post_id GROUP BY l.post_id ORDER BY p.created DESC LIMIT ?, 5');
36
40
 
37
41
 
38
42
 
39
- // これで何も1件も取得できない Qiitaにあったもの
43
+ // 2,これで何も1件も取得できない Qiitaにあったもの
40
44
 
41
45
  $posts = $db->prepare('SELECT m.name, m.picture, p.*, COUNT(l.post_id) AS like_cnt FROM members m, posts p LEFT JOIN likes l ON p.id=l.post_id WHERE m.id=p.member_id GROUP BY l.post_id ORDER BY p.created DESC LIMIT ?, 5');
42
46
 
43
47
 
44
48
 
45
- // これが元のSQL 全件取得できる 
49
+ // 3,これが元のSQL 全件取得できる 
46
50
 
47
51
  $posts = $db->prepare('SELECT m.name, m.picture, p.* FROM members m, posts p WHERE m.id=p.member_id ORDER BY p.created DESC LIMIT ?,5');
48
52
 
@@ -520,6 +524,16 @@
520
524
 
521
525
 
522
526
 
527
+
528
+
529
+ ![![イメージ説明](a77929724bd0177e46948832afbb2986.jpeg)(likesテーブル)
530
+
531
+ ![イメージ説明](31e36750f794de7a41fb92e456ac1f12.jpeg)(membersテーブル)
532
+
533
+ ![イメージ説明](220d92dfbd4930830908b9efef904cef.jpeg)(postsテーブル)
534
+
535
+
536
+
523
537
  ### 試したこと
524
538
 
525
539
 

1

レンタルサーバーなどの本番環境ではなくローカル環境で実装中です

2021/08/25 13:04

投稿

halu_0366
halu_0366

スコア1

test CHANGED
File without changes
test CHANGED
@@ -539,3 +539,5 @@
539
539
 
540
540
 
541
541
  PHP7.4.1 MAMP PHPMyAdmin Chromeブラウザ VSCode を使っています。
542
+
543
+ 「ここがおかしいかも」「これを変えてみたら?」「この情報がわかれば答えられるかも」などでも構いません。回答よろしくお願いします。