چگونه در php سبد خرید بسازیم؟

درس بعدی ||||| درس قبلی

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

اطلاعات جدول shopping

همانطوریکه مشاهده می شود لیست محصولات شامل کد محصول، نام محصول و قیمت محصول می باشد. قصد داریم صفحه وبی بسازیم که محصولات را در یک جدول نمایش دهد و یک ستون اضافی در جدول برای سفارش محصول در نظر بگیرد. برای این منظور کد صفحه وب sh.php به صورت زیر نوشته می شود:

<body>
    <div align="center">
        <table border="1">
            <tr>
                <th>Username</th>
                <th>Password</th>
                <th>Role</th>
                <th>Add to Cart</th>
            </tr>

<?php
    $db=mysqli_connect("127.0.0.1","root","","usrs");
    if(!$db){
        echo mysqli_error($db);
    }else{
        echo "connect";
    }
    $query="SELECT * FROM `shopping`" ;

    $r=mysqli_query($db,$query);

    if($r)
    {
       $num = mysqli_num_rows($r);
           echo $num;
        for($i=0;$i<$num;$i++)
        {
               $row=mysqli_fetch_row($r);
               echo "<tr>";
               echo "<td>".$row[0]."</td>";
               echo "<td>".$row[1]."</td>";
               echo "<td>".$row[2]."</td>";
               echo "<td><a href='add2cart.php?card=".$row[1]."'>add</a></td>";
               
               echo "</tr>";
        }
    }
 ?>

   </table>
    </div>
</body>

خروجی این صفحه به صورت زیر است:

خروجی صفحه وب sh.php

در کد فوق مطلبی که مهم است لینک موجود برای هر کالا در ستون Add to Cart است. این لینک به همراه انتقال به صفحه add2cart.php به کمک متد GET نام هر آیتم را نیز ارسال می کند. کد به صورت زیر آمده است:

echo "<td><a href='add2cart.php?card=".$row[1]."'>add</a></td>";

پس از کلیک بر روی دکمه add در هریک از محصولات به صفحه add2cart.php منتقل می شویم. ابتدا محصول درخواست شده در متغیر new قرار می گیرد.

$new=$_GET['card'];

سپس بررسی می شود نشست card قبلا ایجاد شده یا نه. اگر ایجاد نشده بود ایجاد می شود. نشست card آرایه است و شامل تعداد ، قیمت و نام محصول است. یک نشست دیگر نیز در نظر گرفته می شود که شامل جمع کل سفارشات است.

if(!isset($_SESSION['card'])){
        $_SESSION['card']=array();
        
        $_SESSION['total_price']='0.00';
    }

اگر محصول انتخاب شده قبلا در سبد بود یکی به آن اضافه می شود و در غیر اینصورت مقدار آن یک می شود.

if(isset($_SESSION['card'][$new])){
        $_SESSION['card'][$new]++;
    }
    else{
        $_SESSION['card'][$new]=1;
    }

در انتها باید مجموع قیمت ها را محاسبه کرد. برای این منظور از تابع calculate_price استفاده می شود. کد کامل صفحه add2cart.php بصورت زیر است:

<?php
include('f.php');
session_start();

    $new=$_GET['card'];
    //echo $new;
    if(!isset($_SESSION['card'])){
        $_SESSION['card']=array();
        
        $_SESSION['total_price']='0.00';
    }
    
    if(isset($_SESSION['card'][$new])){
        $_SESSION['card'][$new]++;
    }
    else{
        $_SESSION['card'][$new]=1;
    }
    $_SESSION['price']=calculate_price($_SESSION['card']);
    echo "total price is: ".$_SESSION['price'];

?>

تابع ()calculate_price در فایل f.php‌قرار دارد. کد فایل f.php بصورت زیر است.

<?php
function calculate_price($card){
    $price=0;
    $db=mysqli_connect("127.0.0.1","root","","usrs");
    if(!$db){
        echo mysqli_error($db);
    }else{
        //echo "connect";
    }
    foreach($card as $name=>$qty){
        echo $name." ".$qty;
        $query="SELECT price FROM `shopping` where product_name='$name'" ;
        $r=mysqli_query($db,$query);
        if($r){
            $item=$row=mysqli_fetch_row($r);
            $item_price=$item[0];
            $price+=$item_price*$qty;
            //echo $price;
        }
        echo  "<br>";
    }
    return $price;
}
?>

همانطوریکه مشاهده می شود لیست قیمت ها و تعداد ضرب می شوند و متغیر price بعنوان خروجی تابع می باشد.

$price+=$item_price*$qty;

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

خروجی سبد خرید