ساخت سیستم لایک و دیسلایک

ساخت سیستم لایک و دیسلایک با PHP

ساخت سیستم لایک و دیسلایک با PHP

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

بخش اول: طراحی پایگاه داده

اولین قدم در ساخت سیستم لایک و دیسلایک، طراحی پایگاه داده است. برای این منظور، یک جدول به نام ‘likes’ ایجاد می‌کنیم که شامل فیلدهای زیر باشد:

  • id: شناسه یکتای هر لایک/دیسلایک (کلید اصلی، خودافزون)
  • post_id: شناسه محتوایی که لایک یا دیسلایک شده است.
  • user_id: شناسه کاربری که لایک یا دیسلایک را ثبت کرده است. (در صورت وجود سیستم کاربری)
  • like: مقدار لایک (1 برای لایک، -1 برای دیسلایک)
  • created_at: زمان ثبت لایک/دیسلایک

ساختار جدول ‘likes’ در MySQL به صورت زیر خواهد بود:

CREATE TABLE likes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    post_id INT NOT NULL,
    user_id INT NULL,
    like INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

توجه داشته باشید که فیلد ‘user_id’ می‌تواند NULL باشد اگر سیستم شما نیاز به ثبت لایک/دیسلایک توسط کاربران غیرثبت‌نام‌شده داشته باشد.

بخش دوم: پیاده‌سازی PHP

در این بخش، کد PHP لازم برای پیاده‌سازی سیستم لایک و دیسلایک را بررسی می‌کنیم. این کد شامل توابعی برای ثبت لایک/دیسلایک، دریافت تعداد لایک‌ها و دیسلایک‌ها، و نمایش آن‌ها خواهد بود.

1. اتصال به پایگاه داده

ابتدا باید به پایگاه داده متصل شویم. برای این منظور، از کد زیر استفاده می‌کنیم:

connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

اطلاعات اتصال به پایگاه داده (servername، username، password، dbname) را با مقادیر مناسب جایگزین کنید.

2. تابع ثبت لایک/دیسلایک

تابع زیر برای ثبت لایک یا دیسلایک در پایگاه داده استفاده می‌شود:

real_escape_string($post_id);
    $user_id = $conn->real_escape_string($user_id);
    $like = $conn->real_escape_string($like);

    $sql = "INSERT INTO likes (post_id, user_id, like) VALUES ('$post_id', '$user_id', '$like')";

    if ($conn->query($sql) === TRUE) {
        return true;
    } else {
        return false;
    }
}
?>

این تابع سه پارامتر می‌گیرد: شناسه محتوا (post_id)، شناسه کاربر (user_id) و مقدار لایک (like). مقدار ‘like’ می‌تواند 1 (برای لایک) یا -1 (برای دیسلایک) باشد. تابع از `real_escape_string` برای جلوگیری از حملات SQL Injection استفاده می‌کند.

3. تابع دریافت تعداد لایک‌ها و دیسلایک‌ها

تابع زیر برای دریافت تعداد لایک‌ها و دیسلایک‌های یک محتوا استفاده می‌شود:

real_escape_string($post_id);

    $sql = "SELECT SUM(CASE WHEN like = 1 THEN 1 ELSE 0 END) AS likes,
            SUM(CASE WHEN like = -1 THEN 1 ELSE 0 END) AS dislikes
            FROM likes WHERE post_id = '$post_id'";

    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        return array('likes' => $row['likes'], 'dislikes' => $row['dislikes']);
    } else {
        return array('likes' => 0, 'dislikes' => 0);
    }
}
?>

این تابع شناسه محتوا (post_id) را به عنوان پارامتر می‌گیرد و تعداد لایک‌ها و دیسلایک‌ها را به صورت یک آرایه برمی‌گرداند.

4. تابع بررسی وجود لایک/دیسلایک قبلی

برای جلوگیری از ثبت چندباره لایک یا دیسلایک توسط یک کاربر، باید بررسی کنیم که آیا کاربر قبلاً لایک یا دیسلایک را ثبت کرده است یا خیر. تابع زیر این کار را انجام می‌دهد:

real_escape_string($post_id);
    $user_id = $conn->real_escape_string($user_id);

    $sql = "SELECT id FROM likes WHERE post_id = '$post_id' AND user_id = '$user_id'";

    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        return true;
    } else {
        return false;
    }
}
?>

5. تابع حذف لایک/دیسلایک قبلی

اگر کاربر قبلاً لایک یا دیسلایک را ثبت کرده باشد و بخواهد آن را حذف کند، از تابع زیر استفاده می‌کنیم:

real_escape_string($post_id);
    $user_id = $conn->real_escape_string($user_id);

    $sql = "DELETE FROM likes WHERE post_id = '$post_id' AND user_id = '$user_id'";

    if ($conn->query($sql) === TRUE) {
        return true;
    } else {
        return false;
    }
}
?>

بخش سوم: رابط کاربری

در این بخش، نحوه نمایش لایک‌ها و دیسلایک‌ها در رابط کاربری را بررسی می‌کنیم. فرض کنید شناسه محتوا (post_id) را در متغیر `$post_id` داریم و شناسه کاربر (user_id) را در متغیر `$user_id`.



    
        
        
    
        
        
    


<?php
// پردازش فرم
if (isset($_POST['like'])) {
    registerLikeDislike($post_id, $user_id, 1);
    echo "location.reload();";
} elseif (isset($_POST['dislike'])) {
    registerLikeDislike($post_id, $user_id, -1);
    echo "location.reload();";
} elseif (isset($_POST['remove_like'])) {
    removeLikeDislike($post_id, $user_id);
    echo "location.reload();";
} elseif (isset($_POST['remove_dislike'])) {
    removeLikeDislike($post_id, $user_id);
    echo "location.reload();";
}
?>

این کد یک فرم ساده ایجاد می‌کند که به کاربران امکان می‌دهد لایک یا دیسلایک را ثبت کنند یا لایک/دیسلایک قبلی خود را حذف کنند. پس از ثبت لایک/دیسلایک، صفحه رفرش می‌شود تا تعداد جدید لایک‌ها و دیسلایک‌ها نمایش داده شود.

بخش چهارم: نکات تکمیلی

در این بخش، چند نکته تکمیلی برای بهبود سیستم لایک و دیسلایک ارائه می‌شود:

  • استفاده از AJAX: برای جلوگیری از رفرش صفحه پس از ثبت لایک/دیسلایک، می‌توانید از AJAX استفاده کنید.
  • پیاده‌سازی سیستم کاربری: اگر سیستم شما دارای سیستم کاربری است، حتماً از شناسه کاربر (user_id) برای ثبت لایک/دیسلایک استفاده کنید.
  • جلوگیری از حملات SQL Injection: حتماً از توابع `real_escape_string` یا prepared statements برای جلوگیری از حملات SQL Injection استفاده کنید.
  • بهینه‌سازی پایگاه داده: برای بهبود عملکرد سیستم، می‌توانید از ایندکس‌ها در جدول ‘likes’ استفاده کنید.
  • طراحی رابط کاربری جذاب: رابط کاربری سیستم لایک و دیسلایک را به گونه‌ای طراحی کنید که برای کاربران جذاب و کاربرپسند باشد.

با پیاده‌سازی این نکات، می‌توانید یک سیستم لایک و دیسلایک کارآمد و امن ایجاد کنید که به کاربران امکان می‌دهد نظرات خود را در مورد محتواهای مختلف به راحتی بیان کنند.