shopping cart
#1
Note 
سلام
دوستان من کد زیرو از یه کتاب گرفتم.واسه قسمت نمایشه shopping cart هست.کسی میتونه یه توضیح کامل راجع به این به من بده.
با انتخاب محصول و زدن دکمه Add to cart جزییات این کد باید اجرا و نمایش داده بشه.
$new چیه؟ $_SESSION['cart'][$new]چطور؟
کد php:
<?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> 
مرسی

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

توتال دیزاین
مرجع تخصصی طراحی وب سایت ، وب اپلیکیشن و سیستم های مدیریت همایش, ویندوز اپلیکیشن
و هر آنچه شما بخواهید...
پاسخ
#3
Note 
بله new تو url باید کد محصولو نشون بده.ولی من هیچ مقداری براش ندارم.
برای سشن cart هم undefined index میده؟!
هیچکدوم از if ها هم اجرا نمیشن و فقط No item in your cart چاپ میشه؟اصلا انگار آرایه هیچ مقداری نمیگیره
کد php:
if(isset($_SESSION['cart'][$new])){
            
$_SESSION['cart'][$new]++;
        }else{
            
$_SESSION['cart'][$new] = 1;
        } 
دلیلش واسه اینکه ++ شده یا برابر 1 شده چیه؟

پاسخ
#4
Note 
دلیل ++ شدن و یا 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. روبرو میشید...امیدوارم درست گفته باشمConfusedmile26:

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

مردم دنیا 10 دسته هستند: کسانی که باینری میفهمند و کسانی که باینری نمیفهمند !
پاسخ
#6
Note 
نقل قول: مقدار new یا کد محصول رو باید به کلید $new در آرایه cart قرار بدین تا در مرحله بعد isset($_SESSION['cart'][$new] موجود باشه و عمل ++ انجام بشه
یعنی همون طوری که cart رو تو آرایه گذاشتیم new رو هم تو آرایه تعریف کنم؟

پاسخ
#7
Note 
maynoush نوشته است:یعنی همون طوری که cart رو تو آرایه گذاشتیم new رو هم تو آرایه تعریف کنم؟
اول اینکه فرمایش دوستمون Stack OverFlow رو هم مد نظر قرار بدین چون اگر new از url دریافت نشه بازم به نتیجه نمیرسید.
الان همونطور که گفتم آرایه $_SESSION['cart'] بدون عضو هست کاملترش اینه که: از $_SESSION['cart'][$new] معلوم میشه که این آرایه از نوع dictionary array هست و برای هر value تو این آرایه یک key هم قرار داده میشه در اینجا key آرایه $new هست و مقدارش باید $_GET['new'] باشه...
برای اطلاع بیشتر از نوع اینگونه آرایه ها به لینک روبرو برین: dictionary Array

توتال دیزاین
مرجع تخصصی طراحی وب سایت ، وب اپلیکیشن و سیستم های مدیریت همایش, ویندوز اپلیکیشن
و هر آنچه شما بخواهید...
پاسخ
#8
Note 
نقل قول: فکر میکنم به عنوان یه مبتدی که تا حالا با php کار نکرده و حالا خودش آستینارو زده بالا که اینارو یاد بگیره اشکالی نداشته باشه.
نه اشتباه نکنید! من قصدم دلسرد کردن شما نبود علت رو گفتم وقتی آدم کد رو از جای دیگه برمیداره(خودش نمینویسه) چون نمیدونه چه اتفاقی افتاده این مشکلات پیش میان.

مردم دنیا 10 دسته هستند: کسانی که باینری میفهمند و کسانی که باینری نمیفهمند !
پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

کاربرانِ درحال بازدید از این موضوع:   1 مهمان