0% found this document useful (0 votes)
8 views85 pages

Phpnot

Uploaded by

mehmetcanerakgul
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views85 pages

Phpnot

Uploaded by

mehmetcanerakgul
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd

İÇİNDEKİLER

Bölüm 1 PHP İle Web Programlamaya Giriş 1


Bölüm 2 PHP Kodlama Standartları 4
Bölüm 3 PHP Değişken Kullanımı 15
Bölüm 4 IF Yapısı 29
Bölüm 5 Döngüler ve Diziler 58
BÖLÜM 1

PHP İLE WEB PROGRAMLAMAYA GİRİŞ

PHP Nedir? Önce bu sorunun cevabını verelim. PHP interaktif ,dinamik web siteleri
ve İntranet uygulamaları tasarlamak için kullanılan bir programlama dilidir. İlk olarak
1994 yılında Rasmus Lerdorf adındaki bir kişinin kendi kişisel web sayfalarına
kimlerin baktığı,o anda sitesini kaç kişinin ziyaret ettiği gibi sorulara cevap bulabilmek
amacıyla hazırladığı küçük script dilini temel alan ve daha sonra bütün dünyadaki
programcıların ortak çalışmalarıyla şu anda birçok sitede kullanılan popüler
veritabanı programları ile beraber çalışabilen bir uygulama geliştirme dilidir.

Her programlama dilinde olduğu gibi PHP içerisinde de bir takim yazım
mekanizmaları vardır. Bu bir dilin olmazsa olmaz koşuludur. Normalde konuştuğumuz
Türkçe gibi diller için dilbilgisi yerine geçecek bir kavramdır.

PHP sistematiğini ve yazım kurallarını öğrenmek çok kolaydır. Bir çok yazım
sistematiği (Syntax) C ve perl dillerinden gelmektedir. Eğer herhangi bir programlama
dilini biliyorsanız PHP yi öğrenmek çok kısa zamanınızı alacaktır (Çoğu Perl
programcısı 2-4 hafta arasında PHP yi öğrenebilmektedir). Eğer herhangi bir
programlama dili bilmiyorsanız PHP yi öğrenmek için tek alt yapı gereksinimi HTML
bilgisine sahip olmaktır.

HTML (Hyper Text Markup Language) bilen herhangi biri PHP öğrenmeye
başlayabilir ve başlamalıdır da.

 Platform'dan Bağımsız :
Hazırladığınız programı hiç bir değişiklik yapmadan Linux üzerinde çalıştırdığınız
ölçüde Windows Server üzerinde de çalıştırabilirsiniz.
 HTML-Gömülü :
PHP kodlarını HTML içerisine gömebilirsiniz. Bu özellik bu dilin en güçlü
özelliklerinden biridir.
 Server Tarafında Çalışan :
PHP programları server tarafında çalışırlar. Yazılan programlar istenilen görevleri,
server kaynaklarını kullanarak yerine getiriler ve çıktılarını kullanıcının tarayıcı
programında görüntülerler.
 Database destekli:
PHP günümüzün çok popüler database sistemleri için bir arayüz programlama aracı
olarak kullanılabilir. (PHP ile en çok kullanılan database sistemi MySQL dir. )

Örnek Bir PHP Programı

1. Kullandığınız favori text editörünü açın (Notepad veya Unix için kedit) ve aşağıdaki
kodları yazın.

<HTML>
<BODY>
Şu andaki tarih :
<?php
echo gmdate ("M d Y");

1
?>
</BODY>
</HTML>

2. Bu dosyayı "örnek1. php" olarak kaydedin ve web server programınızın htdocs


klasörüne yerleştirin

3. Browser programınızı açıp [Link] php adresine yönlendirdiğiniz


zaman karşınıza şöyle bir görüntü gelmesi lazım.

Şu andaki tarih: Feb 20 2006

Yukarıda iki farklı tip kod yapısı görülmektedir. Bunlardan ilki HTML'ye özgü kodlama
tipi diğeri de PHP'dir. HTML'ye ait bütün kodlar yukarıdaki örnekte ayırt edebilmeniz
için büyük harflerle yazılmıştır ve zaten HTML bilgisine sahip olduğunuz kabul
edilmektedir.

Yukarıda tek satır PHP kodu bulunmaktadır ve kullanıcıya o andaki tarih değerini
göstermektedir.

echo gmdate ("M d Y");

<?php ve ?> işaretleri arasına PHP kodları yazılmaktadır ve servera bu işaretler


arasındaki yazı dizisinin PHP kodu olduğunu söylemektedir.

Şimdide bu "M" "d" ve "Y" ne anlama geliyor ona bakalım. Biz tarih ve saatin
formatını nasıl göstermek istersek PHP 'nin "gmdate" fonksiyonu içinde bu harfleri
kullanıyoruz.

Tablo halinde bu fonksiyon için seçenekleri vermek gerekirse, (Bu fonksiyon


server'daki tarih ve saat değerini kullanır. Eğer server üzerinde İngilizce bir işletim
sistemi yüklü ise doğal olarak tarih değerleri İngilizce olarak görüntülenecektir. )

a "am" veya "pm" formatını gösterir.


A "AM" veya "PM" formatını gösterir.
d Günün değerini iki basamaklı olarak gösterir. "01" den "31" e kadar
D Günün değerini üç haneli kullanarak gösterir. "Fri" gibi
F Ayın değerini tam olarak gösterir. "January" gibi
h Saatin değerini 12 saat formatında gösterir. "01" den "12" ye kadar
H Saatin değerini 24 saat formatında gösterir. "01" den "23" e kadar
g Saatin değerini 12 saat formatında sıfır kullanmadan gösterir. "1" den "12"
ye kadar
G Saatin değerini 24 saat formatında sıfır kullanmadan gösterir. "0" dan "23" e
kadar
i Dakikanın değerini gösterir. "00" dan "59" 'a kadar
j Günün değerini sıfır kullanmadan gösterir. "1" den "31" 'e kadar
l Günün değerini text olarak gösterir. "Friday" gibi,
L Boolean olarak "artıkyıl" için "0" veya "1" değerini alır
m Ayın değerini gösterir. "01" den "12" ye kadar

2
n Ayın değerini sıfırlar olmadan gösterir. "1" den "12" ye kadar
M Ayın text değerini ilk üç harfini kullanarak gösterir. "Jan" "Feb" gibi
s Saniyenin değerini gösterir. "00" dan "59" a kadar
S İngilizce tarih için tanımlanan "th" "nd" gibi kısaltmaları gösterir.
t Ayın içindeki gün adedini verir. "28" den "31" e kadar
T Server için Zaman dilimini gösterir. "MDT" gibi
w Günün değerini sayı olarak gösterir. "0" pazardan "6" cumartesiye kadar.
Y Yılın değerini 4 dijit olarak gösterir. "1999" gibi
y Yılın değerini 2 dijit olarak gösterir. "99" gibi
z Yıl içinde günün kaçıncı günü olduğunu gösterir. "0" dan "365"e kadar
Z Zaman diliminde saniye olarak ötelemeyi gösterir. (-43200 den 43200)

Yukarıdaki ,server üzerinde tarihi gösteren küçük programımız için bu değerleri


deneyerek çıktılarına göz atabilirsiniz.

BÖLÜM 2

3
PHP KODLAMA STANDARTLARI

İSİMLER:

Konuya uyan isimler seçin. İsimler programcılığın kalbidir. Eğer bir şey için doğru
ismin ne olması gerektiğini biliyorsanız, kendinize ve sizden sonra gelecek
programcılara kod üzerinde kullanabilecekleri büyük bir güç veriyorsunuz demektir.

Bir isim, içinde bulunduğu çevre hakkında uzun ve derin bir düşünme sürecinin
ürünüdür. Sadece bir sistemin bütün olarak çalışma prensibini tam olarak anlayan bir
programcı sisteme tam anlamıyla uyan isimler bulabilir. Eğer isim uygunsa geri kalan
her şey doğal bir şekilde uyacaktır. Bu sayede ilişkiler açık, anlamlar ulaşılabilir, ve
insancıl beklentilerden yola çıkarak ulaşılan sonuçlar anlamlı olacaktır.

Eğer kodunuza baktığınızda isimleri 'sey', 'birsey', 'bunu_yap','suraya_git',


'onu_calistir' gibi isimlerle değiştirdiğinizde bir şey fark etmeyecek gibi geliyorsa, o
kodun dizaynına bir daha göz atsanız iyi olur.

Sınıf İsimleri

* Sınıfın ismini, sınıfın ne olduğuna bakarak verin. Eğer isim bulmak konusunda çok
uğraşıyorsanız bu sisteminizin dizaynına yeteri kadar zaman harcamadığınızın bir
belirtisidir.
* Üç kelimeden fazla birleşik isimler sistem dizaynınızın bazı şeyleri bir birine
karıştırıyor olabileceğinin bir habercisidir. Dizaynınızı tekrar gözden geçirin. Bir CRC
kartı oturumuyla objelerinizin gereğinden fazla sorumluluklarla yüklenmiş olup
olmadığını kontrol edin.

* Bir sınıftan kalıtım/miras yoluyla (inheritance) başka bir sınıf oluşturduğunuzda ana
sınıfın ismini alt sınıfın ismi içinde kullanmaktan kaçının. Eğer bir sınıfınız varsa o
sınıf kendi ayakları üzerinde durabilmelidir. Hangi başka sınıftan oluşturulmuş
olduğu önemli olmamalıdır.

* Eğer sınıflarınız bir ortak başlık altında toplanabilir nitelikte ise, yani benzer bir
amaca hizmet ediyorlarsa bu sınıfları belli bir başlık altında toplamak da mümkündür.
Örneğin birkaç 'motor' sınıfınız olduğunu düşünürsek, SorguMotoru, AramaMotoru
gibi sınıf isimleri kullanılabilir.

Metot ve Fonksiyon İsimleri:

* Genellikle bütün metot ve fonksiyonlar bir aktivite gerçekleştirirler, bu yüzden


isimleri de gerçekleştirdikleri aktiviteyi belirtir nitelikte olmalıdır. Örneğin,
HataKontrol() yerine HataKontroluYap(), VeriDosyasi() yerine
VeriDosyasinaCıktıYap() kullanılmalıdır. Bu kullanım şekli değişken objelerinin ve
fonksiyonların birbirine karışmasını da engelleyecektir.

* Bazen sona eklenen kısaltmalardan yararlanılabilir.


- MAX : Bir değişkenin alabileceği Maksimum değerden bahsederken.

4
- Cnt : Bir sayaç değişkeninin o anki değerinizden bahsederken ( Sayaç = Counter )
- Key : Bir anahtar değer ( Anahtar = Key )

Örneğin: TekrarMax - Maksimum tekrar sayısı, TekrarCnt - Şu anki tekrar sayısı gibi
kullanılabilir.

* Bazen başa eklenen kısaltmalardan da yararlanılabilir.

Tamamı Büyük Harf Olan Kısaltmalar Kullanmayın:

* Normalde tamamı büyük harften oluşan kısaltmaları bir isimde kullanmanız


gerektiğinde bu kısaltmanın sadece ilk harfini büyük yapıp gerisini küçük harfler
devam edin.

Örneğin: 'YeniHTMLSayfasi' yerine 'YeniHtmlSayfasi' kullanın.

Açıklama:

* Tamamı büyük harflerden oluşan kısaltmaları isim olarak kullanırken herkes farklı
bir tarz izlemektedir. İsimlerin ne anlama geldiğini tahmin edebilmek açısından
sadece bir tarzı kullanmak gereklidir.

Örneğin NetworkABCKey isminde ABC'den gelen C ile Key'den gelen K karışmış


durumdadır. Bazı programcıları rahatsız etmeyen bu durum diğerlerini rahatsız
edebilmektedir. Bu yüzden değişik kişiler tarafından yazılmış kod örneklerinde bu
konuya değişik yaklaşımlar görebilirsiniz.

Örnekler:
class FluidOz // FluidOZ değil
class GetHtmlStatistics // GetHTMLStatistics değil

Sınıf İsimleri

 Kelime ayracı olarak büyük harf kullanıp kelimelerin devamını küçük harflerle
getiriniz.
 Bir ismin ilk karakteri büyük harf olmalıdır.
 Alt çizgi kullanmayınız (' _ ')

Açıklama

 Değişik isimlendirme şekilleri arasından yukarıda belirtilen şekil büyük bir


çoğunluk tarafından verilen tavizler ve kullanışlılık dengesi açısından en iyi olarak
benimsenmiştir.

Örnek

class IsimBirIki
class Isim

5
Sınıf Kitaplığı (class library) İsimleri

* İsim boşluğu/uzayı/alanı (Name Space) kavramının kullanımı iyice gelişmekte


olduğu için farklı üretici ve guruplar tarafından hazırlanmış kitaplıklar arasında sınıf
isimleri çakışmasını önlemek için bu isim boşluğu/uzayı/alanı kavramından
yararlanmak gerekmektedir.

* İsim boşluğu/uzayı/alanı kullanılmadığı zaman genelde sınıf isimleri özel bir string
ile başlatılarak çakışmalar önlenir. Genelde başa gelen bu string için iki karakter
yeterli olsa da daha uzun bir string de kullanılabilir.

Metot İsimleri
* Yukarıdaki sınıf isimleri ile aynı kurallar geçerlidir.

Örnek

class IsimBirIki
{
function DoIt() {} ;
function HataKontrolEt() {};
}

Sınıf Değişkeni İsimleri (class attribute)

 Sınıfa ait (member) değişken isimleri 'm' karakteri ile başlamalıdır.


 'm' karakterinden sonraki kısım sınıf isimleri ile aynı kurallara uymalıdır.
 'm' diğer bütün isim başlangıçlarından önce gelir. Örneğin referans için
kullanılacak olan 'r' harfinden önce gelmelidir.

Açıklama
* İsme 'm' ile başlamak metot isimleri ile meydana gelebilecek olası bir çakışmayı
önler. Çoğu zaman kullandığınız metot ve değişken isimleriniz benzer olacaktır.

Örnek

class IsimBirIki
{
function VarAbc() {};
function ErrorNumber() {};
var $mVarAbc;
var $mErrorNumber;
var $mrName;
}

Metot Arguman İsimleri (method argument)

 İlk karakter küçük harf olmalıdır.


 İlk harften sonraki her yeni kelime başlangıcı sınıf isimlerinde olduğu gibi büyük
harfle başlamalıdır.

6
Açıklama

Bu sayede hangi değişkenlerin fonksiyon çağrısı içinden geldiği anlaşılır.


Örnek

class IsimBirIki
{
function StartYourEngines(&$someEngine, &$anotherEngine) {
$this->mSomeEngine = $someEngine;
$this->mAnotherEngine = $anotherEngine;
}

var $mSomeEngine;
var $mAnotherEngine;
}

Değişken İsimleri

* Sadece küçük harflerden oluşan isimler kullanınız.


* '_' karakterini kelime ayracı olarak kullanınız.

Açıklama

* Bu yaklaşımda değişkenin yaşam/erişilebilme alanı (scope) açık olarak görülebilir.


* Bütün değişken çeşitleri farklı olarak kullanıldığı için bunları ayırdetmek kolaylaşır.

Örnek

function HandleError($errorNumber)
{
$error = OsErr();
$time_of_error = OsErr->getTimeOfError();
$error_processor = OsErr->getErrorProcessor();
}

Referans Değişkenleri ve Sonuç Olarak Referans Veren Fonksiyonlar

* Referanslar 'r' karakteri ile başlamalıdır.

Açıklama

* Referans tipleri arasındaki farklar belirginleşir.


* Sonuç olarak manipüle edilebilir bir obje veren bir fonksiyon ile sonuç olarak
kodifiye edilemez bir obje veren aynı fonksiyonun ayırt edilmesi sağlanır.

Örnek

7
class Test
{
var $mrStatus;
function DoSomething(&$rStatus) {};
function &rStatus() {};
}

Global Değişkenler

* Global değişkenler 'g' karakteri ile başlamalıdır.

Açıklama

* Bir değişkenin erişim/yaşam alanının bilinmesi önemlidir.

Örnek

global $gLog;
global $grLog; // bu örnekte bir de referans için 'r' karakteri var.

Tanımlanan İsimler ve Global Sabitler

* Global sabit isimlerinin tamamı büyük harf ve '_' kelime ayracı kullanılarak
yazılmalıdır.

Açıklama

Global sabitlerin bu şekilde isimlendirilmeleri geleneksel bir yöntemdir. Bunu


kullanırken diğer tanımlanmış global isimleri ve ENUM etiketleri ile karışmamasına
dikkat ediniz.

Örnek

define("A_GLOBAL_SABIT", "Merhaba Türkiye!");

Durağan (Static) Değişkenler

* Durağan (Static) değişken isimleri 's' karakteri ile başlamalıdır.

Açıklama

* Değişkenlerin yasam/erişim alanlarını bilmek önemlidir.

Örnek

function test()

8
{
static $msStatus = 0;
}

Fonksiyon İsimleri

* PHP fonksiyonları için C GNU tarzı tamamı küçük harf olan '_' karakterinin kelime
ayracı olarak kullanıldığı isimler kullanın.

Açıklama

* Bu kullanış şekli fonksiyon isimlerini diğer bütün sınıf ile alakalı isimlerden ayırır.

Örnek

function her_hangi_bir_fonksiyon()
{
}

Fonksiyonlardan Alınan Hataları Kontrol İşlemi:

 Hataları dikkate almamak istediğinizden emin olduğunuz durumlar dışında bütün


sistem ve fonksiyon çağrılarını hatalar için kontrol ediniz.
 Bütün sistem hataları için sistem hata mesajı metnini de alınız.

Bağlama İşareti {} İşlemi

Sıkça kullanılan 3 çeşit bağlama işareti kullanım tarzından ilk ikisi geçerli olmasına
rağmen mümkün oldukça ilk tarz kullanılmalıdır.

 Bağlama işaretini ifadenin altına ve ifade ile aynı hizaya getiriniz.


if($kosul)
{
. . .
}

while($kosul)
{
. . .
}

 Geleneksel Unix tarzı olan açılış bağlama işaretinin ifade ile aynı satırda
kullanılması. (K&R stili de denir)
if($kosul){
. . .
}

9
while($kosul){
. . .
}

Açıklama
Hangi bağlama işareti tarzının kullanılacağı ancak taviz verilerek çözülebilecek bir
sorun. Her iki tarz da kabul edilebilir olsa da çoğu kişi ilk kullanış şeklini daha uygun
bulmaktadır.

İlk tarz bağlama işaretinin nerede açılıp nerede kapandığını kolayca görebilmek için
çok kullanışlıdır.

İkinci tarzı kullananlar genelde bir ekrana daha fazla kod sığdırma avantajından
yararlanmak isteyenlerdir.

Satır Başı, TAB ve Boşluk İşlemi

 Satır başını her seviyede 3,4 boşluk olarak kullanın.


 TAB yerine boşluk kullanın. Bir çok editör TAB ı boşluk karakterlerinden oluşan bir
duruma getirebilmektedir.
 Gerektiği kadar satır başı bırakın. Üst üste tekrarlanan satır başları konusunda bir
üst sınır olmasa da eğer 4,5 seviyeden fazla satır başı bıraktıysanız kodunuzu tekrar
gözden geçirin.

Açıklama
 Herkes TAB için farklı değerler kullandığı için TAB kullanılmış bir kodu başka bir
ortamda okumak veya yazıcıyla basmak çok zorlaşmaktadır. Bu yüzden farklı
ortamlarda değişiklik göstermeyecek olan boşluk karakteri kullanılmalıdır.
 Boşluk sayısı hakkında herkesin kabul ettiği bir standart yoktur. Tutarlı ve sürekli
aynı sayıda boşluk kullanılması yeterlidir. Bununla birlikte genelde 3,4 boşluk uygun
görülmektedir.
 Her ne kadar satır başı seviyesi sayısını sınırlamak isteseniz de pratikte bu
içinden çıkılamayacak bir sınırlamadır. Bu yüzden ne kadar iç içe yerleştirilmiş kod
blokları yazacakları konusunda programcıların kendi düşüncelerine güvenmek
gerekmektedir.

Örnek

function fonksiyon()
{
if (ilk kosul)
{
if (baska bir kosul)
{
while (daha da fazla kosullar)
{
}
}

10
}
}

not: (Konu sistemindeki sınırlamadan dolayı yukarıdaki kod istendiği gibi


gösterilememektedir. Normalde her kod bloğu kendisini kapsayan bloğa göre 3,4
boşluk kadar içeriden başlamaktadır)

Parantezlerin () Anahtar Kelime ve Fonksiyonlarla Kullanım İşlemi

 Parantezi Anahtar Kelimenin hemen yanına koymayıp arada bir boşluk bırakınız.
 Parantezi Fonksiyon İsimlerinin hemen yanına koyUNUZ.
 Fonksiyonların RETURN ifadelerinde gereksiz yere parantez kullanmayınız.

Açıklama
Anahtar Kelimeler fonksiyon değildir. Bunların hemen yanına parantez koymak
fonksiyonlarla karıştırılmasına sebep olmaktadır.

Örnek

if (kosul) # bosluk var


{
}

while (kosul)
{
}

strcmp($s, $s1); # bosluk yok

return 1; # parantez yok

Soyutlama (Abstraction)

Soyutlama (Abstraction) özellikle Object Oriented (obje temelli) programlamada


vazgeçilmez bir programlama prensibidir.

Basitçe soyutlama kavramını her zaman ve her şartta kullanılmaya uygun, mümkün
olan bütün koşullar ve hata senaryoları göz önünde bulundurularak yazılmış ve
spesifik olmayıp genel (jenerik) olarak kullanılabilen fonksiyonlar kullanımı olarak
tanımlayabiliriz.

Bir çoğumuz MySQL ile çalışacak programlar yazarken her seferinde,


mysql_connect, mysql_select_db, mysql_query fonksiyonlarını ara arda yazarak
çağıracağımıza bunları 'wrapper' (kapsayıcı,örtücü) denen fonksiyonlar içinde
koyarak basit bir veritabanı_sorgula() fonksiyonuna indirgeyebiliriz. Bu sayede hem
kodumuz çok daha kısa bir hale gelecektir hem de daha önemlisi iki ay sonra
PostgreSQL ile çalışmaya karar verdiğimizde kodumuzu bu yeni veritabanına

11
uyarlamak çok daha kolay olacaktır. Tek yapmamız gereken veritabani_sorgula
fonksiyonuna geri dönüp onu PostgreSQL ile çalışacak şekilde uyarlamaktır.

Peki kodumuzu başka bir veritabanına uyarlamak bu kadar kolaysa PHP'nin en son
sürümüyle gelen DBX Soyutlama fonksiyonlarına neden ihtiyaç duyulur. Bunun
birkaç sebebini sıralarsak,

1) Yeni başlayan PHP programcıları soyutlama veya wrapper kullanımı konusunda


bilgisiz olduklarından her veritabanının kendi fonksiyonlarını kullanmaya
alışmaktadır. Bu çok verimsiz bir kodlama şeklidir.

2) Soyutlama ve Wrapper fonksiyonlardan faydalanan programcıların hemen hemen


hepsi bu fonksiyonların kendi versiyonlarını yazmaktadırlar. Bu yüzden ne belli bir
standart oluşmakta ne de her zaman ve her ortamda kullanılabilecek bir beceri
kazanılmaktadır. Ayrıca bu kitaplıklar yalnızca bir programcının ürünü olduğu için
yeterli optimizasyon sağlanamamaktadır. Ayrıca programcının hiç tecrübesi olmadığı
bir veritabanında bu kitaplıklar kullanılamaz.

3) İlave modüller ve kitaplıklar halinde bir çok veritabanı soyutlama kitaplığı olmasına
rağmen bunların kullanımı standart bir boyuta ulaşmamıştır. 2. basamakta
rastlanılan sorunların çoğuna daha az bir seviyede de olsa burada da
rastlanmaktadır. Ayrıca bu modüller büyük çoğunlukla PHP'de yazıldıkları için
PHP'nin kendisinin yazıldığı dil gibi daha aşağı seviyede çalışan dillerde yazılan
fonksiyonlara nazaran daha verimsiz olmaya mahkumdurlar.

4) Bu kitaplıklar standart bir PHP kurulumunda olmayacağından kodunuz bir


makinede çalışırken diğerinde çalışmayacaktır. Özellikle tümüyle kendinize ait
olmayan ortamlarda bu büyük bir sorun yaratacaktır.

Peki DBX bize ne kazandıracak?

DBX ile birlikte bir veritabanına bağlanıp, sorgulama ve sonuçları alma işi tam
anlamıyla bir standart haline gelmiştir. Hangi veritabanını kullandığınıza bağlı
olmaksızın aynı ODBC ve JDBC teknolojilerinde olduğu gibi aynı fonksiyonları
kullanarak desteklenen her türlü veritabanı ile çalışma imkanınız olacaktır.

Eğer kodunuzu başka bir veritabanına uyarlamanız gerekirse tek yapmanız gereken
en baştaki hangi tür bir veritabanına bağlanıldığını belirleyen seçeneği yeni
veritabanına değiştirmektir. Bunu yaptıktan sonra teoride kodunuz yeni veritabanı ile
hiç bir kod değişikliğine gereksinim kalmadan çalışacaktır.

Bu aşamada aklımızda tutmamız gereken 4. 0. 6 ve DBX'in çok yeni teknolojiler


olduğu ve henüz bütün veritabanlarını desteklemediği. Tabi ki açık kod felsefesi
sayesinde az veya çok kullanılan veritabanlarının hepsinin en kısa zamanda
desteklenmeye başlayacağından hiç şüphemiz yok. Örneğimize geçmeden önce şu
anda desteklenen veritabanlarına göz atalım. MySQL,PostgreSQL, Microsoft SQL
Server, ve ODBC destekleniyor. Bu arada Oracle, Sybase, DB2 gibi diğer bazı
veritabanları desteklenmemesine rağmen ODBC desteği sayesinde bunların da DBX
ile kullanılması mümkün. Unutmadan, DBX'i kullanabilmek için kurulum
aşamasında . /configure 'e --enable-dbx i de eklemek gerekiyor.

12
Örnek 1.

Bu örneğimizde tek yaptığımız MySQL veritabanına bir bağlantı kurup, bağlantının


kurulduğunu onayladıktan sonra bağlantıyı kapatıp çıkmak.

<?php
$link = dbx_connect ("mysql", "localhost", "veritabani_adi", "kullanici_adi", "sifre")
or die ("Veritabanına Bağlanılamadı");
print ("Veritabanına bağlantı sağlandı");
dbx_close ($link);
?>

İkinci örneğimizde ise veritabanımızdaki isciler_tablosu tablosundan isçilerin


ad ve soyadlarını ekranda listeleyen küçük bir program yazacağız.

Örnek 2.

<?
// İlk basamak veritabanına bağlantıyı sağlamak
$db = dbx_connect ("mysql", "localhost", "veritabani_adi", "kullanici_adi", "sifre");

// İkinci olarak veritabanı sunucusuna bir sorgu yolluyoruz.


$sonuc = dbx_query ($db, "SELECT ad, soyad FROM isciler_tablosu");

// dbx_query() fonksiyonu hata halinde '0' gönderiyor.


// Başarılı bir sorgu sonucunda ya '1' ya da varsa sorgu sonuçları gönderiliyor.
if ($sonuc == 0)
{
echo 'Sorgu Çalışmadı<br />';
}
else
{
// Sorgumuzun sonucu olarak kaç sonuç satırı gönderildiğini $sonuc
// objesinin 'rows' (satırlar) değişkeninden öğreniyoruz.
// Bu bir sonraki döngü için gerekli.
$sonuc_satırlari = $sonuc->rows;

// Veritabanının gönderdiği satırları bir bir geziyoruz.


for ($satır = 0; $satır <= $sonuc_satırlari; $row++)
{

// Sonuçları sonuç objesinin 'data' değişkenini kullanarak tablodaki alan


// isimlerini denk gelen değişkenleri çağırarak alıyoruz.
echo 'İsçi Adı: '. {$sonuc->data[$satır]["ad"]}. '<br />';
echo 'İsçi Soyadı: '. {$sonuc->data[$satır]["soyad"]}. '<br />';
}
}

13
// En son olarak da veritabanına açtığımız bağlantıyı kapatıyoruz.
dbx_close($db);
?>

DBX konusunda dikkat etmeniz gereken bir özellik sonuç satırlarını veritabanından
istemek için bir fonksiyon bulunmayışı. Yani mysql_fetch_array, mysql_fetch_row
tarzı fonksiyonlar kullanılmıyor. Bütün sorgular çalıştırıldıkları anda otomatikman
sonuçları da bir array'e atıyorlar. Yani dbx_query hem sorgu hem de sonuçları alma
işlemini yerine getiriyor.

Diyelim ki bu örneği PostgreSQL ile çalıştırmak istiyoruz. . Tek yapmamız gereken


ilk satırdaki dbx_connect() fonksiyonundaki ilk parametre olan 'mysql' i , 'pgsql' ile
değiştirmekten ibaret.

BÖLÜM 3

14
PHP İÇERİSİNDE DEĞİŞKENLERİN KULLANIMI

Önce "değişken" ne demek onu tanımlamakla başlayalım. Değişken en basit tanımı


ile bir verinin saklanmasında kullanılan hafıza alanıdır. PHP içerisinde bir değerin
hafızada tutulması için,değişkenimize bir isim verip başına "$" işareti getirmek
yeterlidir. Örnek verecek olursak:

$yazar = "Metin Adaklı";

Burada "yazar" değişken adimiz,içinde sakladığımız değer ise "Metin Adaklı" dır.

Değişkenimizin içinde bir sayı da tutabilirdik.

$yasimizin_icinde_tutuldugu_degisken = 24;

Ne zaman değişkenimizi HTML sayfası içerisinde göstermek istersek aşağıdaki kodu


yazmak yeterli olacaktır.

echo $yazar;

Buradaki echo () komutu değişkenimizi ekrana basmak için kullanılan komuttur.

Aynı şekilde yaşımızın içinde tutulduğu "yasimizin_icinde_tutuldugu_degisken"


değişkenini ekrana basmak için echo komutunu kullanabiliriz.

echo $yasimizin_icinde_tutuldugu_degisken;

Değişken Kullanımındaki Kısıtlamalar

Bir çok programlama dilinde değişken kullanımına ilişkin kısıtlamalar vardır. Örnek
olarak değişken adı kullanırken o dilin fonksiyon adları kullanılamaz veya
değişkenlerin karakter sayıları belli bir değeri geçemez. PHP ile kullanılan
değişkenlerde herhangi bir karakter sayısı limiti yoktur. İsterseniz değişken adınız
1000 karakter uzunluğunda olabilir.

PHP ile değişken adı kullanımında ilk sınırlama değişken adının mutlaka bir harf veya
"_" altçizgi ile başlaması zorunluluğudur. (Tabiî ki dolar işaretini burada göz önüne
almayınız. Dolar işareti yazdığımız karakterin değişken olduğunu PHP ye göstermek
için kullanılmaktadır. )İkinci sınırlama değişken adı içerisinde yalnızca harf,rakam,ve
"_" altçizgi kullanılabilir. Değişken adı içerisinde kullanacağınız +,-,& vb gibi
karakterler web sayfasında hataya yol açarlar.

Değişken Adları BÜYÜK/küçük Harfe Duyarlıdır

$yazar = "Metin Adaklı"; ile


$Yazar = "Metin Adaklı";

aynı şeyler değildir!!!.


yukarıdaki kod grubunda iki tane değişkenimiz var bunlardan birincisi :

15
"yazar"

ikincisi :

"Yazar"

dır. Bu iki farklı değişken için ayrı ayrı küçük hafıza alanları yaratılıp değerler bu
alanlarda saklanacaktır. Bu konu ile ilgili bir örnek yazalım:

1. Editör programınızı açın ve aşağıdaki kodları yazın. (Windows kullanıyorsanız


Notepad işinizi görür)

<HTML>
<BODY>
<?php
$yazar = "Metin Adaklı";
echo $yazar;
?>
</BODY>
</HTML>

2. Bu dosyayı "degisken. php" olarak kayıt edin.

3. Browser üzerinde sayfayı görüntüleyin. ([Link] php)

Şöyle bir görüntü olması gerekiyor.

Metin Adaklı

Program nasıl çalışıyor?


Aslında programımız iki satır koddan oluşuyor. ilk satır değişkenimizi tanımlayıp ona
bir değer verdiğimiz satır :
$yazar = "Metin Adaklı";

İkinci satır kodumuz değişkenimizi ekrana basmak için kullandığımız satır :

echo $yazar;

Dikkat ettiyseniz echo ile değişkenimizi ekrana bastırırken tırnak işaretleri


kullanmadık. Eğer kullansaydık ta ekranda gördüğümüz değer değişmeyecekti.

Yani eğer şöyle yazmış olsaydık,

echo "$yazar";

Yinede ekranda aynı çıktıyı görecektiniz. (Metin Adaklı). Bunun sebebi PHP ile
çalışırken unutmayın ki $ işaretinden sonra gelen karakterler değişken ismidir ve

16
tırnak işaretlerinin olup olmamasına bakılmadan değişken muamelesi göreceklerdir.
Burada olduğu gibi ekrana şöyle bir görüntü gelmeyecektir.

"$yazar"

echo "$yazar" yazılınca ekrana $yazar ifadesinin geleceğini bekledik. Ama bunun
yerine değişken içinde saklanan değer geldi. Bu olay biraz Perl dilinden birazda Unix
Shell programlama tekniğinden geliyor.

Eğer PHP nin bunu gözardı etmesini isterseniz mutlaka tek tırnak kullanmalısınız.

'$yazar' şeklinde o zaman yazdığınız terim ekrana basılacak ve bir değişken olup
olmadığına bakılmayacaktır. Yani ekrana olduğu gibi $yazar ifadesi gelecektir.

Veri Tipleri

Daha önceden belirttiğimiz gibi PHP içerisinde değişkenlerimize text veya numerik
değerler verebiliyorduk. Aslında pratikte bunlardan daha değişik veri tipleri de
mevcuttur. PHP içerisinde diziler,objeler veri tipi olarak kullanılabilir. Aşağıda PHP
içerisinde kullanılan veri tiplerinin tüm listesi bulunmaktadır.

 string (text)
 integer (numerik)
 double (numerik)
 array
 object (Nesne)
 unknown type (bilinmeyen veri tipi)

Veri tipleri programcı tarafından tayin edilmez. PHP web sayfasını işlerken bu veri
tiplerinin ne olması gerektiğine kendisi karar verir.

String Veri Tipi

String veri tipi içerisinde textler tutulur. Bu bazen bütün bir cümle veya yalnızca bir
kelime olabilir. Çift Tırnak içine alınan bütün karakterler ve hatta numerik sayılar bile
düz text muamelesi görür.

$ArabaTipi = "Tofaş";
$MotorHacmi = "1. 6";

Yukarıdaki iki değişkendeki veri tipi aynıdır. İkisi de string veri tipidir ve düz texttir.
Yani tırnak içerisindeki ifade numerik diye veri tipimiz numerik olmayacaktır. Çift
tırnak işareti içine alınan tüm veriler "string" yani düz text olarak değerlendirilir.

String Sıralaması

17
String sıralaması bir değişken içinde tutuğumuz bir textin yanına ikinci bir
değişkenimizde tuttuğumuz textin yazdırılması olarak tanımlanabilir. En basit olarak
aşağıdaki örnekte nasıl yapıldığı gösterilmiştir.

$Araba = $ArabaTipi . $MotorHacmi;

artık $Araba değişkenimiz içerinde şöyle bir değer saklanıyor : Tofaş1. 6

Şimdi olayı biraz daha güzelleştirelim ve Tofaş1. 6 yerine Tofaş 1. 6 yapabilir miyiz
diye bakalım. (Birinde Tofaş1. 6 diğerinde Tofaş'tan sonra bir boşluk var. )

Bunun için boşluk değişkeni yaratalım:

$Bosluk = " ";

Ve $Araba değişkenimize ekleyelim

$Araba = $ArabaTipi . $Bosluk . $MotorHacmi;

Artık $Araba değişkenimiz içerisinde şöyle bir değer saklanıyor.

Tofaş 1. 6

Bu boşluğu şu şekilde de yaratabilirdik.

$Araba = $ArabaTipi . " " . $MotorHacmi;

İki şekilde de Araba Tipi ile Motor Hacmi arasında boşluk yaratılabilir. Burada
örneklerle PHP bilginiz arttırılmaya çalışılmaktadır.

Şimdi ekrana bu arabanın sahibinin adı ile beraber yazdıralım.

echo "Metinin arabası $Araba ";

Ekrana gelen görüntü şöyle olacaktır.

Metinin arabası Tofaş 1. 6

Not : Eğer ekrana "parse error" yazan bir hata mesajı geliyorsa ilk önce bütün
satırların sonuna ";" koyduğunuza emin olun. Eğer halen hata mesajı geliyorsa
değişken isimlerinizi kontrol edin büyük olasılıkla yanlış yazdınız veya büyük/küçük
harf ayrımına dikkat etmediniz.

Numerik Veri Tipleri

18
PHP içerisinde kullanılan iki değişik numerik veri tipi vardır. Bunlardan ilki "integer"
ikincisi "double" dir. Örnek vererek açıklayalım.

$integer_numerik_veri_tipi = 26;
$bir_baska_integer_numerik_veri_tipi = -3598;

$double_numerik_veri_tipi = 4. 567;
$bir_baska_double = -16. 1;

Bu iki veri tipinde görüldüğü üzere birinde tamsayılar(integer) diğerinde ondalık


sayılarla beraber tam kısım değerleri tutulmaktadır(double). Bu iki veri tipinin
farklılıkları yalnızca bu değildir. Tutabilecekleri değer aralığı da double ve integer da
farklıdır. Üzerinde çalışılan işletim sistemine göre tutabilecekleri sayı aralığı değişir.
Mesela Windows ortamı için bu aralık integer için -32768 den 32767 ye kadardır.
Double için Windows ortamında aralık;

1. 79769313486232E308 den -4. 94065645841247E-324 (Negatif Değerler için)


+4. 94065645841247E-324 den 1. 79769313486232E308 (Pozitif Değerler için)

*E notasyonu 10 un katlarını göstermek için kullanılmıştır. (2. 5E3 = 2500 gibi)

Matematiksel İşlemler

+ Toplama işlemi için


- Çıkarma işlemi için
* Çarpma işlemi için
/ Bölme işlemi için
% Mod işlemi için kullanılır. ( 16 % 3 = 1 gibi)

Bir kaç örnekle açıklayalım :

$Anakart = 125;
$Modem = 65;
$Hafiza = 110;
$Toplam = $Anakart + $Modem + $Hafiza;
echo "Toplam masrafımız $Toplam dolar. . . ";

Burada Anakart, Modem ve Hafıza için değerlerimizi girdik. Sonrada Toplam


değişkeninde bunları toplattık. Ekrana toplam sonucu yazmak için ise echo komutunu
kullandık.

Eğer bunları bir HTML sayfası içinde görüntülemek istemiş olsaydık:

<HTML>
<BODY>
<?php
$Anakart = 125;
$Modem = 65;

19
$Hafiza = 110;
$Toplam = $Anakart + $Modem + $Hafiza;
echo "Toplam masrafımız $Toplam dolar. . . ";
?>
</HTML>
</BODY>

Yazmamız ve kaydetmemiz yeterli olacaktı. Browserdan bu sayfaya baktığınızda


şöyle bir görüntü olacaktı.

Toplam masrafımız 300 dolar. . .

Değişkenin Değerini Kendine Eklemek

PHP içerisinde değişkenin değerini kendine eklemeyi öğrenmek bazen çok işimize
yarayacaktır. O yüzden bu işlem çok önemlidir. Bir çok işlemde bunu kullanacağız ve
buradaki kısa yollar programcı için önemli ölçüde zaman kaybını engelleyecektir.

Kısaca olaya bakmak gerekirse :

$IslemSayısi = 5;
$IslemSayısi = IslemSayısi + 1;
echo $işlemSayısi;

Gibi bir kod parçası yazdığımızda ekranda göreceğimiz değer "6" olacaktır.
Değişkenimiz içerisinde tutulan değerimiz ilk başta "5" sayısıydı. Değişkenin
kendisine "1" ekledik ve sonuç "6" oldu. Çok basit gibi görünen bu işlem aslında bir
çok şeyin temelidir. Bu konu hakkında bir kaç kısayol bulunmaktadır. Yukarıdaki
yazım şeklinden ayrı olarak PHP içinde kullanabileceğiniz değişik şekiller şöyledir.

$IslemSayısi = 5;
$IslemSayısi ++;
echo $IslemSayısi;

Çıktınız yine aynı "6" olacaktır. ($IslemSayısi = $IslemSayısi + 1; ile aynı yazım
şeklidir. )

$IslemSayısi = 5;
$IslemSayısi + = 2;

Çıktınız bu sefer "7" olacaktır. ($IslemSayısi = $IslemSayısi + 2; ile aynı yazım


şeklidir. )

$IslemSayısi = 5;
$IslemSayısi + = $IslemSayısi;

Çıktınız yine "6" olacaktır. ($IslemSayısi = $IslemSayısi + 1; ile aynı yazım şeklidir. )

20
Matematiksel İşlemlerde Öncelik Sırası

Gerçek matematik hesaplamalarında olduğu gibi işlemlerin birbirine göre öncelikleri


vardır. Bir örnekle açıklarsak :

$Sayı = 3+5*6;

İşleminin sonucu şöyle hesaplanacaktır. İlk önce çarpma sonra bölme sonra toplama
sonrada çıkarma işlemleri yapılacaktır. Örneğimizde ilk önce "5" ile "6" çarpılacak
daha sonra çıkan sayı "3" ile toplanacaktır.

Çıktımız "33" olacaktır.

Eğer parantez içine alınmış bir işlem varsa ilk önce parantez içindeki işlemler yapılır.
Örnek verecek olursak :

$Sayı = (3+5)*6;

Çıktımız "48" olacaktır.

Bütün öğrendiklerimizi bir büyük örnek üzerinde göstermek istersek :Fiyatı 1000 lira
olan malın KDV eklenince ne kadar olduğunu , %20 indirimden sonra ne kadar
olduğunu hesaplayalım.

1. Text editörünüzü açıp aşağıdaki kodları yazın.


<HTML>
<BODY>
<?php
$Fiyat = 1000;
$KDV = 10;
$Indirim = 20;

$KDV_Eklenince_Fiyat = $Fiyat + (($Fiyat/100)*$KDV);


$Indirim_Olunca_Fiyat = $Fiyat - (($Fiyat/100)*$Indirim);

echo "KDV Dahil Fiyatı $KDV_Eklenince_Fiyat <BR>";


echo "İndirim Olunca Fiyatı $Indirim_Olunca_Fiyat";
?>
</BODY>
</HTML>

2. Bu dosyayı "fiyat. php" olarak kayıt edin.


3. Browser yardımıyla dosyayı açın. ([Link] php)

Sabitler

21
Şimdiye kadar olan kısımda değişkenlere nasıl değer verebileceğimizi gördük.
Değişkenlerimize değer atarken aşağıdaki gibi örnekler kullandık.

$yazar = "Metin Adaklı";


echo $yazar;
$yazar = "Tom Hanks";
echo $yazar;

Böyle yazılmış bir kod grubunun çıktısı şöyle olacaktır.

Metin Adaklı
Tom Hanks

Eğer web sayfasında $yazar değişkenini echo () komutuyla beraber kullanırsanız


böyle iki değişik çıktı alırsınız. Eğer istediğiniz bu olayın olmasını engellemek ise
"Sabit" kavramını öğrenmeniz gerekmektedir.

PHP programlarımız içerisinde bazı değişkenlerin değerlerini sabit olarak işin en


başında tanımlayabiliriz. Bunun için en güzel bir kaç örnek aşağıda verilmiştir.

$Turkiyenin_Kurucusu = "Mustafa Kemal Atatürk";


$Suyun_Kaynama_Noktasi = 100;
$Ulkemin_Adi = "Türkiye";

PHP içerisinde,aldığı değer tüm işlemler boyunca veya programın akışı içerisinde,ilk
verdiğimiz değerden başka değer alamayacak sabit tanımlamak için "Define"
terimini kullanıyoruz. Örnek vermek gerekirse,

define ("TURKIYENINKURUCUSU", "Mustafa Kemal Atatürk");


define ("SUYUNKAYNAMANOKTASI", 100);
define ("ULKEMINADI", "Türkiye");

Görüldüğü üzere bu değerler asla değişmeyecek fiziksel veya tarihsel değerlerdir. Bu


nedenle bu tip öğeler için programın başında bu tip sabit değişken tanımlamaları
yapmak işimizi kolaylaştıracaktır. Web için bu olayı düşünürsek bazen browser
penceresinin yükşekliği,veya genişliği gibi değerlerin ne olması gerektiğini sabit
olarak programın başında bu şekilde "sabit"leri "define" komutunu kullanarak
tanımlayabilirsiniz.

PHP içerisinde sabitler aynı değişkenler gibi echo () komutu kullanılarak ekranda
gösterilebilir. Bunu bir örnekle açıklayacak olursak,

echo "Türkiye’nin ilk Cumhurbaşkanı " . TURKIYENINKURUCUSU;

Not : Sabitleri kullanırken bu şekilde çift tırnağın dışında kullanmak olası hataları
engelleyecektir.

yukarıdaki kodun çıktısı şu şekilde olacaktır.

Türkiye’nin ilk Cumhurbaşkanı Mustafa Kemal Atatürk

22
PHP içerisinde ,kurulum sırasında tanımlanmış bazı sabitlerde bulunmaktadır. Bunlar
PHP nin kendisi yazılırken tanımlanmıştır. Örnek vermek gerekirse,

echo PHP_OS;

Komutunun çıktısı PHP nin üzerinde çalıştığı server’ın İşletim Sistemi olacaktır. Bu
şekilde tanımlanmış sabitler için PHP nin kendi sitesinden detaylı bilgi alabilirsiniz.
(www. php. net)

Genel Tanımlı Değişkenler (Environment Variables)

Bunlar PHP değişkenleri olarak ta tanımlanmaktadır. Programınızdan bağımsız


olarak PHP tarafından o anda yaratılmış değişkenlerdir. PHP programlarınız içinde
bu değişkenleri kolayca kullanabilirsiniz. Bu değişkenler genelde HTTP ile bilgileri
içlerinde barındırırlar. Programınızın içinden bu değişkenleri çağırabilir,ve içlerindeki
veriyi aynı kendi değişkenlerinizde kullandığınız gibi kullanabilirsiniz. Bir örnek
vermek gerekirse,

echo $HTTP_COOKIE_DATA;

böyle bir kodun çıktısı size kullanılmakta olan bir cookie yani çerez bilgisi olup
olmadığını gösterecektir.

Bir başka kullanışlı PHP değişkeni

echo HTTP_USER_AGENT;

Bu değişkeni kullanarak kullanıcının kullandığı browser tipini öğrenebilirsiniz. PHP


değişkenlerini kendiniz değiştiremezsiniz. Yalnızca işinize yaraması için
kullanabilirsiniz. Genel Tanımlı PHP değişkenlerinin tam listesini ve ayrıntılı
açıklamalarını www. php. net adresinden öğrenebilirsiniz.

Dönüşümler

PHP programlarının yazılması sırasında karşımıza şöyle bir problem çıkabilir. Eğer
değişkenin veri tipini değiştirmek isterseniz bunu nasıl yapacaksınız. Daha önceki
konularda veri tipleri(Text,Sayı,Nesne vs) hakkında detaylı açıklama yapılmıştı. Şimdi
konumuza bir örnek verelim.

$Araba = "1. 6 Tofaş";


$KDV = 17;
$Odenecek_Vergi = $Araba * $KDV ;

İlk değişkenimiz bir text yani düz bir yazı, ikinci değişkenimiz bir sayı. Üçüncü satırda
ise bir text ile bir sayının çarpımını bir değişkene atıyoruz. Çarpımın sonucunu ise:

echo $Odenecek_Vergi ;

23
ile sonucu ekrana yazdırmak istersek karşımıza ,

"27. 2" gelecektir.

PHP ye bir sayı vererek onu text ile çarpmasını söyledik. PHP de text içerisindeki ilk
sayı değerini alarak gerisindeki texti önemsemeden ilk sayı ile (17) text içerisinde yer
alan sayıyı (1. 6) çarptı. Sonucu da $Odenecek_Vergi değişkeni içerisinde sakladı.
Bu olay PHP nin ilginç bir özelliğidir. PHP gerektiğinde bu tip mantıksal kararları
verebilecek kadar zekice tasarlanmıştır.

Değişken Tip Dönüşümü

PHP içerisinde bir değişkenin veri tipini kesin olarak belirlemek istersek (Sonuçta
yukarıdaki gibi bir olayı her zaman istemeyebiliriz),

Aşağıdaki örnekte olduğu gibi değişkenin değerini kendisine özel bir tanımlama ile
eşitlememiz gerekmektedir.

$DegiskenAdi = 3;
$DegiskenAdi = (string) $DegiskenAdi;

Yukarıdaki örnekte ilk önce $DegiskenAdi değişkeni içerisinde bir sayı değerini
atadık. Bu değişkenin veri tipi sayıdır (Numerik). İkinci satırda değişkenimizi düz yazı
veri tipine çevirdik (String). Bu olay programlarımız içerisinde bir sayı değeri olarak
kullandığımız değişkenin yeri geldiğinde text veri tipi olarak kullanılmasını
sağlayacaktır. Eğer tekrar bu değişkeni Numerik veri tipine dönüştürmek istersek
yapmamız gereken aynı şekilde olayı tersine çevirmektir.

$DegiskenAdi = 3;
$DegiskenAdi = (string) $DegiskenAdi;
$DegiskenAdi = (integer) $DegiskenAdi;

İlk Satırda değişkenimize 3 değerini atadım. Bu numerik bir veri tipidir. (Verinin 3
olmasından dolayı string değil, çift tırnak içerisine almadığım için verimiz bir numerik
veri tipidir. Eğer şöyle yapsaydık "3"; Bu değişkenimiz düz text veri tipinden başka bir
şey olmayacaktı). İkinci Satırda bu numerik tipteki veriyi(integer veya double) ,düz
text tipinde (string) bir veri tipine dönüştürdük. Üçüncü satırda tekrar verimizi string
halden çıkarıp numerik bir hale soktuk.

gettype () ve settype () Kavramları

Bu iki komut değişkenimizin veri tipini öğrenmek ve değişkenimize istediğimiz veri


tipini atamak için kullanılır.

Örnek vermek gerekirse,

$DegiskenAdi = 3;
echo gettype ($DegiskenAdi);

Bu iki satırlık kod parçasının çıktısı şöyle olacaktır.

24
"integer"

Burada gettype komutunu kullanarak PHP'ye değişkenimizin ne tur bir veri tipine
sahip olduğunu sorduk. PHP bize bu değişken içinde saklanan verinin "integer" yani
numerik bir veri olduğu cevabini verdi. (gettype komutunu echo ile kullanarak PHP
nin ekrana cevabi yazmasını sağladık)

Şimdi de "settype" komutunun kullanımına bakalım.

$DegiskenAdi = 3;
settype ($DegiskenAdi , "string");

Aynı Yukarıda veri tipinin donuşumu konusunda anlattığımız gibi bir numerik veri
tipini "settype" kullanarak string yani düz text veri tipine dönüştürdük.

Artık "gettype" komutu ile değişkenin veri tipini öğrenmek istersek şimdi artık cevap
"string" şeklinde olacaktır.

$DegiskenAdi = 3;
settype ($DegiskenAdi , "string");
echo gettype ($DegiskenAdi);

Kodumuzun çıktısı,

"string" olacaktır.

İlk satırda bir numerik tipinde verimiz vardı settype kullanarak bunu string hale
cevirdik. Sonra da gettype komutunu kullanarak değişkenimizin ne tür bir veri tipinde
değer sakladığını bulduk. echo komutunu kullanarak ta ekrana yazdırdık.

isset, unset, ve empty Komutlarının Kullanılması

PHP içerisinde yer alan bu üç komut değişkenlerle ilgili işlemlerde çok kullanışlıdır.
Aşağıda bu uç komutun kullanımlarına ilişkin detaylı açıklama bulacaksınız.

İlk komutumuz "isset ()" bize komutun içinde verdiğimiz yazı gurubunun bir değişken
olarak program içinde tanımlanıp tanımlanmadığının cevabini verir. Mesela program
içerisinde $Sayi diye bir değişken tanımlayıp tanımlamadığımızı bulmak istiyoruz.
Bunun için aşağıdaki gibi bir kod yazmamız yeterli olacaktır.

echo isset ($Sayi);

bu kodun çıktısı, eğer böyle bir değişkenimiz var ve bir değer bu değişken içinde
saklanıyorsa "1" değerini döndürür. Eğer böyle bir değişken hiç tanımlanmadı ise hiç
bir değer döndürmez (Sıfır değerini bile döndürmez. Hiçbir şekilde, hiçbir değer
almaz). Bu mesela bir çerezin yazılıp yazılmadığını kontrol ederken işimize
yarayabilir.

İkinci komutumuz unset () 'in kullanımına bakacak olursak, bu komutla bir değişken
içindeki verinin tamamen yok edilmesini sağlıyoruz.

25
unset ($Sayi);

şeklinde kullanılır. Değişkenin bir hafıza parçasında sakladığı veri bu komutla imha
edilir. Hafıza parçası tamamen temizlenir. Kullanırken dikkat edilmesinde fayda
vardır.

Üçüncü komutumuz empty ()

empty () fonksiyonu isset () fonksiyonu ile tam zıt bir işlev görür. Eğer değişkenin
herhangi bir değeri yoksa,değeri sıfıra eşitse veya bos bir string veri
içeriyorsa,fonksiyondan "true" yani doğru değeri döner. Diğer bütün hallerde "false"
yani yanlış yapısal değeri döner.

Örnek :

echo empty ($yenidegisken); //true

Değişkenin herhangi bir değeri olmadığı için empty () fonksiyonu "true" değerini
döndürdu. Şimdi değişkene bir değer verelim ve tekrar çalıştıralım:

$yenidegisken = 1;
echo empty ($yenidegisken); //false

Şimdi ekrana false yazdı çünkü değişken bir değere sahip ve bu değer ne sıfır ne bos
bir string. . .

$yenidegisken = "";
echo empty ($yenidegisken); //true

$yenidegisken = 0;
echo empty ($yenidegisken); //true

$yenidegisken = "İstanbulda olmak vardı. . . ";


echo empty ($yenidegisken); //false

unset ($yenidegisken);
echo empty ($yenidegisken); //true

is. . . () Fonksiyonları

is_int (), is_integer (), ve is_long () fonksiyonları hepsi birbirinin hemen hemen aynı
olan,bizim değişkenin "integer" yani tamsayı olup olmadığını anlamamıza yarayan
fonksiyonlardır.

is_double (), is_float (), is_real fonksiyonları hepsi birbirinin hemen hemen aynı
olan,bizim değişkenin "double" yani ondalık sayı olup olmadığını anlamamıza
yarayan fonksiyonlardır.

26
is_string (), is_array () ve is_object () ise kendi adlarıyla anılan değişken veri tipleri
için bizim örneğin bir değişkenin string,array veya object olup olmadığını anlamamızı
sağlarlar.

Örnek :

$UrunNo = "432BB";
if (is_string ($UrunNo)) {
echo ("String");
}

. . . val () Fonksiyonları

intval (), doubleval () ve strval () fonksiyonları ile değişkenin sahip olduğu veri tipi
değiştirilebilir. Bu fonksiyonlar yardımıyla bir değişkenin "dizi" veya "nesneye"
dönüştürülmesi sağlanamaz.

Örnek :

$UrunNo = "432BB";
$i = intval ($UrunNo); //$i = 432 olur.

intval () fonksiyonu seçeneğe bağlı olarak bir ikinci argument olarak sayı düzeni
sisteminizin seçilmesini alabilir. Örneğin değişkenin sahip olduğu değeri 16 lık sayı
düzenine çevirmek istersek :

$UrunNo = "432BB";
$i = intval ($UrunNo,16); //$i = (decimal) 275131 olur.

Bazı kısa yollar ile değişken işlemlerinin yapılması ve kodun okunabilirliğinde artış
sağlanması

$h += $i; Bu şuna eşittir : $h = $h + $i;


$h -= $i; Bu şuna eşittir : $h = $h - $i;
$h *= $i; Bu şuna eşittir : $h = $h * $i;
$h /= $i; Bu şuna eşittir : $h = $h / $i;
$h %= $i; Bu şuna eşittir : $h = $h % $i;
$h &= $i; Bu şuna eşittir : $h = $h & $i;
$h |= $i; Bu şuna eşittir : $h = $h | $i;
$h ^= $i; Bu şuna eşittir : $h = $h ^ $i;
$h . = $i; Bu şuna eşittir : $h = $h . $i;
$h >>= 2; Bu şuna eşittir : $h = $h >> 2;
$h <<= 2; Bu şuna eşittir : $h = $h << 2;
$h ++; Bu şuna eşittir : $h = $h + 1;
$h --; Bu şuna eşittir : $h = $h - 1;

Bazı ilginç noktalar

27
Şimdi aşağıdaki örneğe bakiniz:

$a = 10; //$a 10'a eşit.


$a ++; //Şimdi $a 11'e eşit.

$a=10; //$a 10'a eşit.


++$a; //$a 11'e eşit.

//Fakat :

$a = 10; //$a 10'a eşit


$b = $a++; //$a 11'e eşit ve $b 10'a eşit. Çünkü atama işleminden sonra bir arttırma
olayı var.

$a = 10; //$a 10'a eşit


$b = ++$a; //$a 11'e eşit ve $b 11'e eşit. Çünkü atama işleminden önce bir arttırma
olayı var.

BÖLÜM 4

IF Yapısı

28
Bir programlama dili içerisinde "Karar Verme Yapıları" önemli yer tutar. Bu çoğu
zaman verdiğimiz şartlar içerisinden bilgisayarın uygun olanı o andaki verilere göre
seçmesini sağlamaktır.

Bir İnsanin Alışveriş Sürecini İncelemek ve Programlama Mantığını Anlamak

Şimdi her gün yaptığımız bir alış-veriş sureci için beynimizin nasıl çalıştığına bakalım.
Bu şekilde programlama mantığını ve beyninizin nasıl bilgisayar gibi çalıştığını ve
sandığımızdan ne kadar fazla şeye sahip olduğumuzu göreceksiniz. Programcılık
nedir ki? Zaten her gün bunu fark etmesek te yapıyoruz .

1. Buzdolabını kontrol et. Süt,peynir,Yumurta bitmiş mi?Gerekli ise listeye ekle.


2. Ekmekliğe bak Ekmek lazım mı?Lazımsa listeye ekle
3. Eğer evcil hayvanın ihtiyaçları varsa 6'inci işleme git.
4. Süpermarket’e git.
5. Listedekileri cebindeki 10 TL'ye göre al.
6. Evcil hayvanin yiyeceğini kontrol et. Lazımsa listeye ekle
7. Hayvan Mutlu.
8. Süpermarkete git. Listedekileri al.
9. Eve dön TV İzle.
10. Keyfine Bak.

"IF" yapıları belkide programcıların en çok kullandığı yapılardır. Neredeyse her karar
verme yapısında kullanılırlar. Kullanım şekli çok basit olarak şöyledir.

IF (eğer şart sağlanıyorsa) satırdaki kodu uygula

if karar verme yapısında eğer ilk verilen satırdaki kod grubu şartları sağlıyorsa satırın
geri kalanındaki kod grubu uygulanır. Eğer şartları sağlamıyorsa göz ardı edilerek bir
alttaki satır okunur.

Bir mantıksal örnek verirsek,

if (hava yağmurlu ise) şemsiyeni al


Dışarı cık

İlk satırda if komutundan sonra şartımızı belirttik. Bilgisayar havayı kontrol etti eğer
yağmurlu ise bize şemsiyeyi aldırdı. Eğer hava yağmurlu değilse direkt olarak bizi
dışarı çıkarttı. Mantık çok basit.

Eğer vereceğimiz şartlar bir tek komutta belirtilemiyorsa şöyle bir yapı kullanıyoruz.

If (eğer şart sağlanıyorsa)


{
Bu parantezlerin içinde verilen tüm kod grubunu uygula
}

29
Mantıksal örneğimize dönersek bu yazım şekli için örneğimiz şu şekilde,

If (hava yağmurlu ise)


{
Şemsiyeyi Al
Yağmurluğu Al
}

Dışarı çık

Bir kez daha belirtelim "Dışarı çık" terimi her şart altında uygulanacaktır. Ama önemli
olan nokta biz dışarıya şemsiye ve yağmurluğu alıp mı çıkacağız yoksa almadan mı?
İşte buna bilgisayar hava durumunu kontrol ederek karar veriyor. Dışarıya eğer hava
yağmurlu ise bizi elimizde semsiye ve yağmurlukla çıkarıyor.

Parantezlerin içindeki ifadenin büyüklüğü veya ne kadar fazla kod içerdiği hiç bir
zaman önemli değildir.

Boolean Değişkenler

Değişken tiplerini bir önceki konumuzda sınıflandırmıştık. Aynı string değişken tipi
gibi Boolean değişken tipi de mevcuttur. Boolean değişkenler yalnızca iki değer
alabilir. Doğru ve Yanlış. Eğer Boolean olarak tanımladığımız değişkenimiz doğru
değerini döndürüyorsa alacağı değer numerik olarak "1" dir. Eğer Boolean
değişkenimiz "yanlış" değerini döndürüyorsa alacağı değer "0" dır.

Örnek vermek istersek,

$Degisken = true;

Burada yazılan "true" ifadesinin İngilizceden Türkçeye tam çevirisi "doğru" dur.
Böyle bir satır kod için echo komutunu kullanarak $Degisken değişkeninin tuttuğu
değeri görmek istersek,

echo $Degiken;

ekranda yalnızca "1" değeri görünür.

">" ve "<" Operatörleri

Temel matematik bilgisidir. ">" ifadesi büyük , "<" ifadesi küçük anlamına gelir. Karar
verme yapısı içerisinde kullanmak istediğimizde matematikte kullandığımızdan çok
farklı işlevler görmezler.

Örnek vermek istersek

if (8<9) echo "Sekiz rakamı Dokuz rakamından küçüktür";

30
if yapısı kullanılırken parantezin içinden,PHP bir sonuç çıkarır. Bu sonuca göre
işlemin gerisine mi devam edecek bir sonraki satırı mı okuyacağına karar verir. Asla
"olabilir" veya "belki" gibi bir sonuç parantezin içinden çıkmaz. Kısaca PHP ya
"Doğru" için 1 yada "Yanlış" için 0 olarak kesin kararını verir.

Bir örnek te değişken kullanarak yapalım,

if ($SansliNumara < 9) echo ("Şanslı numaramız 9 rakamından küçük");

Şimdi de iki değişkeni if içerisinde kullanarak devam edelim,

if ($SansliNumara < $LotoNumara)


{
echo ("Şanslı numaramız,Loto numarasından küçük");
$SansliNumara = $SansliNumara +1;
}

Şimdi de gerçek bir örnek üzerinde uygulama yapalım. Örneğimizde PHP aklında bir
sayıyı tutarak bizim onu tahmin etmemizi isteyecek. Bir nevi tahmin oyunu.

1. Text editörünüzü açın ve aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="tahminoyunu. php">

1-10 arasında bir rakam tuttum. Bir tahmin yapmak istermisin?

<INPUT NAME="Tahmin" TYPE="Text">

<BR>
<BR>

<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

2. Bu dosyayı "tahminoyunu. html" olarak kayıt edin.

3. Yeni bir text editörü açarak aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>

31
<BODY>
<?php

$Sayi = rand (1,10);

if ($Tahmin > $Sayi) {

echo "Tahmin ettiğiniz sayı benim düşündüğümden büyük";


echo "<BR>Benim düşündüğüm sayı $Sayi kaybettiniz. ";
exit;
}

if ($Tahmin < $Sayi) {

echo "Tahmin ettiğiniz sayı benim düşündüğümden küçük";


echo "<BR>Benim düşündüğüm sayı $Sayi kaybettiniz. ";
exit;
}

if ($Tahmin == $Sayi) {

echo "Tahmin ettiğiniz sayı benim düşündüğüm sayı ile aynı ";
echo "<BR>Benim düşündüğüm sayı $Sayi Tebrikler. ";
exit;
}
?>
</BODY>
</HTML>

4. Bu dosyayı "tahminoyunu. php" olarak kayıt edin.


5. "tahminoyunu. html" dosyasını açıp bir sayı girin.

6. Gönder tuşuna bastığınızda bir sonucun çıkması gerekir.

Örnek program nasıl çalışıyor ?

Aslında bu oyunda biz kullanıcıyı biraz kandırdık. Çünkü kullanıcı tahmin ettiği sayıyı
yazıp gönderene kadar PHP nin düşündüğü herhangi bir sayı yoktur. Kullanıcının
tahmini ile PHP'nin aklında tuttuğu sayı arasında bir bağlantı yoktur çünkü "rand"
fonksiyonu ile gerçek zamanlı random bir sayı yaratıyoruz. Bu nedenle program
tamamen kullanıcıya karşı saygılı. "rand" fonksiyonu kullanımı çok basit bir
fonksiyondur. Yalnızca alt limit ve üst limiti vermeniz gereklidir. Bu aralık içerisinde bir
random sayı yaratmak için kullanılır. Yarattığımız bu sayıyı bir değişken içerisinde
saklamak için programda

$Sayi = rand (1,10);

satırını kullandık.

32
IF Yapısında == ve === Operatörlerinin Kullanımı

"=" (eşittir) operatörünü şimdiye kadar olan konularda çok fazla kullandık. Şu anda
gördüğünüz "==" operatörü (iki tane eşittir işareti) bundan biraz farklıdır.

Açıklamak istersek "=" işareti "atama yapmak için " için "==" işareti ise "eşitliği kontrol
etmek" için kullanılır.

Örnek vermek gerekirse,

$SansliNumara = 3;
$SansliNumara = 5;

şeklindeki kullanımlar değişkenimize bir değer atamak için kullanılmaktadır.


Yukarıdaki örnekte $SansliNumara değişkenine "5" değerini atadık. Bir önceki satırda
$SansliNumara =3; un hükmünü tamamen ortadan kaldırdık. Bir sonraki satırda
$SansliNumara =6; diye yazmış olsaydık artık değişkenimiz içinde "5" değeri silinip
bu sefer "6" değeri yazılacaktı. Gördüğünüz gibi değişkenlere istediğimiz değerleri "="
işareti ile atıyoruz.

== operatörünün kullanılması

Bir ifadenin içeriğinin karşılaştırılması için kullanılır. Örnek vermek gerekirse,

if ($SansliNumara == 7) echo ("Şanslı numaranız yedi rakamı");

gördüğünüz gibi yukarıdaki kod satırında $SansliNumara değişkeni içerisindeki ifade


ile "==" operatörünün sağındaki ifade "eşitlik" bakımından karşılaştırılmaktadır.
Yukarıdaki kod içerisinde kesinlikle $SansliNumara değişkeni içerisine "7" değeri
atanmamaktadır. Yalnızca bir kontrol yapılmaktadır. $SansliNumara değişkeni
içerisinde saklanan değer ile "7" rakamı arasındaki ilişki kontrol ediliyor. Burada asla
$SansliNumara değişkeni içerisindeki veri değiştirilmiyor.

Bu konu çok önemlidir. Eğer şimdi çözümlemez iseniz ileride çok daha büyük
sorunlar çıkaracaktır.

=== operatörünün kullanılması

PHP 4. 0. 1 ile gelen bu operatör karşılaştırılan değişkenlerin hem içerik hem de veri
tipi aynı ise "doğru" değerini döndürür. Örnek vermek istersek,

if ($SansliNumara === $RastgeleNumara) echo ("Şanslı numaranız rasgele


numaraya hem sayı olarak hem de veri tipi olarak eşit")

!= ve <> operatörlerinin kullanımı

33
"==" operatörünün tam tersi olan "!=" operatörü "eşit değil" operatörü olarak
adlandırılır.

Bir örnek vermek istersek,

if ($SansliNumara != 7 ) echo ("Şanslı numaranız kesinlikle Yedi rakamı olamaz. ");

Bu tek satır kodumuzda $SansliNumara değişkeninde tutuğumuz değer ile "7"


rakamını karşılaştırdık ve dedik ki eğer $SansliNumara eşit değilse 7 rakamına
satırın gerisini uygula. ve echo komutuyla bilgiyi ekrana yazdır.

Kullanımı çok kolay olan bu operatörün bir başka yazım şeklide "büyüktür" ve
"küçüktür" işaretlerinin beraber yan yana yazılmasıdır.

Örnek vermek istersek,

if ($SansliNumara <> 7 ) echo ("Şanslı numaranız kesinlikle Yedi rakamı olamaz. ");

Hangisini kullanacağınız tamamen sizin keyfinize kalmıştır. Sonuçta iki yazım şeklide
aynı şeylerdir. Aralarında hiç bir fark yoktur.

Bir tek şey çok önemli bu konuda o da mantıksal olarak bir şeyi çok iyi kavramanız.
Yukarıdaki örneğe göre anlatırsak,yukarıdaki kod satırındaki "if" ifadeleri yalnızca
$SansliNumara içinde saklanan değişken "7" rakamına eşit olduğunda "false" yani
"yanlış" değerini döndürür.

Örnek Uygulama:

1. Text editörünüzü açın ve aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="quiz. php">

Türkiye’nin başkenti aşağıdakilerden hangisidir?

<BR>
<BR>

<INPUT NAME="Cevap1" TYPE="Radio" VALUE="Istanbul">


Istanbul

<BR>
<BR>

<INPUT NAME="Cevap1" TYPE="Radio" VALUE="Ankara">


Ankara

34
<BR>
<BR>

<INPUT NAME="Cevap1" TYPE="Radio" VALUE="Izmir">


Izmir

<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

2. Bu dosyayı "quiz. html" olarak kayıt edin.

3. Yeni bir text dosyası açarak aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>

<BODY>
<?php

if ($Cevap1 == "Ankara" ) echo "Tebrikler doğru cevap verdiniz. ";


if ($Cevap1 != "Ankara" ) echo "Üzgünüm,yanlış cevap verdiniz. ";

?>
</BODY>
</HTML>

4. Bu dosyayı "quiz. php" olarak kayıt edin.

5. "quiz. html dosyasını açıp cevap verdiğiniz taktirde sonucu bir sonraki ekranda
göreceksiniz.

Mantıksal Operatörler (AND , OR ve , NOT kullanımı)

Mantıksal operatörler kullanım olarak sandığınızdan daha kolaydır. Sizin program


içindeki gücünüzü ortaya çıkarır,daha güçlü karar verme yapıları kurmanızı sağlar.
Mantıksal olarak kurduğunuz cümlelerden farkı yoktur.

İlk örneğimizi verelim,

"Bu gün günlerden pazar ve hava güneşli ise plaja gideceğim" cümlesinin PHP
dilinde karşılığı şöyledir.

if ($Gun == "Pazar" AND $HavaDurumu == "Güneşli") echo ("Plaja Gidelim");

"AND" ifadesi yazmak yerine "&&" (Çift Ampersand) yazmak aynı şeylerdir.

35
if ($Gun == "Pazar" && $HavaDurumu == "Güneşli") echo ("Plaja Gidelim");

Şimdide OR ve NOT ifadelerinin kullanımına bakalım.

Yukarıdaki cümlenin tersini bu operatörler yardımıyla yazalım.

if ($Gun == "Pazartesi" OR $HavaDurumu == "Yağmurlu") echo ("Plaja Bugün


Gitmeyelim. . . ");

"OR" ifadesi yazmak yerine "||" (Double işareti) yazmak aynı şeylerdir.

if ($Gun == "Pazartesi" || $HavaDurumu == "Yağmurlu") echo ("Plaja Bugün


Gitmeyelim. . . ");

Son olarak anlatacağımız operatör yalnızca bir formu bulunan bir operatör.
Yukarıdaki örneklerde olduğu gibi "NOT" operatörünü yazı olarak programlarınız
içinde kullanamazsınız.

"NOT" operatörü aslında bir ünlem işaretinden başka bir şey değildir. Tek özelliği
parantezin içindeki ifade dışarıya çıktığında onu mantıksal olarak ters çevirmektir.
Yani eğer parantezin içinde dönen sonuç dışarıya "true" yani "doğru" olarak çıkmış
ise bu operatör onu "false" yani "yanlış" şekline dönüştürür.

Bir örnek vermek istersek,

if ! ($Gun == "Pazar") echo ("Plaja GITMEYELIM");

Şimdi görüldüğü gibi biz pazar günü plaja gitmek istiyoruz ve bununla ilgili program
yazıyoruz. Parantezin içerisinde $Gun değişkenimiz var. Şimdi kontrol ediyoruz eğer
$Gun değişkeni "Pazar"'a eşitse parantezin içi "true" yani "doğru" oluyor. Fakat
parantezin önünde bir "!" ünlem var. Bu ünlem parantezin içinde oluşan işlemin
sonucunu 180 derece değiştiriyor. "Doğru" ise "Yanlış" , "Yanlış" ise "Doğru" yapıyor.

Yukarıdaki kod parçası için uygulamalı örnek yapacak olursak,

Günlerden cumartesi kabul edelim. Dolayısı ile $Gun değişkenimiz içerisinde


"Cumartesi" değeri saklanacaktır. Şimdi formülde yerine koyalım,(Tabiî ki program
içinde değeri biz koymayacağız. Eğer $Gun değişkeninin değerini "Cumartesi"
yapmak istiyorsak $Gün = "Cumartesi"; dememiz yeterli. Biz şimdi kendimizi PHP nin
yerine koyup nasıl davrandığına bakıyoruz)

if ! (Cumartesi == Pazar) echo ("Plaja GITMEYELIM);

şimdi parantezin içi gördüğünüz gibi "false" yani "yanlış", fakat parantezin önündeki
iste bu ünlem işareti onu bir anda "true" yani "doğru" yapıyor ve satırın geri kalanı
doğal olarak okunuyor. Eğer günlerden "Pazar" olsaydı parantezin içi "true" yani
"doğru" olacaktı fakat önünde ünlem olduğu için değer bir anda "false" yani "yanlış"
haline dönecekti sonra ne olacak tabiî ki IF deyiminden öğrendiğimiz kural çalışacak
ve satırın geri kalanı yani "Plaja GITMEYELIM" yazısı hiç bir zaman
görüntülenmeyecekti.

36
Sonuçta Pazar günü için programın "Plaja GITMEYELIM" yazısı görüntülenmez.

Bir başka örnek verelim bu operatörün kullanımına :

if ! ($Cevap) echo ("Hiç bir cevap yok. . . ");

Yukarıdaki kod'da bilgisayar yalnızca $Cevap değişkenine bir değer atanmamış ise
ekrana bu uyarı bilgisini basar.

Açıklayalım ,

$Cevap değişkeni içinde bir değer atadık diyelim,

$Cevap = 3;

şimdi IF satırımıza bakacak olursak,

if ! ($Cevap) echo ("Hiç bir cevap yok. . . ");

Parantezin içinde değişkenimiz var. $Cevap değişkeni eğer içinde bir veri
saklanıyorsa doğal olarak "true" yani "doğru" değeri döner. Fakat ünlem işaretimiz
onu "false" yapar ve satırın geri kalanı PHP tarafından okunmaz. (Uyarı yazısı ekrana
basılmaz)

Parantezin içinde değişkenimiz var. $Cevap değişkeni içinde eğer bir veri
saklanmıyorsa doğal olarak "false" yani "yanlış" değeri döner. Fakat ünlem
işaretimiz onu "true" yapar ve satırın geri kalanı PHP tarafından okunur. (Uyarı yazısı
ekrana basılır)

Mantıksal Operatörler Konusunda Uygulamalı Örnek

1. Text editörünüzü açıp aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>
<BODY>
Seres Araba Kiralama Şirketi Online Başvuru Formu
<FORM METHOD=POST ACTION="araba. php">
Adınız:
<INPUT NAME="Isim" TYPE="Text">
Soyadiniz:
<INPUT NAME="Soyad" TYPE="Text">
Yasiniz:
<INPUT NAME="Yas" TYPE="Text" Size="3">
<BR>
<BR>
Adresiniz :
<TEXTAREA NAME="Adres" ROWS=4 COLS=40>
</TEXTAREA>

37
<BR>
<BR>
Ehliyetiniz varmi?
<INPUT NAME="Ehliyet" TYPE="Checkbox">
<BR>
<BR>

<INPUT TYPE=SUBMIT VALUE="Gönder">


</FORM>
</BODY>
</HTML>

2. Bu dosyayı "araba. html" olsak kayıt edin.

3. Başka bir text dosyaysa açıp aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>
<BODY>

Seres Otomobil Kiralama Şirketi Sonuç Sayfası

<?php
if ($Yas >20 AND $Ehliyet == "on") echo ("Araba kiralama isteğiniz KABUL edilmiştir.
");
if ($Yas <21 OR $Ehliyet == "") echo ("Araba kiralama isteğiniz RED edilmiştir. ");
?>

</BODY>
</HTML>

4. Bu dosyayı "araba. php" olarak kayıt edin.

5. "araba. html" dosyasını açıp formu doldurun. Değişik veriler için deneyin.

NOT : Burada verdiğimiz "checkbox" kontrolü için "on" değeri, kullandığınız browser
IE, Netscape ve opera için sorunsuz çalışacaktır. Eğer değişik browserlar için
program üretiyorsanız her zaman için "checkbox" kontrolünün value özelliğini
kullanarak bu değeri kontrol edebilirsiniz. Bu üç browser da eğer checkbox
işaretlenmişse otomatik olarak "on" değerini kontrole uygularlar.

38
>= ve <= Operatörlerinin Kullanılması

Bu operatörler "büyük" ,"küçük" ve "eşit operatörlerinin kombinasyonudur. Kullanımı


bu operatörlerin kullanımı ile aynıdır.

">=" ifadesinin mantıksal anlamı "Büyük Eşit"'tir


"<=" ifadesinin mantıksal anlamı "Küçük Eşit"'tir.

Örnek vermek istersek,

if ($Yas >=21 AND $Ehliyet="on") echo ("Araba kiralama isteğiniz KABUL edilmiştir.
");

şeklindedir. Yani yaşın 21 ve büyük olduğu haller göz önüne alınmıştır. Eğer yalnızca
>21 kullanırsanız 21 sayısı sorgumuzun içine alınmaz.

Operatörlerin Beraber Kullanılması

Kaç tane operatör’ün birbiriyle iç içe kullanılacağı konusunda bir sınırlama yoktur.
İstediğiniz mantıksal ifade için dilediğiniz kadar çok operatörü yan yana veya iç içe
kullanabilirsiniz.

Bir Örnek vermek istersek,

if ( ($Gun != "Pazartesi")
OR ($Gun != "Salı")
OR ($Gun != "Çarşamba")
OR ($Gun != "Perşembe")
OR ($Gun != "Cuma")
OR ($Gun != "Cumartesi")
OR ($HavaDurumu != "Yağmurlu") ) echo ("Plaja Gidebiliriz Demektir. . . ");

Burada eğer günlerden "Pazartesi,Salı,Çarşamba,Perşembe,Cuma,Cumartesi"


değilse ve hava "Yağmurlu" değilse "Plaja Gidebiliriz".

Daha karmaşık bir örnek yapalım,

if (($Gun == "Pazartesi" AND $Ay != "Mart")


OR ($Gun == "Salı" AND $Saat != "12")
OR ! ($Ay != "Ekim") echo ("Toplantıyı yapabiliriz"));

Burada ,eğer günlerden Pazartesi ve ayımız Mart değilse,veya günlerden Salı ve


Saatimiz "12. 00" değilse veya ayımız Ekim değilse "Toplantı yapabiliriz"

Şimdi daha büyük ve gelişmiş kararları verebilmek bir uygulama yazalım.

1. Text editörünüzü açıp aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>

39
<BODY>
Seres Otomobil Web Sayfası
<BR>
<BR>

<FORM METHOD=POST ACTION="karar. php">


Lütfen yaşınızı girin :
<INPUT TYPE=TEXT NAME="Yas" SIZE=3>
<BR>
<BR>
Arabanızın Mac hızı nedir?
<INPUT TYPE=TEXT NAME="Hiz">
<BR>
<BR>
Yaklaşık olarak arabanızın değeri ne kadar?
<SELECT NAME="Değer">
<OPTION VALUE=5000>$5000'dan AZ </OPTION>
<OPTION VALUE=7000>$5000-7000 ARASI</OPTION>
<OPTION VALUE=10000>$7000-10000 ARASI</OPTION>
<OPTION VALUE=25000>$10000'den FAZLA</OPTION>

</SELECT>

<BR>
<BR>

Arabanızın motor hacmi ne kadar?


<SELECT NAME="MotorHacmi">
<OPTION VALUE=1. 0>1. 0L</OPTION>
<OPTION VALUE=1. 3>1. 3L</OPTION>
<OPTION VALUE=1. 5>1. 5L</OPTION>
<OPTION VALUE=2. 0>2. 0L</OPTION>

</SELECT>
<BR>
<BR>
<INPUT TYPE=SUBMIT VALUE="Bilgileri Gönder">
</FORM>
</BODY>
</HTML>

Önemli Not : Form'da girdiğiniz kontrollerin isimlerine özen göstermelisiniz. Bu


formda "NAME" özelliği ile girilen isimler,bir sonraki PHP sayfasına işlenmek için

40
gönderildiğinde kontrollerin isimleriyle anılan değişkenler otomatik olarak yaratılacak
ve kullanıcının buraya girdiği veriler bu değişkenlere otomatik olarak atanacaktır.

2. Bu dosyayı "karar. html" olarak kayıt edin.

3. Bir başka text dosyası açarak aşağıdaki kodları girin.

<HTML>
<HEAD></HEAD>
<BODY>
Seres Otomobil Sonuç Sayfası
<?php

if ($Yas<25 OR $Hiz>100 OR $Değer>10000 OR $MotorHacmi>1. 5)


{
echo ("Size 1500 dolarlık sigorta planı sunulabilir");

if ($Yas >= 65 AND ($Değer<=5000 OR $Hiz<=80) AND $Değer<=10000 AND


$MotorHacmi <=1. 5 AND $Hiz<=100)
{
echo ("Size 800 dolarlık indirimli sigorta planı sunulabilir");

if (($Yas<65 OR $Değer>5000 AND $Hiz>80) AND $Yas>=25 AND $Hiz<=100 AND


$Değer<=10000 AND $MotorHacmi<1. 5)
{
echo ("Size 1000 dolarlık bir sigorta planı sunulabilir");

?>

</BODY>
</HTML>

4. Bu dosyayı "karar. php" olarak kayıt edin.

5. "karar. html" dosyasını browser yardımıyla açın.

6. Bir kaç örnek veri girip sonuçları deneyin.

Örnek uygulama nasıl çalışıyor

PHP içerisinde bu karmaşık yapıdan kurtaracak bir çok kısa yol olmasına rağmen
uygulamay bu şekilde yazıldı. Mantıksal operatörlerin nasıl çalıştığını göstermek için

41
bu yapıldı. 4. koşul sigorta ödemesi için test ediliyor. Bunlar $Yas $Hiz
$MotorHacmi ve $Değer.

Şimdiye kadar olan if yapılarında,durumun "doğru" olması halinde işlenecek satırları


gördük. peki eğer durumumuz "yanlış" ise hangi kod guruplarının işleneceğini
programda nasıl tanımlarız?

if (durum doğrulanıyorsa)

Bu Parantezin içindeki kod grubunu uygula

else

Bu parantezin içindeki kod grubunu uygula

Burada anlatılmak istenen "else" yani İngilizcesi "başka" olan yapımız bize ,ilk verilen
if komutundaki parantezlerin içinde eğer bir "yanlış" durumu oluşursa uygulanacak
kod grubunun yerini göstermektedir.

Örnek vermek istersek,

if ($Yas >= 21 AND $Ehliyet == "on" )

echo ("Araba kiralama isteğiniz KABUL edilmiştir. ");

else

echo ("Araba kiralama isteğiniz RED edilmiştir. ");

Gördüğünüz "if" ile verilen parantezin içerisindeki ifade "doğru" olunca bir alt satırda
"{}" parantezleri arasında verilen kod grubu uygulandı ve ekrana KABUL mesajı geldi.

Verilen durum "yanlış" olduğunda doğrudan "else" ile verilen ve "{}" parantezleri
arasına yazılmış kod grubu uygulandı ve ekrana RED mesajı geldi.

42
Yapımız içinde gördüğünüz bu bir satırlık echo komutu için {} parantezlerini yazmak
zorunlu değildir. Fakat kodlarınızın bir başkası tarafından rahat okunabilmesi için bir
rahatlıktır.

Şimdi biraz daha ileriye gidelim ve bir "değişkeni" birden fazla "veri" için test edelim.
Bunun için şimdiye kadar hiç değinmediğimiz elseif yapısını inceleyelim.

if ( değişkenimiz değer1'e eşit ise)

Bu kod grubunu uygula.

elseif (değişkenimiz değer2'ye eşit ise)

Bu kod grubunu uygula.

else

Bu kod grubunu uygula.

Konuyu anlamak için bir uygulamalar yapalım,

elseif kullanımı için örnekler

Örnek 1 :

Bir araba kiralama şirketinin online başvuru formu için kullanıcıların girdiği bilgileri
elimizdeki bilgilerle test ediyoruz.

 İlk durum yaşı 21 den büyük olan ve ehliyet sahipleri için hemen bir araba
kiralayabilmesi için kabul yazısı gösteriyoruz,
 İkinci durum yaşı18 den büyükler ve ehliyet sahipleri için bir kefalet uyarısı
yazısını gösteriyoruz,
 Zaten diğer her koşulda o kişiye araba kiralamayacağız.

if ($Yas >=21 AND $Ehliyet == "on")

43
echo ("Araba kiralama isteğiniz KABUL edilmiştir. ");

elseif ($Yas >= 18 AND $Ehliyet == "on")

echo ("Size bir arabayı ancak kefil gösterirseniz kiralayabiliriz");

else

echo ("Araba kiralama isteğiniz RED edilmiştir");

Örnek 2 :

Bir okulda bulunan öğrenciler için çok basit bir puan çizelgesi ve aldığı puana göre
notun harf karşılığı programı,

if ($Puan > 70) echo "Sınav sonucunuz A";


elseif ($Puan >60) echo "Sınav sonucunuz B";
elseif ($Puan >50) echo "Sınav sonucunuz C";
elseif ($Puan >40) echo "Sınav sonucunuz D";
elseif ($Puan >30) echo "Sınav sonucunuz E";
else echo "Sınıfta kaldınız";

Örnekler çoğaltılabilir. Şimdi sizde vereceğiniz günlük bir kararı if yapısı ile düşünüp
nasıl bir program şeklinde yazabileceğinizi düşünun.

IF Yapılarının İç İçe Yapılandırılması

İngilizcesi "Nesting if Statements" olan bu konu programlama tekniği içersinde çok


kullanılmaktadır.

Örnek vermek istersek,

if ($Puan > 70)

echo ("Sınav Sonucunuz A");

if ($TerbiyeNotu > 70)

44
{

echo ("Ayrıca okul yönetiminden bir de ödül kazandınız");

Diğer bir örnek de;

if ($Puan > 70)

echo ("Sınav Sonucunuz A");

if ($TerbiyeNotu > 70)

if ($Sınıf == 11)
{

echo ("Ayrıca okul yönetiminden mezun olduğunuz için bir de ödül kazandınız") ;

else

echo ("Bir sonraki sene için başarılar dilerim");

}
}
}

Örnek 3 : daha kompleks yapılar kurmak

1. Web sayfası editörünüzü veya text editörünü açıp aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>
<BODY>
Seres Otelcilik Online Web Sayfası’na Hoşgeldiniz
<FORM METHOD=GET ACTION="tatil. php">
Tatil için nereye gitmeyi düşünüyorsunuz?
<BR>

45
<BR>
<INPUT NAME="Sehir" TYPE = "Radio" VALUE="Istanbul">
Istanbul
<INPUT NAME="Sehir" TYPE = "Radio" VALUE="Ankara">
Ankara
<INPUT NAME="Sehir" TYPE = "Radio" VALUE="Izmir">
Izmir

<BR>
<BR>
Kaç yıldızlı otelde kalmak istiyorsunuz?

<INPUT NAME="Yildiz" TYPE = "Radio" VALUE="Uc">


Uc yıldızlı Otel

<INPUT NAME="Yildiz" TYPE = "Radio" VALUE="Dort">


Dort yıldızlı Otel

<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

2. Bu dosyayı "tatil. html" olarak kayıt edin.

3. Yeni bir text dosyası içerisine aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>
<BODY>
Seres Otelcilik Online Web Sayfası’na Hoş geldiniz
<BR>
<BR>
<?php

$Fiyat = 500;
$YildizFaktoru = 1;
$SehirFaktoru = 1;

if ($Yildiz == "Uc")

{
if ($Sehir == "Istanbul")
{
$SehirFaktoru =2;
$Fiyat = $Fiyat * $SehirFaktoru;
echo ("$Sehir şehrinde 1 haftalık tatil tutarı $Fiyat dolardır. ");

46
}
elseif ($Sehir == "Ankara")
{

$SehirFaktoru = 3. 5;
$Fiyat = $Fiyat * $SehirFaktoru ;
echo ("$Sehir şehrinde 1 haftalık tatil tutarı $Fiyat dolardır. ");
}
elseif ($Sehir == "Izmir")
{
$Fiyat = $Fiyat * $SehirFaktoru;
echo ("$Sehir şehrinde 1 haftalık tatil tutarı $Fiyat dolardır. ");
}
else
{
echo ("Şehir Merkezi için bir seçim yapmadınız. Geri dönerek yapabilirsiniz");
}
}

elseif ($Yildiz == "Dort")

$YildizFaktoru=2;

if ($Sehir == "Istanbul")
{
$SehirFaktoru = 2. 5;
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo ("$Sehir şehrinde 1 haftalık tatil tutarı $Fiyat dolardır. ");
}
elseif ($Sehir == "Ankara")
{
$SehirFaktoru = 4;
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo ("$Sehir şehrinde 1 haftalık tatil tutarı $Fiyat dolardır. ");
}

elseif ($Sehir == "Izmir" )


{
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo ("$Sehir şehrinde 1 haftalık tatil tutarı $Fiyat dolardır. ");
}
else
{
echo ("Şehir için bir seçim yapmadınız. . . geriye dönerek bir şehir seçebilirsiniz. ");
}
}

else

47
{

echo ("Yıldız için bir seçim yapmadınız. . . geriye dönerek Yıldız seçebilirsiniz. ");

?>
</BODY>
</HTML>

4. Bu dosyayı "tatil. php" olarak kayıt edin. (Parantezleri yazarken dikkat edin eğer bir
tane eksik kalırsa örnek çalışmaz)

5. "tatil. html" dosyasını açıp bir tatil merkezi seçin.

Program nasıl çalışıyor?

İlk üç satırımızda öngörülen değerlerle beraber değişkenlerimizi yarattık

$Fiyat = 500;
$YildizFaktoru = 1;
$SehirFaktoru = 1;

Bu değişkenleri,kullanıcının web sayfasından girdiği yıldız ve şehir durumuna göre


fiyatı değiştirmek için kullanacağız.

Program içerisinde ilk kontrol kullanıcının kaç yıldızlı otel seçtiği,

if ($Yildiz == "Uc")

Eğer kullanıcı "Üç yıldızlı oteli seçmiş ise" hemen ikinci kontrolümüz çalışıyor,

if ($Sehir == "Istanbul")

bakıyoruz kullanıcının seçtiği şehir "Istanbul" mu? Evet "Istanbul" o zaman hemen
hesaplıyoruz istanbulda üç yıldızlı otel için fiyat formülümüz,

$SehirFaktoru =2;
$Fiyat = $Fiyat * $SehirFaktoru;
echo ("$Sehir şehrinde 1 haftalık tatil tutarı $Fiyat dolardır. ");

$SehirFaktoru değişkenini programın başında 1'e eşitlemiştim. Fiyat için hesaplama


yapmadan önce $SehirFaktoru = 2 olacak şekilde değiştirdim. Artık değişkenimizin
değeri 2'dir. Hesaplama yapmak içinde formülümüz belli,programın başında $Fiyat
olarak verdiğimiz değişken ile $SehirFaktoru değişkeni çarpılıyor. Çıkan sonuç echo
komutu ile ekrana yazdırılıyor.

48
Program içerisinde ikinci kontrolümüz kullanıcının seçtiği şehirin "Ankara" olup
olmadığı,

elseif ($Sehir == "Ankara")

Program içerisinde üçüncü kontrolümüz kullanıcının seçtiği şehirin "İzmir" olup


olmadığı,

elseif ($Sehir == "İzmir")

Program içerisinde dördüncü aşamada kullanıcıya hiçbir şehir seçmediğine ilişkin


uyarı yazımız ekrana yazdırılıyor,

echo ("Şehir Merkezi için bir seçim yapmadınız. Geri dönerek yapabilirsiniz");

Şimdi program ikinci kısmıma atlıyor (Yani kullanıcı "4 yıldızlı otel seçmiş ise")

elseif ($Yildiz == "Dört")

$YildizFaktoru=2;

Daha önce "1" olan ve hiçbir formülasyonda kullanmadığımız $YildizFaktoru artık


gördüğünüz gibi "2" oluyor.

switch Komutu ve Kullanımı (switch Statements)

switch komutunun işlevini kısaca açıklamak istersek ,"elseif" komutunun kullanımını


azaltmak, hafifletmek ve programa basit bir yapı kazandırmak için kullanılmaktadır.

Örnek Kod Parçası :

switch ($Puan) {
case $Puan > 70:
echo ("Sınavdan A aldınız");
break;
case $Puan>60:
echo ("Sınavdan B aldınız");
break;
case $Puan>50:
echo ("Sınavdan C aldınız");
break;

case $Puan>40:
echo ("Sınavdan D aldınız");
break;
case $Puan>25:
echo ("Sınavdan E aldınız");
break;
default:

49
echo ("Sınıfta Kaldınız");
}

gördüğünüz gibi bir sürü "if" ve "elseif" kullanmak yerine yalnızca "switch" komutuyla
isimizi biraz olsun kolaylaştırdık. Satır bakımından çok fazla şey kazanmadık ama şu
anda kodlarımız daha mantıklı ve anlaşılır gözüküyor.

switch komutu ile kullanılan "break" , "case" ve "default" nedir?

Açıklamaya bu komutların Türkçelerini yazmakla başlayalım.

switch: Türkçe'de "değiştir" anlamına gelir. (Lambayı kapalı konumdan açık konuma
değiştirmek gibi)
break : Türkçe’de "bırak,ayrıl" anlamına gelir.
case : Türkçe’de "durum" anlamına gelir
default : Türkçede öngörülen veya öntanımlı anlamına gelir.

Bu açıklamaların ışığı altında konumuza devam edecek olursak,"switch" ile


verdiğimiz şartlar altında PHP nin işleyeceği kod parçalarını değiştiriyoruz. Bu
şartların ne olacağını "case" ile tanımlıyoruz.

Kod parçası işini tamamlayınca "break" ile "ayrılıyoruz". Eğer verdiğimiz şartlardan
hiçbiri sağlanmıyorsa "default" ile PHP'ye işlemesi gereken kod parçasının ne
olduğunu söylüyoruz.

Yukarıdaki kod parçasında $Puan değişkenin alacağı değerler için ,değişik işler
yaptırmak istiyoruz. Bir kişi 70'ten yüksek not almışsa PHP nin "Sınavdan A aldınız"
yazısını ekrana yazdırmak istiyoruz. 60'tan yüksek not için B, 50'den yüksek not için
C . . . vb.

Eğer kişi bizim verdiğimiz şartların hiçbirine uyan bir not almadıysa o zaman "default"
ile yapılması gereken işlemi tanımlıyoruz.

PHP "break" komutu ile karşılaşınca yaptığı herşeyi durdurur ve "switch" yapısından
çıkarak ,kapalı parantezin bittiği yerden okumaya devam eder.

switch ($Puan) {
case $Puan > 70 :
echo ("Sınavdan A aldınız");
break;
case $Puan>60 :
echo ("Sınavdan B aldınız");
break;
case $Puan>50 :
echo ("Sınavdan C aldınız");
break;

case $Puan>40 :
echo ("Sınavdan D aldınız");
break;

50
case $Puan>25 :
echo ("Sınavdan E aldınız");
break;
default:
echo ("Sınıfta Kaldınız");
}<<<-------------------------- (switch yapısını kapattığımız parantez)
. . . . . . . . . . . (PHP "break görürse okumaya buradan devam eder)
....................

switch yapısını kullanırken bir kısa yol

"switch" komutu sandığınızdan biraz daha zekidir ve sizin ne yapmak istediğiniz


anlayabilir. Bu komut için geliştirilmiş bir kısa yol tarzı bulunmaktadır.

switch ($Eyalet) {

case "IL" :
echo ("Illinois");
break;
case "FL" :
echo ("Florida");
break;
case "GA" :
echo ("Georgia");
break;
default:
echo ("Texas");
break;
}

Her iki yazım şeklide hatasız ve birbirinden farksızdır. İsterseniz ilk örnekteki gibi her
seferinde $Puan değişkenini "case" yapısına yazın isterseniz bırakın PHP sizin için
yapsın.

Dikkat ederseniz "case" yazdıktan sonra ";" noktalı virgül yerine ":" iki nokta kullandık.
Sakin yanlış yazıldığını sanmayın doğru kullanımı bu şekildedir.

Şimdi bir önceki bölümde yaptığımız örneği şimdi switch kullanarak tekrar yazalım.

1. Text editörünüzü açın ve aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>
<BODY>
Seres Otelcilik Online Web Sayfası’na Hoşgeldiniz
<FORM METHOD=GET ACTION="tatil2. php">
Tatil için nereye gitmeyi düşünüyorsunuz?
<BR>
<BR>

51
<INPUT NAME="Sehir" TYPE = "Radio" VALUE="İstanbul">
İstanbul
<INPUT NAME="Sehir" TYPE = "Radio" VALUE="Ankara">
Ankara
<INPUT NAME="Sehir" TYPE = "Radio" VALUE="İzmir">
İzmir

<BR>
<BR>
kaç yıldızlı otelde kalmak istiyorsunuz?

<INPUT NAME="Yildiz" TYPE = "Radio" VALUE="Uç">


Uç yıldızlı Otel

<INPUT NAME="Yildiz" TYPE = "Radio" VALUE="Dört">


Dört yıldızlı Otel

<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

2. Bu dosyayı "tatil2. html" olarak kayıt edin.

3. Text editörünüzü açın ve aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>
<BODY>
Seres Otelcilik Online web Sayfasına Hös Geldiniz
<BR>
<BR>
<?php
$Fiyat = 500;
$SehirFaktoru = 1;
$YildizFaktoru = 1;
$SehirYildiz = $Sehir. $Yildiz;

switch ($SehirYildiz) {

case "IstanbulUc":
$SehirFaktoru = 2;
$Fiyat = $Fiyat * $SehirFaktoru;
echo "$Sehir şehrinde 1 haftalık tatil $Fiyat dolardır. ";
break;
case "IstanbulDort":
$SehirFaktoru = 2;

52
$YildizFaktoru = 2;
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo "$Sehir şehrinde 1 haftalık tatil $Fiyat dolardır. ";
break;
case "AnkaraUc":
$SehirFaktoru = 3. 5;
$Fiyat = $Fiyat * $SehirFaktoru;
echo "$Sehir şehrinde 1 haftalık tatil $Fiyat dolardır. ";
break;
case "AnkaraDort":
$SehirFaktoru = 3. 5;
$YildizFaktoru = 2;
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo "$Sehir şehrinde 1 haftalık tatil $Fiyat dolardır. ";
break;
case "IzmirUc":
$Fiyat = $Fiyat * $SehirFaktoru;
echo "$Sehir şehrinde 1 haftalık tatil $Fiyat dolardır. ";
break;
case "IzmirDort":
$YildizFaktoru = 2;
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo "$Sehir şehrinde 1 haftalık tatil $Fiyat dolardır. ";
break;
default:
echo "Lütfen geriye dönerek tekrar deneyiniz";
break;
}
?>
</BODY>
</HTML>

4. Bu dosyayı "tatil2. php" olarak kayıt edin.

5. "tatil2. html" dosyasını açıp bir kaç veri girip gönderdiğinizde tatil için ne kadar
ücret ödemeniz gerektiğini göreceksiniz.

Form Verileri'nin Kontrolü

PHP programlarını biraz olsun hassas hale getirmek ancak program içindeki
kontrollerle mümkündür. Örneğin bir kullanıcının sizin onun "yaşını" sorduğunuz bir
kontrole "694" gibi bir rakam girmesini istemeyiz. Bu nedenle girilen verileri bazı
kıstaslara göre kontrol edip ondan sonra işlemlere devam etmek çok önemlidir.

if ($Yas <1 OR $Yas>125)


{
echo "Geçersiz bir yaş değeri girdiniz";
break;
}

53
şeklinde programın bir mantığa sahip olmasını sağlayabiliriz. . .

exit komutu

if($Yas <1 OR $Yas>125)


{
echo "Geçersiz bir yaş değeri girdiniz";
exit;
}
Bir forma girilen verileri kontrol ediyorsak ve kişinin girdiği verinin tamamen imkansız
olduğuna inanıyorsak "exit" komutunu kullanarak programın işleyişini o noktada
durdurabiliriz. "exit" kullandığımızda program tamamen duracak ve kalan HTML
tagları bile kapatılmayacaktır. Kullanırken dikkat edilmesi gereken bir komuttur.

Bu konu ile ilgili bir örnek yapalım,

1. Text editörünüzü açın ve aşağıdaki kodları girin. (Daha önceden yazdığımız "kredi.
php" dosyasını açıp orada yapmadığımız form kontrollerini şimdi programa nasıl
eklediğimize bakabilirsiniz)

<HTML>
<HEAD></HEAD>
<BODY>

Seres Bankası Kredi İsteme Başvuru Formu

<FORM METHOD=POST ACTION="kredi2. php">

Adınız :

<INPUT NAME="Ad" TYPE="Text">

Soyadınız :

<INPUT NAME="Soyan" TYPE="Text">

Yasiniz :

<INPUT NAME="Yas" TYPE="Text" SIZE="2">

<BR>
<BR>

Adresiniz :

<TEXTAREA NAME="Adres" ROWS=5 COLS=50>


</TEXTAREA>

<BR>
<BR>

54
Geliriniz Nedir?
<SELECT NAME="ücret">
<OPTION VALUE=0>10000 TL'DEN AZ</OPTION>
<OPTION VALUE=10000>10000 TL'DEN 25000 TL'YE KADAR</OPTION>
<OPTION VALUE=25000>25000 TL'DEN 50000 TL'YE KADAR</OPTION>
<OPTION VALUE=50000>50000 TL'DEN BÜYÜK</OPTION>
</SELECT>

<BR>
<BR>

Ne kadar kredi almak istiyorsunuz?<BR><BR>

<INPUT NAME="Kredi" TYPE="Radio" VALUE=1000>1000 TL'lik Paket %8. 0


Faiz<BR>

<INPUT NAME="Kredi" TYPE="Radio" VALUE=5000>5000 TL'lik Paket %12. 0


Faiz<BR>

<INPUT NAME="Kredi" TYPE="Radio" VALUE=10000>10000 TL'lik Paket %15. 0


Faiz<BR>

<BR>
<INPUT TYPE=SUBMIT VALUE="Buraya tıklayarak Formu gönderebilirsiniz">
<INPUT TYPE=RESET VALUE="Formu Temizle">

</FORM>
</BODY>
</HTML>

2. Bu dosyayı "kredi2. html" olarak kayıt edin.

3. başka bir text dosyaysa açıp aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<?php
if ($Yas<10 OR $Yas>120)

{
echo " yanlış yas değeri girdiniz,geriye dönerek tekrar giriniz. ";
exit;
}

if ($Ad == "" OR $Soyan == "")

{
echo " Bir isim ve soyan değeri girmelisiniz ,geriye dönerek giriniz. ";

55
exit;
}

if ($Adres == "")

{
echo " Bir adres değeri girmelisiniz ,geriye dönerek giriniz. ";
exit;

if ($Kredi != 1000 AND $Kredi !=5000 $Kredi !=10000)

echo " Bir kredi değeri girmelisiniz ,geriye dönerek giriniz. ";
exit;
}

$UcretFaktoru = $ücret/5;
$YasFaktoru = ($Yas/10 - ($Yas%10) /10 )-1;

$KrediFaktoru = $UcretFaktoru * $YasFaktoru;

echo "İstediğiniz Kredi Miktarı : $Kredi <BR>";


echo "Alabileceğiniz Kredi Miktarı : $KrediFaktoru <BR><BR>";

if ($Kredi <= $KrediFaktoru) echo "Sayın , $Ad $Soyan kredi isteğinizi memnuniyetle
KABUL ediyoruz";

if ($Kredi > $KrediFaktoru ) echo "Sayın,$Ad $Soyan üzgünüz,kredi isteğiniz RED


edilmiştir. ";
?>
</BODY>
</HTML>

4. Bu dosyayı "kredi2. php" olarak kayıt edin.

5. Bir kaç geçersiz değer ile formu test edin.

Bir Güvenlik Önlemi

Bizler form içindeki verileri,programda yazdığımız kodlar ile kontrol edebiliyoruz. Peki
bir kullanıcı "text" alanına adini yazmak yerine beraberinde HTML tagları olan bir
ifade yazarsa ne olur?

Bunu önlemek için PHP içerisinde "HTMLSpecialChars" komutu kullanılmaktadır.

56
Örnek vermek istersek,

$Ad = HTMLSpecialChars ($Ad);

veya

$Soyad = HTMLSpecialChars ($Soyad);

57
BÖLÜM 5

DÖNGÜLER VE DİZİLER

Döngüler,yazdığımız komutlarla istediğimiz bir işlemi bilgisayarın yüzlerce,binlerce,ve


hatta milyonlarca defa tekrarlamasıdır. Biraz açıklamak istersek,eğer bilgisayara bir
görevi yapması için emir veriyorsak ve bilgisayar bu emri başarılı bir şekilde yerine
getiriyorsa neden aynı işlemi doğru olarak bizim istediğimiz sayı kadar veya
istediğimiz şartlar yerine gelene kadar tekrarlamasın ki?

PHP içerisinde her programlama dilinde olduğu gibi bu konu için yazım
mekanizmaları geliştirilmiştir. Burada öğreneceğiniz döngü yapıları size diğer
programlama dillerini öğrenirken de görüş olarak yardımcı olacaktır.

Bu bölümde aşağıdaki konular için detaylı açıklamalar bulacaksınız,

 "while" döngüsü, (THA while lop)


 "do while" döngüsü ,
 "for" döngüsü,
 Dizilerin yaratılması (Creating Arrays)
 Dizilerden değer okunması
 Dizilerin İndekslenmesi
 Dizilerin Sıralanması
 Çok Boyutlu Diziler
 Döngü ve Diziler için pratik örnekler

Döngüler

Bir önceki konuda formlar üzerinde yapılan kontrol işlemleri anlatılmıştı. Bu form
kontrollerinde istediğimiz şartlara göre form verilerinin işlenip işlenmemesi
gerektiğine,PHP yazdığımız "if" komutları ile karar veriyordu.

Döngülerde durum biraz daha değişik çünkü,PHP bizim yazdığımız şartlar


oluşuncaya kadar ,döngü içerisinde verilen kod grubunu çalıştıracaktır. Döngünün
yaptığı bu her bir işleme "iteration" yani "öteleme" adı verilir. Döngünün her bir
dönüşü bizim için bir "iterasyon" dur.

while döngüleri

İlk anlatacağımız döngü yapımız "while". Bunun sebebi yapı olarak en basit olan
döngünün "while" olmasıdır.

while (şartımız doğruysa)

Bu parantezlerin içersindeki kod grubunu uygula

58
}

Parantezlerin içerisindeki kod grubu uygulandıktan sonra eğer döngümüzün en


başında verdiğimiz şart halen doğrulanıyorsa,döngümüz bir kez daha çalışacaktır. Bu
döngü bizim döngümüzün başında verdiğimiz şart "yanlış" değerini döndürene kadar
devam edecektir.

while (ay dolunay)

Kuşlar Uyuyacak

Bir başka örnek verecek olursak ,uygulamamız içerisinde kullanıcının kredi kartı
limitini aşması durumunda "sepet"'inden bazı ürünleri çıkarmak istiyoruz. Aşağıda
bununla ilgili bir kod parçası görülmektedir.

While ($AlisverisToplami > $KrediLimiti)

echo ("Kredi limitinizi astığınız için son aldığınız urun sepetinizden çıkarıldı");

$AlisverisToplami = $AlisverisToplami - $SonAlisveris;

$SonAlisveris = $SonAldigiUrun;

Eğer müşteri kredi limitini asarsa ,son aldığı urunu iptal ediyoruz. Bunu, toplam
faturasından ürünün fiyatını düşerek yapıyoruz. Daha sonra $SonAlisveris değişkeni
içerisinde saklanan değeri $SonAldigiUrun değişkeni ile değiştirip her seferinde
döngümüzde,eğer kredi limiti asılıyorsa kullanıcının aldığı son ürünleri birer birer
sepetinden çıkartmış oluyoruz.

Burada dikkat edilmesi gereken nokta eğer $KrediLimiti olarak verilen değer negatif
olursa döngümüzün asla son bulmayacağıdır. Her zaman eğer döngülerle
çalışıyorsanız aklınızda olması gereken nokta döngünün verilen değişik değerler
karsısında ne yapacağını hesaplamanızdır.

Şimdi yukarıda açıkladığımız "while loops" yani "while döngüleri" için bir uygulama
yazalım.

1. Text editörünüzü açıp aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>

59
<BODY>
Seres Bankası Kredi İsteme Formu

<FORM METHOD=POST ACTION="kredi3. php"


<BR>
Ne kadar kredi almak istiyorsunuz?
<BR>
<BR>
<INPUT NAME="Kredi" TYPE="Radio" VALUE=1000>Kredi miktarı 1000 TL Faiz %5
<BR>
<INPUT NAME="Kredi" TYPE="Radio" VALUE=5000>Kredi miktarı 5000 TL Faiz
%10
<BR>
<INPUT NAME="Kredi" TYPE="Radio" VALUE=10000>Kredi miktarı 10000 TL Faiz
%15

<BR>
<BR>

Aylık ne kadar geri ödeme yapabilirsiniz?


<INPUT NAME="AylikOdeme" TYPE=Text SIZE=5>

<BR>
<BR>

<INPUT TYPE=SUBMIT VALUE="Buraya tıklayarak Geri ödeme için kaç Ay


gerektiğini Hesaplayın">

</FORM>
</BODY>
</HTML>

2. Bu dosyayı "kredi3. html" olarak kayıt edin.


3. Yeni bir text dosyaysa açıp aşağıdaki kodları yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<?php
$Sure=0;
switch ($Kredi) {
case 1000:
$Faiz = 5;
break;
case 5000:
$Faiz = 6. 5;
break;
case 10000:
$Faiz = 8;
break;

60
default:
echo "Bir paket seçmelisiniz!";
exit;
}
while ($Kredi > 0)
{
$Sure = $Sure + 1;
$AylikNet = $AylikOdeme - ($Kredi*$Faiz/100);
if ($AylikNet<=0)
{
echo "Daha yüksek bir ödeme miktarı seçmelisiniz!";
exit;
}
$Kredi = $Kredi - $AylikNet;
}
echo "Toplam $Sure ayda yüzde $Faiz faiz ile kredinin tamamını ödemiş olacaksınız.
";
?>
</BODY>
</HTML>

4. Bu dosyayı "kredi3. php" olarak kayıt edin.

5. "kredi3. html" dosyasını açın ve bir kaç veri girin.

Program nasıl çalışıyor?

Formdan gelen veriler yazdığımız PHP programına ulaştığında şu verileri kesin


olarak biliyoruz,

$Kredi
$Faiz
$AylikOdeme

Şimdi ilk yaptığımız işlem kullanıcının seçtiği pakete göre faiz oranı ve kredi miktarını
programda tanımlamak.

Bunun için "switch" komutunu kullanarak elimizde bulunan bütün koşulları programın
içinde tanımlıyoruz. .

$Kredi değişkenin alabileceği 3 tane değer vardır. Bunlar 100,5000,ve 10000 dir. Biz
bu değerleri kullanarak program içinde $Faiz değişkeni içinde bir atama yapılmasını
sağlıyoruz. Bunu hangi kredi miktarını kullanıcı seçmiş ise "switch" ile tanımlarken bir
alttaki satırda $Faiz değişkenine değer atayarak yapıyoruz.

$AylikOdeme miktarını da zaten kullanıcımız en başta bizim için text alanına girmişti.

Bu noktadan sonra artık "while" döngümüzü kullanarak kişinin bu aldığı krediyi kaç
ayda tam olarak geri ödeyebileceğini hesaplayabiliriz.

61
While ($Kredi >0)
{

Bu ifade ile döngümüzü başlatıyoruz. Kredi miktarımız mutlaka sıfırdan büyük


olmalıdır. Zaten $Kredi değişkenimizin alabileceği 3 tane değer var ve bunlar sıfırdan
farklı. o yüzden sorun çıkması ihtimali yok.

Bir sonraki satırda programı yazmamızın amacı olan kaç ayda ödeyebileceği
sorusuna cevap verecek $Sure sayacımızı tanımlıyoruz. döngümüz her çalıştığında
bu sayaç birer birer artacak. Bu değişken içerisinde ,böylece döngü sonuçlanınca
döngünün kaç defa çalıştığı yani aylık ödemelerin kaç ayda tamamlanacağı değeri bu
değişkende saklanmış olacak. Döngü mesela iki defa çalışıp biterse demek ki
kullanıcı 2 ayda tüm krediyi geri ödemiş olacak.

$Sure = $Sure + 1;

Bir alttaki satırda aylık ödemelerin ne kadar olacağı hesaplanıyor. Bu değer tabiî ki
faiz miktarı düşüldükten sonra olmalıdır. çünkü kullanıcını nin ödediği paranın belli
miktarını faize gidecek. Eğer faiz işin içinde olmasaydı tabii ki kullanıcıdan gelen
bütün parayı ($AylikOdeme) göz önünde bulundurup faiz kısmini işin içine
katmayacaktık. Faize giden parayı sanki kullanıcı hiç ödemeyecek gibi
düşünebilirsiniz.

$AylikNet = $AylikOdeme - ($Kredi * $Faiz/100);

yukarıda gördüğünüz gibi $Kredi ile $Faiz oranı çarpılıp yüzdesi alınmakta. Bu
miktarı kullanıcının aylık ödemesinde düşmekteyiz. bu şekilde net olarak kullanıcıdan
gelen net miktarı hesaplıyoruz.

Bir sonraki satırda ,

if (AylikNet <= 0)

echo "Aylık ödeme miktarını biraz daha yüksek seçmelisiniz";


exit;

Kod grubu ile ,kullanıcıdan gelen miktar eğer faizi bile karşılamaya yetmiyorsa
programın yapacağı işlem tanımlanıyor. Eğer böyle durum olursa "exit" komutu ile
program sonlanıyor.

Bir sonraki,

$Kredi = $Kredi - $AylikNet;

62
Kod satırında kullanıcının aldığı kredi miktarından ,ödediği miktar düşülerek yeni
değer yine $Kredi değişkeninde saklanıyor.

Böylece döngümüzün bir defalık çevrim sürecini açıklamış olduk. döngümüz tüm bu
işlemleri ,

While ($Kredi >0)

Şartımız "false" oluncaya kadar tekrarlayacaktır. gördüğünüz gibi döngünün her


çalışmasında $Kredi değişkeni içerisinde saklanan değer yavaş yavaş azalmaktadır.
Çünkü döngü her çalıştığında $Kredi = $Kredi - $AylikNet; formülü ile $Kredi
değişkenin değerini düşürmektedir.

Şimdi bir de sayısal örnek vererek döngünün nasıl çalıştığını açıklayalım.

Örnek olarak kullanıcının 1000 dolarlık krediyi yüzde 5 faiz ile aldığını kabul edelim.
kullanıcımız aylık 100 dolar ödeyebileceğini soyluyor. O zaman değişkenlerin
değerleri aşağıdaki gibi olacaktır.

$Kredi = 1000
$Faiz = 5
$Sure = 0
$AylikOdeme = 100

döngümüzün en başında, kullanıcının aldığı Kredi 1000 dolar,Faiz oranı 5, Aylık


ödeme 100 ve Sure 0 olacaktır.

Şimdi programın ilk satırı şöyle olacaktır,

while (1000>0)

Evet 1000 sayısı 0 sayısından büyük rahatlıkla döngünün içerisindeki işlemler


uygulanabilir.

$Sure = 0 + 1;

Şimdi $Sure değişkenimiz 1 e eşit.

Bir sonraki satır,

$AylikNet = 100 - (1000*5/100);

$AylikNet = 100 - 50;

artık $AylikNet değişkenimiz 50'ye eşit.

Son satırda bu değeri yerine koyuyoruz


$Kredi = 1000 - 50;

63
Artık $Kredi değişkenimiz 950 dir. Program en başa dönerek bu değeri kontrol değeri
ile karşılaştıracaktır.

While (950>0)

Evet 950 sayısı 0 sayısından büyük rahatlıkla döngünün içerisindeki işlemler tekrar
uygulanabilir.

$Sure = 1 + 1;

artık $Sure değişkenimiz 2 ye eşit.

$AylikNet = 100 - (950*5/100);

Artık $AylikNet değişkenimiz 52. 5 e eşittir.

$Kredi = 950 - 52. 5;

Artık $Kredi değişkenimiz 897. 5 e eşittir.

While (897. 5>0)

Evet 897. 5 büyüktür 0 dan diyerek aynı şekilde döngü $Kredi değeri 0'a veya 0 dan
küçük bir sayıya eşit olana kadar devam edecektir.

Zaten $Kredi değişkeni 0 dan küçük olunca bizim kullanıcımızda Kredinin tamamını
ödemiş demektir.

Döngümüz çalışmayı bitirince döngünün dışındaki ilk satırdan programın işleyişi


devam eder ve en sonunda "echo" komutuyla "$Sure" değişkeninin içindeki değer
ekrana yazılır.

"do while" döngüleri

"do while" döngüleri bir önceki konuda anlatılan "while" döngüleri ile benzer işlemleri
yapmakla beraber bir önemli fark içermektedirler. Döngünün kontrol
deyimi ,döngünün sonunda yer almaktadır. Bu durum döngü yapımızın, verdiğimiz
koşullar ne olursa olsun en az bir kere çalışacağını göstermektedir.

do
{

Bu parantezlerin içindeki kod grubunu uygula

while (şartımız doğrulanıyorsa); -- geriye don ve tekrar uygula

yukarıda açık şekilde görüldüğü üzere döngümüz "şartlarımız" ne olursa olsun "do"
komutu ile başlayan döngümüzü bir kez işletecek ve "while" ile verilen satırdaki

64
"şartlara" bakacaktır. Eğer şart "doğruysa" (true) geriye dönerek döngüyü ilk yaptığı
şekilde "do" ile balyalayan yerden itibaren bir kez daha işletecektir.

Hemen bir örnek verelim,

do
{

echo ("Kredi limitinizi aştığınız için son aldığınız ürün sepetinizden çıkarıldı");
$AlisverisToplami = $AlisverisToplami - $SonAlinanUrun;
$SonAlinanUrun = $SonAlinanUrundenBirOncekiUrun;

while ($AlisverisToplami > $KrediLimiti);

Yukarıdaki örnekte özellikle bir hata yapılmıştır. Hatamız kodlarla ilgili değil mantıkla
ilgilidir. gördüğünüz gibi daha kullanıcını nin limiti aşıp aşmadığına bakmadan ekrana
bir uyarı yazısını çıkarılmasıydı. Belki müşterimiz limiti aştı belki aşmadı. Ama bu
şekilde "do while" döngüsü ile yazdığımız programlarda dikkatinizi çekmek istediğimiz
nokta da işte buydu. Döngünün kontrol değişkeni döngü çalışmaya başladığı ilk
seferden sonra kontrol edilir. Dolayısı ile her halükarda müşteri ekranda bu uyarıyı en
az bir kere görecektir.

Bu döngü yapısını o zaman nerede kullanacağız?Şimdi size bu döngü yapılarının


nasıl ve nerede kullanılacağını biraz açıklamaya çalısalım. Bir mantıksal örnekle
başlayalım,

do
{
Bir sonraki kavşağa kadar arabayı sur;
}
while ($Kavsak != 10);

Özet olarak eğer PHP'nin sizin için bir işlemi kesin olarak yapmasını ve aynı
zamanda bir kontrol mekanizması ile donatılmasını istiyorsanız bu döngü tam sizin
için yaratılmış demektir .

Bir başka örnekle bu döngünün kullanımını pekiştirelim. şimdi girdiğimiz bir sayının
"asal" sayı olup olmadığının araştırıldığı bir uygulama yazalım.

1. Text editörünüzü açın ve aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD = POST ACTION="asalsayı. php">
asalsayı olup olmadığını merak ettiğiniz rakamı giriniz:

65
<INPUT NAME="Sayı" TYPE="Text">
<BR>
<BR>
<INPUT TYPE=SUBMIT VALUE = "Buraya tıklayarak sayının asal olup olmadığını
öğrenin. . . ">
<BR>
</FORM>
</BODY>
</HTML>

2. Bu dosyayı "asal. html" olarak kayıt edin.

3. Yeni bir text dosyası açıp aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<?php
$Bolunen = 2;
do
{

$Kalan = $Sayı%$Bolunen;
$Bolunen = $Bolunen + 1;
} while ($Kalan !=0 AND $Bolunen<$Sayı);

if (($Bolunen<$Sayı) || ($Sayı ==0)){

echo ("Sayınız asal bir sayı DEGIL");


}

else {
echo ("Sayınız ASAL bir sayıdır. ");
}

?>

</BODY>
</HTML>

4. Bu dosyayı "asalsayı. php" olarak kayıt edin

5. "asalsayı. html" dosyasını açıp bir kez programı deneyin.

Program nasıl çalışıyor

İlk satırda $Bolunen değişkenini tanımladık. özellikle bu değişkeni 2 den başlattık


çünkü bütün sayılar 1'e bölünebilir.

66
Programda $Kalan değişkeni ile ,kullanıcının girdiği sayının döngü içerisinde o
andaki karşılık gelen sayıya bölümünden kalan olup olmadığına bakıyoruz. Sonuçta
bu işlemi "moda" operatörünü kullanarak yapıyoruz(% işareti PHP de "moda" almak
için kullanılır. Kullanıcının web formundan girdiği sayı,teker teker 2 den başlayarak
kendisine gelene kadar bütün sayılara bölünüyor. Mesela 263 un bir asal sayı olup
olmadığına bakarsak ,teker teker 2,3,4,5,6,7,8 . . . sayılarına bölünüyor. Döngü her
çalıştığında bir sonuç çıkıyor. Bu sonuç döngünün kontrol deyimi ile test ediliyor. Bu
testten eğer "doğru" cevabi çıkarsa döngü tekrar çalışıyor ve bu böyle sürüp gidiyor.
Eğer sayının kendisine gelindiyse ve halen matematiksel olarak kalan sıfıra eşit
değilse bu demektir ki sayımız asal.

"for" döngüleri

for döngüleri belirli bir kod parçasının sizin istediğiniz sayı kadar tekrar edilmesini
sağlar. Bir başka deyişle sizin istediğiniz sayı kadar, döngünün "iteration" yani
iterasyon işlemine tabii tutulmasını sağlar.

for (Sayacı Kur ; Sayacı Test Et ; Sayaca Ekle Veya Sayaçtan Çıkart)

Bu parantezin içerisindeki kod grubunu uygula

yukarıda sözü gecen "sayaç" kavramı ile döngünün kaç kez çalıştığını hesaplıyoruz.
Bu "sayaç" ile aynı zamanda eğer belirlediğimiz sayı kadar cevrim gerçekleşmiş ise
döngümüze son veriyoruz.

Aslında "for" döngüsünde şartımız içerisinde tanımladığımız bu üç öğenin üçünü de


kullanmak zorunda değiliz.

Eğer bir satırda kendi ismimizi 10 defa yazdırmak istersek şimdiye kadar
öğrendiğimiz bilgilerle bunu nasıl yaparız?

$sayac = 0
while ($sayac<10)
{
echo "Benim adım Metin !";
$sayac =$sayac+1

Yukarıdaki döngünün kaç defa çalıştığını tahmin edebilirimsisiniz? Sizce döngü 9


defa mı çalıştı?çünkü 10'a gelmeden döngü durdumu?Acaba 11 kez mi çalıştı çünkü
biz $Sayac’ı 0 dan başlattık ?

Evet 10 defa çalışmasını istediğimiz bir döngü için çok fazla soru değil mi?Aslında
yukarıdaki döngü tam olarak 10 defa çalışır.

67
İste bu tip sorunları ortadan kaldırmak için en güzel yöntem "for" döngüleri
kullanmaktır.

Şimdi aynı işlemi birde "for" döngüsü kullanarak deneyelim,

for ($sayac =1 ; $sayac<=10; $sayac++)


{
echo "Benim adim Metin!";
}

gördüğünüz gibi döngünün kaç defa çalışacağı konusunda bir endişe duymanıza
gerek yok. Hepsi sizin için $sayac ile vericeğiniz sayı kadar işletilecek.

Bu döngü yapısını kullanırken örnek olarak sayacın kendisini de ekrana


yazdırabilirdik,

for ($sayac =1 ; $sayac<=10; $sayac++)


{
echo $sayac;
}

Çıktımız şöyle olacaktı. 12345678910

Not :Burada kullanılan "$sayac++" ifadesi "$sayac = $sayac + 1" ifadesi ile aynıdır.
Yalnızca bir kısa yol olarak bu notasyon kullanılmıştır.

Şimdi de bir uygulama yapalım.

1. Text editörünüzü açın ve aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=POST ACTION="dinamik. php">
kaç tane çocuğunuz var?
<INPUT NAME="Sayı" TYPE="TEXT">
<BR>
<BR>
<INPUT TYPE=SUBMIT>
<BR>
</FORM>
</BODY>
</HTML>

2. Bu dosyayı "dinamik. html" olarak kayıt edin.

3. Yeni bir text dosyaysa açıp aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>

68
<BODY>
<FORM METHOD=GET ACTION="dinamik2. php">
<?php
for ($sayac=0 ; $sayac<$Sayı ; $sayac++)
{
$öteleme = $sayac + 1;
echo "<BR><BR>Lütfen $öteleme numaralı çocuğun adını giriniz : <BR>";
echo "<INPUT NAME=Çocuk [] TYPE=TEXT";
}

if ($sayac==0) echo "Lütfen bir tuşa basarak devam ediniz";


?>
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

4. Bu dosyayı "dinamik. php" olarak kayıt edin.

5. Yeni bir text dosyası açıp aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<?php
$sayac=0;
echo "Çocuklarınızın isimleri :";
do
{
echo "<BR><BR>$Çocuk[$sayac]";
$Kontrol = "$Çocuk[$sayac]";
$sayac = $sayac + 1;
} while ($Kontrol != "");
if ($sayac == 1) echo "Çocuk sayısı olarak sıfır girdiniz program sonlanıyor";
?>
</BODY>
</HTML>

6. Bu dosyayı "dinamik2. php" olarak kayıt edin.

7. "dinamik. html" dosyasını açıp bir kaç kez programı farklı değerler vererek deneyin

69
Diziler

Diziler,bir tane değişken ismi altında verilerin indeks mantığı kullanılarak


saklanmasıdır. Dizi'nin her üyesi bir element olarak tanımlanır. Dizileri de aynı
değişkenlerde olduğu gibi yaratıyoruz. Bir değişkeni "dizi" şeklinde kullanacağımız
zaman sadece köşeli parantezleri [ ] eklememiz ve gerisini PHP ye bırakmamız
yeterlidir.

Örnek vermek istersek,

$Eyaletler[1] = "Washington";
$Eyaletler[2] = "Florida";

Dizi içerisinde yer alan elemanlara istediğiniz numarayı verebilirsiniz.

$Eyaletler[39] = "Washington";
$Eyaletler[12] = "Alaka";

Dizileri bu şekilde "numara" vererek "indekslemek" yerine karakter guruplarda


kullanabiliriz.

$Eyaletler["l"] = "Florida";
$Eyaletler["il"] = "Illinois";

Eğer bu şekilde karakterler kullanarak dizinizi indeksliyorsanız dizinin içersinde


saklanan veriye ulaşmak için çift tırnak işaretlerini kullanmayabilirsiniz,

echo $Eyaletler["l"] = "Florida";

veya

echo $Eyaletler[l] = "Florida";

aynı şeylerdir ve her ikiside problemsiz çalışacaktır.

PHP'nin en güzel yanlarından bir tanesi de değişik tipteki verilerin bir dizide ortak
olarak kullanılabilmesidir.

$Sayı[1] = 12;
$Sayı[2] = "Oniks";
$Sayı[3] = $değişken;
$Sayı["l"] = $değişken;

Ancak bu gibi kullanımlarda diziye ayrılacak hafıza büyüklüğünün ne olması gerektiği


gibi sorular nedeniyle PHP biraz yavaş çalışabilir!!!

Dizilerin Başlatılması ve Kullanılması

Bir diziyi başlatmak için adini yazıp köşeli parantezleri eklemek yeterlidir. İndeksleme
problemleri gibi konularla bizim ilgilenmemize gerek yoktur. PHP tüm bu işlemleri

70
otomatik olarak bizim için yapacaktır. Yalnızca dizinin ilk öğesini yaratın arkasından
ikinciyi arkasından üçüncüyü. . . bu şekilde dizinin bütün öğelerini yaratabilirsiniz,

$Yazar[] = "Metin Adaklı";


$Yazar[] = "Bilgin Girginer";

Köşeli parantezler olmadan PHP ,ilk satırda değişkene verdiğiniz değeri ikinci satırda
bir sonraki değer ile değiştirecektir. Bu köşeli parantezler sayesinde değerlerimizi bir
dizi içerisinde saklamak istediğimizi PHP'ye anlatmış oluyoruz.

Eğer indekslemeyi PHP ye bırakıyorsak dizinin ilk öğesi ,

$Yazar[0] = "Metin Adaklı";

ikinci öğesi,

$Yazar[1] = "Bilgin Girginer";

olacak şekilde "sıfırdan" başlayarak dizinin tüm öğelerine birer numara atanır. PHP
içerisinde diğer programlama dillerinden farklı olarak,dizinin içinde saklayacağımız
veri tipini önceden bildirmemize gerek yoktur. Dizinin içerisinde yer alan elemanlarda
text veya numara olarak veri saklanabilir. Yine değişkenlerde olduğu gibi PHP
otomatik olarak onların veri tipine karar verecektir. İkinci önemli kolaylık diziyi
yaratamadan önce ne kadar büyüklükte olacağına karar verme zorunluluğu
olmaması. diğer programlama dillerinde bu iki şart dizilerle ilgili birçok kısıtlamayı
beraberinde getiriyor.

Php içerisinde dizilere veri girişi için iki yol bulunmaktadır.

Birincisini zaten yukarıda ayrıntılı olarak açıkladık teker teker bütün dizinin
elemanlarını girmek veya array () komutunu kullanmak. Şimdi bu komutun
kullanımına bir örnek verelim,

$Yazar = array ("Metin Adaklı","Bilgin Girginer");

Tekrar edersek yukarıdaki örnek te PHP'ye diziyi otomatik olarak indekslemesi için
özgür bıraktık. İndex değerleri "sıfırdan" başlayarak artan numaralar şeklindedir. Eğer
"echo" komutuyla $Yazar[1] değişkeni içerisinde saklanan değeri görmek isteseydik
ekranda "Bilgin Girginer" yazdığını görecektik.

Dizilerin boyutunda herhangi bir sınırlama yoktur. Dolayısı ile şöyle bir kod yazabiliriz,

$Eyaletler = array ("Alabama", "Alaka", "Arizona", "Arkansak", "California",


"Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho",
"Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland",
"Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",
"Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York",
"North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania",
"Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah",
"Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");

71
Bizler yukarıda dizinin bütün öğelerini PHP'nin otomatik olarak indekslemesini
sağladık. böyle bir kodu yazdığımız zaman PHP dizinin ilk öğesini (Alabama Eyaleti)
"0" değeri ile indeksler. Amerika Birleşik Devletleri'nde toplam 50 eyalet vardır.
gördüğünüz gibi son eyalet böyle bir dizide "49" değeri ile indeksleecektir. çünkü ilk
değerimiz için indeks değeri "0"dır. Bu durumda dizinin belirli bir sayıdan başlayarak
otomatik olarak indekslemesini istiyorsanız,

$Eyaletler = array (1 => "Alabama", "Alaka", "Arizona", "Arkansak", "California",


"Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho",
"Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland",
"Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",
"Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York",
"North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania",
"Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah",
"Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");

yukarıda görüldüğü şekilde "=>" operatörünü kullanmalısınız. Ardından gelen sayı


dizimizin indekslemeye başlanacağı değerdir.

Eğer çok uzun diziler kullanıyorsanız tabii ki dizinin her öğesi için bir indeks değeri
belirleyebilirsiniz.

$Eyaletler = array ("al" => "Alabama","ak" => "Alaka","az" => "Arizona","ar" =>
"Arkansak","ca" => "California","co" => "Colorado", "ct" => "Connecticut", "de"
=>"Delaware","l" => "Florida","ga" => "Georgia", "hi" =>"Hawaii", "id" =>"Idaho","il" =>
"Illinois", "in" =>"Indiana", "ia" =>"Iowa", "ks" =>"Kansas", "ky" =>"Kentucky", "la"
=>"Louisiana", "me" =>"Maine","md" => "Maryland","ma" => "Massachusetts","mi" =>
"Michigan", "mn" =>"Minnesota", "ms" =>"Mississippi","mo" => "Missouri", "mt"
=>"Montana", "ne" =>"Nebraska","nv" => "Nevada", "nh" =>"New Hampshire", "nj"
=>"New Jersey","nm" => "New Mexico","ny" => "New York","nc" => "North
Carolina","nd" => "North Dakota","oh" => "Ohio", "ok" =>"Oklahoma","or" =>
"Oregon", "pa" =>"Pennsylvania","ri" => "Rhode Island", "sc" =>"South Carolina","sd"
=> "South Dakota","tn" => "Tennessee","tx" => "Texas", "ut" =>"Utah","vt" =>
"Vermont","va" => "Virginia","wa" => "Washington","wv" => "West Virginia", "wi"
=>"Wisconsin","wy" => "Wyoming");

Dizi Boyunca İterasyon (Iterating Through an Array )

Diziyi bir kere yarattıktan sonra her seferinde geriye donup teker teker onları
çağırmaya gerek yoktur. Eğer yukarıda yaratılan "eyaletler" dizisinin bütün
elemanlarını web sayfasında görüntülemek isteseydik üç satırlık kod ile bu işi
çözümlemiş olacaktık.

for ($sayac=1;$sayac<51;$sayac++) {
echo "<BR>$Eyaletler[$sayac]";
}

döngümüz 1 den başlayarak 50 ye kadar sayacak ve her dönüşünde Amerikanın bir


eyaletini ekrana yazacaktır.

72
Not : "<BR>" bir HTML tagıdır ve her seferinde yeni bir satır yaratmak amacıyla
kullanılmıştır.

Döngünün çalışmasını açık şekilde yazacak olursak,

echo "<BR>$Eyaletler[1]";
echo "<BR>$Eyaletler[2]";
echo "<BR>$Eyaletler[3]";
echo "<BR>$Eyaletler[4]";
......
.......

Aynı amaca ulaşmak için "while" döngüsünü kullanmak isteseydik bir kaç satır fazla
kod yazacaktık,

$sayac=1;
while ($sayac<51) {
echo "<BR>$Eyaletler[$sayac]";
$sayac=$sayac+1;
}

Şimdi de bir uygulama yazalım.

1. Text editörünüzü açın ve aşağıdakileri yazın.


<HTML>
<HEAD></HEAD>
<BODY>
<FORM ACTION="başkentler. php" METHOD=POST>
Hangi eyaletin başkentini öğrenmek istiyorsunuz?
<SELECT NAME=Eyalet>
<?php

$Eyaletler = array (1 => "Alabama", "Alaka", "Arizona", "Arkansak", "California",


"Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho",
"Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland",
"Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",
"Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York",
"North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania",
"Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah",
"Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");

for ($sayac=1;$sayac<51;$sayac++) {
echo "<OPTION>$Eyaletler[$sayac]</OPTION>";
}
echo "</SELECT><BR><BR>";
for ($sayac=1;$sayac<51;$sayac++) {
echo "<INPUT TYPE = HIDDEN NAME='GizliEyalet[]' VALUE =
'$Eyaletler[$sayac]'>";
}

73
echo "<INPUT TYPE=SUBMIT></FORM>";
?>
</BODY>
</HTML>

2. Bu dosyayı "eyaletler. php" olarak Kayı edin.

3. Yeni bir text dosyası açıp aşağıdakileri yazın.

<HTML>
<HEAD></HEAD>
<BODY>
<?php
$EyaletBaskenti = array (0 => "Montgomery", "Juneau", "Phoenix", "Little Rock",
"Sacramento","Denver","Hartford", "Dover","Tallahasse", "Atlanta", "Honolulu",
"Boise", "Springfield","Indianapolis", "Des Moines", "Topeka", "Frankfort", "Baton
Rouge","Augusta","Annapolis","Boston", "Lansing", "Saint Paul","Jackson", "Jefferson
City", "Helena","Lincoln", "Carson City","Concord", "Trenton","Santa Fe", "Albany",
"Raleigh","Bismarck","Columbus","Oklahoma City", "Salem", "Harrisburg",
"Providence", "Columbia","Pierre", "Nashville", "Austin","Salt Lake City",
"Montpelier","Richmond","Olympia","Charleston", "Madison","Cheyenne");

for ($sayac=0;$sayac<50;$sayac++) {

if ($GizliEyalet[$sayac] == $Eyalet)
{
echo "Sectiginiz eyaletin baskenti $EyaletBaskenti[$sayac]";
}

?>
</BODY>
</HTML>

4. Bu dosyayı "başkentler. php" olarak kaydedin.

5. "eyaletler. php" dosyasını açıp bir deneme yapın.

Sıralı olmayan indeks yapılı dizilerin İterasyonu†

Diziyi düzgün olarak sıraladığınız (indekslediğiniz) zaman çoğu işlemi yapmak


gerçekten kolay olacaktır. Birde aşağıdaki gibi bir diziye sahip olduğumuzu
varsayalım,

$Dizimiz[3569]="gerçekten büyük";
$Dizimiz[1]="Gerçekten küçük";
$Dizimiz[599]="normal bir sayı";

74
Şimdi PHP'nin bize dizilerle ilgili sunduğu fonksiyonları öğrenerek belirli kalıplara
bağlı kalmaktan kurtulup her türlü dizi işlemini gerçekleştirebileceğiz.

current ve key fonksiyonları

Dizi içerisinde hangi elementin o anda kullanıldığını görmek için current (), bu
elementin indeks değerini bulmak isterseniz key () fonksiyonunu kullanmalısınız.

Hemen çok küçük bir kod parçası üzerinde PHP'nin yeni eklediğimiz dizi
elementlerine hangi indeksi otomatik olarak verdiğini görelim.

$Yonetmen[4]="Yılmaz Güneş";
$Yonetmen[1]="Clint Eastwood";
$Yonetmen[93]="Steven Spielberg";
$Yonetmen[24]="Al Pacino";

aşağıdaki iki satır kodu eklersek "$Yönetmen[]" dizisi için o anki geçerli indeks
değerini görebiliriz.

$İndeksDeğeri = key($Yonetmen);
echo ($IndeksDegeri);

böyle bir programın çıktısında "key ()" fonksiyonu "4" değerini döndürecek ve echo
komutuyla ekrana yazılacaktır.

gördüğünüz gibi o anda geçerli olan indeks değeri dizinin ilk elemanını bize gösterdi.

Eğer current () fonksiyonunu kullanmış olsaydık döndüreceği değer "Yılmaz Güneş"


olacaktı.

$GecerliIcerik = current ($Yonetmen);


echo ($GecerliIcerik);

Şimdide bir satır daha ekleyelim dizimize ve bakalım PHP hangi indeksi verecek bu
yeni eklenen dizi elementine,

$Yonetmen[] = "Mel Gibson";

"Mel Gibson" indeks değeri "94" olarak dizimiz içerisinde yer alacaktı. current () ve
key () fonksiyonlarını kullanarak,dizi içerisinde ekleyeceğimiz bir sonraki elemente
hangi indeks değerinin verileceğini nasıl bulabiliriz?Yazımızı okumaya devam edin .

Next () ve Prev ()

Diziye eklenen yeni elemanların indeks değerini bulmak için next () ve prev ()
fonksiyonlarını kullanabilirsiniz. Bu fonksiyonlar dizi boyunca elementler arasında
dolaşmanızı sağlarlar. Bu iki fonksiyonda,argument olarak dizi ismini alırlar. Yani
hangi fonksiyonun elementleri arasında gezinmek istiyorsanız fonksiyonu,o dizinin
adını vererek kullanmalısınız.

75
Şimdi bir önceki konuda yarattığımız diziyi ele alalım ve bu fonksiyonları uygulamalı
olarak görelim,

$Yönetmen[4]="Yılmaz Güneş";
$Yönetmen[1]="Clint Eastwood";
$Yönetmen[93]="Steven Spielberg";
$Yönetmen[24]="Al Pacino";
$Yönetmen[] = "Mel Gibson";

next ($Yonetmen);
$İndeksDeğeri = key($Yonetmen);
echo ($İndeksDeğeri);

Bu küçük programımızın çıktısı "1" olacaktır. Çünkü next fonksiyonu çağrılmadan


önce current elementin indeks değeri "4" tü. Yani dizinin ilk elemanıydı. Biz next
($Yonetmen); diyerek dizi içerisindeki bir sonraki elementi kullanıma hazır hale
getirdik. Sonrasında $İndeksDeğeri değişkeni içerisinde key($Yonetmen) fonksiyonu
ile verdiğimiz değerin saklanmasını sağladık. echo ($İndeksDeğeri) komutu ile de
ekrana yazdırdık.

next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
$İndeksDeğeri = key($Yonetmen);
echo ($İndeksDeğeri);

Gördüğünüz gibi fonksiyonu üç defa daha kullandık şimdi artık echo komutu ile
ekrandan alacağımız çıktı "94" olacaktır. Eğer bu indeks numaralı elementin içeriğini
ekranda yazdırmak isteseydik,

$GecerliIcerik = current ($Yonetmen);


echo ($GecerliIcerik);

"Mel Gibson" çıktısını alacaktık.

prev () fonksiyonun kullanımı da tamamen yukarıdaki ile aynıdır. Bu fonksiyonla dizi


içerindeki elementler arasında "geriye" doğru gezinmemizi sağlıyoruz.

next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
prev ($Yonetmen);
$İndeksDeğeri = key($Yonetmen);
echo ($İndeksDeğeri);

Kod grubunun çıktısı "24" olacaktır. Dizi içerisinde önce dört element ileriye doğru
gidip o elementin "current" olmasını sağladık. Sonra prev ($Yonetmen); satırı ile dizi

76
içerisinde bir element geriye gittik. Diğer satırlarda ise işte o elementin "indeks"
değerini ekrana yazdırdık.

Şimdi burada bir konuyu belirtelim. Eğer dizimiz içerisinde mesela ikinci "next"
satırında dizimizin sonuna gelmiş olsaydık ne olacaktı. Ondan sonraki kodlar hata
uyarısı verecekmiydi? Bu sorunun cevabi kesinlikle HAYIR’DIR. Böyle bir durumda
hiç bir şey olmayacaktı. Kodumuz hiç bir hata vermeyeceği gibi hiç bir değerde
döndürmeyecekti. Başka programlama dillerinde bu durumdaki bir program mutlak
hata döndürür.

prev ($Yonetmen);
next ($Yonetmen);
next ($Yonetmen);
$İndeksDeğeri = key($Yonetmen);
echo ($İndeksDeğeri);

Kod grubu da aynı şekilde hata döndürmeyecektir. gördüğünüz gibi daha dizinin
başında dizideki elementi bir geriye almak istedik.

list ve each fonksiyonları

Bu iki fonksiyonla dizimiz içerisinde yalnızca "veri içeren" element'lerin kullanımını


sağlıyoruz. Bir döngümüz içerisinde mesela "boş" içeriğe sahip elementlerin
kullanılmasını istemiyor olabiliriz. Bu durumda dizi içerisindeki bütün veri içeren
elementleri çok kolayca ekranda gösterebiliriz. Mesela "while" döngüsü için aşağıdaki
kodu yazabiliriz,

while (list(İndeksDeğerimiz,ElementinIcerigi) = each (DizininAdi)

yukarıdaki satır diyor ki : DizininAdi ile verilen dizi adındaki her bir elementin "indeks"
değerini İndeksDeğerimiz'e , içeriğini de ElementinIcerigi'ne eşitle. Eğer yalnızca
indeks değerinin veya içeriğinin döndürülmesini istiyorsanız,

while (list(İndeksDeğerimiz) = each (DizininAdi)

veya

while (list(,ElementinIcerigi) = each (DizininAdi)

Örneğimizle verilen küçük kod parçası üzerinde uygulamalı olarak gösterirsek,

while (list($İndeksDeğeri,$GecerliIcerik) = each ($Yonetmen))


{
echo "<BR>$İndeksDeğeri - $GecerliIcerik";
}

77
String indeks yapılı dizilerin İterasyonu

Karakterler ile indekslenmis dizilerin elementleri arasında dolaşmak, yukarıda


açıklanan numara ile indekslenmis diziler arasında dolaşmak ile aynıdır. Biç kaç fark
bulunmaktadır tabii ki ama mantık hepsinde aynıdır. Şimdi bir kod parçası üzerinde
farklılıkları anlatalım.

$EyaletBaskenti["ga"]="Atlanta";
$EyaletBaskenti["il"]="Springfield";
$EyaletBaskenti["ca"]="Sacramento";
$EyaletBaskenti[]="Cheyene";

"Cheyene" ile verilen değer dizi içerisinde $EyaletBaskenti[0] öğesi olarak


saklanacaktır. gördüğünüz gibi indeks değeri "0" dir. PHP'nin dizinin bu öğesi
hakkında herhangi bir bilgiye sahip değildir ve indeks olarak sıfır değerini ataması
çok da sürpriz değildir. Eğer herhangi bir elemente numara vererek indekslemiş
olsaydık ondan sonra gelecek ilk sayının numarası bu indeksi verilmeyen elemente
atanacaktı. Şu anda dizide numara ile indekslenmis bir değer olmadığı için sıfır
verilerek bu element indeksdendi.

current () ve key () fonksiyonları yine aynı şekilde kullanılacaktır. Herhangi bir fark
yoktur.

$HangiEyalet = current ($EyaletBaskenti);


$HangiKisaltma = key ($EyaletBaskenti0;
echo "$HangiEyalet - $HangiKisaltma";

Bu kodun çalıştırılması halinde "Atlanta - gaf" şeklinde bir çıktıyı ekrandan alırsınız

next () ve prev () fonksiyonları yine aynı şekilde kullanılacaktır. Herhangi bir fark
yoktur.

$EyaletBaskenti["gaf"]="Atlanta";
$EyaletBaskenti["il"]="Springfield";
$EyaletBaskenti["ca"]="Sacramento";
$EyaletBaskenti[]="Cheyene";
next ($EyaletBaskenti);
$HangiEyalet = current ($EyaletBaskenti);
$HangiKisaltma = key ($EyaletBaskenti0;
echo "$HangiEyalet - $HangiKisaltma";

Bu kodun çalıştırılması halinde "Springfield -il" şeklinde bir çıktıyı ekrandan alırsınız

array () fonksiyonuca yine aynı şekilde kullanılacaktır. Herhangi bir fark yoktur.

$EyaletBaskenti = array ("gaf" => "Atlanta","il" => "Springfield","ca" => "Sacramento",


"wy" => "Cheyene");

list () ve each () fonksiyonları yine aynı şekilde kullanılacaktır. Herhangi bir fark
yoktur.

78
while (list($EyaletKisaltmasi,$EyaletIsmi) = each ($EyaletBaskenti))
{
echo "<BR>$EyaletKisaltmasi - $EyaletIsmi";
}

Not : yukarıda kullanılan $EyaletKisaltmasi,$EyaletIsmi değişkenleri yerine istediğiniz


bir değişken ismi yazabilirsiniz. Burada önemli olan "each" ile verilen $EyaletBaskenti
dizisinin adidir.

Yani ,

while (list($MetinMakinecidir,$OzgurHiyariElektronikcidir) = each ($EyaletBaskenti))


{
echo "<BR>$MetinMakinecidir - $OzgurHiyariElektronikcidir";
}

yazmak tamamen aynı şeylerdir her ikisizinde çıktısı şöyle olacaktır.

gaf - Atlanta
il - Springfield
ca - Sacramento
wy - Cheyene

Dizilerin Sıralanması

Dizilerin sıralanması için PHP içerisinde birçok fonksiyon bulunmaktadır. Bizler


bunların arasından en çok kullanılan 5 tanesini inceleyeceğiz. Burada anlatılan
fonksiyonlar genel olarak kullanılmaktadır.

sort ()

En temel sıralama fonksiyonudur. Dizinin içerisindeki elementleri içeriklerine göre


alfabetik olarak sıralar. Argument olarak sıralanacak dizi isminin verilmesi yeterlidir.

sort (DizininAdi)

Örnek vermek istersek ,

$Yonetmen = array ("Orson Welles","Carol Reed","Fritz Lang","Jacques Tourner");

Yönetmenlerimizin isimlerinin yer aldığı böyle bir diziyi siralamak istersek,

sort ($Yonetmen);

yazmamiz yeterli olacaktı.

Bu işlemin sonucunu ekranda görmek için yine list () ve each () fonksiyonlarını


kullanabiliriz.

79
$Yonetmen[0]= "Orson Welles"
$Yonetmen[1]= "Carol Reed"
$Yonetmen[2]= "Fritz Lang"
$Yonetmen[3]= "Jacques Tourner"

siralamadan sonra ,

$Yonetmen[0]= "Carol Reed"


$Yonetmen[1]= "Fritz Lang"
$Yonetmen[2]= "Jacques Tourner"
$Yonetmen[3]= "Orson Welles"

olacaktır.

Peki dizimizi böyle numaralar ile indekslemek yerine karakterler kullanarak


indekslemiş olsaydık (yani harf gurupları kullanarak indeksleseydik)?

asort ()

Karakterler ile indekslenmiş dizileri elementlerinin içeriklerine göre sıralamak için


kullanılır

Şimdi eyaletler dizimizi ele alalım,

$EyaletBaskenti = array ("gaf" => "Atlanta","il" => "Springfield","ca" => "Sacramento",


"wy" => "Cheyene");

Dizimiz böyle bir kodun ardından doğal olarak aşağıdaki gibi yaratılacaktır

$EyaletBaskenti["gaf"]= "Atlanta";
$EyaletBaskenti["il"]= "Springfield";
$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["wy"]= "Cheyene";

eğer sort () kullanarak sıralamış olsaydık son durum şöyle olacaktı,

$EyaletBaskenti[0]= "Atlanta";
$EyaletBaskenti[1]= "Cheyene";
$EyaletBaskenti[2]= "Sacramento";
$EyaletBaskenti[3]= "Springfield";

diğer bir deyişle harfler kullanarak indekslediğiniz dizimizde,bu harfler numaralarla


değiştirilecekti. Bunu engellemek için mutlaka asort () kullanılmalıdır,

asort ($EyaletBaskenti);

komutunu verdikten sonra artık dizimiz aşağıdaki şekilde sıralanacaktır.

$EyaletBaskenti["gaf"]= "Atlanta";
$EyaletBaskenti["wy"]= "Cheyene";

80
$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["il"]= "Springfield";

ekranda sıralamanın nasıl değiştiğini görmek için tabii ki list () ve each ()


fonksiyonlarını "while" döngüsü ile şu şekilde kullanabilirsiniz,

while (list($EyaletKisaltmasi,$EyaletIsmi) = each ($EyaletBaskenti))


{
echo "<BR>$EyaletKisaltmasi - $EyaletIsmi";
}

rsort () ve arsort() fonksiyonları

Bu iki fonksiyonda amaç olarak sort () ve asort () fonksiyonlarına benzerdir. Tek farkı
dizi elementlerinin içeriklerini alfabenin tersi yönünde sıralamalarıdır.

$Yonetmen = array ("Orson Welles","Carol Reed","Fritz Lang","Jacques Tourner");


rsort ($Yonetmen);

ve aynı şekilde kareketer kullanılarak yaratılmış diziler içinde ,

$EyaletBaskenti = array ("gaf" => "Atlanta","il" => "Springfield","ca" => "Sacramento",


"wy" => "Cheyene");
arsort ($EyaletBaskenti);

ksort ()

Karakter dizisi kullanılarak yaratılmış diziler için,"indeksleri" kullanarak alfabetik


olarak sıralama yapar,

$EyaletBaskenti = array ("gaf" => "Atlanta","il" => "Springfield","ca" => "Sacramento",


"wy" => "Cheyene");
ksort ($EyaletBaskenti);

kodumuzun sonunda dizimiz şu şekilde sıralanacaktır,

$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["gaf"]= "Atlanta";
$EyaletBaskenti["il"]= "Springfield";
$EyaletBaskenti["wy"]= "Cheyene";

Çok boyutlu dizilerle çalışmak :

C ve Java dillerinde,birden fazla boyuta sahip dizi tanımlamak gerçekten de ileri


seviye uzmanlık gerektiren kavramlardır. PHP de ise bu konu için kısaca
tanımlanabilecek ve uygulanabilecek yazım kuralları geliştirilmiştir. Bir diziye
istediğiniz kadar çok boyut katabilirsiniz.

PHP içinde bir diziyi kullanırken ona iki'den fazla boyut katmak,çok ta güzel bir
programcılık tekniği değildir. Bu hem sizin hem de PHP nin yapısı itibari ile bir çok

81
ekstra yükü beraberinde getirir. Sizin için, kodun sonradan başka kişiler tarafından
bakımının zorlaşması ,sunucu için ise kaynaklarının yok edilmesi bakımından önemli
ve düşünülmesi gereken,ve hatta mümkünse iki den fazla boyut için kaçınılması
gereken programlama teknikleridir. . .

Örnek:

<?php

$örnek_dizi = array("Ambalajlar" => array("kagit","plastik"),"Urunler" => array("et",


array("süt","yumurta")));
print $örnek_dizi["Ambalajlar"][1];
//ekrana plastik yazdirdim. . .
print $örnek_dizi["Urunler"][2][1];
//ekrana süt yazdirdim. . .
?>

Bir diziyi sizin belirlediğiniz bir fonksiyona göre sıralamak :

Bir diziyi kendi belirlediğiniz kurala göre sıralamak istiyorsunuz. Buna sebep PHP'nin
hazır sıralama fonksiyonlarının yetersizliği olabilir.

Çözüm : asort () fonksiyonu, kullanıcı tanımlı bir fonksiyona göre bir diziyi
sıralayabilir.

Örnek :

<?php
function borcu_sirala ($a,$b)
{

if ($a[1]==$b[1]) return 0;
return ($b[1] > $a[1]) ? 1 : -1;
}

/*
Diyelim ki arkadaşlarınızın size olan borcunu bir dizide
saklıyorsunuz ve bu diziyi en büyük borçtan en küçüğe doğru sıralamak istiyorsunuz.
*/

$aborclar = array(array("Okan",31),array("Aos",12),array("Kris",18));

asort ($aborclar,'borcu_sirala');

foreach ($aborclar as $borc) {

print $borc[0]. " isimli kişinin bana olan borcu :". $borc[1];
print "<br>";
}
?>

82
Açıklama : asort () fonksiyonu argument olarak bir dizi ve kullanıcı tanımlı bir
fonksiyonun ismini alır. İlk argumentte aldığı diziyi,ikinci argumentte yer alan
fonksiyona göre sıralar. Bu kullanıcı tanımlı fonksiyon mutlaka "-1,0 veya 1"
sonuçlarından birini döndürmelidir.

PHP'nin yapısal sıralama fonksiyonları "dizilerin dizilerini" sıralayamazlar. Ancak


yukarıdaki şekilde yapılandırılmış dizileri "asort ()" ile kendi yazdığınız fonksiyonlarla
sıralayabilirsiniz.

Karakter indeksli dizilerden element silmek:

Problem : Karakter indeksli dizilerden istediğiniz elementleri silmek istiyorsunuz.

Çözüm: PHP ile beraber gelen unset () fonksiyonunu kullanabilirisiniz.

Tartışma : unset () fonksiyonu ile verilen değişken hafızadan silinir (yok edilir). Bu
fonksiyonu bir tek değişkeni silmek için kullanabileceğiniz gibi bir değişken listesi
tanımlayıp hepsini berberce de silebilirsiniz.

Diziler için kullanıldığında (dizilerde bir değişkendir sonuçta) verilen indeks ve o


indekse ait değeri, yani dizinin o elementini tamamen diziden siler. Hafızanın o
elemente ayrılmış bölgesi tamamen temizlenir.

Bir örnekle incelemek istersek :

<?php

$evler = array ("Hillsborough" => array("Metin","Esra"), "Mersin" =>


array("Annem","Babam","Kardeşlerim"),"Istanbul" => array
("Ablam","Eniştem","Bebekleri"));

ekrana_yazdir ($evler);
print "<BR>";
print "Şimdi de listeden bazı elementleri siliyorum ve fonksiyonu yine çağırıyorum. . .
<BR>";
unset ($evler[Hillsborough], $evler[Istanbul]);
ekrana_yazdir ($evler);

function ekrana_yazdir ($ar) {


foreach ($ar as $YasadigiYer => $Insanlar) {
print "$YasadigiYer: ";
foreach ($Insanlar as $kişiler) {
print "$kişiler ";
}
print "\n";
}
}
?>

83
Böylece hem çok boyutlu dizilerle çalışmaya örnek vermiş hem de bir diziden nasıl
element silebileceğimizi öğrenmiş olduk. . .

Kaynaklar

1- İnternet siteleri
2- [Link]

3- [Link]

84

You might also like