Switch komutunun islevini kisaca aciklamak istersek ,"elseif" komutunun kullanimini azaltmak, hafifletmek ve programa basit bir yapi kazandirmak icin kullanilmaktadir.Hatirlayacaginiz gibi bundan bir onceki konuda (IF Yapisi -BOLUM 3)
"elseif" kulanarak program yazmis ve basimizi iyice agritmistik.Orada size,bu kadar karmasik kod yazmanin gerekli olmadigini bundan kurtulmak icin PHP nin birsuru fonksiyon icerdigini soylemistim.Iste simdi size acikliyorum,
Bu konuyu en iyi sekilde anlatmak icin bir ornek vermekten baska carem yok.o yuzden asagidaki ornegi inceleyerek ve aklinizda "elseif" yapisini canlandirarak dusunun.
Ornek Kod Parcasi :
switch ($Puan) {
case $Puan > 70
echo ("Sinavdan A aldiniz");
break;
case $Puan>60
echo ("Sinavdan B aldiniz");
break;
case $Puan>50
echo ("Sinavdan C aldiniz");
break;
case $Puan>40
echo ("Sinavdan D aldiniz");
break;
case $Puan>25
echo ("Sinavdan E aldiniz");
break;
default:
echo ("Sinifta Kaldiniz");
}
gordugunuz gibi bir suru "if" ve "elseif" kullanmak yerine yanlizca "switch" komutuyla isimizi biraz olsun kolaylastirdik.Satir bakimindan cok fazla sey kazanmadik ama su anda kodlarimiz daha mantikli ve anlasilir gozukuyor.
Switch komutu ile kullanilan "break" , "case" ve "default" bunlarda nedir?
Aciklamaya bu komutlarin turkcelerini yazmakla baslayalim.
switch: Turkce'de "degistir" anlamina gelir.(Lambayi kapali konumdan acik konuma degistirmek gibi)
break : Turkce'de "birak,ayril" anlamina gelir.
case : Turkce'de "durum" anlamina gelir
default : Turkcede ongorulen veya ontanimli anlamina gelir.
Bu aciklamalarin isigi altinda konumuza devam edecek olursak,"switch" ile verdigimiz sartlar altinda PHP nin isleyecegi kod parcalarini degistiriyoruz.Bu sartlarin ne olacagini "case" ile tanimliyoruz.
Kod parcasi isini tamamlayinca "break" ile "ayriliyoruz".Eger verdigimiz sartlardan hicbiri saglanmiyorsa "default" ile PHP'ye islemesi gereken kod parcasinin ne oldugunu soyluyoruz.
Yukaridaki kod parcasinda $Puan degiskenin alacagi degerler icin ,degisik degisik isler yaptirmak istiyoruz.Bir adam 70'ten yuksek not almissa PHP nin "Sinavdan A Aldiniz" yazisini ekrana yazdirmak istiyoruz.60'tan yuksek not icin B,50'den yuksek not icin C ...vb
Eger adam bizim verdigimiz sartlarin hicbirine uyan bir not almadiysa o zaman "default" ile yapilmasi gereken islemi tanimliyoruz.
Burada ilk defa "break" komutu ile karsilastigimiz icin bir kac bilgi vermek istiyorum.Programlarinizda "break" kullandiginiz zaman size tavsiyemiz biraz dikkatli olmaniz.PHP "break" komutu ile karsilasinca yaptigi herseyi durdurur ve "switch" yapisindan cikarak ,kapali parantezin bittigi yerden okumaya devam eder.
switch ($Puan) {
case $Puan > 70 :
echo ("Sinavdan A aldiniz");
break;
case $Puan>60 :
echo ("Sinavdan B aldiniz");
break;
case $Puan>50 :
echo ("Sinavdan C aldiniz");
break;
case $Puan>40 :
echo ("Sinavdan D aldiniz");
break;
case $Puan>25 :
echo ("Sinavdan E aldiniz");
break;
default:
echo ("Sinifta Kaldiniz");
}<<<-------------------------- (switch yapisini kapattigimiz parantez)
...........(PHP "break goruruse okumaya buradan devam eder)
....................
switch yapisini kullanirken bir kisayol
"switch" komutu sandiginizdan biraz daha zekidir ve sizin ne yapmak istediginiz anlayabilir.Bu komut icin gelistirlmis bir kisayol tarzi bulunmaktadir.
Switch ($Eyalet) {
case "IL" :
echo ("Illinois");
break;
case "FL" : //Benim dunyalar guzeli eyaletim/memleketim
echo ("Florida");
break;
case "GA" :
echo ("Georgia");
break;
default:
echo ("Texas");
break;
}
Her iki yazim seklide hatasiz ve birbirinden farksizdir.Isterseniz ilk ornekteki gibi her seferinde $Puan degiskenini "case" yapisina yazin isterseniz birakin PHP sizin icin yapsin.
Dikkat ederseniz "case" yazdiktan sonra ";" noktali virgul yerine ":" iki nokta kullnadik.Sakin yanlis yazildigini sanmayin dogru kullanimi bu sekildedir.
Simdi bir onceki bolumde (IF Yapisi - Bolum 3)yaptigimiz ornegi simdi switch kullanarak tekrar yazalim.
1.Text editorunuzu acin ve asagidakileri yazin.
<HTML>
<HEAD></HEAD>
<BODY>
Seres Otelcilik Online Web Sayfasi'na Hosgeldiniz
<FORM METHOD=GET ACTION="tatil2.php">
Tatil icin nereye gitmeyi dusunuyorsunuz?
<BR>
<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>
Kac yildizli otelde kalmak istiyorsunuz?
<INPUT NAME="Yildiz" TYPE = "Radio" VALUE="Uc">
Uc Yildizli Otel
<INPUT NAME="Yildiz" TYPE = "Radio" VALUE="Dort">
Dort Yildizli Otel
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
2.Bu dosyayi "tatil2.html" olarak kayit edin.
3.Text editorunuzu acin ve asagidakileri yazin.
<HTML>
<HEAD></HEAD>
<BODY>
Seres Otelcilik Online web Sayfasina Hos Geldiniz
<BR>
<BR>
<?php
$Fiyat = 500;
$SehirFaktoru = 1;
$YildizFaktoru = 1;
$SehirYildiz = $Sehir.$Yildiz;
switch ($SehirYildiz) {
case "IstanbulUc":
$SehirFaktoru = 2;
$Fiyat = $Fiyat * $SehirFaktoru;
echo "$Sehir sehrinde 1 haftalik tatil $Fiyat dolardir.";
break;
case "IstanbulDort":
$SehirFaktoru = 2;
$YildizFaktoru = 2;
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo "$Sehir sehrinde 1 haftalik tatil $Fiyat dolardir.";
break;
case "AnkaraUc":
$SehirFaktoru = 3.5;
$Fiyat = $Fiyat * $SehirFaktoru;
echo "$Sehir sehrinde 1 haftalik tatil $Fiyat dolardir.";
break;
case "AnkaraDort":
$SehirFaktoru = 3.5;
$YildizFaktoru = 2;
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo "$Sehir sehrinde 1 haftalik tatil $Fiyat dolardir.";
break;
case "IzmirUc":
$Fiyat = $Fiyat * $SehirFaktoru;
echo "$Sehir sehrinde 1 haftalik tatil $Fiyat dolardir.";
break;
case "IzmirDort":
$YildizFaktoru = 2;
$Fiyat = $Fiyat * $SehirFaktoru * $YildizFaktoru;
echo "$Sehir sehrinde 1 haftalik tatil $Fiyat dolardir.";
break;
default:
echo "Lutfen geriye donerek tekrar deneyiniz";
break;
}
?>
</BODY>
</HTML>
4.Bu dosyayi "tatil2.php" olarak kayit edin.
5."tatil2.html" dosyasini acip bir kac veri girip gonderdiginizde tatil icin ne kadar ucret odemeniz gerektigini goreceksiniz.
Form Verileri'nin Kontrolu
PHP programalarini biraz olsun hassas hale getirmek ancak program icindeki kontrollerle mumkundur.Ornegin bir kullanicin sizin onun "yasini" ordugunuz bir kontrole "694" gibi bir rakam girmesini istemeyiz.Bu nedenle girilen verileri bazi kistaslara gore kontrol edip ondan sonra islemlere devam etmek cok onemlidir.
If ($Yas <1 OR $Yas>125)
{
echo "Gecersiz bir yas degeri girdiniz";
break;
}
seklinde programin bir mantiga sahip olmasini saglayabilriz...
exit komutu
If ($Yas <1 OR $Yas>125)
{
echo "Gecersiz bir yas degeri girdiniz";
exit;
}
Bir forma girilen verileri kontrol ediyorsak ve kisinin girdigi verinin tamamen imkansiz olduguna inaniyorsak "exit" komutunu kullanarak programin isleyisini o noktada durdurabilriz."exit" kulllandigimizda program tamamen duracak ve kalan HTML taglari bile kapatilmayacaktir.Kullanirken dikkat edilmesi gereken bir komuttur.
Bu konu ile ilgili bir ornek yapalim,
1.Text editorunuzu acin ve asagidaki kodlari girin.(Daha onceden yazdigimiz "kredi.php" dosyasini acip orada yapmadigimiz form kontrollerini simdi programa nasil ekledigimize bakabilirsiniz)
<HTML>
<HEAD></HEAD>
<BODY>
Seres Bankasi Kredi Isleme Basvuru Formu
<FORM METHOD=POST ACTION="kredi2.php">
Adiniz :
<INPUT NAME="Ad" TYPE="Text">
Soyadiniz :
<INPUT NAME="Soyad" TYPE="Text">
Yasiniz :
<INPUT NAME="Yas" TYPE="Text" SIZE="2">
<BR>
<BR>
Adresiniz :
<TEXTAREA NAME="Adres" ROWS=5 COLS=50>
</TEXTAREA>
<BR>
<BR>
Geliriniz Nedir?
<SELECT NAME="Ucret">
<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 BUYUK</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 tiklayarak Formu gonderebilirsiniz">
<INPUT TYPE=RESET VALUE="Formu Temizle">
</FORM>
</BODY>
</HTML>
2.Bu dosyayi "kredi2.html" olarak kayit edin.
3.Baska bir text dosyaysi acip asagidaki kodlari yazin.
<HTML>
<HEAD></HEAD>
<BODY>
<?php
if ($Yas<10 OR $Yas>120)
{
echo " Yanlis yas degeri girdiniz,geriye donerek tekrar giriniz.";
exit;
}
if ($Ad == "" OR $Soyad == "")
{
echo " Bir isim ve soyad degeri girmelisiniz ,geriye donerek giriniz.";
exit;
}
if ($Adres == "")
{
echo " Bir adres degeri girmelisiniz ,geriye donerek giriniz.";
exit;
}
if ($Kredi != 1000 AND $Kredi !=5000 $Kredi !=10000)
{
echo " Bir kredi degeri girmelisiniz ,geriye donerek giriniz.";
exit;
}
$UcretFaktoru = $Ucret/5;
$YasFaktoru = ($Yas/10 - ($Yas%10) /10 )-1;
$KrediFaktoru = $UcretFaktoru * $YasFaktoru;
echo "Istediginiz Kredi Miktari : $Kredi <BR>";
echo "Alabilceginiz Kredi Miktari : $KrediFaktoru <BR><BR>";
if ($Kredi <= $KrediFaktoru) echo "Sayin , $Ad $Soyad kredi isteginizi memnuniyetle KABUL ediyoruz";
if ($Kredi > $KrediFaktoru ) echo "Sayin,$Ad $Soyad uzgunuz,kredi isteginiz RED edilmistir.";
?>
</BODY>
</HTML>
4.Bu dosyayi "kredi2.php" olarak kayit edin.
5.Bir kac gecersiz deger ile formu test edin.
Bir Guvenlik Onlemi
Bizler form icindeki verileri,programda yazdigimiz kodlar ile kontrol edebiliyoruz.Peki bir kullanici "text" alanina adini yazmak yerine beraberinde HTML taglari olan bir ifade yazarsa ne olur?
Bunu onlemek icin PHP icerisinde "HTMLSpecialChars" komutu kullanilmaktadir.
Ornek vermek istersek,
$Ad = HTMLSpecialChars ($Ad);
veya
$Soyad = HTMLSpecialChars ($Soyad);