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

طراحی و نمایش سبد خرید با استفاده از PHP و بانک اطلاعاتی

در این بخش، یاد می‌گیرید که چگونه یک سبد خرید ساده اما کاربردی را با استفاده از PHP و بانک اطلاعاتی طراحی کنید. سبد خرید مهم‌ترین بخش فروشگاه اینترنتی است که کاربران می‌توانند محصولات مورد نظر خود را در آن ذخیره کرده و مدیریت کنند.

برای شروع، باید یک جدول در بانک اطلاعاتی ایجاد کنید که داده‌های سبد خرید را ذخیره کند. این جدول معمولاً شامل فیلدهای زیر است:

  • id: یک شماره منحصربه‌فرد برای هر رکورد (کلید اصلی و خودکار)
  • user_id: آیدی کاربری که سبد خرید به او تعلق دارد (اگر کاربر وارد شده باشد)
  • session_id: یک شناسه جلسه (session) برای کاربران مهمان (کسانی که وارد نشده‌اند)
  • product_id: آیدی محصولی که به سبد خرید اضافه شده
  • quantity: تعداد محصول انتخابی

کد SQL برای ایجاد این جدول به صورت زیر است:

CREATE TABLE cart (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT DEFAULT NULL,
    session_id VARCHAR(255) NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL DEFAULT 1,
    FOREIGN KEY (product_id) REFERENCES products(id)
);

حالا نوبت به بخش PHP می‌رسد. برای نمایش سبد خرید، ابتدا باید داده‌های کاربر را تشخیص دهید. اگر کاربر وارد سیستم شده است، از user_id استفاده کنید و اگر مهمان است، از session_id که با session_start() ایجاد می‌شود.

کد زیر نحوه اتصال به بانک اطلاعاتی و دریافت آیتم‌های سبد خرید را نشان می‌دهد:

session_start();
include 'db.php'; // فایل اتصال به بانک اطلاعاتی

$user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null;
$session_id = session_id();

if ($user_id) {
    $query = "SELECT c.*, p.name, p.price, p.image FROM cart c JOIN products p ON c.product_id = p.id WHERE c.user_id = '$user_id'";
} else {
    $query = "SELECT c.*, p.name, p.price, p.image FROM cart c JOIN products p ON c.product_id = p.id WHERE c.session_id = '$session_id'";
}

$result = mysqli_query($connection, $query);

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

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

echo '<table border="1">';
echo '<tr><th>تصویر</th><th>نام محصول</th><th>قیمت</th><th>تعداد</th><th>مجموع</th><th>عملیات</th></tr>';

$total_price = 0;
while ($row = mysqli_fetch_assoc($result)) {
    $subtotal = $row['price'] * $row['quantity'];
    $total_price += $subtotal;
    echo '<tr>';
    echo '<td><img src="' . $row['image'] . '" width="50"></td>';
    echo '<td>' . $row['name'] . '</td>';
    echo '<td>' . $row['price'] . ' تومان</td>';
    echo '<td>' . $row['quantity'] . '</td>';
    echo '<td>' . $subtotal . ' تومان</td>';
    echo '<td><a href="remove_from_cart.php?id=' . $row['id'] . '">حذف</a></td>';
    echo '</tr>';
}
echo '<tr><td colspan="4">مجموع کل</td><td>' . $total_price . ' تومان</td></tr>';
echo '</table>';

توجه کنید که برای دکمه "حذف" به یک فایل جداگانه به نام remove_from_cart.php نیاز دارید که با دریافت آیدی رکورد، آن را از جدول حذف کند. کد نمونه برای این فایل:

session_start();
include 'db.php';

$id = $_GET['id'];
$query = "DELETE FROM cart WHERE id = $id";
mysqli_query($connection, $query);
header('Location: cart.php'); // بازگشت به صفحه سبد خرید

همچنین می‌توانید یک فرم برای به‌روزرسانی تعداد محصولات اضافه کنید. مثلاً فیلدهای متنی با قابلیت ویرایش که کاربر بتواند تعداد را تغییر دهد و با دکمه "به‌روزرسانی" آن را ذخیره کند. برای این کار، یک حلقه for درست کنید و هر ردیف را با یک فرم جداگانه یا یک فرم کلی ارسال کنید.

نکته مهم: همیشه داده‌های ورودی کاربر را اعتبارسنجی کنید تا از حملات SQL Injection جلوگیری شود. برای مثال، از mysqli_real_escape_string() استفاده کنید یا از Prepared Statements بهره ببرید.

پرسش و پاسخ این درس

برای ثبت پرسش ابتدا در سایت وارد شوید.

  • 1
  • 2
  • 3