ایجاد نظرات تودرتو و پاسخ به آن با php
0 0

ایجاد نظرات تودرتو و پاسخ به آن با php


ایجاد نظرات تودرتو و پاسخ به آن با php

در این پست آموزش ایجاد نمایش نظرات تودرتو و پاسخ به آن را در php برایتان قرار داده ایم.

در این برنامه شما با روشی آشنا می شوید که می توانید نظرات را به صورت چند سطحی نمایش داده و بتوانید به هر کدام که دوست دارید پاسخ دهید.

برای اینکار ابتدا در phpmyadmin یک پایگاه داده با نام nested_comment ایجاد نمایید. سپس یک جدول با نام comment که دارای فیلدهای Id ، ParentId، Name، Email، Comment، InsertDate و InsertTime می باشد را ایجاد نمایید. فیلد Id کلید اصلی جدول و دارای خاصیت Auto_Increment می باشد. فیلد ParentId نیز باید NULL در نظر گرفته شود. بقییه فیلدها نیز از نوع Varchar می باشند که می توانید با توجه به نیازهای خودتان طول های آن ها را مشخص کنید.

بعد از ساخت پایگاه داده و جدول نوبت به نوشتن کدهای برنامه می رسد. در این برنامه ما چهار فایل php به نام های config ، functions ، index و post_comment داریم که کدهای هر یک را در ادامه توضیح می دهیم.

توضیح فایل config.php :

در این فایل ما با استفاده از دستورات php به پایگاه داده متصل شدیم که کدهای آن به صورت زیر می باشند.

$hostname = "localhost";
$db_username = "root";
$db_password = "";
$db_name = "nested_comment";
$link = mysqli_connect($hostname, $db_username, $db_password, $db_name) or die("Cannot connect to the database");
mysqli_query($link, "set names 'utf8'");

در ابتدا چهار متغیر به نام های hostname ، db_username ، db_password ، db_name که متغیر اولی برای نام سرور که به صورت پیشفرض localhost می باشد. db_username که نام کاربری برای اتصال به پایگاه داده که اگر نام کاربری ایجاد نکنید به طور پیشفرض root می باشد. db_password نیز همانند db_username می باشد که رمز عبور برای اتصال به پایگاه داده می باشد. db_name نام پایگاه داده مورد نظر می باشد.

از دستور mysqli_connect نیز برای ایجاد اتصال به پایگاه داده استفاده می کنیم.

در خط بعدی هم یک کوئری نوشتیم که زبان فارسی را هم هنگام نمایش و هم هنگام بازیابی اطلاعات پشتیبانی نماید.

توضیح فایل functions.php :

در این فایل سه تابع نوشتیم که به ترتیب توضیح می دهیم. کدهای این توابع به صورت زیر می باشند.

function getComments($row)
{
    global $link;
    $str = "گفته :";
    $reply = "پاسخ";
    echo "<li class='comment'>";
    echo "<div class='info'>";
    echo "<div class='name'>" . $row['Name'] . " " . $str . "</div>";
    echo "<div class='Date'>" . $row['InsertDate'] . "</div>";
    echo "<div class='Time'>" . $row['InsertTime'] . "</div>";
    echo "<br/>";
    echo "<hr/>";
    echo "</div>";
    echo "<div class='comment-body'>" . $row['Comment'] . "</div>";
    echo "<div class='btnReply'><a href='#comment_form' class='reply' id='" . $row['Id'] . "'>$reply</a></div>";
    $query = "SELECT * FROM comment WHERE ParentId = " . $row['Id'] . "";
    $result = mysqli_query($link, $query);
    if (mysqli_num_rows($result) > 0) {
        echo "<ul>";
        while ($row = mysqli_fetch_assoc($result)) {
            getComments($row);
        }
        echo "</ul>";
    }
    echo "</li>";
}

function insert_comment($ParentId, $Name, $Email, $Comment, $InsertDate, $InsertTime)
{
    global $link;
    $query = "INSERT INTO comment (";
    $query .= " ParentId,Name,Email,Comment,InsertDate,InsertTime ";
    $query .= ") VALUES (";
    $query .= " {$ParentId},'{$Name}','{$Email}','{$Comment}','{$InsertDate}','{$InsertTime}' ";
    $query .= ")";
    $comment_set = mysqli_query($link, $query);
    confirm_query($comment_set);
}

function confirm_query($result_set)
{
    if (!$result_set) {
        die("Database query failed");
    }
}
تابع اول : getComments :

این تابع زمانی استفاده می شود که بخواهیم نظرات را نمایش دهیم. برای اینکار در صفحه اصلی ما یک کوئری نوشتیم که تمامی نظرات را بازیابی می کند . سپس در یک حلقه while برای تک تک رکورد ها ، این تابع را فراخوانی می کنیم. در این تایع در ابتدا مقادیر مورد نظر برای نمایش را چاپ می کنیم. سپس Id این رکورد را به کوئری دیگری می دهیم که رکوردهایی را پیدا کند که ParentId انها برابر این Id باشد در حقیقت فرزندان این رکورد را پیدا می کند. سپس با استفاده از دستور mysqli_num_rows چک می کنیم که اگر تعداد رکوردهای پیدا شده بیش از صفر باشد یعنی حداقل یک رکورد پیدا شده باشد این تابع را دوباره فراخوانی می کنیم یعنی بصورت یک تابع بازگشتی می شود و به این ترتیب ما می توانیم نظرات تودرتو را نمایش دهیم.

تابع insert_comment :

در این تابع یک کوئری نوشتیم که نظرات کاربران را از فرم دریافت کرده و در پایگاه داده ثبت می کند

تابع confirm_query :

از این تابع جهت این که برای مثال تابع insert_comment نتیجه ای در بر داشت یا نه استفاده می کنیم. اگر نتیجه نداد یعنی کوئری مشکل دارد و پیغام خطا را چاپ می کنیم.

توضیح فایل post_comment.php :

کدهای این فایل به صورت زیر می باشند.

if (isset($_POST['submit'])) {
    if ($_POST['parent_id'] == "") {
        $parentId = "NULL";
    } else {
        $parentId = mysqli_real_escape_string($link, $_POST['parent_id']);
    }
    $name = mysqli_real_escape_string($link, $_POST['name']);
    $email = mysqli_real_escape_string($link, $_POST['email']);
    $comment = mysqli_real_escape_string($link, $_POST['comment_body']);
    date_default_timezone_set('Asia/Tehran');
    $insertDate = Date("Y-m-d");
    $insertTime = Date("H:i:s");
    insert_comment($parentId, $name, $email, $comment, $insertDate, $insertTime);
}

if (mysqli_affected_rows($link) == 1) {
    header("location:index.php");
} else {
    echo "مشکلی در اتصال به سرور به وجود آمده است لطفا دوباره تلاش کنید.";
}

در این فایل اطلاعات را از فرم دریافت نموده و بعد از چک کردن مقادیر آن ، مقادیر مورد نظر را به تابع insert_comment می دهیم تا نظرات در پایگاه داده ثبت شوند.

توضیح فایل index.php :

کدهای این فایل به صورت زیر می باشند.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>نظرات تودرتو</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script type='text/javascript' src='jquery.pack.js'></script>
    <script type='text/javascript'>
        $(function () {
            $("a.reply").click(function () {
                var id = $(this).attr("id");
                $("#parent_id").attr("value", id);
                $("#name").focus();
            });
        });
    </script>
    <link type="text/css" rel="stylesheet" href="style.css">
</head>
<body>
<div id='wrapper'>
    <ul>
        <?php
        $query = "SELECT * FROM comment WHERE ParentId IS NULL ";
        $result = mysqli_query($link, $query);
        while ($row = mysqli_fetch_assoc($result)) {
            getComments($row);
        }
        ?>
    </ul>
    <form name="comment_form" id="comment_form" action="post_comment.php" method="post">
        <label for="name">نام:</label>
        <input type="text" name="name" id="name"/>
        <label for="name">ایمیل :</label>
        <input type="text" name="email" id="email"/>
        <label for="comment_body">نظر شما:</label>
        <textarea name="comment_body" id="comment_body"></textarea>
        <input type='hidden' name="parent_id" id="parent_id" value=""/>

        <div id='submit_button'>
            <input type="submit" name="submit" value="ثبت نظر"/>
        </div>
    </form>

</div>

در این فایل در ابتدا نظرات را نمایش می دهیم سپس در زیر نظرات یک فرم ایجاد کردیم که کاربر می تواند به نظرات دلخواه با کلیک بر روی پاسخ ، پاسخ دهد یعنی یا یک نظر جداگانه ثبت کند یا به نظرات داده شده پاسخ دهد.

در یک فایل css نیز برای نمایش نظرات و نحوه نمایش آنها کدهایی را نوشتیم که کدها کاملا واضح بوده و نیاز به توضیح ندارد.

همچنین اسکریپت ایجاد پایگاه داده در سورس برنامه موجود می باشد.

تصویری از خروجی برنامه:

ایجاد نظرات تودرتو و پاسخ به آن با php

دانلود

نویسنده حسین فتحی
گروه مطلب PHP
نوع مطلب سورس کد و آموزش
تاریخ انتشار ۱۶ خرداد ۱۳۹۴
منبع ایران گنج
تعداد نظرات ۰
قیمت کاربران VIP
توضیح توجه:
  • زمانی که روی لینک دانلود کلیک می کنید لینک دانلود به مدت 24 ساعت معتبر خواهد بود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.
خرید VIP
امکان خرید از درگاه های بانکی و حساب مجازی

برای دانلود بعد از خرید به همین صفحه برگردید تا لینک های دانلود نمایش داده شود

نظر / سوال

Captcha