質問編集履歴

5

テーブルに追加

2021/02/25 13:11

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
 
4
4
 
5
+ テーブルは以下のように記載しています。
6
+
7
+ 以下はusersテーブル
8
+
9
+ ![イメージ説明](ba365b77cced8c809eca6a549aabb7b9.png)
10
+
11
+ 以下はtweetsテーブル
12
+
13
+ ![イメージ説明](83d4cfae722a304f016e702f31832d17.png)
14
+
5
15
  詰まっている部分としては詳細表示の際に、ログインしているユーザーでかつそれを投稿したユーザーである場合は、編集と削除ができる。
6
16
 
7
17
 

4

修正しました。

2021/02/25 13:11

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -209,3 +209,465 @@
209
209
  </body>
210
210
 
211
211
  ```
212
+
213
+
214
+
215
+ ```
216
+
217
+ //ユーザー登録用register.php
218
+
219
+
220
+
221
+ <?php
222
+
223
+ session_start();
224
+
225
+ require('../common/database.php');
226
+
227
+ require('../common/validate.php');
228
+
229
+
230
+
231
+ require('../common/head_info.php');
232
+
233
+ ?>
234
+
235
+
236
+
237
+ <?php
238
+
239
+ //POST送信された場合
240
+
241
+ if(!empty($_POST)) {
242
+
243
+ $name = $_POST['name'];
244
+
245
+ $email = $_POST['email'];
246
+
247
+ $pass = $_POST['pass'];
248
+
249
+ $pass_re = $_POST['pass_re'];
250
+
251
+
252
+
253
+
254
+
255
+ //未入力チェック
256
+
257
+ validateNot($name, 'name');
258
+
259
+ validateNot($email, 'email');
260
+
261
+ validateNot($pass, 'pass');
262
+
263
+ validateNot($pass_re, 'pass_re');
264
+
265
+
266
+
267
+ if(empty($err_msg)) {
268
+
269
+ //ニックネームの最大文字数チェック
270
+
271
+ validateNameMaxLen($name, 'name');
272
+
273
+
274
+
275
+ //メールアドレスの重複チェック
276
+
277
+
278
+
279
+ //メールアドレスの形式チェック
280
+
281
+
282
+
283
+ //パスワードの最大文字数チェック
284
+
285
+ validatePassMaxLen($pass,'pass');
286
+
287
+ //パスワードの最小文字数チェック
288
+
289
+ validatePassMinLen($pass,'pass');
290
+
291
+ //パスワードの半角英数字チェック
292
+
293
+
294
+
295
+
296
+
297
+ if(empty($err_msg)) {
298
+
299
+ try {
300
+
301
+ //DB接続処理
302
+
303
+ $database_handler = getDatabaseConnection();
304
+
305
+ // プリペアドステートメントで SQLをあらかじめ用意しておく
306
+
307
+ if($statement = $database_handler->prepare('INSERT INTO users (name, email, password) VALUES (:name, :email, :password)')){
308
+
309
+ $password = password_hash($pass, PASSWORD_DEFAULT);
310
+
311
+ //指定された変数名にパラメータをバインド(紐付け)
312
+
313
+ $statement->bindParam(':name', $name);
314
+
315
+ $statement->bindParam(':email', $email);
316
+
317
+ $statement->bindParam(':password', $password);
318
+
319
+ $statement->execute();
320
+
321
+ }
322
+
323
+
324
+
325
+ // ユーザー情報保持
326
+
327
+ $_SESSION['user'] = [
328
+
329
+ 'id' => $database_handler->lastInsertId()
330
+
331
+ ];
332
+
333
+ }catch(Exception $e) {
334
+
335
+ error_log('エラー発生:' . $e -> getMessage());
336
+
337
+ $err_msg['common'] = message05;
338
+
339
+ exit;
340
+
341
+ }
342
+
343
+ header('Location:../tweets/index.php');
344
+
345
+ exit;
346
+
347
+ }
348
+
349
+ }
350
+
351
+ }
352
+
353
+ ?>
354
+
355
+
356
+
357
+ <?php
358
+
359
+ require('../common/header.php');
360
+
361
+ ?>
362
+
363
+
364
+
365
+ <div class='main-top'>
366
+
367
+ <div class='form-register'>
368
+
369
+ <div class="form-register-list">
370
+
371
+ <h2><i class="fas fa-user-plus"></i>ユーザー登録</h2>
372
+
373
+ <form action="" method='post' class='form'>
374
+
375
+ <label>
376
+
377
+ <input type="text" name='name' placeholder="ニックネーム" value="<?php print(htmlspecialchars($_POST['name'],ENT_QUOTES));?>">
378
+
379
+ <div class="error_mes">
380
+
381
+ <?php
382
+
383
+ if(!empty($err_msg['name'])) echo $err_msg['name'];
384
+
385
+ ?>
386
+
387
+ </div>
388
+
389
+ </label>
390
+
391
+ <label>
392
+
393
+ <input type="text" name='email' placeholder="メールアドレス" value="<?php print(htmlspecialchars($_POST['email'],ENT_QUOTES));?>">
394
+
395
+ <div class="error_mes">
396
+
397
+ <?php
398
+
399
+ if(!empty($err_msg['email'])) echo $err_msg['email'];
400
+
401
+ ?>
402
+
403
+ </div>
404
+
405
+ </label>
406
+
407
+ <label>
408
+
409
+ <input type="password" name='pass' placeholder="パスワード" value="<?php print(htmlspecialchars($_POST['pass'],ENT_QUOTES));?>"></br>
410
+
411
+ <div class="error_mes">
412
+
413
+ <?php
414
+
415
+ if(!empty($err_msg['pass'])) echo $err_msg['pass'];
416
+
417
+ ?>
418
+
419
+ </div>
420
+
421
+ <span class='form-rule'>※英数字8文字以上</span>
422
+
423
+ </label>
424
+
425
+ <label>
426
+
427
+ <input type="password" name='pass_re' placeholder="パスワード確認" value="<?php print(htmlspecialchars($_POST['pass_re'],ENT_QUOTES));?>"></br>
428
+
429
+ <div class="error_mes">
430
+
431
+ <?php
432
+
433
+ if(!empty($err_msg['pass_re'])) echo $err_msg['pass_re'];
434
+
435
+ ?>
436
+
437
+ </div>
438
+
439
+ <span class='form-rule'>※英数字8文字以上</span>
440
+
441
+ </label>
442
+
443
+ <div class='button-container'>
444
+
445
+ <input type="submit" value='登録する'>
446
+
447
+ </div>
448
+
449
+ </form>
450
+
451
+ </div>
452
+
453
+ </div>
454
+
455
+ </div>
456
+
457
+
458
+
459
+ <?php
460
+
461
+ require('../common/footer.php');
462
+
463
+ ?>
464
+
465
+ ```
466
+
467
+
468
+
469
+ ```
470
+
471
+ //tweetの一覧
472
+
473
+ <?php
474
+
475
+ session_start();
476
+
477
+ require('../common/validate.php');
478
+
479
+ require('../common/database.php');
480
+
481
+ require('../common/head_info.php');
482
+
483
+ $database_handler = getDatabaseConnection();
484
+
485
+ $tweets=$database_handler->prepare('SELECT * FROM tweets ORDER BY id DESC;');
486
+
487
+ $tweets->execute();
488
+
489
+ ?>
490
+
491
+ <?php
492
+
493
+ require('../common/header.php');
494
+
495
+ ?>
496
+
497
+
498
+
499
+ <div class="main-top">
500
+
501
+ <?php
502
+
503
+ if(!empty($_SESSION['user']['id'])) {
504
+
505
+ ?>
506
+
507
+ <div class="community-create">
508
+
509
+ <div class="tweet-top">
510
+
511
+ <a href="../tweets/create.php">投稿する</a>
512
+
513
+ </div>
514
+
515
+ </div>
516
+
517
+ <?php
518
+
519
+ }
520
+
521
+ ?>
522
+
523
+ <div class="create-list">
524
+
525
+ <div class="create-list-container">
526
+
527
+ <div class="create-list-top">
528
+
529
+ <p>
530
+
531
+ aaa
532
+
533
+ </p>
534
+
535
+ </div>
536
+
537
+ <?php
538
+
539
+ if(!empty($tweets)){
540
+
541
+ ?>
542
+
543
+ <ul class="create-list-content">
544
+
545
+ <?php foreach($tweets as $tweet): ?>
546
+
547
+ <li class="list-menu">
548
+
549
+ <div class="title-list">
550
+
551
+ <p><a href="community01_show.php?id=<?php print($tweet['id']);?>"><?php print(mb_substr($tweet['title'],0,50)); ?></a></p>
552
+
553
+ </div>
554
+
555
+ </li>
556
+
557
+ <?php endforeach; ?>
558
+
559
+ </ul>
560
+
561
+ <?php
562
+
563
+ }else{
564
+
565
+ ?>
566
+
567
+ <p style="text-align:center;line-height:20;">投稿はまだありません</p>
568
+
569
+ <?php
570
+
571
+ }
572
+
573
+ ?>
574
+
575
+
576
+
577
+ </div>
578
+
579
+ </div>
580
+
581
+ </div>
582
+
583
+
584
+
585
+
586
+
587
+ <?php
588
+
589
+ require('../common/footer.php');
590
+
591
+ ?>
592
+
593
+ ```
594
+
595
+
596
+
597
+ ```
598
+
599
+ //tweetのshow.php
600
+
601
+
602
+
603
+ <?php
604
+
605
+ session_start();
606
+
607
+ require('../common/auth.php');
608
+
609
+ require('../common/validate.php');
610
+
611
+ require('../common/database.php');
612
+
613
+ require('../common/head_info.php');
614
+
615
+ $user_id = getLoginUserId();
616
+
617
+ $database_handler = getDatabaseConnection();
618
+
619
+ $tweets=$database_handler->prepare('SELECT * FROM tweets WHERE id=?;');
620
+
621
+ $tweets->execute();
622
+
623
+ $tweet = $tweets->fetch();
624
+
625
+ ?>
626
+
627
+ <?php
628
+
629
+ require('../common/header.php');
630
+
631
+ ?>
632
+
633
+
634
+
635
+ <div class="main-top">
636
+
637
+ <div class="community-show">
638
+
639
+ <article>
640
+
641
+ <h1 class="item-name"><?php print($tweet['title']);?></h1>
642
+
643
+
644
+
645
+ <div class="item-main-content"><?php print($tweet['content']);?></div>
646
+
647
+ <?php
648
+
649
+ if($tweet['user_id']==$user_id) {
650
+
651
+ ?>
652
+
653
+ <a href="community01_edit.php?id=<?php print($tweet['id']);?>">編集する</a>
654
+
655
+ <a href="community01_delete.php?id=<?php print($tweet['id']);?>">削除する</a>
656
+
657
+ <button type="submit" class="btn btn-danger" formaction="./tweets/delete.php"><i class="fas fa-trash-alt"></i></button>
658
+
659
+ <?php
660
+
661
+ }
662
+
663
+ ?>
664
+
665
+ </article>
666
+
667
+ </div>
668
+
669
+ </div>
670
+
671
+
672
+
673
+ ```

3

記載変更

2021/02/25 13:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,12 @@
6
6
 
7
7
 
8
8
 
9
+ テーブルはusersテーブル、tweetsテーブルを使用しています。
10
+
11
+ ここで、usersテーブルのログインしているユーザーとtweetsテーブルの投稿した記事を紐付けるSQL文を書いて行きたいと思っています。
12
+
13
+
14
+
9
15
  そして、詳細の際に、選択した特定の一点のみを取得するSQL文に詰まっています。
10
16
 
11
17
 

2

SQL変更

2021/02/25 12:00

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- SQL分で`SELECT * FROM tweets id=?;`のように記載することも可能だと思うのですが、その深い部分が理解できないため、?は使わずにgetLoginUserIdという関数を使っています。
13
+ SQL分で`SELECT * FROM tweets Where id=?;`のように記載することも可能だと思うのですが、その深い部分が理解できないため、?は使わずにgetLoginUserIdという関数を使っています。
14
14
 
15
15
  また、`$_SESSION['user']['id'])==$user_id`と記載してログインしているユーザーが投稿したユーザーと同一であると記載したかったのですが、フレームワークではなく生のPHPで書くとなるとそのような記事がなかなか見当たらず詰まってしまいます。
16
16
 
@@ -40,7 +40,7 @@
40
40
 
41
41
  $database_handler = getDatabaseConnection();
42
42
 
43
- $tweets=$database_handler->prepare('SELECT * FROM tweets ORDER BY id DESC;');
43
+ $tweets=$database_handler->prepare('SELECT * FROM tweets where id=user_id;');
44
44
 
45
45
  $tweets->execute();
46
46
 

1

記載変更

2021/02/25 11:44

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -32,8 +32,6 @@
32
32
 
33
33
  require('../common/auth.php');
34
34
 
35
- require('../common/validate.php');
36
-
37
35
  require('../common/database.php');
38
36
 
39
37
  require('../common/head_info.php');
@@ -205,11 +203,3 @@
205
203
  </body>
206
204
 
207
205
  ```
208
-
209
-
210
-
211
- ```
212
-
213
-
214
-
215
- ```