ASP.net ile alisveris sepeti yapimi ve sepetin sessionda saklanmasi

Bu yazida ASP.net ile   Alisveris  Sepeti  Örnegi Yapiyoruz. 

 

Uygulamanin bittikten sonraki ekran görünüm asagidaki gibi olcaktir.



 

Alisveris sepetine ürün ekleyecegiz ve ekledigimiz ürünleri sepetten silecegiz.  Alisveris sitelerinde kullanilan Sepet uygulamalari kayit esnasinda  genel olarak 3 farkli sekilde kullaniliyor.   Birincisi sepete eklenen ürünler  veritabaninda  ayri bir tabloda tutuluyor. Ikinci yöntemde sepete eklenen ürünler kullanicinin bilgisayarina atilan bir Cookie  de tutulur. Üçüncü ve en çok tercih edilen yöntem ise sepeti  Sessionda yani server hafizasinda tutmak . Bunlarin her birini avantaj ve dezavantajlari bulunuyor . 


1. yöntem ile yapildigi takdirde sepete eklenen bir ürün Vt de bir tabloda oldugundan ziyaretçi sepetteki ürünü satin almaz ya da silmez ise sepette kalir. Böylece ziyaretçi siteye birdahaki girisinde daha önce ekledigi ürünleri görebilir ve tekrar ürünleri aramak zorun kalmaz . Bu yöntemin dezavantaji  ise sepete eklenen  her ürün Veritabaninda tutuldugundan gereksiz verilerin uzun süre  tutulmasina sebep olabilir.
2. Yöntemde yani  cookie  (çerez )de tutulmasi durumunda  sepet kullanicinin bilgisayarinda sifrelenmis bir  sekilde tutulur ve ziyaretçinin bir sonraki site ziyaretinde sepetindeki ürünler  kullanicini bilgisayarindaki dosyadan çagirilip  gösterilir . Cookie yöntemin avantaji  gereksiz veritabani kullanimi olmadan sepetteki ürünler ziyaretçiye her seferinde gösterilebilir. Bu yöntemin dezavantaji ise  cookie ler ziyaretçinin bilgisayarinda tutuldugundan bu küçük dosyalarin silinme durumu söz konusudur.  Örnegin ziyaretçinin  bilgisayarina format atilmasi durumda. Bir diger dezavantaj da  bazi tarayicilarin cookie alimi güvenlik ya da baska bir nedenden dolayi  kapatilmis olabilir.

3. Yöntemde yani Session (oturum) yönteminde ise Sepet server hafizasinda tutulur . Server hafizasinda  tutulma süresi ise ziyaretçinin sepeti bosaltmasi ya da Tarayici penceresini kapatmasi ile son bulur. Dezavantaji  ziyaretçi  bir dahaki girisinde sepeti bos olarak bulur.  

Simdi uygulamamiza geçebiliriz.  Uygulamada sepeti   Data Table nesnesinden faydalanmak istedim. Bunun disinda List ya da diziler gibi yöntemler de kullanilabilir. Datatable nispeten daha kolay oldugundan kullaniyorum . Ilk olarak yeni web site açiyoruz ve asagidaki gibi bir form olusturuyoruz.


<table align="center" cellpadding="2" width="300px">

            <tr>

                <td>

                    <asp:Label ID="Label1" runat="server" Text="Ürün ID"></asp:Label>

                </td>

                <td>

                    :</td>

                <td>

                    <asp:TextBox ID="txtID" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    <asp:Label ID="Label2" runat="server" Text="Ürün Adi"></asp:Label>

                </td>

                <td>

                    :</td>

                <td>

                    <asp:TextBox ID="txtAdi" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    <asp:Label ID="Label3" runat="server" Text="Fiyat"></asp:Label>

                </td>

                <td>

                    :</td>

                <td>

                    <asp:TextBox ID="txtFiyat" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    <asp:Label ID="Label4" runat="server" Text="Adet"></asp:Label>

                </td>

                <td>

                    :</td>

                <td>

                    <asp:TextBox ID="txtAdet" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    &nbsp;</td>

                <td>

                    &nbsp;</td>

                <td>

                    <asp:Button ID="btnSepeteEkle" runat="server" Text="Sepete Ekle"

                        onclick="btnSepeteEkle_Click" />

                </td>

            </tr>

            </table>
normal sartlar da ürün bilgileri veritabanindan alinir ve her ürün altindaki buton ile sepete eklenir ancak konu disinda oldugundan biz simdilik manuel olarak yukaridaki form yardimi ile yapiyor olacagiz.

 Simdi Default.aspx.cs dosyamiza geçip kodlara baslayalim.
 
public void Ekle(string id, string isim, int adet, double fiyat)

    {

 

       try

        {

            DataTable dt = new DataTable(); // sepeti tutacagimiz bir datatable olusturuyoruz

 

            if (HttpContext.Current.Session["sepet"] != null)//daha önceden sepet olusturulmus mu diye sessiona bakiyoruz

            {

                dt = (DataTable)HttpContext.Current.Session["sepet"];//session varsa  sessionu datatbale ye cast edip datatablemizi elde ediyoruz

              

            }

            else//session yok ise yani sepet daha önce olusturulup sessiona atilmamis ise dataTableyi olusturuyoruz

            {

                dt.Columns.Add("id");// DataTableye id colonunu ekliyoruz

                dt.Columns.Add("isim");//DataTableye isim colonunu ekliyoruz

                dt.Columns.Add("fiyat");//DataTableye fiyat colonunu ekliyoruz

                dt.Columns.Add("adet");//DataTableye adet colonunu ekliyoruz

                dt.Columns.Add("tutar");//DataTableye tutar colonunu ekliyoruz

 

            }

 

            bool varmi = Kontrol(id.ToString());//Kontrol adindaki methoda gelen id  degerini gönderiyoruz

            // böylece ayni id ye sahip ürün daha önce eklendiyse ayni ürünü birdaha eklemek yerine sadece ürünnün sepeteki adetini artiracagiz

           // Kontrol methodu ürün varsa true yoks false deger döndürüyor

           if (varmi == false)//ürün daha önce eklenmemis ise

            {

                DataRow drow = dt.NewRow();//yeni bir row (satir) olusturuluyor.

                drow["id"] = id;//satirin id colonuna gelen id yaziliyor.

                drow["isim"] = isim;//satirin isim colonuna gelen isim yaziliyor.

                drow["fiyat"] = fiyat;//satirin fiyat colonuna gelen fiyat yaziliyor.

                drow["adet"] = adet;//satirin adet colonuna gelen adet yaziliyor.

                drow["tutar"] = (fiyat * adet).ToString();//satirin tutar alanina gelen fiyat ile adet çarpimi  yaziliyor.

                dt.Rows.Add(drow);//olusturulan satir tabloya ekleniyor.

            }

            else//eger ürün tabloya daha önce eklenmis ise

            {

                Artir(id, adet, fiyat);//Artir methoduna gelen id fiyat ve adet degerleri gönderiliyor. Fiyata gerek yok aslinda ama neyse :)

               //artir metoduna giddip bakalim simdi

            }

            HttpContext.Current.Session["sepet"] = dt;//en son olarak olsturulan DataTable nin sayfa postback oldugunda kaybolmamasi için

           // sessiona atiliyor. artik birdaki sefere session oldugu için tablo bu sessiondan alinip üzerine yazilcak

 

        }

        catch

        {

 

 

        }

    }

Sepete ürünleri eklettik her ürünün  tutarini da hesaplattik geriye iki method kaldi. Sil() ve SepetToplam() önce SepetToplam methodunu yazalim .Adindan da anlasilacagi gibi bu mthod sepetteki tüm ürünlerin genel toplamini hesaplayim geri döndürecek.

public double SepetToplam()

 {

     double toplam = 0;//toplam degiskeni tanimlaniyor

     if (HttpContext.Current.Session["sepet"] != null)//sessiomn kontolü yapiliyor

     {

        

         DataTable dt = new DataTable();//tablo olusturuluyor

         dt =(DataTable) HttpContext.Current.Session["sepet"];//sessiondaki sepet aliniyor tabloya aktariliyor

         for (int i = 0; i < dt.Rows.Count; i++)//yine tablonun tüm alanlarinda dönecek döngü baslatiliyor

         {

             toplam +=Convert.ToDouble(dt.Rows[i]["tutar"].ToString());//her satirdaki tutar miktari toplam degiskenine aktariliyor

         }

      

     }

     return toplam; //toplam degeri döndürülüyor.

 }

 



Son olarak sepetten ürün silecek olan method.
public void Sil(string id)//silinecek olan ürünün id degeri aliniyor

    {

        DataTable dt = new DataTable();//tablo örnegi olusturuluyor

        if (HttpContext.Current.Session["sepet"] != null)//sessin  kontrolü yapiliyor

        {

            dt = (DataTable)HttpContext.Current.Session["sepet"];//sessiondaki tablo aliniyor

            for (int i = 0; i < dt.Rows.Count; i++)//tablonun satir sayisi kadar yine bir döngü olusturuluyor

            {

                if (dt.Rows[i]["id"].ToString() == id)//o naki satirin id alani ile gelen id alani esit ise

                {

                    dt.Rows[i].Delete();//tablonun o satiri siliniyor.

                    HttpContext.Current.Session["sepet"] = dt;//tablonun son hali sessiona aktariliyor

                    break;//dögüden çikiliyor

 

                }

            }

 

        }

    }

 Artir Ve Kontrol Methodlari


private void Artir(string id,int adet,double fiyat)

    {

        if (!AdetTipKontol(adet.ToString()))

            return;

        try

        {

            DataTable dt = new DataTable();

            dt = (DataTable)HttpContext.Current.Session["sepet"];

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                if (dt.Rows[i]["id"].ToString() == id)

                {

                    int adet1 = Convert.ToInt32(dt.Rows[i]["adet"].ToString());

                    adet1 += adet;
                    dt.Rows[i]["adet"] = adet1.ToString();

 

                    double tutar1 = Convert.ToDouble(dt.Rows[i]["tutar"].ToString());
                    tutar1 = (adet * Convert.ToDouble(dt.Rows[i]["fiyat"])) + tutar1;
                    dt.Rows[i]["tutar"] = tutar1.ToString();

                    HttpContext.Current.Session["sepet"] = dt;
                    break;

                }

            }

        }

        catch

        {

             

          

        }

         

    }





private bool Kontrol(string id)

    {

        bool r=false;

        DataTable dt = new DataTable();

 

 

        if (HttpContext.Current.Session["sepet"] != null)

        {

            dt = (DataTable)HttpContext.Current.Session["sepet"];

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                if (dt.Rows[i]["id"].ToString() == id)

                {

                    r = true;

                    break;

                }

            }

 

        }

        

 

        

        return r;

    }

Hosçakalin.

Bunu beğen
Paylaş

Yorumlar
Yorum Yaz
İsim : (*)
E-mail :
Web Adresi:
:
(*)
 
Kapat