CREATE TABLE post ( no SERIAL, title TEXT, content TEXT, time TIMESTAMP ); CREATE TABLE comment ( no SERIAL, post_no INT, name TEXT, content TEXT, time TIMESTAMP ); INSERT INTO post(no,title,content) VALUES(1,'記事1タイトル','記事1の内容です。'); INSERT INTO post(no,title,content) VALUES(2,'記事2タイトル','記事2の内容です。'); INSERT INTO comment(no,post_no,name,content) VALUES(1,1,'たろう','記事1へのコメントです。'); INSERT INTO comment(no,post_no,name,content) VALUES(2,1,'はなこ','記事1へのコメントです。');
css
body { background-color:#f77; font-size: 14px; font-family: Helvetica,Arial, sans-serif; } a:link, a:visited {color: #a00;} a:hover {color: #fca;} p { margin: 0; padding: 0; } h1 { margin: 10px 0; padding: 0; color: white; font-size: 32px; text-align: center; } h2 { margin: 0 -20px 10px -20px; padding: 5px 10px; background-color: #379; color: white; font-size: 18px; } h3 { margin: 0 -15px 10px -15px; padding: 5px 10px; background-color: #a55; color: white; font-size: 14px; } .post { width: 500px; margin: 0 auto 15px auto; padding: 0 20px 20px 20px; background-color: #fb0; } .comment { margin: 10px 0; padding: 0 15px 15px 15px; background-color: #da7; } .comment_link { text-align: right; }
<!DOCTYPE> <html> <head> <meta charset="utf-8"> <title>special blog</title> <link rel="stylesheet" href="blog.css"> </head> <body> <h1>Special Blog</h1> <div class="post"> <h2>記事1のタイトルです</h2> <p>記事1の本文です。<br> 記事1の本文です。<br> </p> <div class="comment"> <h3>通りすがり1</h3> <p> 記事1へのコメントです。<br> 記事1へのコメントです。<br> </p> </div> <div class="comment"> <h3>通りすがり2</h3> <p> 記事1へのコメントです。 </p> </div> <p class="comment_link"> 投稿日:2016/12/19 <a href="#">コメント</a> </p> </div> </body> </html>
index
<?php $pdo = new PDO("mysql:dbname=test", "root"); $st = $pdo->query("SELECT * FROM post ORDER BY no DESC"); $posts = $st->fetchAll(); for ($i = 0; $i < count($posts); $i++) { $st = $pdo->query("SELECT * FROM comment WHERE post_no={$posts[$i]['no']} ORDER BY no DESC"); $posts[$i]['comments'] = $st->fetchAll(); } require 't_index.php'; ?>
t_index.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Special Blog</title> <link rel="stylesheet" href="blog.css"> </head> <body> <h1>Special Blog</h1> <?php foreach ($posts as $post) { ?> <div class="post"> <h2><?php echo $post['title'] ?></h2> <p><?php echo nl2br($post['content']) ?></p> <?php foreach ($post['comments'] as $comment) { ?> <div class="comment"> <h3><?php echo $comment['name'] ?></h3> <p><?php echo nl2br($comment['content']) ?></p> </div> <?php } ?> <p class="commment_link"> 投稿日:<?php echo $post['time'] ?> <a href="comment.php?no=<?php echo $post['no'] ?>">コメント</a> </p> </div> <?php } ?> </body> </html>
post
<?php $error = $title = $content = ''; if (@$_POST['submit']){ $title = $_POST['title']; $content = $_POST['content']; if (!$title) $error .= 'タイトルがありません。<br>'; if (mb_strlen($title) > 80) $error .= 'タイトルが長すぎます。<br>'; if (!$content) $error .= '本文がありません。<br>'; if (!$error) { $pdo = new PDO("mysql:dbname=test", "root"); $stmt = $pdo->query("INSERT INTO post(title,content) VALUES('$title','$content')"); header('Location: index.php'); exit(); } } require 't_post.php'; ?>
post_t.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>記事投稿| Special Blog</title> <link rel="stylesheet" href="blog.css"> </head> <body> <form method="post" action="post.php"> <div class="post"> <h2>記事投稿</h2> <p>題名</p> <p><input type="text" name="title" size="40" value="<?php echo $title ?>"></p> <p>本文</p> <p><textarea name="content" rows="8" cols="40"><?php echo $content ?></textarea></p> <p><input name="submit" type="submit" value="投稿"></p> <p><?php echo $error ?></p> </div> </form> </body> </html>
comment
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>コメント投稿 | Special Blog</title> <link rel="stylesheet" href="blog.css"> </head> <body> <form method="post" action="comment.php"> <div class="post"> <h2>コメント投稿</h2> <p>お名前</p> <p><input type="text" name="name" size="40" value="<?php echo $name ?>"></p> <p>コメント</p> <p><textarea name="content" rows="8" cols="40"><?php echo $content ?></textarea></p> <p> <input type="hidden" name="post_no" value="<?php echo $post_no ?>"> <input name="submit" type="submit" value="投稿"> </p> <p><?php echo $error ?></p> </div> </form> </body> </html>
comment_t
<?php $post_no = $error = $name = $content = ''; if (@$_POST['submit']) { $post_no = strip_tags($_POST['post_no']); $name = strip_tags($_POST['name']); $content = strip_tags($_POST['content']); if (!$name) $error .= '名前がありません。<br>'; if (!$content) $error .= 'コメントがありません。<br>'; if (!$error) { $pdo = new PDO("mysql:dbname=test", "root"); $st = $pdo->prepare("INSERT INTO comment(post_no,name,content) VALUES(?,?,?)"); $st->execute(array($post_no, $name, $content)); header('Location: index.php'); exit(); } } else { $post_no = strip_tags($_GET['no']); } require 't_comment.php'; ?>