ساخت سیستم نظردهی (کامنت‌ها) با PHP

?How to Build a Comment Section Using PHP

20 تیر 1400
comment-system-in-php

سلام به شما دوستان عزیز. در این مطلب قرار است یک بخش ارسال نظر یا سیستم نظردهی با PHP ایجاد کنیم و در زیر همان بخش، نظرات ثبت‌شده را نمایش دهیم.

ساخت یک دیتابیس و جدول

اگر سایت شما دارای دیتابیس است لازم نیست دیتابیس جدیدی بسازید.

وارد phpmyadmin شوید و یک دیتابیس جدید با نام دلخواه خود بسازید (نام دیتابیس بنده در اینجا p-1 است).

حالا یک جدول با نام opinions و اطلاعات زیر بسازید:

id name email opinion
`` نام فرستنده ایمیل فرستنده نظر فرستنده

ساخت جدول

دقت کنید که اطلاعات را درست وارد کرده باشید.

ساخت فایل index.php

یک فایل php با اسم index بسازید.

این فایل، فایل اصلی سایت ما است (در اینجا منظور از سایت، فقط بخش نظردهی است و شما می‌توانید کدها را یا مستقیم به صفحه سایت خود وارد کنید یا یک فایل دیگر مخصوص بخش نظرسنجی تهیه کنید و کدها را در آن قرار دهید).

کدهای زیر را در فایل index قرار دهید.

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <title>ارسال نظر</title>
</head>
<body dir="rtl">

</body>
</html>

این کدها، کدهای اصلی html سایت هستند.

ساخت فایل db.php

یک فایل php دیگر با اسم db بسازید.

این فایل، دیتابیس و سایت را به هم ارتباط می دهد.

کدهای زیر را در فایل db قرار دهید.

<?php
    $con=mysqli_connect("localhost","root","","P-1");
?>

تغییرات کد:

در بخشی که localhost نوشته شده است، باید نوع هاست خود را بنویسید (اگر از سرور مجازی استفاده می‌کنید باید localhost باشد).

در بخشی که root نوشته شده است باید نام کاربری phpmyadmin خود را بنویسید (نام کاربری پیش‌فرض root است ولی اگر تغییر داده‌اید، نام کاربری جدید را وارد کنید).

در بخشی که چیزی نوشته نشده است باید رمز عبور phpmyadmin خود را بنویسید (phpmyadmin به طور پیشفرض رمز عبوری ندارد ولی اگر تغییر داده‌اید رمز عبور جدید را وارد کنید).

و در بخشی که P-1 نوشته شده است نام دیتابیس سایت را وارد کنید (همانطور که گفته بودم نام دیتابیس ما در اینجا p-1 است)

شروع کدنویسی سیستم نظردهی با PHP

تا اینجا فایل db.php کامل شده است و دیگر نیازی به آن نداریم پس فایل index.php را باز کنید و کدهای زیر را در آن قرار دهید:

<center>
    <h2 style="margin: 0px;">ارسال نظر</h2>
    <hr style="width: 200px;">
    <div class="form">
        <form method="post">
            <input type="text" name="name" placeholder="نامـ"><br>
            <input type="email" name="email" placeholder="ایمیلـ"><br>
            <textarea name="text" placeholder="نظر"></textarea><br>
            <input type="submit" name="submit" value="ارسال"><br>
        </form>
    </div>
</center>
    <h2>نظرات</h2><hr>
    <div class="opinions">
            <div class="opinion">
                <h3></h3><hr>
                <textarea></textarea>
            </div>
    </div>

این کدها یک ساختار برای بخش ارسال و نمایش نظرات می‌باشد.

حالا باید سایت را به دیتابیس متصل کنیم و کدهای PHP را بنویسیم.

با قرار دادن کد زیر در اول صفحه فایل db را وارد فایل index کنید:

<?php
    include('db.php');
?>

اکنون باید یک کد بنویسیم تا کاربر بتواند نظر خود را ثبت کند، پس کد زیر را در پایین تگ بسته شده form قرار دهید:

<?php
    if(isset($_POST['submit'])){
        $name  = $_POST['name'];
        $email = $_POST['email'];
        $text  = $_POST['text'];
            if(empty($name)){
                echo "نام خود را وارد کنید";
            }elseif(empty($email)){
                echo "ایمیل خود را وارد کنید";
            }elseif(empty($text)){
                echo "نظر خود را وارد کنید";
            }elseif(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)){
                echo "ایمیل صحیح نیست";
            }else{
                $insert = "INSERT INTO opinions (name , email , opinion)
                VALUES (N'$name' , N'$email' , N'$text')";
                    $insert_s = mysqli_query($con,$insert);
                        if($insert_s){
                            echo "نظر شما با موفقیت ثبت شد";
                        }else{
                            echo "به مشکل برخوردیم...";
                        }
            }
    }
?>

در این کد، چند مرحله (یا فیلتر) برای کاربر در نظر گرفته‌ایم:

  1. حتما باید نام خود را وارد کند
  2. حتما باید ایمیل خود را وارد کند
  3. حتما باید نظر خود را وارد کند
  4. ایمیل وارد شده باید ساختار صحیحی داشته باشد

اگر کاربر از تمام این مراحل به درستی عبور کند، اطلاعات وارد شده‌ی وی وارد جدول opinions می‌شود و در صورت وجود مشکل به کاربر پیامی داده می‌شود (مثل: نام خود را وارد کنید، نظر خود را وارد کنید و ...)

اگر شما به مراحل دیگری برای ثبت نظر کاربر نیاز دارید (مثل «نام و ایمیل کاربر باید در سایت ثبت شده باشد»، «کاربر نباید قبلا نظر داده باشد» و ...) می‌توانید به مراحل موجود اضافه کنید.

حالا که کاربران نظر خود را ثبت کردند، باید یک کد بنویسیم تا نظر کاربران را نمایش دهیم.

کد زیر را در فایل index.php پیدا کنید:

<div class="opinion">
    <h3><?php echo $S_name; ?> : </h3><hr>
    <textarea><?php echo $S_opinion; ?></textarea>
</div>

این کد را پاک کنید و کد زیر را قرار دهید:

<?php
    $select="SELECT * FROM `opinions`";
        $run=mysqli_query($con,"SET NAME utf8");
        $run=mysqli_query($con,"SET CHARACTER SET utf8");
        $run=mysqli_query($con,$select);
            while($row=mysqli_fetch_array($run)){
                $S_name    = $row['name'];
                $S_opinion = $row['opinion'];
?>
    <div class="opinion">
        <h3><?php echo $S_name; ?> : </h3><hr>
        <textarea><?php echo $S_opinion; ?></textarea>
    </div>
<?php
            }
?>

حالا نظرات موجود در جدول داخل دیتابیس هم در سایت نمایش داده می‌شوند.

در ادامه‌ی مراحل ساخت بخش نظرات یا کامنت در PHP باید به استایل دادن به صفحه بپردازیم.

ساخت فایل style.css و استایل دادن به صفحه

یک فایل CSS با اسم style بسازید و کدهای زیر را در آن قرار دهید:

body{
    margin: 150px;
}
.form{
    background: #deeeffa6;
    padding: 17px;
    width: 320px;
    border-radius: 3px;
}
.form input,
.form textarea{
    width: 300px;
    margin: 5px;
    padding: 5px;
    display: inline-block;
    font-size: 17px;
    border: 0;
    border-bottom: 1px solid;
    border-radius: 3px;
    outline: none;
    font-family: tahoma;
    resize: vertical;
}
.form textarea{
    min-height: 50px;
    max-height: 200px;
}
.opinions{
    margin: 30px;
}
.opinion{
    width: 400px;
    background: #f1f2f3;
    padding: 20px;
    margin: 5px;
}
.opinion h3{
    margin: 0;
}
.opinion textarea{
    width: 100%;
    min-height: 100px;
    padding: 3px;
    outline: none;
    border: none;
    background: #f3f4ff;
    resize: none;
}

شما می‌توانید این کدها را به استایل دلخواه خود تغییر دهید.

حالا باید فایل style را به فایل index متصل کنیم، پس کد زیر را در فایل index قرار دهید:

<link rel="stylesheet" href="style.css">

کدنهایی فایل index.php

تمام کدهای فایل index.php را می‌توانید در زیر مشاهده کنید:

<?php
    include('db.php');
?>
<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="style.css">
    <title>ارسال نظر</title>
</head>
<body dir="rtl">
<center>
    <h2 style="margin: 0px;">ارسال نظر</h2>
    <hr style="width: 200px;">
    <div class="form">
        <form method="post">
            <input type="text" name="name" placeholder="نامـ"><br>
            <input type="email" name="email" placeholder="ایمیلـ"><br>
            <textarea name="text" placeholder="نظر"></textarea><br>
            <input type="submit" name="submit" value="ارسال"><br>
        </form>
        <?php
            if(isset($_POST['submit'])){
                $name  = $_POST['name'];
                $email = $_POST['email'];
                $text  = $_POST['text'];
                    if(empty($name)){
                        echo "نام خود را وارد کنید";
                    }elseif(empty($email)){
                        echo "ایمیل خود را وارد کنید";
                    }elseif(empty($text)){
                        echo "نظر خود را وارد کنید";
                    }elseif(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)){
                        echo "ایمیل صحیح نیست";
                    }else{
                        $insert = "INSERT INTO opinions (name , email , opinion)
                        VALUES (N'$name' , N'$email' , N'$text')";
                            $insert_s = mysqli_query($con,$insert);
                                if($insert_s){
                                    echo "نظر شما با موفقیت ثبت شد";
                                }else{
                                    echo "به مشکل برخوردیم...";
                                }
                    }
            }
        ?>
    </div>
</center>
    <h2>نظرات</h2><hr>
    <div class="opinions">
        <?php
            $select="SELECT * FROM `opinions`";
                $run=mysqli_query($con,"SET NAME utf8");
                $run=mysqli_query($con,"SET CHARACTER SET utf8");
                $run=mysqli_query($con,$select);
                    while($row=mysqli_fetch_array($run)){
                        $S_name    = $row['name'];
                        $S_opinion = $row['opinion'];
        ?>
            <div class="opinion">
                <h3><?php echo $S_name; ?> : </h3><hr>
                <textarea><?php echo $S_opinion; ?></textarea>
            </div>
        <?php
                    }
        ?>
    </div>
    
</body>
</html>

امیدوارم از آموزش ساخت سیستم نظردهی با PHP نهایت استفاده را برده باشید.

نویسنده شوید
دیدگاه‌های شما (14 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

phantom
30 شهریور 1402
اقا من تست زدم هر چی گفتیم انجام دادم ولی داخل دیتا بیس نمیاد چیکار کنم نه داخل سایت نشون میده و نه داخل دیتا بیس

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

dev man
24 آذر 1401
در واقع این به درد کی میخوره ؟ 1 - تایید توسط مدیر نداره 2 - هکر گرامی وارد قسنت نظرات سایت ما میشه بعدش توی قسمت نظرات یه لاگین پنل میاد توی کامنت هکر میاد که یه بدبختی میاد تو اون لاگین میکنه اظلاعتش میره

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

meysam
14 تیر 1401
سلام وقت بخیر خدمت شما ممنون از پست خوبتون، بعضی از دوستان اگه مشکل من رو داشتم بابت هربار رفرش صفحه و ثبت شدن کامنت داخل دیتابیس میتونن از کد زیر استفاده کنند. کد رو انتهای فایل های اسکریپت خودتون قرار بدید تا مشکل حل بشه.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

mahya
14 تیر 1401
سلام، من یه سوال داشتم اون N در بخش insert چه کار میکنه?

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Zazar
25 خرداد 1401
با سلام.من این کد رو در انتهای سایتم قرار دادم و زمانیکه submit انجام میشه به ابتدای سایت اتقال داده میشم و باید هر بار صفحه رو اسکرول کنم.میه لطفا راهنمایی بفرمایید که چطور میشه در همون قسمت کامنت کاربر پیام هاش رو ببینه و هر بار نخواد اسکرول کنه؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

amirhossein
21 اردیبهشت 1401
دمتون گرم واقعا عالی بودش این کد شما باعث شد که من سایتی که دارم میزنم رو تموم کنم.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
22 اردیبهشت 1401
خیلی خوشحالیم که براتون مفید بوده. همیشه موفق باشید

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

قاسم
16 بهمن 1400
سلام، من یه سوال داشتم اون N در بخش insert چه کار میکنه. و دیگه اینکه اگه با اینطور دستور Select پیش بریم که همه نظرهای موجود رو نشان میده، باید نظر مربوط به هر پست زیر خودش نمایش داده بشه که از طریق آیدی این کار ممکنه. ممنون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

amircybery
14 بهمن 1400
سلام چرا میشه پیام های ارسال شده را تغییر داد؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

حسین
11 دی 1400
با سلام و وقت به خیر خیلی خوب و عالی بود فقط با هر بار رفرش کردن صفحه آخرین نظری که نوشته شده بود دوباره ثبت میشه میتونید آموزش رو کامل کنید و این ایراد رو بر طرف کنید با تشکر

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

رسول
29 مهر 1400
دمتون گرم خیلی عالی بود

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

john lake
24 شهریور 1400
حالا چجوری تو وب بازش کنیم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

john lake
24 شهریور 1400
عالی بود ولی چگونه این فایل را اجرا کنیم پیوندش html نیست که؟!

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

مهدیه اشرفی
03 آبان 1400
با استفاده از xampp باید توی localhost اجرا بشه. چون این فایل شامل کد های بک اند که با استفاده از php نوشته شدن ، هست و بدون xampp و بدون هاست واقعی قابل اجرا نیست

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

codezila
22 خرداد 1400
دمتون گرم واسه تازه کارها خیلی عالی است

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

وحید مقدم
27 اردیبهشت 1400
بسیار عالی و ساده توضیح دادید. ممنونم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.