Cok basit ama fonksiyonel
bir "Alis-Veris Sepeti" uygulamasi yazalim.Programimizin, modern
bir "elektronik sepetin" butun gereklerini yerine getirmesine
(urunu eklemek,cikarmak,goruntulemek vb.) ozen gosterelim...
Egitim amacli yazilan bu uygulama kucuk bir alisverisi sitesi
icin kolaylikla temel bir alt program olarak alinip, cok kisa
zamanda bunun uzerine bazi ek fonksiyonlar ve online olarak,
kredi kartindan hesaba para gecirilmesi kismi eklendiginde
guclu bir uygulamaya donusebilir...
Program toplam 5 dosyadan olusmaktadir.Programlarin icinde
oldukca fazla yorum yapilarak konunun anlasilmasi saglanmaya
calisilmistir.
site_kut.inc.php
Yazacagimiz uygulama icin bir kutuphane dosyasi islevi gorecek...
<?php
//Urunlerimizin icinde saklanacagi degiskeni yaratiyorum...
//Bu bir dizi degisken:$urun_listesi
$urun_listesi = array();
//Text dosyasindan urunlerimizi alip onlari bu yeni yaratigim
dizinin icine
//yukleyecek fonksiyonu yaziyorum...
function UrunleriYukle() {
//Fonksiyonun disinda yaratilmis bir degiskene fonksiyonun
icinden
//ulasmak istedigim icin ($urun_listesi degiskeni bos bir
dizi olarak yukarida yaratilmisti)
//global deklaresini kullaniyorum...
global $urun_listesi;
//Text dosyamizin adi.Bu dosya icinde her satirda bir urun
olacak sekilde tanimlamayi
//zaten programi yazmadan once yapmistim...
$dosyaadi = 'urun.txt';
//Dosyay baglanti aciyorum.Onune konulan @ isareti ile bir
hata olusursa
//bunu ekrana yazmamasini soyluyorum...
$dosyaya_baglanti = @fopen($dosyaadi, "r");
//while dongusunu kullanarak text dosyasi icinde bulunan
butun satirlar,yarattigim dizi
//icinde birer urunu temsil edecek sekil yer alan kadar
dongu devam ediyor.
//Burada kullanilan fgets dosyayi satir satir , her satirda
max 1024 byte olacak sekilde okuyor...
while ($satir = fgets($dosyaya_baglanti, 1024)) {
//Her satirda yer alan uzun ifade | karekteri ile paracalanarak
list komutunda gosterilen siraya gore
//degiskenlerin icine ataniyor...
list($id, $isim, $aciklama, $fiyat) = explode('|', $satir);
//Burada trim () fonksiyonu yardimiyla $id alanininda yer
alablcek beyaz bosluklar (Mesela ben text dosyasina
//yazarken dikkat etmeden ifadeden sonra bir kac bosluk
birakmis olabilirim...) temizleniyor.
$id = trim($id);
//Tum bilgiler dizinin icine yukleniyor.Diziyi $id alanini
index olarak kullanarak indexledim.
//Bu nedenle onemli olan nokta text dosyasinin icinde urunleri
tanimlaraken birden fazla urune ayni kodu
//verme hakkiniz bulunmuyor...
$urun_listesi[$id] = array ("isim" => $isim, "aciklama"
=>$aciklama, "fiyat" => $fiyat);
}
//Dosyaya acilan baglanti kapatiliyor...
@fclose($dosyaya_baglanti);
}
?>
urun.txt
Icinde urunlerimizin yazili oldugu text dosyasi...
KOD101|Bisiklet|Dunyanin en saglikli nakil araci...|125
KOD102|Oyuncak Telsiz|2 Km ye kadar etkili walkie-talkie|380
sepet.php
Program icin ana dosya.PHP'ye yeni baslayanlarin bile anlamakta
zorlanmayacaklari cok basit yapili bir program...
<?php
//
//sepet.php:ANA Dosya...
//
require 'site_kut.inc.php';
//Oturumu kaydet...
session_register('sepet');
//Sepeti baslat...
if (!isset($sepet[urun_sayisi])) {
$sepet = array("urun_sayisi" => 0, "urunler" => array());
}
//Site kutuphanesi doyasinda yazdigimiz UrunleriYukle ()
fonksiyonunu cagir...
//Boylece butun urunler dizimiz icerisine yuklensin...
UrunleriYukle();
?>
<html>
<head>
<title>
Serkan'in Oyuncakci Dukkani
</title>
</head>
<body>
<h1>Serkan'in Oyuncakci Dukkanina Hosgeldiniz :)</h1>
<?php
if ($sepet[urun_sayisi]) { //sepetin icinde gosterilebilcek
bir urun varsa,
?>
<h2>Sepetinizdeki Urunler:</h2>
<br>
<table border="2" cellpadding="5" cellspacing="2">
<tr>
<th>
Urun Adi
</th>
<th>
Kisa Aciklama
</th>
<th>
Fiyat
</th>
<th>
Miktar
</th>
<th>
</th>
</tr>
<?php
//Sepeti icindeki urunleri donguye sok...
//Boylece her defasinda bir urunu ekrana yazdirarak
//Sepetin icinde urun kalmayincaya kadar,ekrana urunleri
satir satir yazdir...
foreach ($sepet[urunler] as $i => $urun) {
$urun_id = $urun[0];
$miktar = $urun[1];
$toplam += $miktar * (double)$urun_listesi[$urun_id][fiyat];
?>
<tr>
<td>
<?php echo $urun_listesi[$urun_id][isim]; ?>
</td>
<td>
<?php echo $urun_listesi[$urun_id][aciklama]; ?>
</td>
<td>
<?php echo $urun_listesi[$urun_id][fiyat]; ?>
</td>
<td>
<form action="miktar_degistir.php" method="GET">
<input type="hidden" name="id" value="<?php echo $i;
?>">
<input type="text" size="3" name="miktar" value="<?php
echo $miktar; ?>">
</td>
<td>
<input type="submit" value="Miktari Degistir">
</form>
</td>
</tr>
<?php
}
?>
<tr>
<td colspan="2">
Toplam Hesap Tutari :
</td>
<td colspan="2">
<?php echo $toplam; ?> TL
</td>
</tr>
</table>
<BR>
<BR>
<?php
}
?>
<h2> ..:: Serkan'in Oyuncakci Dukkani ::..</h2>
<BR>
Online magazamizdan alabileceginiz oyuncaklarimiz:
<table border="2" cellpadding="5" cellspacing="2">
<tr>
<th>
Urun Ismi
</th>
<th>
Urun Aciklamasi
</th>
<th>
Urun Fiyati
</th>
<th>
</th>
</tr>
<?php
//Butun urunleri listele
foreach ($urun_listesi as $urun_id => $oge) {
?>
<tr>
<td>
<?php echo $oge[isim]; ?>
</td>
<td>
<?php echo $oge[aciklama]; ?>
</td>
<td>
<?php echo $oge[fiyat]; ?>
</td>
<td>
<a href="sepete_at.php?id=<?php echo $urun_id; ?>">
Bu urunu sepetime ekle...
</a>
</td>
</tr>
<?php
}
?>
</table>
sepete_at.php
Sepete urun eklemek icin yazilmis basit yapisi olan bir dosya.
<?php
//
//sepete_at.php
//Secilen urunu sepete yerlestirmek icin kullaniliyor...
//
require 'site_kut.inc.php'; //Text dosyasi ile ilgili kutuphane
UrunleriYukle(); //Fonksiyonu burada cagirdim.Boylece urunler
dizimizin icine yuklenecek
//Secilen urunu algilayabilmek icin bu degiskeni kullanacam.Ozellikle
burada tanimlamakla
//onu global bir degisken haline getirdim.
$secilen_urun = array();
//Butun urunlere ait donguyu bir kere calistir ve icinden
//secilen urune ait bilgileri cek al...
foreach ($urun_listesi as $urun_id => $urun) {
if (trim($urun_id) == trim($id)) {
$secilen_urun = $urun;
}
}
// Oturumu kaydet...
session_register('sepet');
if ($ordered) { //Urun secilmis ise :
array_push($sepet[urunler], array(trim($id), $miktar));
$sepet[urun_sayisi] += $miktar;
}
//Yukarida gorulen array_push fonksiyonu ile dizinin icine
ekleme yapiliyor.
//Burada goruldugu sekilde secilen urun sepetin icindeki
urunler listesine ekleniyor...
?>
<html>
<head>
<title>
<?php if ($ordered) { ?>
Urun <?php echo $secilen_urun[isim]; ?> sepetime ekle
<?php } else { ?>
Sectigim <?php echo $secilen_urun[isim]; ?> isimli
urunu sepetime ekle
<?php
}
?>
</title>
</head>
<body>
<?php if ($ordered) { ?>
<h1><?php echo $secilen_urun[isim]; ?>
isimli urun sepetinize basarili sekilde eklendi.Tessekkur
Ederiz.</h1>
Geriye <a href="sepet.php">donerek</a> alisverise
devam edebilirsiniz...
<?php } else { ?>
<h1>Urunu <?php $secilen_urun[isim]; ?> sepetime
ekle</h1>
<form action="<?php echo $PHP_SELF; ?>" method="GET">
Urun Ismi : <?php echo $secilen_urun[isim]; ?>
<BR>
Urun Aciklamasi: <?php echo $secilen_urun[aciklama];
?>
<BR>
Urun Fiyati: <?php echo $secilen_urun[fiyat]; ?> TL.
<BR>
Urun Miktari: <input type="text" size="7" name="miktar">
<input type="hidden" name="id" value="<?php echo $id;
?>">
<input type="hidden" name="ordered" value="1">
<input type="submit" value="Sepetime Ekle">
</form>
<?php
}
?>
</body>
</html>
miktar_degistir.php
Sepetteki urunlerin miktarini sonradan degistirmek icin kullaniliyor.
<?php
session_register('sepet');
//Dogru elemente ulastigimizi garanti etmek icin $id nin veri
tipini int yapiyorum...
$i = (int)$id;
//Eski miktari kaydet.Kullaniciya bilgi olmasi ve aritmetik
acisindan kullanacagiz...
$eski_miktar = $sepet[urunler][$i][1];
if ($miktar) {
$sepet[urunler][$i][1] = $miktar;
} else {
unset($sepet[urunler][$i]);//Urunumuzu unut gitsin...
}
$sepet[urun_sayisi] = ($eski_miktar > $miktar) ? $sepet[urun_sayisi]
- ($eski_miktar-$miktar) : $sepet[urun_sayisi] + ($miktar-$eski_miktar);
?>
<html>
<head>
<title>
Miktar Degistirme
</title>
</head>
<body>
<h1> Urun miktari, <?php echo $eski_miktar; ?>
den/dan <?php echo $miktar; ?> olarak degistirildi...</h1>
Geri <a href="sepet.php">donerek</a> alisverise
devam edebilirsiniz...
</body>
</html>
Kaynak : ISBN 0-672-31924-1 (Chapter 12 Shopping Cart)
Saglicakla kalin...
Duzenleyen ve Ceviren:
Serkan Hadi Ceylani
serkan@turk-php.com
|