Phpnot
Phpnot
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. )
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>
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.
Ş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.
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)
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.
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.
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.
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.
Ö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
Örnek
class IsimBirIki
class Isim
5
Sınıf Kitaplığı (class library) İsimleri
* İ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() {};
}
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;
}
6
Açıklama
class IsimBirIki
{
function StartYourEngines(&$someEngine, &$anotherEngine) {
$this->mSomeEngine = $someEngine;
$this->mAnotherEngine = $anotherEngine;
}
var $mSomeEngine;
var $mAnotherEngine;
}
Değişken İsimleri
Açıklama
Örnek
function HandleError($errorNumber)
{
$error = OsErr();
$time_of_error = OsErr->getTimeOfError();
$error_processor = OsErr->getErrorProcessor();
}
Açıklama
Örnek
7
class Test
{
var $mrStatus;
function DoSomething(&$rStatus) {};
function &rStatus() {};
}
Global Değişkenler
Açıklama
Örnek
global $gLog;
global $grLog; // bu örnekte bir de referans için 'r' karakteri var.
* Global sabit isimlerinin tamamı büyük harf ve '_' kelime ayracı kullanılarak
yazılmalıdır.
Açıklama
Örnek
Açıklama
Ö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()
{
}
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.
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.
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
}
}
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
while (kosul)
{
}
Soyutlama (Abstraction)
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.
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,
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.
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.
12
Örnek 1.
<?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);
?>
Örnek 2.
<?
// İlk basamak veritabanına bağlantıyı sağlamak
$db = dbx_connect ("mysql", "localhost", "veritabani_adi", "kullanici_adi", "sifre");
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.
BÖLÜM 3
14
PHP İÇERİSİNDE DEĞİŞKENLERİN KULLANIMI
Burada "yazar" değişken adimiz,içinde sakladığımız değer ise "Metin Adaklı" dır.
$yasimizin_icinde_tutuldugu_degisken = 24;
echo $yazar;
echo $yasimizin_icinde_tutuldugu_degisken;
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.
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:
<HTML>
<BODY>
<?php
$yazar = "Metin Adaklı";
echo $yazar;
?>
</BODY>
</HTML>
Metin Adaklı
echo $yazar;
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 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.
Ş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. )
Tofaş 1. 6
İki şekilde de Araba Tipi ile Motor Hacmi arasında boşluk yaratılabilir. Burada
örneklerle PHP bilginiz arttırılmaya çalışılmaktadır.
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.
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;
Matematiksel İşlemler
$Anakart = 125;
$Modem = 65;
$Hafiza = 110;
$Toplam = $Anakart + $Modem + $Hafiza;
echo "Toplam masrafımız $Toplam dolar. . . ";
<HTML>
<BODY>
<?php
$Anakart = 125;
$Modem = 65;
19
$Hafiza = 110;
$Toplam = $Anakart + $Modem + $Hafiza;
echo "Toplam masrafımız $Toplam dolar. . . ";
?>
</HTML>
</BODY>
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.
$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;
$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ı
$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.
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;
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.
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.
Metin Adaklı
Tom Hanks
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,
PHP içerisinde sabitler aynı değişkenler gibi echo () komutu kullanılarak ekranda
gösterilebilir. Bunu bir örnekle açıklayacak olursak,
Not : Sabitleri kullanırken bu şekilde çift tırnağın dışında kullanmak olası hataları
engelleyecektir.
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)
echo $HTTP_COOKIE_DATA;
böyle bir kodun çıktısı size kullanılmakta olan bir cookie yani çerez bilgisi olup
olmadığını gösterecektir.
echo HTTP_USER_AGENT;
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.
İ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 ,
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.
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.
$DegiskenAdi = 3;
echo gettype ($DegiskenAdi);
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)
$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.
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.
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.
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 :
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
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ı
27
Şimdi aşağıdaki örneğe bakiniz:
//Fakat :
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.
Ş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 .
"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 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.
İ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.
29
Mantıksal örneğimize dönersek bu yazım şekli için örneğimiz şu şekilde,
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.
$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;
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.
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.
Ş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.
<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="tahminoyunu. php">
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD></HEAD>
31
<BODY>
<?php
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>
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
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.
$SansliNumara = 3;
$SansliNumara = 5;
== operatörünün kullanılması
Bu konu çok önemlidir. Eğer şimdi çözümlemez iseniz ileride çok daha büyük
sorunlar çıkaracaktır.
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,
33
"==" operatörünün tam tersi olan "!=" operatörü "eşit değil" operatörü olarak
adlandırılı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.
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:
<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="quiz. php">
<BR>
<BR>
<BR>
<BR>
34
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD></HEAD>
<BODY>
<?php
?>
</BODY>
</HTML>
5. "quiz. html dosyasını açıp cevap verdiğiniz taktirde sonucu bir sonraki ekranda
göreceksiniz.
"Bu gün günlerden pazar ve hava güneşli ise plaja gideceğim" cümlesinin PHP
dilinde karşılığı şöyledir.
"AND" ifadesi yazmak yerine "&&" (Çift Ampersand) yazmak aynı şeylerdir.
35
if ($Gun == "Pazar" && $HavaDurumu == "Güneşli") echo ("Plaja Gidelim");
"OR" ifadesi yazmak yerine "||" (Double işareti) yazmak aynı şeylerdir.
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.
Ş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.
ş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.
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 = 3;
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)
<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>
<HTML>
<HEAD></HEAD>
<BODY>
<?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>
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ı
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.
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.
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. . . ");
<HTML>
<HEAD></HEAD>
39
<BODY>
Seres Otomobil Web Sayfası
<BR>
<BR>
</SELECT>
<BR>
<BR>
</SELECT>
<BR>
<BR>
<INPUT TYPE=SUBMIT VALUE="Bilgileri Gönder">
</FORM>
</BODY>
</HTML>
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.
<HTML>
<HEAD></HEAD>
<BODY>
Seres Otomobil Sonuç Sayfası
<?php
?>
</BODY>
</HTML>
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.
if (durum doğrulanıyorsa)
else
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.
else
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.
else
Ö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.
43
echo ("Araba kiralama isteğiniz KABUL edilmiştir. ");
else
Örnek 2 :
Bir okulda bulunan öğrenciler için çok basit bir puan çizelgesi ve aldığı puana göre
notun harf karşılığı programı,
Ö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.
44
{
if ($Sınıf == 11)
{
echo ("Ayrıca okul yönetiminden mezun olduğunuz için bir de ödül kazandınız") ;
else
}
}
}
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?
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
<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");
}
}
$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. ");
}
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)
$Fiyat = 500;
$YildizFaktoru = 1;
$SehirFaktoru = 1;
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. ");
48
Program içerisinde ikinci kontrolümüz kullanıcının seçtiği şehirin "Ankara" olup
olmadığı,
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")
$YildizFaktoru=2;
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: 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.
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 ($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.
<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?
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
<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>
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.
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.
53
şeklinde programın bir mantığa sahip olmasını sağlayabiliriz. . .
exit komutu
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>
Adınız :
Soyadınız :
Yasiniz :
<BR>
<BR>
Adresiniz :
<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>
<BR>
<INPUT TYPE=SUBMIT VALUE="Buraya tıklayarak Formu gönderebilirsiniz">
<INPUT TYPE=RESET VALUE="Formu Temizle">
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD></HEAD>
<BODY>
<?php
if ($Yas<10 OR $Yas>120)
{
echo " yanlış yas değeri girdiniz,geriye dönerek tekrar giriniz. ";
exit;
}
{
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;
echo " Bir kredi değeri girmelisiniz ,geriye dönerek giriniz. ";
exit;
}
$UcretFaktoru = $ücret/5;
$YasFaktoru = ($Yas/10 - ($Yas%10) /10 )-1;
if ($Kredi <= $KrediFaktoru) echo "Sayın , $Ad $Soyan kredi isteğinizi memnuniyetle
KABUL ediyoruz";
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?
56
Örnek vermek istersek,
veya
57
BÖLÜM 5
DÖNGÜLER VE DİZİLER
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.
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.
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.
58
}
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.
echo ("Kredi limitinizi astığınız için son aldığınız urun sepetinizden çıkarıldı");
$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.
<HTML>
<HEAD></HEAD>
59
<BODY>
Seres Bankası Kredi İsteme Formu
<BR>
<BR>
<BR>
<BR>
</FORM>
</BODY>
</HTML>
<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>
$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)
{
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.
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.
if (AylikNet <= 0)
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,
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 ,
Ö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
while (1000>0)
$Sure = 0 + 1;
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;
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.
"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
{
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.
do
{
echo ("Kredi limitinizi aştığınız için son aldığınız ürün sepetinizden çıkarıldı");
$AlisverisToplami = $AlisverisToplami - $SonAlinanUrun;
$SonAlinanUrun = $SonAlinanUrundenBirOncekiUrun;
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.
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.
<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>
<HTML>
<HEAD></HEAD>
<BODY>
<?php
$Bolunen = 2;
do
{
$Kalan = $Sayı%$Bolunen;
$Bolunen = $Bolunen + 1;
} while ($Kalan !=0 AND $Bolunen<$Sayı);
else {
echo ("Sayınız ASAL bir sayıdır. ");
}
?>
</BODY>
</HTML>
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)
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.
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
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.
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.
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.
<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>
<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";
}
<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>
7. "dinamik. html" dosyasını açıp bir kaç kez programı farklı değerler vererek deneyin
69
Diziler
$Eyaletler[1] = "Washington";
$Eyaletler[2] = "Florida";
$Eyaletler[39] = "Washington";
$Eyaletler[12] = "Alaka";
$Eyaletler["l"] = "Florida";
$Eyaletler["il"] = "Illinois";
veya
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;
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,
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.
ikinci öğesi,
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.
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,
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,
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,
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");
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]";
}
72
Not : "<BR>" bir HTML tagıdır ve her seferinde yeni bir satır yaratmak amacıyla
kullanılmıştır.
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;
}
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>
<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>
$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.
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.
Şimdide bir satır daha ekleyelim dizimize ve bakalım PHP hangi indeksi verecek bu
yeni eklenen dizi elementine,
"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);
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,
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.
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,
veya
77
String indeks yapılı dizilerin İterasyonu
$EyaletBaskenti["ga"]="Atlanta";
$EyaletBaskenti["il"]="Springfield";
$EyaletBaskenti["ca"]="Sacramento";
$EyaletBaskenti[]="Cheyene";
current () ve key () fonksiyonları yine aynı şekilde kullanılacaktır. Herhangi bir fark
yoktur.
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.
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";
}
Yani ,
gaf - Atlanta
il - Springfield
ca - Sacramento
wy - Cheyene
Dizilerin Sıralanması
sort ()
sort (DizininAdi)
sort ($Yonetmen);
79
$Yonetmen[0]= "Orson Welles"
$Yonetmen[1]= "Carol Reed"
$Yonetmen[2]= "Fritz Lang"
$Yonetmen[3]= "Jacques Tourner"
siralamadan sonra ,
olacaktır.
asort ()
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";
$EyaletBaskenti[0]= "Atlanta";
$EyaletBaskenti[1]= "Cheyene";
$EyaletBaskenti[2]= "Sacramento";
$EyaletBaskenti[3]= "Springfield";
asort ($EyaletBaskenti);
$EyaletBaskenti["gaf"]= "Atlanta";
$EyaletBaskenti["wy"]= "Cheyene";
80
$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["il"]= "Springfield";
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.
ksort ()
$EyaletBaskenti["ca"]= "Sacramento";
$EyaletBaskenti["gaf"]= "Atlanta";
$EyaletBaskenti["il"]= "Springfield";
$EyaletBaskenti["wy"]= "Cheyene";
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
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');
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.
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.
<?php
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);
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