MultiServis.Net //PHP El Kitabı

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

Geri sayim... Yazar: ASA The ZeroTimeR Tarih: 01/04/02

Merhaba,
PHP, bildiginiz gibi herkese acik ve kullanicilari tarafindan gelistirilmekte olan
bir dildir. Etrafta pek fazla Turkce PHP uygulamasi orneginin, anlatimi bulunmadigi
icin vakit buldukca sizlerle degisik isler yapan, kendi yazdigim PHP programciklarini
paylasmak istedim. Bu tur yazilarin devaminin, sizlerden gelen istek ve fikirler
dogrultusunda; yani sizin de katkilarinizla devam edecegini dusunuyorum.

Bu yazi PHP'ye yeni baslamis, baslamayi dusunen ya da ileri seviyedeki PHP
kullanicilarina ufak hatirlatmalarda bulunmak icin yazilmi$tir.
Lafi fazla uzatmadan ilk ornegimizi incelemeye baslayalim.

Bu ornekte "DATE, SWITCH ve IF" komutlarina goz atacagiz. Oldukca basit bir ornek,
ancak 'basit' kavraminin da goreceli oldugunu unutmayalim :)
Benim de katkika bulundugum Ingilizce tabanli bir sitenin kurucularindan
bir arkadas (Deej), isledigi bir suctan dolayi hapise girmisti. Sitenin forumunda
surekli olarak "Deej ne zaman donecek" tarzi sorulardan sikilan mudavimler, sitenin
ana sayfasina, tek isi Deej'in donusune kac gun kaldigini gostermek olan bir script
yazilmasi konusunda fikir birligine vardilar. Benim de bos vaktim oldugu icin bu scripti
hazirladim.

Isterseniz, her programlama dilinde, kodlamaya baslamadan once yapmamiz gereken Algoritma
Cikarma mevzusuna bir el atalim. Kimilerinin farkli goru$leri olsa da Algoritma benim icin
"yapacagimiz isin bir taslagini cikarmak"tan ibarettir. Kodlamaya baslamadan once, kagit
ustunde yapilan bu on cali$ma; size hem zamandan kazandirir, hem kodlamanin ileriki
safhalarinda kar$iniza cikabilecek sorunlari gormenizi saglar; hem de doldurmaniz gereken
bilgi bosluklarini onceden gormenizi saglar.
Bunu gunluk hayatiniza da uygulayabilirseniz; sizin icin oldukca yararli oldugunu
goreceginizden eminim.

Simdi adim adim programimizin yapmasi gerekenleri dusunelim;
1. Belli bir gune ne kadar kaldigini ogrenmek icin, o gun ile bulunulan gun arasindaki
fark alinmali.
Bunun icin once bugunun tarihi alinacak, sonra da aradaki gun sayisi
hesaplanacak. Eh, konu tarih olduguna gore PHP'de bu isi en iyi DATE fonksiyonu halleder.
(fonksiyon dedigime bakmayin, bazilarina gore bu bir komuttur. Aslinda isin dogrusunu
ben de tam olarak bilmiyorum.)

2. Aradaki gun sayisi hesaplandiginda karsimiza baslica 4 farkli sonuc cikacaktir :

> i. Bircok gun daha gecmesi gerekli..
> ii. Sadece 1 gun kaldi.
> iii. 0 gun kaldi, yani gun bugundur!
> iv. -x gun kaldi, hedeflenen gun geldi gecti bile, mirim uyuma!

> Bunlarin kontrolu gereklidir, bunun icin SWITCH ve IF fonksiyonlari isimize yarayabilir.

> Evet, algoritmamizin sadelestirilmis hali bu. PhP kodunun basladigini belirten "<?" veya
> "<?php" i$aretimizi koyup, kodlama ile yolumuza devam edelim.

> > <?
> > # deejcnt.php by ASA The ZeroTimeR < asa@antionline.org >
> > # Dedicated to deej, who caused many nice people come together
> > # @ info-x
> > **********

> > # veya // i$aretleri bulunduklari yerden itibaren (eger ¤escapelenmemislerse)
> > yazilanlarin islenmemesini saglarlar. Scriptin isleyisi, kim tarafindan yazildigi ya da
> > ne ise yaradigi gibi konularda bilgi verirler. Eger bu isi bircok satir icin yapmak
> > istiyorsak, baslangic satirina /* i$aretini, mesajin bittigi satirin sonuna da */
> > isaretini koymak lazim gelir.

> > - Escapelemek: Ozel anlami olan bir isareti, o anlamdan arindirmak.

> >   Orn:

> >   > $asa="Merhaba";
> >   > echo ("$asa merhaba");

> >   bize

> >   > "Merhaba merhaba"

> >   çiktisini verecektir.

> >   > $asa="Merhaba";
> >   > echo ("\$asa merhaba");

> >   ise,

> >   > "$asa merhaba"

> >   olarak bize yansiyacaktir.

> >   Demek ki escapelemek istedigimiz karakterin onune "\" i$aretini koyuyormusuz.
> >   Eh, isaretini goruntuleme isini, onune bir daha koyarak halledebiliriz. ("\\")

> >   > $today= date ("j / M / Y");
> >   > echo ("Today is $today <br>");

> >   $today degiskenine, date fonksiyonunu kullanarak birseyler atadik...

> >   Nedir bunlar:

> >   > -j: Basta 0 (sifir)olmadan ayin gunu. (1,2,9...15,18,30 gibi)

> >   > -M: Scriptin calistigi sistemde yuklu bulunan tarih ayarlarina gore, o ayin ilk 3 harfi
> >   > (Ingilizce: Jan, Feb...Jun, Oct) (Turkce: Oca, Sub...Haz, Eki)

> >   > -Y: 4 rakamla yil (1979,1999,2001)
> >   > Bunlarin arasina koydugumuz / isareti ise sadece gozu rahatsiz etmeden onlari ayirmak
> >   > icindir.

> >   > Yani, su anda $today degiskeni 16 / Dec / 2001 degerini tasiyor.

> >   > Ikinci satir ile bu durumu ekrana yansitmis olduk. Sondaki <br> ise, bildigimiz
> >   > HTML'deki satir ayiraci.

> >   > Onemli: Date konusunda daha fazla bilgi icin PHP Manual'a goz atmaniz yeterli.

> >   > > $day= date ("j"); # $day degi$kenine gun atandi (16)
> >   > > $mnt= date ("n"); # $mnt degi$kenine ba$inda 0 olmadan bulunulan ay atandi (12)
> >   > > $yr= date ("y"); # #yr degi$kenine yilin son 2 rakami atandi (01)

> >   > Ailem yemege bekliyor beni... Ben gidip onlara e$lik ederken siz de kendinize
> >   > bir kahve daha koyun, (iciyorsaniz) bir sigara daha yakin, ve biraz daha karmasiklasacak
> >   > olan yazinin geri kalani icin kendinizi hazir edin...
> >   > Yettim!

> >   > > switch ($mnt) {

> >   > Switch komutu ile parantez icindeki degiskenin, az sonra siralayacagimiz kosullardan
> >   > hangisine uydugunu kontrol eder ve uygun oldugu yerde bulunan emirleri uygular.

> >   > Dikkat edin, bu sefer satirdan sonra ";" degil "{" isareti var. Bu da uzunca bir yola girdigimizi gosterir bize :) Isimiz bittiginde ise "}" isareti ile kapiyi kapatmatyi unutmayalim, yoksa "Parse Error" kurbani oluruz :)

> >   > > case 1: # Eger $mnt 1'e esitse (1'den sonra ; i$aretini de kullanabilirsiniz)
> >   > > $left= (31 - $day) + 314; # $left degi$keni buna e$ittir.
> >   > > break; # yoluna devam et.

> >   > > case 2: # Eger $mnt 2'ye esitse
> >   > > $left= (28 - $day) + 286; # $left degiskeni buna e$ittir.
> >   > > break; # yoluna devam et
> >   > > ...

> >   > Oradaki 314 rakaminin sirri sudur:

> >   > Deej'in geri gelis tarihi 11 Kasim 2002
> >   > olarak belirlendi. O tarihe kadar Ocak ayindan itibaren toplam 355 gun var. Eh biz
> >   > bunun 31'ini (ocak ayini) parantez icinde kullandigimiza gore geriye 314 kaliyor.
> >   > 2. durumda ise Subat ayindayiz 314 - 28 = 286...
> >   > Case 1'in Ocak, case 3'un Mart ya da case 11'in Kasim ayini ifade ettigini
> >   > anladiginizi umuyorum. Cunku biz $mnt'nin kontrolunu yapiyorduk ve
> >   > $mnt de yilin kacinci ayinda oldugumuzun degerini tutuyordu.

> >   > Bu durum'lar 12'ye kadar ayni dogrultuda ilerliyor. 12. ayda ise
> >   > iki farkli durum var.Ya 2001'in 12. ayi ya da 2002'nin... Oyleyse simdi bir case
> >   > icinde if komutu gorelim:

> >   > > case 12:
> >   > > if ($yr == "01") { # Eger $yr (yil) degiskeni 01'e esitse (ki bugun icin esit)
> >   > > $left= (31- $day) + 345; # $left'in alacagi deger budur.
> >   > > } # if'in kapisini kapat, iceri soguk girmesin.
> >   > > else { # Eger yukaridaki kosul haricinde bir durum soz konusuysa (ki bu ornekte sadece 02 olabilir)
> >   > > $left= (11- $day); # $left'in degeri budur
> >   > > } # else'in kapisini kapat.
> >   > > break; # yoluna devam et yâ seydi.

> >   > > > Ve son olarak ta belirtmis oldugumuz durumlardan hicbiri $mnt'ye uymuyorsa bir
> >   > > > secenek belirtmeliyiz. Her ne kadar bu ornekte, normal sartlar altinda 12 kosul harici
> >   > > > bir durum soz konusu olmayacak olsa da sizi "default" ile tanistirmak istiyorum :

> >   > > > > default: # eger caselerden hicbiri uymadiysa...
> >   > > > > echo ("Something is wrong with the server..."); # durum bundan ibarettir
> >   > > > > } # bu hangi kapiyi kapatti? Tabii ki Switch ile actigimiz ana kapiyi...

> >   > > > Dikkat edin, default'la birlikte break kullanmaya gerek gormedik.

> >   > > > Switch deyimi hakkinda daha fazla bilgi icin PHP Manual'a basvurabilirsiniz.

> >   > > > Su ana kadar, bugunun tarihini ogrendik ve bu tarihe gore hedefimize kac gun
> >   > > > kaldigini hesapladik. Simdi sira, elimizdeki verileri isleyip, ekrana bir cikti
> >   > > > gondermeye geldi.

> >   > > > > if ($left == "0" ) { # $left 0'a e$itse...
> >   > > > > echo ("Yeaahhaa, today Deej is back !!!"); # Hedefimize ula$tik... Gun bugundur !!!
> >   > > > > }

> >   > > > > elseif ($left =="1") { # $left 1'e e$itse...
> >   > > > > echo ("Only $left day left for Deej's arrival!"); # Hedefimize ula$maya sadece 1 gun kaldi !!!
> >   > > > > }

> >   > > > > elseif ($left < "0") { # $left 0'dan kucukse, yani negatif ise...
> >   > > > > echo ("Deej, c'mon shut this counter down."); # Bu counterin omru doldu artik kaldirsaniz iyi olur...
> >   > > > > }

> >   > > > 2. dongude, DIE (GEBER!) emrini vererek, scriptin sessizce susmasini da
> >   > > > saglayabilirdik. die (""); $eklinde bir dizilim ile yeni outputla kar$ila$mazdik.
> >   > > > Bu ornekteki echo komutu yerine die'i da kullanabilirdik. Cunku bu ko$ul dogru ise,
> >   > > > scriptin geri kalaninda i$imize yarayan bir durum kalmadi. (bu sadece bu ornek icin gecerli).
> >   > > > Eger "die" kullandigimiz elseif dongusunden sonra bir echo ("bye"); olsaydi, ekrana
> >   > > > bye yazisi cikmazdi.

> >   > > > > else { # yukaridaki "eger" seceneklerinden hicbiri sana uymadiysa...
> >   > > > > #+ (bunu default gibi dusunebilirsiniz)
> >   > > > > echo ("Only $left days left for Deej's arrival!"); # Sadece $left gun kaldi...
> >   > > > > }

> >   > > > Gordugunuz gibi bir if ve else arasinda ba$ka ko$ullamalar da bulunabiliyor,
> >   > > > ve biz bunlari elseif ile i$aretliyoruz. Test edecegimiz rakam 5 olsaydi, if'i atlardik,
> >   > > > 1. elseif'i de atlardik, 2. de atlanirdi ve sonuc else yani "ko$ul yukaridakilere uymadi
> >   > > > ama buna uyar" kismina gecmi$ olurduk.

> >   > > > ?> Son olarak bu i$areti de verip, kapilarin kapisini; PhP kodunun sona erdigini belirten
> >   > > > kapiyi da kapatip scriptimizi bitiriyoruz.
> >   > > > Bugun 16 Aralik 2001 olduguna gore; bakalim ben bu scripti $u an cali$tirdigimda ne sonuca
> >   > > > varacagim?

> >   > > > > """""""""""""""""""""""""""""""""""""""
> >   > > > > Today is 16 / Dec / 2001
> >   > > > > Only 360 days left for Deej's arrival!
> >   > > > > """""""""""""""""""""""""""""""""""""""

> >   > > > Evet... Sadece switch, if, date derken ba$ka konulara da el attik sanirim...
> >   > > > Umarim birilerine yarari dokunur.
> >   > > > Her ne kadar kabul etmesem de, beni de "insan" statusune aldiklari icin ben de hata
> >   > > > yapabilme luksune sahibim, o yuzden "cntasa" icinde herhangi bir hata veya eksiklik
> >   > > > gorurseniz asa@antionline.org a mailinizi esirgememenizi dilerim.

> >   > > > Hatta soru, tesekkur, istek ve hakaretlerinizi de asa@antionline.org adresine
> >   > > > yoneltebilirsiniz.
> >   > > > Daha kisa surede cevap alabilmek icin, lutfen Subject kismina, bu yazinin kimlik
> >   > > > numarasi olan #16-ASA-1201-I 'i yazmayi unutmayin.

> >   > > > Son olarak, yazinin alt kisminda bu yaziyi kendi sitesinde yayinlamak isteyenler icin
> >   > > > uymalari gereken "ASA Public License"in kisa bir bolumu var, ilgililerin okumasi rica
> >   > > > olunur. Bu vesile ile hepinizin mubarek Ramazan Bayrami'ni kutlarim.

> >   > > > Signed,
> >   > > > ASA The ZeroTimeR

> >   > > > !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> >   > > > Bu script(cik) ASA Public License altinda yayinlanmakta olup, icindeki verilere,
> >   > > > yazilara ve ozellikle de bu aciklama bolumune dokunulmadikca, dizayn acisindan
> >   > > > istendigi gibi degistirilerek istenilen sitede kullanilabilir.
> >   > > > Ancak once bu durumdan asa@antionline.org adresine mail atarak beni haberdar etmeniz
> >   > > > uygun olacaktir.
> >   > > > Bu yazi emek verilerek, hicbir kar$ilik istenmeden Turk Internet Kullanicilarina
> >   > > > armagan edilmi$tir. Calma, cirpma, kaynak gostermeden hatta sadece benim adimi
> >   > > > degi$tirerek yayinlamaya kalkan eminim ilahi adalet ile cezalandirilacaktir.
> >   > > > Denemesi bedava, odemesi IMF faizlerine endeksli olacaktir.
> >   > > > !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

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