آموزش ساخت سبد خرید ساده با PHP و mysql

1396/3/26 علیرضا حاتمی نیا 12548

مقدمه

سلام خدمت شما همراهان گرامی وبسایت ilikephp . علیرضا حاتمی نیا هستم با آموزش ویژه امروز تحت عنوان ساخت سبد خرید ساده با php و mysql در خدمت شما هستم. 
سناریو کلی کار به این صورت است که پایگاه داده ای به نام shop در mysql می سازیم و جدولی به نام producs جهت معرفی محصولات نیز موجود است. در صفحه اصلی سایت محصولات در جدولی به کاربر نمایش داده می شود و سپس کاربر می تواند هر محصول را توس دکمه "Add to cart" به سبد خرید اضافه کند. هنگامی که کاربر محصولا را اضافه کرد id محصول همراه لینک به صفحه cart.php ارسال می شود. در صفحه cart.php بررسی می شود که اگر این محصول قبلا به سبد خرید اضافه نشده بود توس session[‘products’] ساخته می شود و مقدار آن برابر 1 می شود. به این معنی که این محصول فقط 1 بار انتخاب شده است. و اگر این محصول قبلا به سبد خرید اضافه شده بود 1 واحد به این مقدار اضافه می شود. سپس از id های درخواست شده به جدول products یک select می زنیم و محصول انتخاب شده با تعداد درخواست شده را به سبد خرید اضافه می کنیم 


1-    ساخت جدول محصولات فروشگاه products : 

در mysql و توسط phpmyadmin جدولی مشابه زیر می سازیم و مقدارهای پیشفرض به آن می دیم. توجه داشته باشید که فیلد id کلید اصلی این جدول است و به صورت auto increament تعیین شده است. 

shopping cart php mysql products table

2-    ساخت صفحه معرفی محصول با نام index.php

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

 

shopping cart php mysql products

<?php
$con = mysqli_connect('localhost','root' , '' , 'shop');
if(mysqli_connect_errno()) {
    echo mysqli_connect_error();
}

$query = "SELECT * FROM `products`";

?>

<!DOCTYPE html>

<html>
<head>
    <title>shop</title>
    <style>
        table th {
            background: black;
            color: white;
            padding: 7px;
        }
        table tr td {
            border: 1px solid green;
            padding: 7px;
        }
    </style>
</head>
<body>
<h1> shop page </h1>
<table>
    <tr>
        <th>name</th>
        <th>description</th>
        <th>price</th>
        <th>Add</th>
    </tr>
    <?php
        if($result = mysqli_query($con , $query)) {
            while ($obj = mysqli_fetch_object($result)) {
                echo
                    '<tr>' .
                     '<td>' . $obj->name . '</td>' .
                     '<td>' . $obj->description . '</td>' .
                     '<td>' . $obj->price . '</td>' .
                     '<td> <a href="cart.php?id='.$obj->id.'">add to cart</a></td>' .
                    '</tr>';
            }
        }
    ?>
</table>
</body>
</html>

سپس در صفحه Cart.php بایستی session[‘products’][$id] را به اضای هر بار کلیک ایجاد و یک مقدار به آن اضافه کنیم. 

if(isset($_GET['id'])){
    $id = $_GET['id'];
    if(isset($_SESSION['products'][$id])) {
        $_SESSION['products'][$id] +=1;
    }
    else {
        $_SESSION['products'][$id] = 1;
    }

}

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

<?php
    if (isset($_SESSION['products'])){
        foreach ($_SESSION['products'] as $id2 => $key) {
            $query = "SELECT * FROM products WHERE id=$id2";
            $result = mysqli_query($con , $query);
            $obj = mysqli_fetch_object($result);
            echo '<tr>' .
                '<td>'.$obj->name.'</td>' .
                '<td>'.$obj->description.'</td>' .
                '<td>'.$obj->price.'</td>' .
                '<td>'.$key.'</td>' .
                '<td><a href="cart.php?deleteId='.$obj->id.'">Delete</a></td>' .
                '</tr>';
        }
    }


    ?>

کنار محصولات اضافه شده به سبد خرید می توانیم دکمه ای جهت حذف محصول از سبد خرید اضافه کنیم. لینک این دکمه هر بار به صفحه Cart.php بر میگردد و پارامتر deleteId را همراه با مقدار id محصول مورد نظر بر می گرداندو محصول مورد نظر را unset می کند. 

if(isset($_GET['deleteId'])) {
    unset($_SESSION['products'][$_GET['deleteId']]);
}
برای خالی کردن سبد خرید هم به شیوه زیر عمل می کنیم 
if(isset($_GET['emptyCart'])) {
    unset($_SESSION['products']);
}