##現状
現在、主にPHPで自作ブログを作成している初心者です。
データベースはMySQLを使用しています。
トップページのレイアウト(記事一覧)が完成し、子ページへリンクを繋げる作業中です。
トップページに記事の概要のようなものを複数表示し、
クリックで詳細記事ページに飛ぶようにしたいです。
DBの構造は
Blog-post-(no/title/category/content/time)としています。
##わからないこと
各記事のページについて、
まず、aタグにphpで順にリンクを指定すればいいのかと考えたのですが、
1、データベースの内容にURLがないので、どこへのリンクを貼ればいいのかわからない。
そこで、トップページから外枠だけできた詳細記事ページに飛び、
その中でDBから取得した内容を表示すればいいのか、と考えましたが、
2、トップページでクリックされたのがどの記事なのか判定する方法がわからない。
また、現在のコードを後述しますが、
index.phpからreqwireでt_index.phpへ飛んでますが、
理解半分のまま参考にしたサイトから引っ張ってきたコードな為、
3、single.php(記事詳細ページ)への繋げ方がわからない。
繋がっていないためか、single.phpでUndefined variable:postエラーが出てしまいます。
##試したこと
初心者なりに今日1日調べてみて、
urlencodeやsetIntなどの関数や、teratail自体にも過去に似たような質問を見つけたのですが、
結果、応用できなかったため質問させていただきました。
indexphp
1<?php 2 3//MySQLへ接続 4 $pdo = new PDO("mysql:host=localhost;dbname=blog", "abc", "abc"); 5 6//postテーブルを降順に取得 7 $st = $pdo->query("SELECT * FROM post ORDER BY no DESC"); 8 9//取得したpostデータを全て選択 10 $posts = $st->fetchAll(); 11 12 13//選択したpostデータの数だけ繰り返し処理 14 for ($i = 0; $i < count($posts); $i++) { 15 16 17//commentテーブルから各記事に対応するデータを降順に取得 18 $st = $pdo->query("SELECT * FROM comment WHERE post_no={$posts[$i]['no']} ORDER BY no DESC"); 19 20//コメントを全て選択 21 $posts[$i]['comments'] = $st->fetchAll(); 22 } 23 24//t_index.phpへ繋げる 25 require 't_index.php'; 26 27 28 29 30?> 31
tindexphp
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <title>Yama_Blog.</title> 5 <meta charaset="utf-8"> 6 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> 7 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> 8 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> 9 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> 10 11 <link rel="stylesheet" href="stylesheet.css"> 12 13</head> 14<body> 15 <header> 16 17 <nav 18 class="navbar navbar-expand-sm navbar-light mb-2" 19 style="background-color:#fff;"> 20 21 <a href="index.php" class="navbar-brand"> 22 <img src="image/logo.png" alt="logo"> 23 </a> 24 <button 25 class="navbar-toggler" 26 id="navbar-toggler" 27 type="button" 28 data-toggle="collapse" 29 data-target="#navmenu1" 30 aria-controls="navmenu1" 31 aria-expanded="false" 32 aria-label="Toggle navigation"> 33 <span class="navbar-toggler-icon"></span> 34 </button> 35 <div class="collapse navbar-collapse" id="navmenu1"> 36 <div class="navbar-nav"> 37 <a class="nav-item nav-link" href="profile.php">Profile</a> 38 <a class="nav-item nav-link" href="#">Portfolio</a> 39 <a class="nav-item nav-link" href="#">Contact</a> 40 </div> 41 </div> 42 </nav> 43 </header> 44 <div class="container" id="container"> 45 <div class="row"> 46 <div class="col-xs-12 col-md-12 col-lg-12" > 47<?php foreach ($posts as $post) { ?> 48 <a href="single.php" style="color:black;"> 49 <div class="article col-xs-12 col-md-4 col-lg-4"> 50 <p>最終更新日:<?php echo $post['time']; ?></p> 51 <h2><?php echo $post['title']; ?></h2> 52 <p>:<?php echo $post['category']; ?>:</p> 53 <img src="<?php echo $post['image']; ?>" alt="" class="img-fluid"> 54 <p><?php echo mb_substr(nl2br($post['content']),0,40,'utf-8',).'...'; ?></p> 55 </div> 56 </a> 57<?php } ?> 58 </div> 59 60 </div> 61 </div> 62 <footer> 63 <div class="footer-left"> 64 <img src="image/logo.png" alt="logo"> 65 </div> 66 </footer> 67 68 <script type="text/javascript" src="stylesheet.js"></script> 69 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 70</body> 71 72</html> 73
singlephp
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4... 5</head> 6<body> 7 <header> 8 ... 9 </header> 10 <div class="container" id="container"> 11 <div class="row"> 12 <div class="article col-xs-12 col-md-12" > 13 <p><?php echo nl2br($post['content']); ?></p> 14 </div> 15 16 </div> 17 </div> 18 <footer> 19 20 </footer> 21 22 <script type="text/javascript" src="stylesheet.js"></script> 23 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 24</body> 25 26</html> 27
ぐちゃぐちゃなコードであるかとは思いますが、よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/09 04:11