# زبان های اسکریپتی > PHP >  سبد خرید

## mhd.ghavam

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

در ضمن من php+mysql رو بلدم

مشکلم اینه که اولا نمی دونم روند درست پیاده سازیش چیه؟ من می خوام با session  و دیتابیس اجراش کنم به طوری که اگر کاربر مهمان باشه و سفارش بده در session ذخیره بشه و بعد از این که لاگین کرد یا ثبت نام کرد سفارشش بره تو دیتا بیس  اما با session  ها کمی مشکل دارم نمی دونم اطلاعات رو چطوری توش ذخیره کنم به طور ساده مشکلی نیست اما برای ساخت سبد خرید نمی دونم چیکارش کنم لطفا کمی کمکم کنید و کامل مرسی از لطف همه گی

----------


## ayub_coder

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

----------


## binyaft

ساده ترین حالتش اینه که همه چیز رو داخل سشن ذخیره کنید ، نیازی به پایگاه داده نیست!

----------


## farhadfery

*این کتاب را بخوان. برای شروع نوشتن فروشگاه خوب*
*PHP_AND_MYSQL_WEB_DEVELOPMENT*
Sams
Luke Welling and Laura Thamson

----------


## ghasemweb

اگه ميخواي سبد خريدت اصولي باشه به نظره من هم سيشن عاليه اگه به تايپيك زير يه نيگا بندازي متوجه ميشي

سبد خريد در php

----------


## mhd.ghavam

كاملا ممنون از كمك همگيتون اين چيز هايي كه گفتيد رو من بعضياشو مي دونستم بعضياشم كه خوب گفتيد مطالعه كنم حتما مطالعه مي كنم اما در واقع من يه  جوراييم با آرايه مشكل دارم ميشه كمكم كنيد؟ ببينيد من به شكل زير عمل مي كنم

ببين وقتي كه يك نفر وارد سايت ميشه آدرس IP  اونو تو session مي ريزم 

$_SESSION[$ip]=$ip

بعد هم كه يك چيزي سفارش بده اين كارو مي كنم 

$_SESSION[$ip]['code' ] = $codekala;

اما وقتي كه اين مقدار و مي خوام استفاده كنم اي چاپ كنم فقط حرف اول ذخيره شده چي كار بايد انجام بدم؟

----------


## ghasemweb

شما ميتوني به جاي ارايه از رشته استفاده كني و كد كالا و تعداد و هر مقدار ديگه اي رو تو يه رشته بريزي. اگه با تابع implode و explode اشنا باشي مشكلت حل ميشه .

اگه خواستي يه نمونه ميذارم استفاده كني

----------


## binyaft

نیازی به این کار نیست که شما بیای IP هم ذخیره کنی! 
به صورت زیر عمل کنید ،  نباید مشکلی باشه 
$_SESSION['shop']=$kala;

----------


## mhd.ghavam

> نیازی به این کار نیست که شما بیای IP هم ذخیره کنی! 
> به صورت زیر عمل کنید ، نباید مشکلی باشه 
> $_SESSION['shop']=$kala;


بسیار ممنون از پاسختون اما اگر یک نفر بخواد 5تا کالا رو خرید کنه چطور می تونم کد کالا رو در

----------


## mhd.ghavam

> نیازی به این کار نیست که شما بیای IP هم ذخیره کنی! 
> به صورت زیر عمل کنید ، نباید مشکلی باشه 
> $_SESSION['shop']=$kala;


 
بسیار ممنونم از پاسختون اما اگر یک نفر بخواد 5تا کالا رو سفارش بده چطوری|؟ کد کالاها رو در session ذخیره کنم؟ و چطوری بازیابیش کنم؟

----------


## mhd.ghavam

> شما ميتوني به جاي ارايه از رشته استفاده كني و كد كالا و تعداد و هر مقدار ديگه اي رو تو يه رشته بريزي. اگه با تابع implode و explode اشنا باشي مشكلت حل ميشه .
> 
> اگه خواستي يه نمونه ميذارم استفاده كني


متأسفانه تاحالا با این ها کار نکردم آشنایی زیادیم ندارم میشه کمکم کنید؟

----------


## binyaft

میتونی داخل سشن یک ارایه ایجاد کنی و یا به رشته تبدیل کنی و بعد با explode استفاده کنی 

 برای ارایه 


<?php
 
   $array=array();
   
   $_SESSION['shop']=array_push($array,$kala);


   print_r($array);

?>


برای رشته هم 

<?php
 
 $_SESSION['shop'].=$kala.'|';

 $array=explode('|',$_SESSION['shop']);

 echo $array[0];
 echo $array[1];
  


?>

بنده روش ارایه رو پیشنهاد میکنم

----------


## farhadfery

> *این کتاب را بخوان. برای شروع نوشتن فروشگاه خوب*
> *PHP_AND_MYSQL_WEB_DEVELOPMENT*
> Sams
> Luke Welling and Laura Thamson


اگر  این کتاب را که گفتم می خوندی به جواب خیلی از سوالات می رسیدی. چون یه فروشگاه ساده را پیاده سازی کرده. که برای شروع خوبه. اما حالا نرفتی دنبالش. پس  حداقل به لینک زیر یه سری بزن:
http://www.insanelyart.com/tutorial.php?id=168#

----------


## farhadfery

یه کتاب دیگه هم به شما معرفی کنم. که البته می دونم اکثر افراد آنرا خوانده اند.
Beginning PHP and MySQL E-Commerce
َApress
Cristian Darie and Emilian Balanescu

خوبی این کتاب اینکه شی گرا کار کرده. و 3 لایه را کامل توضیح می ده . برای اینکه اطلاعات بیشتری در مورد این کتاب کسب کنی، یه سری به سایت  Apress بزن. کد کتاب هم از خود سایت می تونی دانلود کنی.

----------


## farhadfery

یه کتاب دیگه هم هست. الان یادم افتاد  نام ببرم.
نام: PHP 5 E-commerce Development
توضیح: Create a flexible framework in PHP for a powerful ecommerce solution
لینک کتاب تو خود سایت packt publishing
https://www.packtpub.com/php-5-e-com...velopment/book

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

----------


## ghasemweb

ببینید شما باید اولش با تابع implode و explode اشنا بشی واسه همین به مثال زیر توجه کن :

<?php
    $c[1]="tehran";
    $c[2]="tabriz";
    $c[3]="zanjan";
    $c[4]="shiraz";
    $str=implode(':',$c);
    echo $str;     // $str="tehran:tabriz:zanjan:shiraz";
    
    $city=explode(':',$str);
    foreach ($city as $value)
        echo '<br>'.$value;

?>

کد رو اجرا کن نتیجه رو مشاهده کن بعدش یه کم روش تفکر کن با این دو تابع میتونی به راحتی تو سیشن یه سبد خرید پیاده کنی مثلا تو سیشن میخوای کد کالا و قیمت و تعداد رو ذخیره کنی باید مثل رشته زیر رو ایجاد کنی:

 $_SESSION['shop']="code1:price1:count1|code2:price2:count2"

هر کالا با کالای دیگه با علامت | از هم جدا میشه و بعدش هم جزئیات هر کالا هم با : که میتونی به دلخواه خودت عوضش کنی.
امیدوارم منظورمو گرفته باشی

----------


## farhadfery

این هم یه کتاب دیگه از نویسنده نام آشنا Larry Ullman. که خودم شخصاً خیلی برای ایشان ارزش و احترام  قائلم.
کتاب جدیدی را ایشان چاپ کرده . که البته متاسفانه شی گرا نیست. اما برای شروع خوبه.
Effortless E-Commerce with PHP and MySQL
Copyright © 2011 by Larry Ullman
Larry Ullman

Find us on the Web at: www.newriders.com

----------


## binyaft

جناب farhadfery ، به نظر بنده اینها کتابهای خوبی هستند ، ی تاپیک جداگانه درست کنید و کتاب ها رو معرفی کنید شاید بدرد بقیه دوستان هم بخوره!

----------


## mhd.ghavam

> ببینید شما باید اولش با تابع implode و explode اشنا بشی واسه همین به مثال زیر توجه کن :
> 
> <?php
>     $c[1]="tehran";
>     $c[2]="tabriz";
>     $c[3]="zanjan";
>     $c[4]="shiraz";
>     $str=implode(':',$c);
>     echo $str;     // $str="tehran:tabriz:zanjan:shiraz";
> ...



سلام دوست گرامی بسیار ممنوم از کمکت من این کارو کردم اما الان به این مشکل برخوردم که وقتی که می خوام سبد خرید رو نشون بدم یک فیلد اضافی هم چاپ میکنه نمی دونم چطوری میشه که اینجور میشه و همچنین برای حذف کالا الان یکمی مشکل دارم کمکم کنید من این کد هارو استفاده کردم

موقعی که کسی سفارشی میده با این کد ذخیره می کنم

$_SESSION['shop'].= "|".$_POST['sefaresh'];


و برای نمایش هم از این کد

<?php
    $codes = explode("|",$_SESSION['shop']);
    echo '<table >';
    foreach($codes as $value)
    {
    	$sql = "select * from kala where codekala='".$value."'";
    	$result  = mysql_query($sql,$con);
    	$row = mysql_fetch_assoc($result);
    	
    	echo "<tr>";
    	echo "<td>";
    	echo $row['namekala'];
    	echo "</td>";
    	
    	echo "<td>";
    	echo $row['price'];
    	echo "</td>";
    	
    	
    	echo "<td>";
    	?>
    	<a href="#" onclick="del(<?php echo $value; ?>)"><img src="include/op/b_drop.png" /></a>
    	  
    	  <?php
    	    	echo "</td>";
    	
    	echo "</tr>";
    	
    	$kol += $row['price'];
    	
    	
    }
    echo "</table>";
    echo "<br />قیمت کل: "; 
    echo $kol;
    
    
    ?>

----------


## ghasemweb

> اما الان به این مشکل برخوردم که وقتی که می خوام سبد خرید رو نشون بدم یک  فیلد اضافی هم چاپ میکنه نمی دونم چطوری میشه که اینجور میشه


این بدین خاطره که شما باید در قسمت اضافه کردن کالای جدید به طرز زیر عمل کنید :
if($_SESSION['shop']=="") 
        $_SESSION['shop']=$_POST['sefaresh'];
    else
        $_SESSION['shop'].= "|".$_POST['sefaresh'];  

دلیلش هم به خاطر علامت | اضافی بود که در سیشن سبد درج میشد مثلا |1|2|3|4|5 که دارای 5 کالا هست ولی باید همیشه جدا کننده یکی کمتر باشه تا درست دربیاد. 




> همچنین برای حذف کالا الان یکمی مشکل دارم کمکم کنید


برای حذف راههای مختلفی هست ولی من این روش رو پیشنهاد میکنم البته اولش تو کد خودتون اصلاح زیر رو انجام بدید :
<a href="#" onclick="del(<?php echo $value; ?>)"><img src="include/op/b_drop.png" /></a>
که به جاش اینو بذار:
<a href="p1.php?do=delete&code=<?php echo $value; ?>"><img src="../images/amar.gif" /></a>
شما به جای p1.php اسم صفحه خودتون که این کد توش هست رو بذار و سپس کد زیر رو بالا صفحه اضافه کن :

<?php

if(!isset($_SESSION))
{
    session_start();
}

if(isset($_GET['do']) && $_GET['do']=='delete' && isset($_GET['code']))
{
    $codes=explode('|',$_SESSION['shop']);
    echo $codes;
    $newShop='';
    $p=0;
        foreach($codes as $value)
        {
            if($value!=$_GET['code'])
            {
                $newShop[$p++]=$value;
            }
        }
    $_SESSION['shop']=implode($newShop,'|');
}
?>

موفق باشید

----------


## ghasemweb

راستی به جای خط آخر کد قبل از آکولاد { کد مریوط به implode هست رو با کد زیر جایگزین کن چون اگر بخوای آخرین کالای سبد رو حذف کنی این خط رو خطا میگیره کد زیر این خطا رو برطرف میکنه:

if($p>0)
            $_SESSION['shop']=implode($newShop,'|');
        else
            $_SESSION['shop']="";

----------

