shopping cart

PHP

توسط maynoush در 4 سال پیش
0 1.3k 7 4 سال پیش
maynoushrockstarstackoverflow
0

سلام دوستان من کد زیرو از یه کتاب گرفتم.واسه قسمت نمایشه shopping cart هست.کسی میتونه یه توضیح کامل راجع به این به من بده. با انتخاب محصول و زدن دکمه Add to cart جزییات این کد باید اجرا و نمایش داده بشه. $new چیه؟ $_SESSION['cart'][$new]چطور؟

<?php
    session_start();
    $new = $_GET['new'];
    if($new){
        if(!isset($_SESSION['cart'])){
            $_SESSION['cart'] = array();
            $_SESSION['items'] = 0;
            $_SESSION['total_price'] = '0.00';
        }
        if(isset($_SESSION['cart'][$new])){
            $_SESSION['cart'][$new]++;
        }else{
            $_SESSION['cart'][$new] = 1;
        }
        $_SESSION['total_price'] = calculate_price($_SESSION['cart']);
        $_SESSION['items'] = calculate_items($_SESSION['cart']);
    }
    if(isset($_POST['save'])){
        foreach($_SESSION['cart'] as $isbn => $qty){
            if($_POST['$isbn'] == '0'){
                unset($_SESSION['cart'][$isbn]);
            }else{
                $_SESSION['cart']['$isbn'] = $_POST['$isbn'];
            }
        }
        $_SESSION['total_price'] = calculate_price($_SESSION['cart']);
        $_SESSION['items'] = calculate_items($_SESSION['cart']);
    }
    
?>
<?php include("includes/header.php"); ?>
<div class="shopping-cart">
<h2>Your Shopping Cart</h2>
    <?php
        if(($_SESSION['cart']) && (array_count_values($_SESSION['cart']))){
        display_cart($_SESSION['cart']);
    }else{
        echo "<p>There are no items in your cart.</p>";
    }
    $target = "index.php";
    if($new){
        $details = get_book_details($new);
        if($details['catid']){
            $target = "show_cat.php?catid=" .$details['catid'];
        }
    }
?>
</div>

مرسی

0

$new متغییری هست که مقدار$_GET['new'] رو با استفاده از متد Get دریافت میکنه که احتمالا از url محصول با استفاده از Get دریافت میشه این مقدار.... برای بخش دوم سوال اگه دقت کنید ابتدا سشن cart یعنی :$_SESSION['cart'] = array();به صورت آرایه تعریف شده است و $_SESSION['cart'][$new] یکی از اعضای آرایه هست که فراخوانی شده و...

0

بله new تو url باید کد محصولو نشون بده.ولی من هیچ مقداری براش ندارم. برای سشن cart هم undefined index میده؟! هیچکدوم از if ها هم اجرا نمیشن و فقط No item in your cart چاپ میشه؟اصلا انگار آرایه هیچ مقداری نمیگیره

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

دلیلش واسه اینکه ++ شده یا برابر 1 شده چیه؟

0

دلیل ++ شدن و یا 1 شدن رو نیمتونم دقیق بگم ولی احتمالا در بخش بعد یعنی در توابع calculate_price و calculate_items مورد نیاز باشه... اما برای کار نکردن کد و No item in your cart دادن به نظر من منطق برنامه مشکل داره چون شما در بالای کد مقدار new رو با get دریافت میکنی ولی به داخل آرایه ی سشن cart منتقل نمیشه یعنی مقدار new یا کد محصول رو باید به کلید $new در آرایه cart قرار بدین تا در مرحله بعد isset($_SESSION['cart'][$new] موجود باشه و عمل ++ انجام بشه و یک نکته دیگه هم هست در بخش زیر

if(isset($_POST['save'])){ 
        foreach($_SESSION['cart'] as $isbn => $qty){ 
            if($_POST['$isbn'] == '0'){ 
                unset($_SESSION['cart'][$isbn]); 
            }else{ 
                $_SESSION['cart']['$isbn'] = $_POST['$isbn']; 
            } 
        }

,وقتی کد به این قسمت میرسه سشن cart توسط foreach ه unset میشه و در پایان یعنی این قسمت:

if(($_SESSION['cart']) && (array_count_values($_SESSION['cart']))){ 
        display_cart($_SESSION['cart']); 
    }else{ 
        echo "<p>There are no items in your cart.</p>"; 
    }

چون سشن cart موجود نیست با پیغام: There are no items in your cart. روبرو میشید...امیدوارم درست گفته باشم:smile26:

0

سلام وقتی کد رو اماده از جایی دیگه بردارید از این مشکلات پیش میاد. undefined index بخاطر اینه که تو url کلید new نداری card.php?new=hdd ++ شدن واسه اینه که از هر محصل چند تا کاربر میخواد مثلا اگر card.php?new=hdd دو بار وارد بشه یعنی از hdd دو تا میخواد در غیر اینصورت هم یکی چون یه بار زده.

0

> مقدار new یا کد محصول رو باید به کلید $new در آرایه cart قرار بدین تا در مرحله بعد isset($_SESSION['cart'][$new] موجود باشه و عمل ++ انجام بشه
یعنی همون طوری که cart رو تو آرایه گذاشتیم new رو هم تو آرایه تعریف کنم؟
0

> یعنی همون طوری که cart رو تو آرایه گذاشتیم new رو هم تو آرایه تعریف کنم؟
اول اینکه فرمایش دوستمون Stack OverFlow رو هم مد نظر قرار بدین چون اگر new از url دریافت نشه بازم به نتیجه نمیرسید. الان همونطور که گفتم آرایه $_SESSION['cart'] بدون عضو هست کاملترش اینه که: از $_SESSION['cart'][$new] معلوم میشه که این آرایه از نوع dictionary array هست و برای هر value تو این آرایه یک key هم قرار داده میشه در اینجا key آرایه $new هست و مقدارش باید $_GET['new'] باشه... برای اطلاع بیشتر از نوع اینگونه آرایه ها به لینک روبرو برین: [dictionary Array](http://php.net/manual/en/language.types.array.php)
0

> فکر میکنم به عنوان یه مبتدی که تا حالا با php کار نکرده و حالا خودش آستینارو زده بالا که اینارو یاد بگیره اشکالی نداشته باشه.
نه اشتباه نکنید! من قصدم دلسرد کردن شما نبود علت رو گفتم وقتی آدم کد رو از جای دیگه برمیداره(خودش نمینویسه) چون نمیدونه چه اتفاقی افتاده این مشکلات پیش میان.

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید