MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

Basit bir Alis-Veris Sepeti Yazalim... Yazar: Serkan Tarih: 01/03/02

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>
> &nbsp;
> </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>
> &nbsp;
> </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

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>