PHPとMySQLを使用したコメントと返信システムの作成方法


ステップ1: データベースの設計 まず、MySQLデータベース内にコメントと返信を保存するためのテーブルを作成します。例えば、"comments"というテーブルを作成し、以下のカラムを含めます:

  • comment_id: コメントの一意の識別子として使用される自動増分の整数型のカラム
  • parent_id: 返信の場合、親コメントのcomment_idを参照する整数型のカラム
  • name: コメントを投稿したユーザーの名前を保存する文字列型のカラム
  • email: コメントを投稿したユーザーのメールアドレスを保存する文字列型のカラム
  • content: コメントの内容を保存するテキスト型のカラム
  • created_at: コメントが投稿された日時を保存する日付またはタイムスタンプ型のカラム

ステップ2: コメントの表示 ブログの投稿ページやコメント一覧ページで、コメントを表示するためのPHPコードを追加します。以下は、簡単な例です:

<?php
// MySQL接続の設定
$servername = "localhost";
$username = "ユーザー名";
$password = "パスワード";
$dbname = "データベース名";
// データベースに接続
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続エラーの確認
if ($conn->connect_error) {
    die("接続エラー: " . $conn->connect_error);
}
// コメントを取得するクエリ
$sql = "SELECT * FROM comments WHERE parent_id IS NULL"; // 親コメントのみを取得
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // コメントを表示
    while ($row = $result->fetch_assoc()) {
        echo "<div>";
        echo "<p>投稿者: " . $row['name'] . "</p>";
        echo "<p>投稿日時: " . $row['created_at'] . "</p>";
        echo "<p>
内容:
 " . $row['content'] . "</p>";
        echo "</div>";
        // 返信コメントを表示する関数を呼び出す
        displayReplies($row['comment_id']);
    }
} else {
    echo "コメントはありません。";
}
// 返信コメントを表示する関数
function displayReplies($parentID)
{
    // MySQL接続の設定 (省略)
    // 親コメントに紐づく返信コメントを取得するクエリ
    $sql = "SELECT * FROM comments WHERE parent_id = $parentID";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
        // 返信コメントを表示
        while ($row = $result->fetch_assoc()) {
            echo "<div style='margin-left: 20px;'>";
            echo "<p>投稿者: " . $row['name'] . "</p>";
            echo "<p>投稿日時: " . $row['created_at'] . "</p>";
            echo "<p>
内容:
 " . $row['content'] . "</p>";
            echo "</div>";
            // 返信コメントに対するさらなる返信コメントを表示する関数を呼び出す
            displayReplies($row['comment_id']);
        }
    }
}
// データベース接続をクローズ
$conn->close();
?>

上記のコードでは、commentsテーブルから親コメントを取得し、それぞれのコメントと関連する返信コメントを再帰的に表示しています。displayReplies関数は、与えられた親コメントのcomment_idに紐づく返信コメントを取得し、再帰的に表示する役割を果たしています。

ステップ3: コメントの投稿 コメントを投稿するためのフォームを作成し、PHPコードを追加します。以下は、簡単な例です:

<!-- コメント投稿フォーム -->
<form method="POST" action="post_comment.php">
    <label for="name">名前:</label>
    <input type="text" name="name" required><br>
    <label for="email">メールアドレス:</label>
    <input type="email" name="email" required><br>
    <label for="content">コメント:</label><br>
    <textarea name="content" rows="4" required></textarea><br>
    <input type="submit" value="投稿する">
</form>
// post_comment.php
<?php
// MySQL接続の設定 (省略)
// フォームから送信されたデータを取得
$name = $_POST['name'];
$email = $_POST['email'];
$content = $_POST['content'];
// コメントをデータベースに挿入するクエリ
$sql = "INSERT INTO comments (name, email, content) VALUES ('$name', '$email', '$content')";
if ($conn->query($sql) === TRUE) {
    echo "コメントが投稿されました。";
} else {
    echo "エラー: " . $sql . "<br>" . $conn->error;
}
// データベース接続をクローズ
$conn->close();
?>

上記のコードでは、post_comment.phpファイルでフォームから送信されたデータを受け取り、データベースにコメントを挿入しています。

これらのステップを実装することで、PHPとMySQLを使用したコメントと返信システムを作成することができます。必要に応じてデザインやセキュリティ対策を追加することもおすすめです。