Comment System Using PHP & MySQL

Comment System Using PHP & MySQL

In this blog, we will learn how to make Comment  System in PHP & MySQL. On the Blog page we mostly see a comment system on the website in this blog we will create a nested comment and reply system by using simple steps:

Step1: Create Database comment_system_php

CREATE DATABASE comment_system_php;
 

Step2: Create table blogs

CREATE TABLE `blogs` (
  `id` int(11) NOT NULL,
  `addeddate` date DEFAULT NULL,
  `title` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `description` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 


Step3:
Create table comments

CREATE TABLE `comments` (
  `id` int(11) NOT NULL,
  `blog_id` int(11) DEFAULT NULL,
  `comment_id` int(11) DEFAULT NULL,
   `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `description` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


Step4:
Create connection.php file

<?php
$servername = "localhost";
$username = "root";
$password="";
$db = "comment_system_php";
 
// Create connection
$conn = mysqli_connect($servername, $username, $password,$db);
 
// Check connection
if (!$conn) {
  die("Connection failed: " . mysqli_connect_error());
}
 
?>
 


Step5:
Create index.php file

<?php
include('connection.php');
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Blogs</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
 
<div class="container">
  <h2>All Blogs</h2>
  <p>To Comment on blog please click on view detail link.</p>           
  <table class="table table-striped">
    <thead>
      <tr>
        <th>Sr.No</th>
        <th>Title</th>
        <th>Description</th>
                        <th>View</th>
      </tr>
    </thead>
    <tbody>
           
            <?php
           
            $sql="select * from blogs";
            $result=mysqli_query($conn,$sql);
           
           
            $i=1;
            while($data=mysqli_fetch_array($result))
            {?>
      <tr>
        <td><?php echo $i;?></td>
        <td><?php echo $data['title'];?></td>
        <td><?php echo $data['description'];?></td>
                        <td><a href="blog-detail.php?blogid=<?php echo $data['id'];?>">view detail</a></td>
      </tr>
            <?php $i++; } ?> 
    </tbody>
  </table>
</div>
 
</body>
</html>


Step6:
Create blog-detail.php file

<?php
include('connection.php');
 
 
function showComments()
{
            $comment="";
           
            $comment.=commenttree();
           
            echo $comment;
}
 
function commenttree($parentid=NULL)
{
            $comments='';
            $sql='';
           
           
            if(is_null($parentid))
            {
            $sql="select * from comments where comment_id='0'";
            }
           
            else
            {
                        $sql="select * from comments where comment_id=$parentid";
            }
           
           
            $result=mysqli_query($GLOBALS['conn'],$sql);
           
            while($data=mysqli_fetch_array($result))
            {
                        // echo $data['comment_id'];
                       
                        // echo '<pre>';
                        // print_r($data);
                       
                       
                        if($data['comment_id']=='0')
                        {
                         $comments.='
                         <div class="media border comment0 p-3">
    <div class="media-body">
      <h4>'.$data['name'].'<small><i> Posted on February 19, 2016</i></small></h4>
    
             '.$data['description'].'
     
              <p><a href="#postcomment" class="btn btn-primary mt-2 float-right" onclick="reply('.$data['id'].')">reply</a></p>
             </div>
             </div>
              ';
                        }
                        else
                        {
                                    $comments.='<div class="media border reply p-3">
    <div class="media-body">
      <h4>'.$data['name'].'<small><i> Posted on February 19, 2016</i></small></h4>
    
             '.$data['description'].'
     
              <p><a href="#postcomment" class="btn btn-primary mt-2 float-right" onclick="reply('.$data['id'].')">reply</a></p>
              </div>
              </div>
              ';
                        }
             
                       
                                   
                                   
 
        $comments.='<div class="media  parent p-3">
    <div class="media-body">'.commenttree($data['id']).'</div></div>';
 
                        }
           
           
           
           
           
            return $comments;
 
}
 
 
 
$blogid=$_GET['blogid'];
 
if(isset($_POST['submit']))
{
           
            if(empty($_POST['commentid']))
            {
                        $commentid='0';
            }
            else
            {
                        $commentid=$_POST['commentid'];
            }
           
            $sql="insert into comments (blog_id,comment_id,name,description) values ('".$blogid."','".$commentid."','".$_POST['name']."','".$_POST['description']."')";
           
            $result=mysqli_query($conn,$sql);
           
            if($result)
            {
                        echo '<script>alert("comment added successfully, we will published after verify your comment.")</script>';
            }
           
            else
            {
                        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
            }
           
}
 
 
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Blog Detail</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
 
<div class="container">
<div class="col-lg-12">
<?php
$sql="select * from blogs where id=$blogid";
$result=mysqli_query($conn,$sql);
$data=mysqli_fetch_array($result);
?>
 
<h2><?php echo $data['title'];?></h2>
<p><?php echo $data['description'];?></p>
</div>
 
<div class="col-lg-12">
<h4>Comments</h4>
 
            <?php showComments(); ?>
           
 
</div>
 
<div class="col-lg-12" id="postcomment">
<h4 class="mt-4">Post Your Comment</h4>
 
<form method="post">
<input type="hidden" name="commentid" id="commentid">
<label>Name</label>
<input type="text" class="form-control" name="name">
 
<label>Comment</label>
<textarea class="form-control" name="description"></textarea>
 
<input type="submit" name="submit" class="btn btn-primary mt-2">
 
</form>
</div>
 
 
</div>
 
 
<script>
function reply(commentid)
{
           
            //alert(commentid);
            $("#commentid").val(commentid);
}
</script>
 
</body>
</html>
 


To create this comment system I have used the recursion concept.

Recursion: Recursion is a concept that allowing a function to call itself from within its own code.

 

Note: In this blog, we have inserted blogs in the table directly, there is not any add blog system, you can customize this code according to your need.

Download Source Code