• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
پرسشی در زمینه ی سبد خرید متفاوت
#1
به نام خدا
سلام
تازه دارم پی اچ پی رو تحت یه پروژه که لازمش دارم و می خوام ازش استفاده کنم، یاد می گیرم.
ما یه فروشگاه داریم (ذهنتونو از فروشگاه هایی که دیدید خالی کنید، این یه فروشگاه دیگه ست)؛
این فروشگاه قابل مشاهده برای عموم کاربران نیست و کاربرانی که اطلاعاتشون در دیتابیس هست می تونن وارد شن؛
صفحه ی نخست، فرم ورود داریم و مشترکین از طریق فرم وارد می شن و صفحه ی فروشگاه رو می بینن؛
در این صفحه ما یه navbar داریم که نام مشترک، دسته های کالا، و مشاهده سبدسفارشات و خروج داره. تا این جا من ورود و خروج رو اضافه کردم به اسکریپتم.
از اینجارو دقت فرمایید :
شکل نمایش محصولات ما به این صورته :
[عکس: 104r_photo_2017-12-07_09-18-17.jpg]
و مشترک (کاربر) با فشردن کلیدهای + و -، تعداد اون کالارو تغییر می ده. این ها جاواست که عمل هم می کنه.
خواسته ی من اینه : (1) زمانی که تعداد کالایی بیشتر از 0 شد، نام کالا و تعداد درخواستی از هر کالا رو در صفحه ی سبد نمایش بده برای کاربر؛ و (2) مدیر سایت، به تفکیک مشترک، کالاهایی که خواسته به همراه تعداد درخواستی از هر کالا رو دریافت کنم.
*نکته ی حائز اهمیت اینه که فقط کاربر زمانی که مقدارو بیشتر از 0 کرد، اون کالا به سبدش بره و جز سفارشاتش بشه و هر زمان مقدارو کم و زیاد کرد، در سبد هم اون تغییر اعمال شه.

من جستجو کردم و حتی کدهای آماده ی سبد خرید دریافت کردم. اما مناسب کارم نبودن. ضمنا توضیح بفرمایید که سبد نیاز به دیتابیس داره؟ در حال حاضر من یه جدول برای مشترکین دارم و یه جدول برای کالاها.

با تشکر
  پاسخ
تشکر شده توسط :
#2
من آموزش های مرتبط با سبد خرید رو می بینم، یه مطلبی رو درک نمی کنم؛
محصولات مورد نیاز کاربر با session ها در سبد ذخیره می شن؛
اینارو چه طوری مدیر فروشگاه می تونه دریافت و مشاهده کنه؟
این ها که در پایگاه داده ذخیره نمی شن.

---

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


با تشکر پیشاپیش
  پاسخ
تشکر شده توسط :
#3
سلام و وقت بخیر

سبد خرید دارای دو بخش باید باشد.
1- لیست شدن محصولاتی که کاربر تمایل به خرید آن ها دارند.
2- نهایی شدن خرید

مرحله اول رو با سشن و کوکی و یا دیتابیس
در مرحله دوم هست که مدیر این خرید ها رو باید ببینه. چون در مرحله اول شاید کاربر الان نخواد خرید کنه و چند مدت دیگه خریدشو نهایی کنه.

موفق باشید
  پاسخ
تشکر شده توسط : Reza soheyl_ir89
#4
نقل قول:محصولات مورد نیاز کاربر با session ها در سبد ذخیره می شن؛
اینارو چه طوری مدیر فروشگاه می تونه دریافت و مشاهده کنه؟
موقتا توی سشن ذخیره میشه و چنانچه کاربر نهایی ایش بکنه یا اقدام به پرداخت بکنه توی دیتابیس ذخیره میشه .

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


نقل قول:*نکته ی حائز اهمیت اینه که فقط کاربر زمانی که مقدارو بیشتر از 0 کرد، اون کالا به سبدش بره و جز سفارشاتش بشه و هر زمان مقدارو کم و زیاد کرد، در سبد هم اون تغییر اعمال شه.
به دو صورت میتونی انجامش بدی
یک اینکه از localstorage مرورگر با جاوااسکریپت استفاده کنی و در نهایت بعد از تایید نهایی توی دیتابیس بریزی .
یا اینکه کلا همه چیزو ajax کنی .

مثلا روی کلید + کلیک کرد شما شناسه محصول و یک uniqid رو بفرست به یک فایل پی اچ پی
اونجا یک سبد خرید بساز و متناسب با id محصول عدد 1 بذار
اگر بازم درخواست رسید چک کن که محصول توی دیتابیس هست و سپس متناسب با id ایش عدد رو اضافه بکن .
اگر - فرستاد عدد رو کم بکن .

بعد از اینکه کارت رو تموم کردی خلاصه سبد خریدت رو بصورت json برگشت بده و سپس توی اون بخشی که برای نمایش سبد خرید در نظر گرفتی اونجا نشون بده .

نقل قول:تازه دارم پی اچ پی رو تحت یه پروژه که لازمش دارم و می خوام ازش استفاده کنم، یاد می گیرم.
چیزی که الان درگیری ذهنیت شده کمی دانش و ریزه کاری و فوت کوزه گری میخواد
بخش سبد خرید نیاز به دانش جاوااسکریپت و یکی از کتابخونه هاش مثل jquery یا angular داره
همچنین نیاز به درک صحیح سشن و کوکی داره
و همچنین درخواست ajax

لذا اینکه پیشنهاد میکنم این بخش رو اگر لازمش نداری چون توی فرآیند یادگیری هستی موقتا بپرونش برو مباحث بعدی .
انشاالله موفق باشی
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : soheyl_ir89 ayoubsys Y.P.Y
#5
تشکر از دوستانی که زمان گذاشتن و
دو دوست عزیزی که پاسخ دادن.

با توجه به پاسخ ها و جستجوهایی که کردم؛
زمانی که کاربر روی علامت + و - می زنه، تعداد کالا تغییر می کنه،
می خوام هر کالایی که تعدادش توسط کاربر بیشتر از 0 شد، شناسه کالا و نام کالا و تعداد وارد دیتابیس بشه،
یعنی در لحظه و بدون نیاز به تایید نهایی. و با بارگزاری مجدد صفحه، تعداد کالاها از دیتابیش خونده بشه و نمایش داده بشه.
با توجه به صحبت های آقا رضا، فکر کنم بهترین گزینه، استفاده از ajax هست.
و کالایی که مقدارش صفر باقی موند در دیتابیس (سبد خرید کاربر) نمایش داده نشه، یا تعدادش بیشتر از صفر شد و در دیتابیس ذخیره شد و دوباره تعدادش صفر شد، از دیتابیس حذف بشه.

پرسش اول این که آیا این راه حل خوبیه؟

دوم این که
-دیتابیس سبد خرید مناسب برای این کار چه طوری ساخته می شه؟

-ajax هم جستجو کردم و یه چیزایی متوجه شدم و کدهایی هم دیدم. بازم در مورد ajax مناسب این فرآیند راهنمایی بفرمایید ممنون می شم.
  پاسخ
تشکر شده توسط : Reza
#6
در حال حاضر من 1 پایگاه داده دارم با 2 جدول ؛ یکی برای کاربرا و یکی برای کالاها.
الان 2 حرکت رو موندم :

اول این که برای سبد کالا باید پایگاه جدید بسازم یا یه جدول در همون پایگاه؟
چه طوری؟

دوم این که کدهای jquery برای افزودن کالا در سبد خرید رو پیدا نکردم.
کدهایی که می بینم برای مشاهده ی اطلاعات دیتابیس هست، نه برای افزودن اطلاعات در دیتابیس!

پایگاه داده رو متوجه شدم و الان انجام میدم : http://barnamenevis.org/showthread.php?4...ost1829416
  پاسخ
تشکر شده توسط :
#7
[عکس: 104r_photo_2017-12-07_09-18-17.jpg]
من در همون پایگاه داده، یه جدول ساختم برای سفارش ها؛
الان مساله ای که هست اینه که هر کالایی که تعدادش بیشتر از 0 می شه، مقادیری مثل شناسه کالا و شناسه مشتری و ... و تعدادکالا وارد جدول بشه. و با تغییر تعداد کالا، تعداد در جدول تغییر کنه. و هر بار صفحه ی فروشگاه توسط همان کاربر بارگزاری می شه، تعداد کالاها از جدول خونده بشه و نمایش داده بشه.
  پاسخ
تشکر شده توسط :
#8
با توجه به مشورت های دوستان روشی که دنبالش بودم روش مناسبی نیست.

اینو ببینید :
[عکس: oxs_untitled2.png]

با هر بار کلیک روی کلید +، تعداد اون کالا در سبد خرید (session) بیشتر می شه؛
تا این جاش مثل سایر فروشگاه هاست و لینک سبد خرید هم در منوی افقی بالای صفحه می ذارم (برای تغییر تعداد).
تعداد هر کالا در سبد خرید کاربر، روی علامت + نمایش داده می شه.

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

اگر کاربر خواست همون تعداد کالا رو نهایی کنه و اطلاعات از سبد خرید (session) به جدول سفارش ها (جدول پایگاه داده) بره، روی علامت "تیک" سبز رنگ کلیک می کنه.
و تعداد خریداری شده ی هر کالا از جدول پایگاه داده گرفته می شه و روی تصویر برگه نمایش داده می شه.

حالا می خوام :
اولا با کلیک دکمه +، کالا به سبد خرید افزوده بشه و تعدادش بیشتر بشه.
آموزش ها زیاده؛ کدومش رو تایید می کنید؟ یا کد تست شده بذارید لطفا.
  پاسخ
تشکر شده توسط :
#9
نقل قول: اولا با کلیک دکمه +، کالا به سبد خرید افزوده بشه و تعدادش بیشتر بشه.
یه فایل index.php بساز با محتوای زیر
کد:
<html>
    <head>
    
    <meta charset=utf-8>
    <style>
    .card{
width: 350px;
border: 1px solid gray;
box-shadow: 1px 1px 3px #888;
border-top: 10px solid green;
min-height: 250px;
padding-: 10px;
margin: 10px;
}

img{
  border-radius: 50%;
  width: 70px;
  margin: 10px;
}

h1{
  font-weight: lighter;
  margin-left: 100px;
  margin-top: -70px;
}

p{
  margin: 10px;
  font-family: segoe ui;
  line-height: 1.4em;
  font-size: 1.2em;
}

#mainbox{
  font-family: calibri;
  box-sizing: border-box;
  justify-content: center;
  display: flex;
flex-wrap: wrap;
}

a{text-decoration:none;font-weight:bold}
    </style>
    
    <script type='text/javascript' src='http://rezaworkshop.ir/static/site/img/jquery.js'></script>
    
    <script>
    function add(id)
    {
        $.get('./set.php?do=add',{id:id},function(data){
            $('#box').html(data);
        });
    }
    
    
    function remove(id)
    {
        $.get('./set.php?do=remove',{id:id},function(data){
            $('#box').html(data);
        });
    }
    </script>
    </head>
    <body>
    
    
    <div id=box>
        <!-- show basket result -->
    </div>
    
    <br>
    
    
    
    <div id=mainbox>
    <div class="card">
        <img src="http://rezaworkshop.ir/static/file/smssender.png" alt="" />
  
        <h1>عنوان محصول 1</h1>
        <p>این محصول تستی میباشد</p>
        <div>
            <a href='#' onclick='add(1)'>+</a>
            /
            <a href='#' onclick='remove(1)'>-</a>
        </div>
    </div>
    
    
    <div class="card">
        <img src="http://rezaworkshop.ir/static/file/smssender.png" alt="" />
  
        <h1>عنوان محصول 2</h1>
        <p>این محصول تستی میباشد</p>
        <div>
            <a href='#' onclick='add(2)'>+</a>
            /
            <a href='#' onclick='remove(2)'>-</a>
        </div>
    </div>

    
    <div class="card">
        <img src="http://rezaworkshop.ir/static/file/smssender.png" alt="" />
  
        <h1>عنوان محصول 3</h1>
        <p>این محصول تستی میباشد</p>
        <div>
            <a href='#' onclick='add(3)'>+</a>
            /
            <a href='#' onclick='remove(3)'>-</a>
        </div>
    </div>

    </div>


    
    </body>
</html>

یه فایل set.php بساز با محتوای زیر
کد:
<?php
session_start();

$key = 'basket';
$id = (int) $_GET['id'];



if($_GET['do']=='add' and ! isset($_SESSION[$key][$id]))//first time
    $_SESSION[$key][$id]=1;
elseif($_GET['do']=='add')//other add time
    $_SESSION[$key][$id]++;
elseif($_GET['do']=='remove' and isset($_SESSION[$key][$id]))
    $_SESSION[$key][$id]--;
    
//check
if(isset($_SESSION[$key][$id]) and $_SESSION[$key][$id]<=0)
    unset($_SESSION[$key][$id]);

//show result
foreach($_SESSION[$key] as $key=>$val)
{
    echo "محصول شماره $key تعداد $val <br>";
}



توضیح : در فایل index.php در باکس آیتم ها برای کاراکتر های + و - در حالت onclick یک فانکشن جاوااسکریپت اجرا میشود
آرگومان ارسالی به این فانکشن شناسه محصول هست مثلا add(1)
یعنی محصول یک ، اضافه شود به سبد خرید
در فانکشن add هم عملیات ajax انجام میشود پارامتر رو میفرسته به فایل set.php اونجا هم میاد چک میکنه اگه توی سشن چنین محصولی نبود براش یک در نظر میگیره اگر بود اضافه میکنه .
تابع remove هم برعکسش هست .
بعد نتیجه رو توی set.php چاپ میکنه و توی درخواست ajax برمیگردونه و توی #box نشونش میده .

اینو فعلا بررسی بکن سوالی داشتی بگو .

چون فرآیند سبد خرید خیلی طولانی هست و میخوای اجراش کنی خیلی مباحث رو باید یاد بگیری چیزی که نوشتم خیلی خیلی ساده هست برای یادگیری استفاده کن چون برای پیاده سازی باید مسائل دیگه هم در نظر بگیری .
اینم کدها یکجا
http://zipupload.ir/index.php/download/7...d.rar.html
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : ayoubsys soheyl_ir89
#10
آقا رضا خیلی ممنونم
من خیلی بدهکارم بهت؛ بارها طی این سال ها، برادرانه کمکم کردی Smile
با این کدها در لوکال هاست دارم کار می کنم تا دقیقا چیزی که می خوام بشه، ممنونم ازت.
ان شاالله جبران کنم الطافتو Blush
  پاسخ
تشکر شده توسط : Reza


پرش به انجمن:


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