PDA

View Full Version : سوال: مشکل این کد چیه ؟(session)



.fatemeh
شنبه 17 تیر 1391, 09:49 صبح
سلام.
اول توضیح بدم:
فرض کنید محصولی به نام f وجود داره کاربر برای بار اول این محصول رو می خره.
برای بار دوم هم همین محصول رو می خره ولی با رنگ و جزییات متفاوت از خرید اولش.
یعنی خرید اول ودوم فرق داره.
من برای اینکه خریدهارو ثبت کنم،اومدم سشن f رو تعریف کردم.برای هر بار خرید هم یه عدد تصادفی
به نام id_ch تولید میشه که سشن ها منطبق نشن. که توی foreach همون d$ می شه.
حالا اگه کاربر n بار محصول f رو خرید کنه n-1 بار توی دیتابیس ذخیره می شه.
اینم کد:

if(isset($_SESSION['f']) && count($_SESSION['f'])!=0)
{for($j=0;$j<=count($_SESSION['f'])+1;$j++){$r=insertdata(f,$rah);}}

function insertdata($k,$rah){
date_default_timezone_set('Asia/Tehran');
$day_number = jdate('d');
$month_number = jdate('m');
$year_number = jdate('y');
$time='13'.$year_number."/".$month_number."/".$day_number;

if(isset($_SESSION[$k]) && count($_SESSION[$k]!=0)){
foreach($_SESSION[$k] as $d=>$b)
{
$t=$_SESSION[$k][$d][0];
$id=$_SESSION[$k][$d][1];
$size=$_SESSION[$k][$d][2];
$num=$_SESSION[$k][$d][3];
$color=$_SESSION[$k][$d][4];
$ch=$_SESSION[$k][$d][5];

$q=ثبت در دیتابیس;
if($q){unset($_SESSION[$k][$d]);return(1);}
else {return(0);}
}}//end of for & if
}



تازه اگر اونfor($j=0;$j<=count($_SESSION['f'])+1;$j++) رو در فراخوانی تابع
بردارم فقط یه بار عملیات ثبت انجام می شه.
نمی دونم مشکلش چیه .
به نظرم foreach باید تاانتها عملیات رو انجام بده دیگه!!:متفکر:
دوستان ممنون می شم کمک کنید.
خودم دیگه گیج شدم.

facefeed
شنبه 17 تیر 1391, 11:14 صبح
میشه بفرمایید در $_SESSION[$k] as $d=>$b متغیر $_SESSION[$k] اطلاعاتش چیه؟!

.fatemeh
شنبه 17 تیر 1391, 11:50 صبح
من فقط یه محصول f رو ندارم که
ده تا محصوله.البته 10 تا فرمه!
برای هر فرم اسمی انتخاب کردم که با نام فرم تابع فراخوانی می شه.
مثلا $r=insertdata(s,$rah)
k$ اسم هر سشن هست که ورودی تابع محسوب میشه.
d$ هم عدد تصادفی بود دیگه.
برای اینکه فرم هایی که نام یکسان دارن ولی اطلاعاتشون یکی نیست منطبق نشن
(یه آرایه انجمنی)

alihoseini
شنبه 17 تیر 1391, 12:16 عصر
سلام
اول اینکه تابع زیر رو یک بار در کد اجرا کنید دیگه نیاز به اجرای مجدد اون ندارید و نباید تو تابع باشه
date_default_timezone_set('Asia/Tehran');
دوم اینکه چون در حلقه return گذاشتید فقط یکبار اجرا میشه و مثلا بعد اضافه کردن اولین کالا از تابع خارج میشه

.fatemeh
شنبه 17 تیر 1391, 12:27 عصر
اول از هردو راهنمایی تون ممنون
دوم من اون دستور return رو لازم دارم.باید بدونم درست بوده یا نه.
چه طوری هم return داشته باشه هم کدها درست جواب بده؟

alihoseini
شنبه 17 تیر 1391, 13:05 عصر
برای این کار راه زیادی وجود داره
مثلا یک آرایه ساخته بشه و به عنوان نتیجه در نظر گرفته بشه یا یک متغیر اول تابع با مقدار true داشته باشید و بعد اگر مشکل در اضافه کردن بود مقدار اون رو به false تغییر بدید و به عنوان نتیجه در نظر بگیرید و ....

plague
شنبه 17 تیر 1391, 13:18 عصر
من زیاد دقت نکردم به کدتون ولی روشتون درستی نیست و بیش از حد پیچیدش کردین
شما نیازی ندارید که عدد تصادفی تولید کنید
در ضمن تولید عدد تصادفی میتونه تکراری باشه چون یکتا نیستن و کل کارو خراب کنه

برای سبد خرید از آرایه دو بعدی سشنی استفاده میکنن
و هر خریدرو توی یک سطر میزارن اینجوری خرید ها با هم قاطی نمیشن


$_SESSION['cart'][] = array("item" => 'کیف',"amount" => 1);