THT DUYURU

Web Programlama Asp, Php, Html, Asp.Net, Aspx, Perl Vb Web Programlama Bölümü

Seçenekler

Sıfırdan E-Ticaret "Backend" Çalışması

LosT - ait Kullanıcı Resmi (Avatar)
Moderasyon Lider Yardımcısı
Üyelik tarihi:
02/2015
Nereden:
-
Yaş:
21
Mesajlar:
8.088
Konular:
1415
Teşekkür (Etti):
2046
Teşekkür (Aldı):
2752
Ticaret:
(0) %
37
6590
10-12-2020 17:07
#1
SIFIRDAN E-TİCARET BACKEND ÇALIŞMASI

Merhaba arkadaşlar. Bu yazıda sizlere sıfırdan E-Ticaret yazılımı nasıl yapılır onu göstereceğim. Sıfırdan e-ticaret sitesi yazmak aslında saçma gelebilir ama bu yazı eğitim niteliğinde olacağı için fazla sorgulamayın Kullandığım yöntemler bazılarınıza saçma gelebilir daha önce bir E-Ticaret yazılımı yapan şirkette çalışmadım. Dediğim gibi amacım tamamen eğitim.
E-Ticaret ciddi bir iştir. Açık bırakmamaya ne kadar özen gösteriyorsak burada kat kat fazla dikkat edeceğiz. Normal sitede vereceğiniz açık en fazla siteye zarar verir ancak E-Ticaret sitelerinde işler öyle değil. Sitenizdeki her kullanıcının bilgilerinden siz sorumlu oluyorsunuz. Bu ayrıntıya dikkat etmenizi istiyorum. Konusu geçmişken Web zafiyetleri hakkında bilgi almak istiyorsanız bu konumu incelemenizi öneririm İşin tasarım kısmına değinmeyeceğim.
Ek olarak JavaScript taraflı yapılan her türlü kontrolü aslında yapılmamış sayıyoruz. Her türlü kontrol sunucu taraflı olacak. Yani kontrolleri (yapılmış bile olsa) PHP ile yapacağız.



E-Ticaret Sitemizde Bulunan Özellikler:
» Çoklu dil destekli kategori
» Ürün varyant
» Ürün sıralama
» Yorum yapma
» Sınırsız alt kategori



Kullanılacak Diller:
» PHP
» SQL



1 - Veri Tabanı Tasarlama

Ufak ufak başlayalım. Sitemizde öncelikle ne gerekli onları belirlememiz lazım. Örneğin site bilgileri, ürün bilgileri, kullanıcı bilgileri vb. Benim (konuyu da fazla uzatmama cabasıyla) gerek duyduğum veriler için tablo listesi şu şekilde;
» Site Bilgileri
» Kullanıcı Bilgileri
» Ürün Bilgileri
» Kategoriler
» Siparişler
» Sipariş Edilen Ürünler (1 Siparişte Birden Çok Ürün Olabilir)
» Adresler
» Sepet (Kayıtlı Kullanıcılar İçin)
» Dil Listesi
» Yorumlar
» Varyasyon Grubu
» Ürün Resim Galerisi

Not: Tabloda uzunluk değerlerini vermiyorum siz kendiniz değer verirsiniz.



1.1 Site Bilgileri

Site bilgilerinde yer alan veriler sitemizin başlığı, kargo ücreti, iletişim adresi gibi veriler olabilir. Bu sizin keyfinize kalmış örneğin iletişim bilgileri için ayrı tablo da oluşturulabilir. Ek olarak ayar_ismi / deger şeklinde 2 sütun çok sayıda satırla da oluşturulabilir. Ben tek satır çok sayıda sütun oluşturmayı seçtim.
Site bilgilerine ait tablomuzun ismine site_ayar koyuyorum. Tablodaki sütunlar ise;
P.K = Primary Key (Birincil anahtar)

id (int) P.K
favicon (varchar)
baslik (varchar)
slogan (varchar)
logo (varchar)
m eta_baslik (varchar)
m eta_icerik (text)
ziyaret_araligi (int)
sosyal_fb (varchar)
sosyal_tw (varchar)
sosyal_ig (varchar)
whatsapp (varchar)
duyuru (text)
varsayilan_dil (varchar)
bakimmodu (tinyint)





1.2 Kullanıcı Bilgileri

E-Ticaret sitemizdeki müşteriler için oluşturmamız gereken tablo. İçerisinde giriş yapabilmesi için gerekli bilgilerin yanında telefon vb. gibi temel verilere de yer vereceğim. Normalde adresler diye bir tablo oluşturacağız zaten o yüzden adres verisini buraya eklemeyeceğim sadece seçili adresinin ID'sini burada tutacağım. Ek olarak ben tabloda tarihlerin tipini varchar veya text olarak tutuyorum. Siz nasıl isterseniz öyle yapın.
Bu tablomuzun adını hesaplar koyuyorum.

id (int) P.K
kullanici_adi (varchar)
kullanici_sifre (varchar)
kullanici_mail (varchar)
isim (varchar)
soyisim (varchar)
kayit_tarihi (varchar)
son_giris_tarihi (varchar)
secili_adres_id (int)





1.3 Ürün Bilgileri

Geldik sıkıntılı bir tabloya. Bu tabloyu oluştururken zor olduğunu düşündüğüm 2 olay vardı. 1.'si varyasyon, 2.'si ise ürünün indirim durumunda fiyata göre listeleme durumu. Çünkü indirim varsa/yoksa durumlarında ürünü neye göre sıralayacağımızı belirlemek karmaşık olabilir. Varyasyon sisteminde ise her varyasyonu neredeyse farklı bir ürünmüş gibi düşünmenin mantıklı olduğunu düşündüm ve diğer siteleri incelediğimde böyle bir karara vardım. Bunu sizin yerinize ben düşündüm zorlamayacağım sizi Ayrıca ürüne bir ID atıyoruz ancak buna rağmen yine de bir stok kodu atamanın gerektiğini düşünüyorum. Diğer eklediğim sütunlar ise ürünün puanı, gösterim sayısı vb... Bir de iade durumu var. Bazı ürünler iade edilemez statüsündedir bu sütun da onlar için gelsin...
Bu tablonun adı da urunler olsun.

id (int) P.K
urun_adi (varchar)
urun_aciklama (text)
urun_aciklama_detay (text)
urun_ozellikler (text)
urun_etiket (text)
indirim_durum (tinyint)
indirim_degeri (int)
urun_fiyat (int)
urun_kategori_id (int)
urun_resim (varchar)
urun_stok_kodu (varchar)
urun_stok (int)
eklenme_tarihi (varchar)
yayin_durum (tinyint)
gosterim_sayisi (int)
puan_1 (int)
puan_2 (int)
puan_3 (int)
puan_4 (int)
puan_5 (int)
toplam_satis (int)
ust_urun_id (int)
varyant_grup (int)
varyant_urun_ad (varchar)
iade_durum (tinyint)





1.4 Kategoriler

Şöyle bir şey denemek istedim. Sitede çoklu dil desteği oluşturmakla ilgili. Normalde istenirse her türlü yazıya eklenir ama ben konunun da daha fazla uzamaması için sadece kategorilerde kurdum bu mantığı.
Mantık şöyle;
Sitede ekli diller olacak. Kullanıcı bu diller arasında seçim yapabilecek. Örneğin ingilizceyi seçti diyelim. Aşama şu şekilde;
Kategorilerde dile ait sütun bulunmakta. Buraya kategori ismini dile göre yazıyoruz. Daha sonra varsayılan veya seçili dil veritabanında aratılıyor. Varsa daha sonra kategorilerde aratılıyor. Yoksa yine varsayılan dil kullanılıyor.

Tablo ismine kategoriler dedik.

id (int) P.K
ust_kategori_id (int)
kategori_seflink (varchar)
aktif (tinyint)

Ek olarak dil tabloları gelecek ancak bunlar panelden eklenecek. Şimdilik deneme amaçlı onları da ekliyorum.

tr (varchar)
en (varchar)
br (varchar)

Ben yapmadım ama dil tercihinde SEF link için de tablo oluşturabilirsiniz.





1.5 Siparişler

Siparişler tablosunda sipariş numarası, sipariş eden kişi, adres, tarih, sipariş durumu gibi verileri tutuyoruz. Eğer site tek firmaya aitse (başka tedarikçi yoksa) kargo takip numarası, kargo ücreti gibi verileri burada barındırabilirsiniz. Yoksa sipariş edilen ürünler tablosunda tutmanız daha mantıklı.
Bu tablomuzun ismi de siparisler olsun.

siparis_numarasi (int) P.K
müsteri_id (int)
toplam_tutar (float)
kargo_ucreti (float)
adres (text)
siparis_tarihi (varchar)
siparis_durum (int)
ip_adresi (varchar)
kargo_takip_no (varchar)

Ben bir de ek olarak sipariş tekrarlanmasın diye bir token sütunu koyuyorum. Farklı yollarla da engellenebilir benim aklıma bu şekil yapmak geldi.

token (text)





1.6 Sipariş Edilen Ürünler

Siparişe ek olarak her ürün için farklı seçenek olabilir. Örneğin 4 farklı ürün siparişinde 1 ürüne iptal/iade/değişim uygulanabilir, panelde siparişteki her ürünün fiyatı ayrı tutulmak istenebilir veya bir üründe sipariş notu gerekebilir. Bu yüzden sipariş edilen ürünler için ayrı tablo oluşturuyoruz.
Tablomuzun ismine siparis_urunler verelim.

id (int) P.K
siparis_id (int)
urun_stok_kodu (varchar)
urun_adedi (int)
urun_tutari (float)
siparis_notu (text)
siparis_eden_id (int)
siparis_tarihi (varchar)
siparis_urun_durum (int)





1.7 Adresler

Bir üye birden fazla adres ekleyebiliyor. Bu yüzden hesaplar tablosunda seçili adresin için bir sütun ekledik. Adreslere bir sütun açıp yapabilirdik de ancak bu sefer 50 adres varsa hepsini güncellememiz gerekecek böyle şeylere gerek yok
Tablo adı adresler olacak.

id (int) P.K
adres_baslik (varchar)
kullanici_id (int)
kullanici_ad (varchar)
kullanici_soyad (varchar)
kullanici_mail (varchar)
telefon (varchar)
kullanici_adres1 (text)
kullanici_adres2 (text)
kullanici_ulke (varchar)
kullanici_il (varchar)
kullanici_ilce (varchar)
kullanici_postakodu (int)





1.8 Sepet

Sepet için veritabanı oluşturmamızın nedeni giriş yapanlar için. Normalde SESSION'da da tutarız ancak farklı farklı yerlerden hesabına girdiğinde sepeti kaybolmasın diye kayıtlı kullanıcıların sepeti için ekstra veritabanı oluşturuyoruz. Bir de ödeme sonucu alırken SESSION sorun çıkarabiliyor (Bkz. Chrome Samesite Problemi). Önleyebilsek bile işimizi tarayıcının keyfine bırakmıyoruz Burada sepetin kime ait olduğunu, ürünün ID'sini veya stok kodunu, kaç tane alınacağını ve siparis notunu tutacağız. Ek olarak isterseniz eklenme tarihini de koyabilirsiniz.
Tablonun ismi sepet olacak.

id (int) P.K
kullanici_id (int)
urun_id (int)
urun_adet (int)
sepet_siparis_notu (text)





1.9 Dil Listesi

Kategorilerde bahsettiğimiz dil listesini tutacağımız tablo. Dilin kısaltması, dilin ismi ve aktif/pasif verisini tutacağız sadece.
Tablo ismi diller olsun.

dil_kodu (varchar) P.K
dil_ismi (varchar)
aktif (tinyint)





1.10 Yorumlar

Sitede ürünlerin altına yorum atmak isteyen üyeler olabilir. Bunun için ürünü alması veya almaması kontrolünü yazılımda yapacağız. Bu tabloda sadece temel bilgileri ve kullancının isim vermek isteyip istemediği verilerini tutacağız.
Tablo ismini yorumlar yaptım.

id (int) P.K
kullanici_id (int)
urun_id (int)
puan (int)
isim_durum (tinyint)
yorum_baslik (varchar)
yorum_icerik (text)
yorum_tarih (varchar)





1.11 Varyasyon Grubu

Ürünlerin varyasyonunu oluştururken varyasyona bir isim koymamız gerekli. Bunu ana üründe bir sütunda da tutabilirdik fakat bir üründe birden fazla sütun da olabilir. Farklı yol mevcut mu bilgim yok ben bu yolu kullanacağım. Bu arada varyant gruplarını önceden belirlenmiş veya o ürüne özel şekilde oluşturabilirsiniz. Yani her ana ürün için bir varyasyon oluşturup ürünü girerken sürekli tekrar tekrar yazabilirsiniz ya da önceden beden, renk, uzunluk gibi gruplar oluşturarak da yapabilirsiniz. Önerim önceden belirlemektir çünkü aynı tip ürünler için tekrar tekrar veri tabanına beden isminde bir varyasyon grubu oluşturmak zorunda kalırsınız. Yine varyasyon için S/M/L veya Beyaz/Siyah isimlerini buradan gruplayabilirsiniz. Ancak burada önerim ürünlerde varyasyon_ad sütununda depolamanız. Diğer firmaların sitelerini incelediğimde bu sistemi kullandıklarını gördüm.
Tablonun adına varyasyonlar koyuyorum.

id (int) P.K
varyant_ad





1.12 Ürün Resim Galerisi

Pazaryerlerinde ürüne girdiğimizde birden çok fotoğrafı olduğunu görüyoruz. Bu resimlerin adreslerini de bir yerde depolamamız gerekiyor o yüzden ben resim galerisi için ayrı bir tablo oluşturdum. Bu tabloda resmin adresini, ürünün ID'sini ve resmin açıklamasını (HTML'de img etiketinin altındaki alt="" seçeneği) tutacağız.

id (int) P.K
urun_id (int)
resim_adresi (varchar)
resim_alt (varchar)





2. Dosya/Klasör Yapısı Oluşturma

Spagetti bir kodlamadan uzak, her şeyi tamamen düzen içinde inşa etmek için öncelikle kendimize bir yapı kurmamız lazım. Diyen olur mutlaka ya Laravel kullansana veya Codeigniter kullansana neden uğraşıyorsun? Bu yazının bir ders niteliğinde olmasını istiyorum ve burada bir PHP Framework yapısı anlatarak konudan sapmak istemiyorum. Herkes illa bir Framework kullanacak diye bir şart yok. O yüzden istediğimiz gibi olabildiğince düzgün bir yapı kurarak devam edebiliriz.

Öncelikle amacım, nesne yönelimli programlama (OOP) kullanarak basitçe veritabanından istediğim verileri direk parçaladığım temaya aktarmak. MVC yapısında direk Model'dan datayı alıp View'e aktarmışız gibi.

Örneğin; Temada logo, kategoriler, site ismi gibi verilerin bulunduğu kısmı header.php olarak parçaladım. Buraya kategorilerin ve sitenin ayarlarının bulunduğu dosyamı eklemek istiyorum. Hemen oluşturmuş olduğum harici bir PHP dosyasındaki sınıftan kolayca verileri çekeceğim ve listeleyeceğim.

O zaman bana;
Sınıfları içeren PHP dosyalarının bulunduğu bir klasör,
Tema parçalama işlemini yaptığım bir klasör,
Asıl sayfaların (index.php, kategoriler.php vb.) bulunduğu bir klasör (ana dizinde barındırsak daha basit olur),
CSS, JS, Fonts ve PHP kütüphanelerinin (PHPMailer vb.) bir klasör,
Veri tabanı bağlantısı oluşturduğum bir klasör,
Hazırlamış olduğum ve bir eklenti gibi kullanacağım fonksiyonları içeren dosyaların bulunduğu klasör (ÖRN: verilerin filtrelendiği bir fonksiyon),
Resimlerin bulunduğu bir klasör gerekiyor.

JS, CSS, resimler vb. için CDN de kullanılabilir ancak şimdi oralara girmiyorum.

Klasör yapımızı da kafadan hazırladık. Klasörlere de isimler verdim ve şöyle bir yapı kurdum;



Şimdilik bu kadar dosya var zamanla ekleme yapacağız. Zaten içleri de boş henüz yazılım kısmına geçmedik. Sadece görmeniz için ekledim.



3. Yazılım (Verileri Görüntüleme ve Veri Ekleme İşlemleri)

Konunun çok fazla uzamasını istemediğim için sadece veri çekme ve veri ekleme işlemlerini yaptım. Hatta admin panel yapmadığım için bazı yerlerde ekleme işlemini dahi yapmayacaktım ancak fikir ve konu bakımından fazla da sapmamak istiyorum bu yüzden çizgiyi bozmayayım dedim.
Bu arada ben karışıklık olmasın diye her tablo işlemleri için ayrı bir dosya açıp oraya ekledim. Daha sonra belki hepsini bir dosyada toplarım ancak şimdilik böyle daha çok işime geliyor.



3.1 Veri Tabanı Bağlantısı ve Config Dosyası

Veri tabanında 2 bağlantı bulunmakta. Birisi asıl veri tabanımız. Diğer ise infotmation_schema bağlantısı. İkisinin de ayarlarını yapıyoruz.

"config/veritabani.php"



Config dosyasında ise veri tabanımızın ve kategoriler tablomuzun ismi bulunmakta. Bu veriler de çok dil desteği denememiz için gerekli. Bunların da ayarlamasını yapalım.

"config/config.php"





3.2 Site Bilgileri

"siniflar/site_ayar.php"



Kullanımı

Tüm ayarları dizi formatında çekmek için;

Kod:
require_once("siniflar/site_ayar.php");
$site_ayar = new site_ayar();

echo "<pre>";
print_r($site_ayar->tum_ayar());
echo "</pre>";


Tek ayar çekmek için;
Kod:
require_once("siniflar/site_ayar.php");
$site_ayar = new site_ayar();

echo $site_ayar->slogan();




3.3 Kullanıcı Bilgileri

"siniflar/kullanici.php"




Kullanımı

Veri çekmek için (girilen değer kullanıcının ID'si veya kullanıcı adı olabilir);
Kod:
require_once("siniflar/kullanici.php");
$kullanici = new kullanici_verileri(1);

echo "<pre>";
print_r($kullanici->tum_bilgiler());
echo "</pre>";


veya

Kod:
require_once("siniflar/kullanici.php");
$kullanici = new kullanici_verileri(1);

echo $kullanici->mail();


Kullanıcı eklemek için;
Kod:
require_once("siniflar/kullanici.php");
$kullanici_ekle = new kullanici_ekle;

$kullanici_ekle->set_kadi("deneme2");
$kullanici_ekle->set_sifre("123");
$kullanici_ekle->set_sifre_tekrar("123");
$kullanici_ekle->set_mail("[email protected]");
$kullanici_ekle->set_ad("Ahmet");
$kullanici_ekle->set_soyad("Ahmetoğlu");
$sonuc = $kullanici_ekle->verileri_ekle();
if ($sonuc != false) {
    echo $sonuc;
}
Kullanıcı - Şifre kontrolü;
Kod:
require_once("siniflar/kullanici.php");
$kullanici = new kullanici_kontrol("Lost","123");

if($kullanici->sonuc()){
    echo "basarili";
}else{
    echo "basarisiz";
}




3.4 Ürün Bilgileri

"siniflar/urunler.php"






Kullanımı

Tum sorgunun dizi formatındaki verisi için (girilen değer ürün ID'si veya ürün stok kodu olabilir);
Kod:
require_once("siniflar/urunler.php");
$urunler = new tek_urun_cek(1);

echo "<pre>";
print_r($urunler->tum_veriler());
echo "</pre>";


Tek bir veri için (girilen değer ürün ID'si veya ürün stok kodu olabilir);
Kod:
require_once("siniflar/urunler.php");
$urunler = new tek_urun_cek(1);

echo $urunler->get_ad();


Kategori sayfasında sıralama yapmak için (verileri siralama tipi, kategorinin seflinki, başlangıç limiti, bitiş limiti şeklinde girin);
Kod:
require_once("siniflar/urunler.php");
$urunler = new kategori_urun_sirala("populer","kategori-1",0,10);

echo "<pre>";
print_r($urunler->get_urunArray());
echo "</pre>";


Ürün eklemek için;
Kod:
require_once("siniflar/urunler.php");
$urunler = new urun_ekle;

$urunler->set_urunAd("baslik");
$urunler->set_aciklama("aciklama");
$urunler->set_aciklamaDetay("aciklamaDetay");
$urunler->set_ozellikler("ozellikleri");
$urunler->set_etiket("etikler,etiketler,etiketler");
$urunler->set_indirimDurum(1); // Varsayılan 0
$urunler->set_indirimDeger(10); // Varsayılan 0
$urunler->set_fiyat(100);
$urunler->set_kategoriID(1); // Varsayılan 1
$urunler->set_resim("resimler/urundeneme.png");
$urunler->set_stokKodu("DNM-001");
$urunler->set_stokAdet(20); // Varsayılan 0
$urunler->set_ustUrunID(0); // // Varsayılan 0
$urunler->set_varyantGrup(""); // İsteğe Bağlı
$urunler->set_varyantAd(""); // İsteğe Bağlı
$urunler->set_iadeDurum(0); // Varsayılan 1

echo $urunler->verileri_ekle();




3.5 Kategoriler

Çoklu dil sistemiyle uğraştığımız için burası beni biraz uğraştırdı Kategorilerde hangi diller mevcut bunu bulmak için "diller" tablosundan verileri çekebiliriz ancak ben daha güvenilir olmasını istiyordum bu yüzden tablodaki dillerin sütun isimlerini çekmek istedim. Uğraştıran kısım buydu. Sorunsuz çalışmakta.

"siniflar/kategori.php"




Kullanımı

Kategorileri çekmek için;
Kod:
require_once("siniflar/kategori.php");
$kategori = new get_kategori;

echo "<pre>";
print_r($kategori->tum_kategoriler());
echo "</pre>";


Kategorinin ID'sine göre dizi formatında veriyi çekmek için;
Kod:
require_once("siniflar/kategori.php");
$kategori = new get_kategori;

echo "<pre>";
print_r($kategori->kategori(1));
echo "</pre>";


Kategori eklemeye geldik. Panelde karıştırmazsınız ancak arka planda iş değişebilir. Burada dikkat etmeniz gereken tek yer ne kadar dil varsa "array" içerisine o kadar veri eklemek. Mesela bende "tr","en","br" dilleri bulunmakta. Veriyi yollarken 3 elemanlı bir diziymiş gibi düşünerek yolluyorum.
Kod:
require_once("siniflar/kategori.php");
$kategori = new kategori_ekle;

$kategori->set_ustID(0);
$kategori->set_seflink("deneme-kategori");
$kategori->set_aktif(1);
$kategori->set_diller(array("deneme1","deneme2","deneme3"));

echo $kategori->verileri_ekle();




3.6 Siparişler

"siniflar/siparis.php"




Kullanımı

ID'ye göre seçili tüm sipariş sütunlarını dizi türünden çekmek için;
Kod:
require_once("siniflar/siparis.php");
$siparis = new siparis(1);

echo "<pre>";
print_r($siparis->tum_bilgiler());
echo "</pre>";


Tek bir sütun verisi için;
Kod:
require_once("siniflar/siparis.php");
$siparis = new siparis(1);

echo $siparis->adres();


Sipariş eklemek için;
Kod:
require_once("siniflar/siparis.php");
$siparis_ekle = new siparis_ekle;

$siparis_ekle->set_musteriID(1);
$siparis_ekle->set_toplamTutar(50);
$siparis_ekle->set_kargoUcreti(9);
$siparis_ekle->set_adres("deneme adres");
$siparis_ekle->set_token("21564-53165-53156-51586-5154");

echo $siparis_ekle->verileri_ekle();




3.7 Sipariş Edilen Ürünler

"siniflar/siparis_urun.php"




Kullanımı

Seçili ID'ye göre tüm siparis edilmiş ürünlerin listesini dizi formatında döndürmek için;
Kod:
require_once("siniflar/siparis_urun.php");
$siparis_urun = new siparis_urun(1);

echo "<pre>";
print_r($siparis_urun->tum_bilgiler());
echo "</pre>";


Siparis edilen ürünler tablosuna veri eklemek için;
Kod:
require_once("siniflar/siparis_urun.php");
$siparis_urun_ekle = new siparis_urun_ekle;

$siparis_urun_ekle->set_siparisID(1);
$siparis_urun_ekle->set_urunStokKodu("APP_001");
$siparis_urun_ekle->set_adet(5);
$siparis_urun_ekle->set_tutar(50000);
$siparis_urun_ekle->set_siparisNotu("Gri Renk");
$siparis_urun_ekle->set_musteriID(1);

echo $siparis_urun_ekle->verileri_ekle();




3.8 Adresler

"siniflar/adres.php"

Kod:
<?php

class adres_cek
{
    public $adres_sorgu;
    public function __construct($adres_id)
    {
        require_once("config/baglanti.php");
        require_once("fonksiyonlar/guvenlik_kontrol.php");
        $adres_id = filtre($adres_id);
        if (is_numeric($adres_id)) {
            $baglanti = new baglanti;
            $db = $baglanti->eticaret();
            $sorgu = $db->prepare("SELECT * FROM adresler WHERE id = ?");
            $sorgu->execute(array($adres_id));
            $adres_sorgu = $sorgu->fetch(PDO::FETCH_ASSOC);
            $db = null;
            $this->adres_sorgu = $adres_sorgu;
        } else {
            return false;
        }
    }
    public function tum_bilgiler()
    {
        $veri = $this->adres_sorgu;
        return $veri;
    }
    public function adresBaslik()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["adres_baslik"];
        } else {
            return 0;
        }
    }
    public function musteriID()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_id"];
        } else {
            return 0;
        }
    }
    public function musteriAd()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_ad"];
        } else {
            return 0;
        }
    }
    public function musteriSoyad()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_soyad"];
        } else {
            return 0;
        }
    }
    public function mail()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_mail"];
        } else {
            return 0;
        }
    }
    public function telefon()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["telefon"];
        } else {
            return 0;
        }
    }
    public function adres1()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_adres1"];
        } else {
            return 0;
        }
    }
    public function adres2()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_adres2"];
        } else {
            return 0;
        }
    }
    public function ulke()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_ulke"];
        } else {
            return 0;
        }
    }
    public function il()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_il"];
        } else {
            return 0;
        }
    }
    public function ilce()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_ilce"];
        } else {
            return 0;
        }
    }
    public function postaKodu()
    {
        $veri = $this->adres_sorgu;
        if ($veri != NULL) {
            return $veri["kullanici_postakodu"];
        } else {
            return 0;
        }
    }
}

class adres_ekle
{
    public $database;
    public $adresBaslik, $musteriID, $ad, $soyad, $mail, $telefon, $adres1, $adres2, $ulke, $il, $ilce, $postaKodu;
    public function __construct()
    {
        require_once("config/baglanti.php");
        require_once("fonksiyonlar/guvenlik_kontrol.php");
        require_once("fonksiyonlar/format_kontrol.php");
        $baglanti = new baglanti;
        $this->database = $baglanti->eticaret();
    }

    public function set_adresBaslik($veri)
    {
        $this->adresBaslik = filtre($veri);
    }
    public function set_musteriID($veri)
    {
        $this->musteriID = filtre($veri);
    }
    public function set_ad($veri)
    {
        $this->ad = filtre($veri);
    }
    public function set_soyad($veri)
    {
        $this->soyad = filtre($veri);
    }
    public function set_mail($veri)
    {
        $this->mail = filtre($veri);
    }
    public function set_telefon($veri)
    {
        $this->telefon = filtre($veri);
    }
    public function set_adres1($veri)
    {
        $this->adres1 = filtre($veri);
    }
    public function set_adres2($veri)
    {
        $this->adres2 = filtre($veri);
    }
    public function set_ulke($veri)
    {
        $this->ulke = filtre($veri);
    }
    public function set_il($veri)
    {
        $this->il = filtre($veri);
    }
    public function set_ilce($veri)
    {
        $this->ilce = filtre($veri);
    }
    public function set_postaKodu($veri)
    {
        $this->postaKodu = filtre($veri);
    }

    public function verileri_ekle()
    {
        $adresBaslik = $this->adresBaslik;
        $musteriID = $this->musteriID;
        $ad = $this->ad;
        $soyad = $this->soyad;
        $mail = $this->mail;
        $telefon = $this->telefon;
        $adres1 = $this->adres1;
        $adres2 = $this->adres2;
        $ulke = $this->ulke;
        $il = $this->il;
        $ilce = $this->ilce;
        $postaKodu = $this->postaKodu;
        if ($adresBaslik != null && $musteriID != null && $ad != null && $soyad != null && $mail != null && $telefon != null && $adres1 != null && $adres2 != null && $ulke != null && $il != null && $ilce != null && $postaKodu != null) {
            if (mail_kontrol($mail)) {
                $db = $this->database;
                $adres_ekle = $db->prepare("INSERT INTO adresler (adres_baslik,kullanici_id,kullanici_ad,kullanici_soyad,kullanici_mail,telefon,kullanici_adres1,kullanici_adres2,kullanici_ulke,kullanici_il,kullanici_ilce,kullanici_postakodu) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");
                $sonuc = $adres_ekle->execute(array($adresBaslik, $musteriID, $ad, $soyad, $mail, $telefon, $adres1, $adres2, $ulke, $il, $ilce, $postaKodu));
                $db = null;
                if ($sonuc) {
                    return "basarili";
                } else {
                    return "Bir hata oluştu.";
                }
            } else {
                return "Lütfen geçerli bir E-Posta adresi girin.";
            }
        } else {
            return "Tüm alanları doldurunuz.";
        }
    }
}
Kullanım

Mevcut adres verisini dizi formatında çekmek için;
Kod:
require_once("siniflar/adres.php");
$adres_cek = new adres_cek(1);

echo "<pre>";
print_r($adres_cek->tum_bilgiler());
echo "</pre>";


Yeni adres verisi eklemek için;
Kod:
require_once("siniflar/adres.php");
$adres_ekle = new adres_ekle;

$adres_ekle->set_adresBaslik("Ev Adresi");
$adres_ekle->set_musteriID(1);
$adres_ekle->set_ad("LosT");
$adres_ekle->set_soyad("THT");
$adres_ekle->set_mail("[email protected]");
$adres_ekle->set_telefon("+90 561 655 2258");
$adres_ekle->set_adres1("deneme adres1");
$adres_ekle->set_adres2("deneme adres2");
$adres_ekle->set_ulke("Turkiye");
$adres_ekle->set_il("Ankara");
$adres_ekle->set_ilce("Çankaya");
$adres_ekle->set_postaKodu("06000");

echo $adres_ekle->verileri_ekle();




3.9 Sepet

"siniflar/sepet.php"

Kod:
<?php

if (session_status() !== PHP_SESSION_ACTIVE) {
    session_start();
}

class sepet_veri_cek
{
    public $database;
    public $sepet_sorgu, $urunID, $oturum;
    public function __construct($urunID)
    {
        if (isset($_SESSION["oturum"])) {
            $oturum = $_SESSION["oturum"];
        } else {
            $oturum = false;
        }
        $this->oturum = $oturum;
        require_once("config/baglanti.php");
        $baglanti = new baglanti;
        $db = $baglanti->eticaret();
        $this->database = $db;
        if ($oturum) {
            $kullanici_id = $_SESSION["kullanici_id"];
            $sorgu = $db->prepare("SELECT * FROM sepet WHERE urun_id = ? AND kullanici_id = ?");
            $sorgu->execute(array($urunID, $kullanici_id));
            $sepet_sorgu = $sorgu->fetch(PDO::FETCH_ASSOC);
            $db = null;
            $this->sepet_sorgu = $sepet_sorgu;
            $this->urunID = $urunID;
        } else {
            $this->urunID = $urunID;
        }
    }
    public function sepetUrunAdet()
    {
        $oturum = $this->oturum;
        if ($oturum) {
            $sepet_sorgu = $this->sepet_sorgu;
            return $sepet_sorgu["urun_adet"];
        } else {
            $urunID = $this->urunID;
            return $_SESSION["sepettekiler"][$urunID]["urun_adet"];
        }
    }
    public function sepetUrunNot()
    {
        $oturum = $this->oturum;
        if ($oturum) {
            $sepet_sorgu = $this->sepet_sorgu;
            return $sepet_sorgu["sepet_siparis_notu"];
        } else {
            $urunID = $this->urunID;
            return $_SESSION["sepettekiler"][$urunID]["sepet_siparis_notu"];
        }
    }
    public function sepetUrunResim()
    {
        $db = $this->database;
        $urunID = $this->urunID;
        $urun_sorgu = $db->query("SELECT urun_resim FROM urunler WHERE id = " . $urunID)->fetch(PDO::FETCH_ASSOC);
        return $urun_sorgu["urun_resim"];
    }
    public function sepetUrunFiyat()
    {
        $db = $this->database;
        $urunID = $this->urunID;
        $urun_sorgu = $db->query("SELECT IF(`indirim_durum` = 0, `urun_fiyat`, `urun_fiyat`-((`urun_fiyat`*`indirim_degeri`)/100)) AS fiyat FROM urunler WHERE id = " . $urunID)->fetch(PDO::FETCH_ASSOC);
        return $urun_sorgu["fiyat"];
    }
    public function sepetUrunIndirimDurum()
    {
        $db = $this->database;
        $urunID = $this->urunID;
        $urun_sorgu = $db->query("SELECT indirim_durum FROM urunler WHERE id = " . $urunID)->fetch(PDO::FETCH_ASSOC);
        if ($urun_sorgu["indirim_durum"] == 0) {
            return false;
        } else {
            return true;
        }
    }
    public function sepetUrunIndirimDegeri()
    {
        $db = $this->database;
        $urunID = $this->urunID;
        $urun_sorgu = $db->query("SELECT indirim_degeri FROM urunler WHERE id = " . $urunID)->fetch(PDO::FETCH_ASSOC);
        return $urun_sorgu["indirim_degeri"];
    }
}

class sepete_ekle
{
    public $database;
    public $kullanici_id, $urun_id, $urun_adet, $siparis_notu;
    public function __construct()
    {
        if (isset($_SESSION["oturum"])) {
            $oturum = $_SESSION["oturum"];
        } else {
            $oturum = false;
        }
        $this->oturum = $oturum;
        require_once("config/baglanti.php");
        require_once("fonksiyonlar/guvenlik_kontrol.php");
        $baglanti = new baglanti;
        $db = $baglanti->eticaret();
        $this->database = $db;
        $db = null;
    }

    public function urun_id($veri)
    {
        $this->urun_id = filtre($veri);
    }
    public function urun_adet($veri)
    {
        $this->urun_adet = filtre($veri);
    }
    public function siparis_notu($veri)
    {
        $this->siparis_notu = filtre($veri);
    }

    public function sepete_ekle()
    {
        $urun_id = $this->urun_id;
        $urun_adet = $this->urun_adet;
        $siparis_notu = $this->siparis_notu;
        $oturum = $this->oturum;
        if ($oturum) {
            $kullanici_id = $_SESSION["kullanici_id"];
            $db = $this->database;
            $sepet_sorgu = $db->prepare("SELECT urun_adet, urun_id, kullanici_id FROM sepet WHERE urun_id = ? AND kullanici_id = ?");
            $sepet_sorgu->execute(array($urun_id, $kullanici_id));
            $sepet_sorgu_sayisi = $sepet_sorgu->rowCount();
            if ($sepet_sorgu_sayisi > 0) {
                return false;
            } else {
                $sorgu = $db->prepare("INSERT INTO sepet (kullanici_id,urun_id,urun_adet,sepet_siparis_notu) VALUES (?,?,?,?)");
                $sorgu->execute(array($kullanici_id, $urun_id, $urun_adet, $siparis_notu));
                $sepete_ekle = $sorgu->fetch(PDO::FETCH_ASSOC);
                $db = null;
                if ($sepete_ekle) {
                    return true;
                }else {
                    return false;
                }
            }
        } else {
            if (!isset($_SESSION["sepettekiler"])) {
                $_SESSION["sepettekiler"] = array();
            }
            $_SESSION["sepettekiler"][$urun_id]["urun_id"] = $urun_id;
            $_SESSION["sepettekiler"][$urun_id]["urun_adet"] = $urun_adet;
            $_SESSION["sepettekiler"][$urun_id]["siparis_notu"] = $siparis_notu;
        }
    }
}
Kullanımı

Sepettekilerin verisini çekmek için (ek olarak veritabanından ürün fiyatını, resmini, indirim durumu/değeri gibi verileri de çekebilirsiniz ve verileri SESSION'dan veya veri tabanından çekileceği kararını otomatik yapar);
Kod:
require_once("siniflar/sepet.php");
$sepet = new sepet_veri_cek(1);

echo "<br>";
echo $sepet->sepetUrunNot();
echo "<br>";
echo $sepet->sepetUrunFiyat();


Sepete Ekleme işlemi. Ziyaretçi - kullanıcı ayrımı yaparak sepeti SESSION'a veya veri tabanına aktarır. Zaten siparişi verirken giriş yapması gerekecek. Ben konu uzamasın diye oralara girmeyeceğim ama üye giriş yaptıktan veya kayıt olduktan sonra SESSION'daki sepeti veri tabanındaki sepete ekliyorsunuz bu kadar basit.

Kod:
require_once("siniflar/sepet.php");
$sepete_ekle = new sepete_ekle;

$sepete_ekle->urun_id(3);
$sepete_ekle->urun_adet(10);
$sepete_ekle->siparis_notu("deneme");

$sepete_ekle->sepete_ekle();


3.10 Diller

"siniflar/language.php"




Kullanımı

Seçili dilin kodunu ve ismini çekmek için;
Kod:
require_once("siniflar/language.php");
$language = new get_language();

echo "<br>";
echo $language->dil_kodu();
echo "<br>";
echo $language->dil_ismi();


Dil eklemek için bu sınıfı kullanacağız. Kategorilere de ekleme yapacağı için tekrar kategorilerde yeni eklenen dil için update işlemi yapmamız gerekiyor. Eğer yapmazsak boş olan sütunlar için varsayılan dilin verilerini çekecektir.
Kod:
require_once("siniflar/language.php");
$dil_ekle = new set_language;
$dil_ekle->set_dilKodu("br");
$dil_ekle->set_dilAdi("Brazil");
echo $dil_ekle->verileri_ekle();




3.11 Yorumlar

"siniflar/yorum.php"




Kullanımı

Ürüne ait tüm yorumları çekmek için (ürünün ID'sine veya stok koduna göre çekebilirsiniz);
Kod:
require_once("siniflar/yorum.php");
$yorum_cek = new yorum_cek(1);

echo "<pre>";
print_r($yorum_cek->tum_veriler());
echo "</pre>";


Yeni yorum eklemek için (yorumda verilen puan otomatik olarak ürüne eklenmektedir);
Kod:
require_once("siniflar/yorum.php");
$yorum = new yorum_ekle(1);

$yorum->set_urunID(1);
$yorum->set_puan(5);
$yorum->set_isimDurum(1);
$yorum->set_yorumBaslik("Güzel Bir Cihaz");
$yorum->set_yorumIcerik("1 aydır kullanıyorum ısınma sorunu falan olmadı.");

echo $yorum->verileri_ekle();




3.12 Varyasyon

"siniflar/varyant.php"



Kullanımı

Varyasyon adlarını çekmek için;
Kod:
require_once("siniflar/varyant.php");
$varyant = new varyant;
echo "<pre>";
print_r($varyant->tum_veriler());
echo "</pre>";


Varyasyon eklemek için;
Kod:
require_once("siniflar/varyant.php");

$varyant = new varyant_ekle;
$varyant->set_varyantAd("Uzunluk"); // Ekleyeceğimiz varyantın ismini giriyoruz.

echo $varyant->verileri_ekle();




3.13 Ürün Resim Galerisi

"siniflar/resimler.php"



Kullanimi

Ürüne ait resimleri çekmek için;
Kod:
require_once("siniflar/resimler.php");
$resim_ekle = new resim_cek(1); // ürünün ID'sini yazıyoruz

echo "<pre>";
print_r($resim_ekle->resimler_array());
echo "</pre>";


Bir ürüne ait resim eklemek için;
Kod:
require_once("siniflar/resimler.php");
$resim_ekle = new resim_ekle;

$resim_ekle->set_urunID(1);
$resim_ekle->set_resimUrl("resimler/deneme123.png"); // resim yolu
$resim_ekle->set_resimAlt("deneme123 resmi"); // Seo için önemli

echo $resim_ekle->verileri_ekle();






Maalesef yetiştiremedim tasarım kısmını. Birazcık girmeyi planlıyordum (ürün ekleme, kategori listeleme vb.) ama olmadı. Çok karmaşık bir yapı kurmadım ve fazla da vaktim yoktu. Kodların hepsini direk yazmıştım fakat karakter sınırı olduğu için resme dönüştürüp atmaya karar verdim. Eğer alıp incelemek isteyen varsa onlar için GitHub'a ekledim. Çok düzgün bir şey olmadı kusura bakmayın. Umarım işinize yaramıştır

GitHub Linki: https://github.com/xLosTTeaM/eticaret


---------------------
Konu LosT tarafından (11-12-2020 15:56 Saat 15:56 ) değiştirilmiştir.
Cold-Shadow - ait Kullanıcı Resmi (Avatar)
International Moderator
Üyelik tarihi:
02/2015
Yaş:
23
Mesajlar:
3.425
Konular:
180
Teşekkür (Etti):
865
Teşekkür (Aldı):
1848
Ticaret:
(0) %
10-12-2020 19:06
#2
Ellerine sağlık kardeşim, çok başarılı.
LosT Teşekkür etti.
H3Uch1x - ait Kullanıcı Resmi (Avatar)
Kulüpler Genel Sorumlusu
Üyelik tarihi:
08/2015
Nereden:
İstanbul
Yaş:
20
Mesajlar:
6.849
Konular:
1438
Teşekkür (Etti):
1381
Teşekkür (Aldı):
2097
Ticaret:
(0) %
10-12-2020 19:09
#3
Ellerine sağlık,döktürülmüş yine
---------------------
Devlet-i Ebed Müddet

LosT Teşekkür etti.
`TR0GRES - ait Kullanıcı Resmi (Avatar)
Katılımcı Üye
Üyelik tarihi:
03/2020
Nereden:
\U0001F606
Mesajlar:
347
Konular:
32
Teşekkür (Etti):
269
Teşekkür (Aldı):
248
Ticaret:
(0) %
10-12-2020 19:10
#4
Hocam ellerinize sağlık
---------------------
Mᥙstᥲfᥲ Kᥱmᥲᥣ ATATÜRK





Voldemort - ait Kullanıcı Resmi (Avatar)
Nagini
Üyelik tarihi:
04/2020
Mesajlar:
225
Konular:
61
Teşekkür (Etti):
174
Teşekkür (Aldı):
437
Ticaret:
(0) %
10-12-2020 19:10
#5
Elinize emeğinize sağlık hocam
---------------------



'Suskun - ait Kullanıcı Resmi (Avatar)
İhbar Hattı Sorumlusu
Üyelik tarihi:
01/2012
Nereden:
Germany
Yaş:
29
Mesajlar:
2.852
Konular:
538
Teşekkür (Etti):
546
Teşekkür (Aldı):
1250
Ticaret:
(0) %
10-12-2020 19:11
#6
Bekliyordum bunu emek var emek
---------------------
" ~ HAK İSTEYENİN HAKKINI VERİN,BAŞ KALDIRANIN BAŞINI KESİN ~ "





oxydes - ait Kullanıcı Resmi (Avatar)
Katılımcı Üye
Üyelik tarihi:
02/2020
Nereden:
GN-z11
Yaş:
97
Mesajlar:
491
Konular:
75
Ticaret:
(0) %
10-12-2020 19:12
#7
ne diyeyim, ellerine sağlık.
VATANİÇİN - ait Kullanıcı Resmi (Avatar)
Haftanın Asistanı
Üyelik tarihi:
04/2020
Nereden:
Shibuya
Mesajlar:
787
Konular:
61
Teşekkür (Etti):
466
Teşekkür (Aldı):
509
Ticaret:
(0) %
10-12-2020 19:15
#8
Elinize sağlık hocam
---------------------
LosT - ait Kullanıcı Resmi (Avatar)
Moderasyon Lider Yardımcısı
Üyelik tarihi:
02/2015
Nereden:
-
Yaş:
21
Mesajlar:
8.088
Konular:
1415
Teşekkür (Etti):
2046
Teşekkür (Aldı):
2752
Ticaret:
(0) %
10-12-2020 19:25
#9
Alıntı:
H3Uch1x´isimli üyeden Alıntı Mesajı göster
Ellerine sağlık,döktürülmüş yine
Eyvallah

Alıntı:
Cold-Shadow´isimli üyeden Alıntı Mesajı göster
Ellerine sağlık kardeşim, çok başarılı.
Teşekkür ederim kardeşim

Alıntı:
'Suskun´isimli üyeden Alıntı Mesajı göster
Bekliyordum bunu emek var emek
Teşekkür ederim Suskun'

Alıntı:
VATANİÇİN´isimli üyeden Alıntı Mesajı göster
Elinize sağlık hocam
Alıntı:
Voldemort´isimli üyeden Alıntı Mesajı göster
Elinize emeğinize sağlık hocam
Alıntı:
`TR0GRES´isimli üyeden Alıntı Mesajı göster
Hocam ellerinize sağlık
Alıntı:
oxydes´isimli üyeden Alıntı Mesajı göster
ne diyeyim, ellerine sağlık.
Teşekkür ederim eksik olmayın
---------------------
f1r1kd4k - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
10/2015
Nereden:
New York
Yaş:
24
Mesajlar:
91
Konular:
28
Teşekkür (Etti):
38
Teşekkür (Aldı):
35
Ticaret:
(0) %
10-12-2020 19:37
#10
Hocam elinize kolunuza sağlık çok iyi olmuş.
--------------------- ByC0deHack

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler