You are on page 1of 332

İNTERNET PROGRAMCILIĞI II

Editör
Doç. Dr. OKTAY YILDIZ
Bu kitabın, basım, yayım ve sa ş hakları Atatürk Üniversitesi’ne ai r. Bireysel öğrenme
yaklaşımıyla hazırlanan bu kitabın bütün hakları saklıdır. Atatürk Üniversitesi’nin izni
alınmaksızın kitabın tamamı veya bir kısmı mekanik, elektronik, fotokopi, manye k kayıt veya
başka şekillerde çoğal lamaz, basılamaz ve dağı lamaz.

Copyright ©2022

The copyrights, publica ons and sales rights of this book belong to Atatürk University. All rights
reserved of this book prepared with an individual learning approach. No part of this book may
be reproduced, printed, or distributed in any form or by any means, techanical, electronic,
photocopying, magne c recording, or otherwise, without the permission of Atatürk University.

ATATÜRK ÜNİVERSİTESİ
AÇIK VE UZAKTAN ÖĞRETİM FAKÜLTESİ

İNTERNET PROGRAMCILIĞI II

ISBN: 978-625-8001-25-9

ATATÜRK ÜNİVERSİTESİ AÇIK VE UZAKTAN ÖĞRETİM FAKÜLTESİ YAYINI

ERZURUM
1. Internetin Temelleri 4
Dr. Öğr. Üyesi MAHMUT KAYA

2. Web Programlama Araçları ve Dinamik Web 24


Dr. Öğr. Üyesi MAHMUT KAYA

3. ASP 43
Dr. Öğr. Üyesi MAHMUT KAYA

4. ASP.NET: Giriş 65
Dr. Öğr. Üyesi ANIL UTKU

5. ASP.NET: CSharp 88
Dr. Öğr. Üyesi ANIL UTKU

6. ASP.NET: MVC 117


Öğr. Gör. Dr. İBRAHİM CİHAN YETİŞKEN

7. ASP.NET: Veri Tabanı 140


Öğr. Gör. Dr. İBRAHİM CİHAN YETİŞKEN

8. PHP Diline Giriş 161


Dr. Öğr. Üyesi HALİL ERSOY

9. PHP’de İleri Konular 184


Dr. Öğr. Üyesi HALİL ERSOY

10. PHP: Veri Tabanı 204


Öğr. Gör. Dr. UĞUR YILDIRIM

11. Python Programlama Diline Giriş 235


Öğr. Gör. Dr. UĞUR YILDIRIM

12. Python ile Web Programlama 265


Öğr. Gör. Dr. UĞUR YILDIRIM

13. Web Servisleri 294


Doç. Dr. ADEM TEKEREK

14. Güvenli Web Programlama 313


Doç. Dr. ADEM TEKEREK

Editör

Doç. Dr. OKTAY YILDIZ


İNTERNETİN TEMELLERİ

• İnternet
• İnternetin Ortaya Çıkışı
İÇİNDEKİLER

• Türkiye’de İnternetin Ortaya İNTERNET


Çıkışı ve Yaygınlaşması
• Temel İnternet Kavramları PROGRAMCILIĞI II
• İnternetin Gelişimi ve Web
• Web 1.0
Dr. Öğr. Üyesi Mahmut
• Web 2.0 KAYA
• Web 3.0

• Bu üniteyi çalıştıktan sonra;


• İnternet kavramı hakkında bilgi
HEDEFLER

sahibi olabilecek,
• İnternetin nasıl ortaya çıktığını
ve geliştiğini öğrenebilecek,
• Türkiye'de internet ağının
geçmişi ve bugünü hakkında fikir
sahibi olabilecek,
• Temel internet kavramları ve
protokollerini öğrenebilecek,
• Web teknolojisinin geçmişini ve
bugününü ve gelecekte nasıl
şekilleneceğini ÜNİTE
öğrenebileceksiniz.

1
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
İnternetin Temelleri

İnternet

İnternetin Ortaya
Çıkışı
İNTERNETİN TEMELLERİ

Türkiye’de
İnternetin Ortaya
Çıkışı ve
Yaygınlaşması

Temel İnternet
Kavramları
Web 1.0

İnternetin Gelişimi Web 2.0


ve Web

Web 3.0

Atatürk Üniversitesi Açıköğretim Fakültesi 52


İnternetin Temelleri

GİRİŞ
İnternet hayatımıza yerleştiğinden beri günlük hayatımızın her alanına etki
etmektedir. İnternet, kavramsal olarak bir bilgisayar veya herhangi bir elektronik
aygıtın; dünya üzerindeki milyarlarca bilgisayar veya elektronik aygıtlarla
haberleşmesini sağlayan genel bir elektronik iletişim ağına verilen isimdir. Bir
internet ağı üzerinde iletişim amacıyla yapılan veri aktarımı, standartlaştırılmış
belirli ağ protokolleri ile gerçekleştirilmektedir. Günümüzde internet sayesinde
eski haberleşme alışkanlıkları, bilgi aktarım kanalları değişmiş ve teknolojik yeni bir
döneme geçiş sağlanmıştır. Bu yeni dönem sayesinde bilgiye erişim kolaylaşmıştır.
Bilgiye erişimin ucuz, hızlı ve güvenilir olmasıyla beraber teknolojik ilerlemelerin
çok daha hızlı bir şekilde yapılabilmesi mümkün kılınmıştır.
İnternetin ilk ortaya çıkışı askeri çeşitli gereksinimlerle olmuştur. Birleşik
Devletler Savunma Bakanlığının (United States Department of Defense) birimler
arası haberleşmeyi sağlama amacıyla verdiği desteklerle yürütülen projeler
günümüz internet dünyasının temelini oluşturmaktadır. Başlangıçta askeri
amaçlarla gerçekleştirilen çalışmalar daha sonra sivil hayatta da kullanıma
sunulmuştur. Zamanla internet ağ alt yapısı ABD dışında Avrupa’ya da yayılmış ve
hızlı bir gelişim göstererek ticari amaçlı kullanımların da önünü açmıştır.
Bir internet kullanıcısı, internet servis sağlayıcıları tarafından sağlanan
bağlantı sayesinde bilgisayar veya akıllı cihazları kullanarak internet ağına erişim
sağlamaktadır. Bu kitap bölümünde öncelikle internet kavramının nasıl ortaya
çıktığı, dünyada ve Türkiye’de nasıl yayıldığı konusuna değinilmektedir. Daha
sonra temel internet kavramları hakkında bazı bilgilere yer vermektedir. Son
bölümde ise; web teknolojisindeki gelişmeler ele alınarak Web 1.0, Web 2.0 ve
Web 3.0 konuları ele alınmaktadır.

İNTERNET
İnternet, dünya üzerinde bulunan milyarlarca cihazın birbirine bağlandığı
ve iletişim kurabildiği küresel bağlantılı ağ sistemine verilen genel bir isimdir.
İnternet küresel Bilgisayarlar birbirleri arasındaki iletişimi, belirli standartlarla belirlenmiş olan
bağlantılı ağ sistemine çeşitli ağ protokolleri ile gerçekleştirmektedirler. Bilgisayar veya akıllı cihazlar
verilen genel bir internet servis sağlayıcılarından alınan hizmetlerle internet ağına erişim
isimdir. sağlamaktadırlar. Şekil 1.1’de verilen örnekte bir internet ağına bağlanan temsili
cihazlar görülmektedir.
İnternet ağı üzerinde bulunan her bir cihaz, IP (Internet Protocol) olarak
adlandırdığımız adres bilgisiyle diğer cihazlarla iletişim sağlamaktadırlar. Dünya
üzerindeki tüm cihazların birbiriyle haberleşme içerisinde olduğu bu ağ üzerinde,
bir standart haline gelmiş olunan TCP/IP ağ protokolü ile iletişim sağlanmaktadır.
TCP/IP ağ protokolü kullanılarak internet ağına bağlı olan cihazlar, farklı içerikteki
bireysel ve kurumsal web sayfalarına, sosyal medya sitelerine, finans sistemlerine,
dijital içeriklere, çevrimiçi oyun uygulamalarına vs. çok sayıda hizmete pratik, hızlı
ve güvenilir bağlantılarla erişim sağlamaktadırlar.

Atatürk Üniversitesi Açıköğretim Fakültesi 63


İnternetin Temelleri

İnternet

Şekil 1.1. İnternet Ağı

İNTERNETİN ORTAYA ÇIKIŞI


1960'ların başında, ABD'li düşünce kuruluşu Rand Corporation için çalışan
Paul Baran ve Birleşik Krallık'ta bulunan Ulusal Fizik Laboratuvarı'ndan (NPL)
Donald Davies, bugünkü internet altyapısının temeli (modern paket anahtarlama
ve dinamik yönlendirme) olan mesaj blok sistemini geliştirmişlerdir. Geliştirilen
paket anahtarlama ile veriler "paketler" şeklinde küçük veri gruplarına bölünerek
1967 yılında başlatılmış hedefe gönderilmektedirler. Ancak başlangıçta kullanılan ağ sistemlerinde paket
olan ARPANET projesi anahtarlama uygulanmamıştır.
günümüz internetinin
temellerini Bugünkü internet sisteminin temelleri 1958 yılında ABD ordusu tarafından
kurulmuş olan Savunma İleri Araştırma Projeleri Ajansı (The Defense Advanced
oluşturmaktadır.
Research Projects Agency - DARPA) tarafından finanse edilen projelerle atılmıştır.
ABD ile Sovyetler birliği arasında bulunan ve fiili bir savaş ortamından
bahsedilmeyen soğuk savaş döneminde, ülkeler arasında her alanda bir rekabet
bulunmaktaydı. DARPA, bu rekabette ön plana çıkmak için; yeni teknolojiler
geliştirmek ve ABD savunma bakanlığının finanse ettiği birimler arasındaki
haberleşmeleri sağlama görevlerini amaç edinmiştir.
DARPA tarafından 1967 yılında 1 milyon dolarlık bütçe ile finanse edilerek
başlanan ARPANET projesi, paket anahtarlama ağını kullanan ilk yapıdır.
Günümüzde kullanılan internet alt yapısı da ARPANET’e dayanmaktadır. 1969
yılında Kaliforniya Üniversitesi (UCLA) ile Stanford Araştırma Enstitüsü arasında ilk
ağ bağlantısı kurulmuştur. 1970’lerin başından itibaren ABD’de de bulunan birçok
üniversite ve devlet kurumu bu ağa bağlanmıştır.
1977 yılına gelindiğinde ARPA’da çapraz ağ bağlantıları için TCP
(Transmission Control Protocol) kullanılmaya başlanmıştır. Daha sonra iletişimi
kolaylaştırma amacıyla TCP protokolüne IP de eklenmiştir. Böylece bilgisayarlar
arasında iletişimin daha sağlıklı yürütülmesi sağlanmıştır. Günümüzde kullanılan

Atatürk Üniversitesi Açıköğretim Fakültesi 74


İnternetin Temelleri

internet ağı da o tarihlerde temelleri atılan TCP/IP protokolünde ki yeniliklerle


bugünlere gelmiştir.
1989 yılında Avrupa Nükleer Araştırma Merkezi’nde (CERN) çalışmakta olan
Tim Berners-Lee tarafından “Web” olarak ifade edilen “WWW” (World Wide Web)
bilgi sistemi ortaya çıkmıştır. Bu yenilikle Türkçe karşılığından da anlayacağımız
üzere dünya çapında bir ağ amaçlanmıştır. Bu bilgi sisteminde web sayfaları
geliştirmek için HTML (Hypertext Markup Language) adlı metin işaretleme dili
geliştirilmiştir. Daha sonraları HTTP protokolü ve URL’nin geliştirilmesiyle beraber
1993 yılında geliştirilmiş 1991 yılında ilk web sayfası geliştirilmiştir. 1993 yılına gelindiğinde ise; web
olan Aliweb ilk web sayfalarında bilgi arama amaçlı ilk arama motoru olan Aliweb geliştirilmiştir. 1994
arama motorudur. yılında, internet üzerinden ilk sipariş olan pizza siparişi verilmiştir.

TÜRKİYE’DE İNTERNETİN ORTAYA ÇIKIŞI VE


YAYGINLAŞMASI
Türkiye’de internetle ilgili yapılan çalışmaların geçmişi 1980’li yıllara
dayanmaktadır. İnternet ağı oluşturma çalışmalarını gerçekleştirmek amacıyla
1986 yılında Türkiye Üniversiteler ve Araştırma Kurumları Ağı (TÜVAKA)
kurulmuştur. Daha sonra Türkiye’de bulunan yerel bilgisayarların uluslararası bir
internet ağına entegre olması amacıyla 1987 yılında ilk geniş alan ağ bağlantısı
olan EARN/ (European Academic and Research Network)/BITNET (Because It's
Time Network) ile kurulmuştur.
Gelişen ihtiyaçlar doğrultusunda, geliştirilen internet ağı bant genişliğinin
yetersiz kalması ve ortaya çıkan finansal sorunlarla beraber, ODTÜ ve TÜBİTAK
ortaklığında yeni bir internet ağı alt yapısı oluşturma çalışmaları başlatılmıştır. Bu
amaçla, 1992 yılında Türkiye’de ilk internet bağlantısı X.25 devresi üzerinden
ODTÜ ile Hollanda arasında kurulmuştur. Daha sonra ODTÜ ve TÜBİTAK
girişimleriyle TR-NET projesi başlatılmıştır. Bu proje kapsamında PTT aracılığıyla
ABD’den kiralık hat alınmış ve 12 Nisan 1993’te 64Kbps internet bağlantısı ODTÜ-
NSFNET (National Science Foundation Network) arasında kurulmuştur. TRNET’in
1995 yılına ait X.25 bağlantı yapısı Şekil 1.2’de görülmektedir.
Türkiye’de başlangıç aşamasında sadece belirli kurumlar ve üniversiteler
internet ağına erişime sahipti. Türkiye’de internet ağı alt yapısının oluşumu
sonrasında, ODTÜ ve Bilkent üniversitesine ait ilk web sayfaları oluşturulmuştur.
1986 yılında TÜVAKA olarak kurulan yapının görevlerini daha sonra ULAKBİM
(Ulusal Akademik Ağ ve Bilgi Merkezi) almış ve bu birim ULAKNET adıyla
çalışmalarını devam ettirmektedir. 1996 yılında internet ağının yaygınlaşmasıyla
beraber, ilk internet servis sağlayıcısı olarak TURNET hizmete girmiştir. TURNET,
ticari anlamda faaliyetlere başlamış ve internet erişimini bireysel kullanıcılara
belirli bir ücret karşılığında satmaya başlamıştır.

Atatürk Üniversitesi Açıköğretim Fakültesi 85


İnternetin Temelleri

Şekil 1.2. 1995 Yılı TRNET X.25 Bağlantı Yapısı (Özgit, 1995)

Ülkemizde internet ağ yapısının ilk oluştuğu dönemden itibaren internet


erişimi, çevirmeli bağlantıyla sağlanmaktaydı. 2003 yılında ADSL (Asymmetric
Digital Subscriber Line) teknolojisinin bu teknolojinin yerini almasıyla beraber
internet hızında çok ciddi bir artış yaşanmış ve internet kullanımına olan talep
artmaya başlamıştır. Teknolojik gelişmelerle beraber internet hizmetleri artış
2021 yılı itibarıyla göstermiştir. Günümüzde Fiber bağlantılar ve cep telefonlarında kullanılan 4G
Türkiye’de hane halkı teknolojisi sayesinde çok daha yüksek hızlarla internet erişimi sağlanmaktadır.
internet kullanım oranı Türkiye’de 1996 yılında bireysel kullanıcılar için erişime açılmış olan internet
%92 olmuştur. erişimi, günümüzde bireysel kullanıcılar tarafından günlük hayatta çok yaygın
olarak tercih edilmektedir. Türkiye İstatistik Kurumu tarafından yayınlanan verilere
göre, 2021 yılında hane halkının internet erişimi oranı %92 seviyesine yükselmiştir.
Bu dönemde internet üzerinden ticari satışlar oldukça artmış ve internet
üzerinden satın olma oranı %44,3 seviyelerine gelmiştir.

TEMEL İNTERNET KAVRAMLARI


İnternette gezinti yapmak, bilgi aktarmak, haberleşmek için kullandığımız
bazı temel işlevler bulunmaktadır. İnternet ağında belirlenmiş bazı standart
protokollere göre paketler halinde veri transferi gerçekleşmektedir. Bu bölümde
internet gezintisi yaparken kullandığımız temel internet kavramları ele alınacaktır.

Intranet / Extranet
Intranet, kurum iç ağında paylaşımlar yapılmasını sağlayan, kendi sunucusu
ve güvenlik duvarı yazılımları olan kapalı ağ sistemlerine verilen isimdir. Bu ağa
bağlı olan bilgisayarlar, internete bağlı olmadığından dolayı dışardan erişime
kapalıdır. Her bilgisayarın kendine ait özel bir IP adresi bulunmaktadır.
Extranet, kurum içerisindeki bir ağdan başka bir ağa bağlanılmasına izin
veren özel ağ tipidir. Intranet’in daha genişletilmiş ve özelleştirilmiş bir ağı olup,
internet ağına erişimi yoktur. Bu ağ tipinde kurum ağından müşteri ağlarına
bağlanılarak çözümler üretmek, paylaşımlar yapmak mümkündür. Tablo 1.1.’de

Atatürk Üniversitesi Açıköğretim Fakültesi 96


İnternetin Temelleri

farklı amaçlarla kullanımları bulunan Intranet, Extranet ve İnternet yapıları


karşılaştırmalı olarak verilmiştir.
Tablo 1.1. Intranet, Extranet ve İnternet

Intranet Extranet İnternet

Harici Bağlantılara Sahip


Yerelleştirilmiş Bir Ağ Genelleştirilmiş Bir Ağ
Dahili Ağ
Belirli Dış Kullanıcılara,
Dışardan Erişim Yok Dışardan Erişime Açık
Ağlara Açık Olan Özel Ağ

Yüksek maliyet Orta Maliyet Düşük Maliyet

Yüksek Güvenlik Orta Güvenlik Düşük Güvenlik

İnternet Servis Sağlayıcı


İnternet servis sağlayıcısı; kişi, kurum ve şirketlere internet erişimine olanak
sağlayan kuruluşlardır. Belirli bir ücret karşılığı bu hizmeti veren internet servis
sağlayıcıları, telefon hattı veya geniş bant bağlantısı ile hizmet erişimleri
sağlamaktadır.

IP
İnternette yer alan her bilgisayarın veya akıllı bir cihazın bir IP (Internet
Protocol) adresi bulunmaktadır. IP adresi haberleşme amacıyla TCP/IP kullanan bir
ağ üzerinde cihazların birbirini kolayca bulmasını sağlamaktadır. İnternete
İnternet ağına bağlı her bağlanan her bir cihaza internet servis sağlayıcısı tarafından IP adresi
cihazın bir IP adresi atanmaktadır. Dinamik IP adresi ve statik IP adresi olmak üzere iki türlü IP adresi
bulunmaktadır. bulunmaktadır. İnternet servis sağlayıcısından alınan hizmete göre IP adresi
dinamik veya statik olabilmektedir. Eğer servis sağlayıcıdan özel bir talepte
bulunulmamışsa, internet gezintilerinde dinamik IP adresleri kullanılmaktadır.
Dinamik IP adresi, internet servis sağlayıcısı tarafından bilgisayarın internet
ağına erişim sağladığı anda boşta olan herhangi bir IP adresinin bilgisayara
verilmesi ile gerçekleşmektedir. Bu sebeple farklı zamanlardaki internet
erişimlerinde farklı bir IP adresine sahip olunması muhtemeldir. Diğer yandan özel
amaçlarla ihtiyaç duyulan statik IP adresi ise, servis sağlayıcıları tarafından
sağlanan sabit ve değişmez IP adresleridir.
IP adreslerinin temelinde IPv4 kullanılmaktadır. 32 bitlik adres yapısı içeren
bu protokol, 232 yani 4.294.967.296 adet farklı bilgisayarı adresleme imkanına
sahiptir. Zamanla bilgisayar ve akıllı cihazların sayısının artması sonucunda, IP
adresleme için 128 bitlik adres yapısına sahip olan IPv6 önerilmiştir. IPv6 ile 2128
adet IP adresi verilebilmesi mümkündür.

Atatürk Üniversitesi Açıköğretim Fakültesi 7


10
İnternetin Temelleri

Örnek
•IPV4 Adres: 176.090.189.146
•IPV6 Adres: 2001:0CA8:0000:2E3B:02AD:00FF:1E28:9C5A

Bant Genişliği
Bant genişliği kavramı internet ağı üzerinde iletişim halinde bulunan iki
cihazın birbirlerine gönderebileceği maksimum veri aktarım miktarını belirleyen
bir kavramdır. İnternet hızının artışı ve azalışıyla doğrudan ilgilidir.

WWW (World Wide Web)


World Wide Web kelimelerinin kısaltılmışı olan kavram Türkçe sözlük
karşılığı olarak Dünya Çapında Ağ ifadesine karşılık gelmektedir. İnternet üzerinde
yayınlanan web içeriklerinin bulunduğu hiper-metin (Hypertext) belgelerinden
oluşan bir içerik sisteminin adıdır. İnternette gezinti yaptığımızda web
tarayıcılarının adres satırına yazılan “www” ifadesiyle aşina olunan bu kavram ile
web sayfaları içerisinde metin, görüntü veya video kayıtlarına erişim mümkündür.

Kullanıcıların web
sayfalarına erişim
sağladığı yazılımlara
internet tarayıcısı
denilmektedir.

Web’de oluşturulan ilk


web sayfası içeriğine şu
adresten erişim
sağlanabilmektedir:
https://www.w3.org/Hi
story/19921103-
hypertext/hypertext/W
WW/TheProject.html

Şekil 1.3. İlk İnternet Sayfası İçeriği

Atatürk Üniversitesi Açıköğretim Fakültesi 8


11
İnternetin Temelleri

HTTP ve HTTPS (Hyper-Text Transfer Protocol ve HTTP Secure)


HTTP internet erişim kurallarının bulunduğu OSI (Open Systems
Interconnection) ağ modelinin uygulama katmanında yer almaktadır. HTTP bir
kaynaktan dağıtılan bilgi sistemleri için hiper-metin aktarım protokolüdür.
Günümüzde kullandığımız “World Wide Web” sisteminin temellerini
oluşturmaktadır. Bağlantılar sayesinde içerik erişimi sağlanmaktadır.
HTTPS ise güvenli hiper-metin aktarım protokolüdür. İçerikler güvenli
kanallarla şifreli olarak iletilmektedir. Özellikle yüksek güvenlik gerektiren
bankacılık uygulamaları ve ödeme sistemleri en bilinen örneklerdir.

İnternet Tarayıcısı (Web Browser)


Kullanıcıların web sayfalarına erişim sağladığı yazılımlardır. Bu yazılımlar
sayesinde, bilgisayar veya akıllı cihazların web sayfalarına erişimi güvenli bir
şekilde gerçekleştirilmektedir. Günümüzde Chrome, Safari, Firefox, Opera,
Microsoft Edge internet tarayıcıları sıklıkla kullanıcılar tarafından tercih
edilmektedir.

Web Sayfası
Web sayfası, web üzerinde bulunan bir URL ile web tarayıcılarını kullanarak
erişebildiğimiz çeşitli amaçlarla geliştirilmiş ses, görüntü, metin vs. içeriklerinin
bulunduğu internet sayfalarıdır. Web sayfası içerikleri, web sunucularında
saklanmaktadır. HTML, CSS, JavaScript, ASP.NET, PHP vb. programlama dilleri ve
dil ortamları ile web sayfaları oluşturulmaktadır. Web sayfaları, statik ve dinamik
içeriklerden oluşmaktadır.

Bağlantı (Link)
Web sayfası içerisinde farklı içeriklere ulaşmak için kullandığımız web
adresleridir. Farklı bir web sayfası üzerindeki farklı bir içeriğe erişmek için
kullanılmaktadır.

URL (Uniform Resource Locator)


Türkçe olarak tek tip kaynak bulucu olarak isimlendirebileceğimiz URL,
herhangi bir belgeyi internet üzerinde benzersiz şekilde ifade edebilecek bir web
adresi anlamına gelmektedir.
Örnek

•ATA AÖF URL Adres: https://www.ataaof.edu.tr

Atatürk Üniversitesi Açıköğretim Fakültesi 9


12
İnternetin Temelleri

DNS (Domain Name System)


İnternette bulunan her web adresinin kendisine ait özel bir IP adresi vardır.
Ancak IP adresinin kullanıcılar tarafından hatırlanması zor olduğu için onun yerine
Hosting, sunucu
internet adresleri (örneğin https://www.ataaof.edu.tr) yazılarak web sayfalarına
bilgisayarlarda bulunan
erişilmektedir. DNS sunucusu, alan adlarını (domain name) tutmakta ve alan adını
web depolama
IP adresiyle eşleştirerek web sayfalarına kolayca erişim imkanı sağlamaktadır.
hizmetinin adıdır.
Web Barındırma (Hosting)
Web sayfası içeriklerinin sunucu bilgisayarda tutulduğu depolama
hizmetinin adıdır. Ses, görüntü, video, metin vb. veri kaynakları sunuculara
depolanarak içeriklere kesintisiz bir erişim imkanı sağlanmaktadır.

İstemci (Client)
Bir internet ağı üzerinde bulunan içeriklere erişmek isteyen son kullanıcıyı
ifade etmektedir. Bilgisayar, cep telefonu ve hatta bir TV istemci olabilir. İstemci,
internet ağında bulunan bir bilgiyi sunuculardan talep eder ve erişim yetkisine
bağlı olarak gerekli bilgiye ulaşmaktadır.

Sunucu (Server)
Kullanıcıların talep ettiği içeriklerin tutulduğu bilgisayar sistemlerini ifade
etmektedir. Kullanıcılar burada bulunan içeriklere istenildiği zaman
erişebilmektedir.

Vekil Sunucu (Proxy Server)


İstemci ile sunucu arasında ara bir sunucu görevi icra etmektedir. Vekil
sunucuları,
 Performans iyileştirmesi,
 Ağ üzerindeki verilerin izleme ve filtreleme hizmetlerini sağlaması,
 Ağ hizmetlerine anonim olarak erişim imkanı sağlama ve
 Güvenlik amacıyla tercih edilebilmektedir.
Kullanıcı vekil sunucu kullandığında;
 Kullanıcı içerik talebini vekil sunucuya iletir.
 Vekil sunucu kullanıcı içerik talebini istenilen adresten alır.
 Vekil sunucu istenen içeriği son kullanıcıya iletir.
Doğrudan bir bağlantı yerine vekil sunucu tercih edilmesinin en önemli
sebebi erişimi güvenli yapma isteği olmaktadır. Vekil sunucunun temel görevleri
arasında şunlar bulunmaktadır:

 Veri ön belleğe alma


 Ağ bağlantısı paylaşma
 Güvenlik duvarı oluşturma ve ağ verisini filtreleme

Atatürk Üniversitesi Açıköğretim Fakültesi 10


13
İnternetin Temelleri

Alan Adı (Domain) / Alt Alan Adı (Sub Domain)


Alan adı bir web sitesinin internetteki adı ve adresini belirtmektedir. Alan
adları kullanıcılar tarafından yetkili kurum ve kuruluşlardan belirli süreliğine
kiralama yoluyla alınmaktadır.

Örnek
•Atatürk Üniversitesi Alan Adı Adresi: https://www.ataauni.edu.tr

Alt alan adı bir alan adına bağlı olan alt alanları ifade etmektedir.
Örnek

•Atatürk Üniversitesi Birimler Alt Alan Adı Adresi:


https://birimler.atauni.edu.tr/

FTP (File Transfer Protocol)


TCP/IP ‘ye dayalı dosya aktarmaya ve paylaşımına imkan veren bir
protokoldür. İnternette sunucu tarafında tutulan dosyalara erişim FTP ile mümkün
olabilmektedir. FTP, sunucu-istemci mimarisine dayalı bir paylaşım protokolü
yapısındadır.

E-Posta
İnternette kişilerin birbirleriyle aralarında mesaj göndermesine ve almasına
izin verilen haberleşme sistemidir.

E-Posta Protokolleri (SMTP, POP, IMAP)


İnternette yapılan her bilgi aktarımı belirli protokollere bağlı olarak
yapılmaktadır. E-Posta gönderme ve alma amacıyla üç farklı protokol
kullanılmaktadır. SMTP, POP ve IMAP protokolleri e-posta sistemleri için
geliştirilmiştir. Belirli özellikleriyle bu protokoller birbirlerinden ayrışmaktadırlar.

SMTP (Simple Mail Transfer Protocol)


Basit e-posta transfer protokolü olarak isimlendirilmektedir. E-postaları
etkili ve güvenli bir şekilde göndermemizi sağlayan bir protokoldür. Bu protokol
sadece e-posta gönderimi için kullanılmaktadır. Bu protokolü güvenli yapan kısım,
e-postaların karşı tarafa gönderiminde herhangi bir hata olması durumunda hata
Giden E-posta hizmeti raporu iletilmesidir.
olarak SMTP sunucuları
kullanılır.

Atatürk Üniversitesi Açıköğretim Fakültesi 11


14
İnternetin Temelleri

Örnek
•Gmail Giden Posta Sunucusu Erişim Adresi: smtp.gmail.com

IMAP (Internet Message Access Protocol)


İnternet mesaj erişim protokolü ifadesine karşılık gelmektedir. IMAP
protokolünü kullanarak gelen e-postaları okumak istediğinizde e-postalar yerel
bilgisayara indirilmeden okunabilmektedir. E-posta okuma sürecinde yerel
bilgisayar üzerinden sunucuya erişim sağlanmakta ve mesajlar sunucu üzerinden
okunmaktadır. Bu erişim yöntemiyle e-postalar yerel bilgisayar veya cihaza
indirilmediği için e-postalara internete bağlı herhangi bir cihazla istenildiği anda
erişme imkanına sahip olunmaktadır.
Örnek

•Gmail Gelen Posta Sunucusu Erişim Adresi: imap.gmail.com

POP ( Post Office Protocol)


Gelen E-posta hizmeti E-posta mesajlarının alınması için kullanılan bir diğer protokolde POP
olarak IMAP ve POP protokolüdür. Bu protokol ile sunuculardan alınan hizmet ile kullanıcı e-
sunucuları kullanılır. postalarına erişmek istediğinde; e-postalar sunucudan bilgisayara indirilir. E-
postaların kopyaları sunucuda tutulmayıp yerel erişim sağlanan bilgisayar veya
cihaza yüklenmektedir.
Örnek

•Gmail Gelen Posta Sunucusu Erişim Adresi: pop.gmail.com

Web 1.0
(1991 - 2014) İNTERNETİN GELİŞİMİ VE WEB
İnternetin başlangıç
dönemini ifade Dünyada internetin ortaya çıkışı ve getirilen yeniliklerle web teknolojisinin
etmektedir. gelişimi de dönemlere ayrılmıştır. İlk başlangıçta basit bilgi paylaşımları ve içerikler
oluşturulan web dünyası günümüzde çok daha farklı seviyelere gelmiştir. Statik
içeriklerden dinamik içeriklere geçiş süreci sonrası, internetin evrimi daha da
hızlanmış, bilgi çağının getirdiği yenilikler ve akıllı teknolojilerle çok daha ileri
teknolojik gelişmelere doğru bir gelişimden söz etmek mümkündür.

Atatürk Üniversitesi Açıköğretim Fakültesi 12


15
İnternetin Temelleri

Günümüzde veri kaynakları giderek artmakta ve önemli ve anlamlı bilgilerin


işlenmesi teknolojik gelişmelere bağlı olarak zaman almaktadır. Teknolojik
gelişmelerde elde edilen ilerlemelerle, veriler daha anlamlı bir hale getirilmekte ve
son kullanıcıya hitap etmektedir. İnternet üzerindeki bu tür önemli bilgileri
aktarmak için web teknolojisi kullanılmaktadır.
Web kavramı, ilk internet sayfasının oluşturulduğu 1991 yılına
dayanmaktadır. Başlangıçta sadece basit bilgilerin sunulduğu web teknolojisi,
günümüzde çok daha farklı bir noktaya doğru yol almaktadır. Bilgilerin aktarılma
ve kullanılma biçimine göre web teknolojisini üç döneme ayırmak mümkündür. Bu
dönemleri Web 1.0, Web 2.0 ve Web 3.0 olarak ifade edebiliriz.

Web 1.0
İnternetin ilk ortaya çıktığı ve ilkel dönem olarak bu dönemi tanımlamamız
mümkündür. İnternetin ilk ortaya çıktığı dönem olan 1991 ile 2004 yılında Web 2.0
döneminin başlangıcına kadar olan dönemi ifade etmektedir. İnternetin başlangıç
yıllarında kullanıcıların büyük çoğunluğu içerik üreticisi olmaktan ziyade mevcut
web içeriklerinden yararlanmaktaydı.
Web 1.0 döneminde dinamik web içerikleri yerine daha çok bilginin sabit
olarak sunulduğu statik web sayfaları internet dünyasında yer almaktaydı. HTML
web içeriklerinin sunulduğu bu dönemde kullanıcıların çoğunluğu içerikleri okuma
amacıyla web sayfalarında gezinti yapmaktaydı. Bu dönemde Web sayfaları
kullanıcılarla etkileşim içerisinde olmayıp statik yapısını muhafaza etmiştir.
Web sayfalarının başlangıç dönemi olarak bahsettiğimiz Web 1.0’ın temel
özellikleri şunlardır:
 Statik içerik sunması
 Sadece okuma amaçlı kullanılması
 Yorum yapma özelliği olmaması
 Bilgi kaydetme özelliği olmaması
 Sade ve genellikle metin tabanlı bir tasarım

Web 2.0
Web 1.0 statik içeriklerin sunulduğu kullanıcı etkileşimi olmayan bir
dönemdir. Web 2.0 dönemine geçişin en temel farkı dinamik içerikler
oluşturulabilmesidir. Dinamik içerikler ile web ortamında bilgi paylaşma kültürü
yaygınlaşmış, bu dönüşümle teknolojik değişimler ve ilerlemelerin daha hızlı bir
şekilde yayılımına imkan sağlanmıştır.

Atatürk Üniversitesi Açıköğretim Fakültesi 13


16
İnternetin Temelleri

Web 1.0 döneminde kullanıcılar sadece bilgi alma tarafındadır. Ancak Web
2.0 dönemi ile birlikte kullanıcılar açısından içerik okuyan, içerik üreten, içerik
paylaşan bir döneme geçilmiştir. Bu yeni dönem ile kullanıcılar birbirleri ile daha
fazla etkileşim içindedir. Sosyal medya içerikleri ve uygulamaları (Facebook,
Twitter, Instagram, Youtube) bu dönemi en net şekilde yansıtan örnekler olarak
karşımıza çıkmaktadır.
Web sayfalarının ikinci dönemi olarak bahsettiğimiz etkileşim odaklı olan
Web 2.0’ın temel özellikleri şunlardır:
 Dinamik içerik sunması
 İçerik okuma ve içerik paylaşma imkanı sunması
 Kullanıcılar arası etkileşim ve paylaşım odaklı olması
 Zenginleştirilmiş ve etkileşimli ara yüz tasarımı
Web 2.0
 Sosyal medya etkinliği
Bilginin üretildiği,
paylaşıldığı, kullanıcılar Web 3.0
arası etkileşimin yüksek
Web 2.0 dönemi ile kullanıcıların birbirleri ile etkileşimi ve paylaşım odaklı
olduğu dönemi ifade
içeriklerin üretilmesi döneminden bahsedilmektedir. Web 3.0 olarak
etmektedir.
adlandırıldığımız bu yeni dönem ise, bir geçiş süreci içerisindedir. Başlangıç
aşamasında kullanıcılara anlamsal içerikler sunulması şeklinde hedefleri bulunan
bu yeni dönem, mevcut yaşadığımız dönemi ifade etmektedir. Aynı zamanda bu
dönemde yapılması planlanan teknolojik değişim ve atılımlarla beraber web
dünyasında çok büyük yenilikler beklenmektedir. Merkeziyetsiz olarak yeni bir
döneme geçiş yapılması hedeflenen Web 3.0 döneminin Web 2.0 döneminden
farkı Şekil 1.4’te verilmiştir. Şekil 1.4’te görüleceği üzere merkeziyetsiz dönemde
kullanıcıların birbirleri arasında doğrudan iletişim halinde olması beklenmektedir.

Şekil 1.4. Web 2.0 ve Web 3.0

Atatürk Üniversitesi Açıköğretim Fakültesi 14


17
İnternetin Temelleri

Web 3.0 ile başlangıç aşamasında anlamsal içeriklerin sunulması mevcut


çeşitli uygulamalarla karşımıza çıkmaktadır. Apple firması tarafından geliştirilen
Siri uygulaması, akıllı çözümleri ile anlamsal içeriklere dayalı bir uygulama
örneğidir. Başka bir örnek olarak; Wolfram Alpha arama motorundan yapılan bir
aramada, doğrudan bir içerik sunmak yerine bir hesaplama bilgi motoru
kullanılarak yapılan kelime aramasına özgü anlamsal içerikler sunulmaktadır.
Web 3.0 anlamsal Büyük veri, ilişkisel veri, bulut bilişim, 3D görselleştirme, artırılmış gerçeklik ve
içeriklerin sunulduğu daha fazlası teknolojiler ile web 3.0 döneminde anlamsal içeriklerin artarak devam
merkeziyetsiz bir etmesi beklenmektedir.
dönemi ifade
Henüz sürecin tanımlamasının tam yapılamadığı bu yeni web dönemi, blok
etmektedir.
zincir teknolojisinin ortaya çıkışıyla beraber beklentileri oldukça yükselmiştir. Blok
zincir teknolojisinin getirdiği yeniliklerden biri olan merkeziyetsiz uygulamaların bu
dönemde etkisini oldukça hissettirmesi beklenmektedir.
Merkeziyetsiz uygulamalar ile arada bir sunucunun ya da aracının olmadığı,
kullanıcılar arasında doğrudan etkileşimin olduğu yeni bir dönemden söz etmek
mümkündür. Merkeziyetsiz dönem, bilgi ya da içeriğin doğrudan paylaşılabilir
olması, bir aracı platformun olmaması ve içeriklerin üçüncü bir tarafta
depolanmaması anlamına gelmektedir. Bu dönemde verilen hizmetlerin bireysel
kullanıcı odaklı olmasından dolayı, içeriklerin belli platformlarla sınırlı olmasının
önüne geçilebilmesi söz konusudur. İnternette gezinirken sınırları belirli
uygulamalar yerine, cüzdan mantığı ile çalışan merkeziyetsiz uygulamaların
kullanılması hedeflenmektedir.
Web sayfalarının üçüncü dönemi olarak bahsettiğimiz ve henüz gelişim
sürecinde olan Web 3.0 teknolojisinin temel özellikleri şunlardır:
 Anlamsal içerikler
 Kişiye özgü içerikler
 Merkeziyetsiz uygulamalar
 Mekan bağımsız
 Yapay zeka odaklı
 3 boyutlu grafik içerikler
Bireysel Etkinlik

• Gelişmiş ülkelerdeki geniş bant internet indirme ve yükleme


hızları ile Türkiye'de ki internet hızlarını karşılaştırınız.

Atatürk Üniversitesi Açıköğretim Fakültesi 15


18
İnternetin Temelleri

•İNTERNET
•Dünya üzerinde bulunan milyarlarca bilgisayar veya elektronik aygıtın
haberleşme ve bilgi aktarımı amacıyla birbirine bağlandığı ortak bir ağa
verilen isimdir. İnternet ağında cihazlar belirli standart protokolleri
kullanarak birbirleri arasında iletişimi güvenli bir şekilde sağlarlar. İnternete
Özet
bağlı olmak isteyen tüm cihazlar internet servis sağlayıcısından alınan hizmet
ile ortak ağa dahil olurlar.
•İNTERNETİN ORTAYA ÇIKIŞI
•İnternet ağı oluşturma fikri 1958 yılında ABD ordusu tarafından finanse
edilen Savunma İleri Araştırma Projeleri Ajansının çalışmalarıyla başlamıştır.
Bu birimin yaptığı çalışmaların sonucunda farklı şehirlerde bulunan birimler
arasında haberleşme amacıyla bir ağ yapısı oluşturulmuştur. 1970li yılların
sonuna gelindiğinde TCP/IP protokolü ile internet ağındaki cihazların
birbirleriyle bir standart protokol ile daha kolay ve güvenli bir şekilde iletişim
kurması amaçlanmıştır. Günümüz internetinin temelleri de bu şekilde
atılmıştır.
•TÜRKİYE'DE İNTERNETİN ORTAYA ÇIKIŞI VE YAYGINLAŞMASI
•Türkiye'de internetin ortaya çıkışı ve günümüzdeki internetin yaygınlaşması
süreci 1980'li yıllara dayanmaktadır. 1986 yılında kurulmuş olan Türkiye
Üniversiteler ve Araştırma Kurumları Ağı (TÜVAKA), interneti Türkiye ile
tanıştıran bir kuruluş olmuştur. 1992 yılında ODTÜ ile Hollanda arasında X.25
devresi üzerinden oluşturulan internet ağı bugünkü internet ağımızın
temellerini oluşturmuştur. Başlangıç aşamasında sadece belirli kurumlar ve
üniversiteler internet ağına dahil olmuştur. İlk internet hizmet sağlayıcı olan
TURNET kuruluşunun hizmet vermesiyle beraber bireysel kullanıcılar da
internet erişimine sahip olmuşlardır. 2021 yılı itibariyle hane halkında
intenet kullanımı %92 seviyelerine ulaşmıştır. İnternet üzerinden satın
alımlarda ise bu oran %44,3 seviyelerine gelmiştir.
•TEMEL İNTERNET KAVRAMLARI
•İnternet üzerinde gezinti yapmak, bilgi paylaşmak ve iletişim kurma amacıyla
kullanılan temel bazı internet kavramları bulunmaktadır. İnternet ağı
üzerinde yapılan tüm veri aktarımları belirli standartlar çerçevesinde
gerçekleştirilmektedir. İnternet hizmeti internet servis sağlayıcıları
tarafından sağlanır. İnternet ağına tam bağlı olmayıp özel amaçlarla
oluşturulmuş küçük çaplı ağlar olarak Intranet ve Extranet karşımıza
çıkmaktadır. IP ile internet haberleşmesinde her bir cihaza bir adres
verilmektedir. İnternet tarayıcıları sayesinde web sayfasındaki içeriklere
erişim sağlanır. Bu web sayfalarının arkasında HTTP metin transfer protokolü
yapısı bulunmaktadır. Web içerikleri bir sunucuda web barındırma hizmetleri
ile tutulmakta olup, istemciler URL adresi ile bu web sayfalarına erişim
sağlamaktadır. Her bir web sitesinin bir IP adresi bulunmaktadır. Ip
adreslerinin akılda tutulması kolay olunmadığından web sitelerine erişim için
URL adresi kullanılmaktadır. DNS ile IP adresi site eşleştirmesi yapılarak
sitelere erişim sağlanır. Vekil sunucu ile web sitelerine güvenli erişim hizmeti
ve anonim erişim imkanı bulunmaktadır. E posta göndermek ve almak içinde
çeşitli protokoller belirlenmiştir. Neredeyse tüm e-posta sunucuları giden e-
posta için SMTP protokolünü ve gelen e-postalar için ise; IMAP ve POP
protokollerini desteklemektedirler.

Atatürk Üniversitesi Açıköğretim Fakültesi 16


19
İnternetin Temelleri

Özet (devamı)
•İNTERNETİN GELİŞİMİ VE WEB
• İnternet ağının ortaya çıkışıyla beraber web çeşitli gelişim dönemlerinden
geçmiştir. Web gelişim dönemleri Web 1.0, Web 2.0 ve Web 3.0 dönemi
olarak ifade edilmektedir.
• Web 1.0:
•Web döneminin en ilkel dönemidir. Statik içeriklerin bulunduğu, çoğunlukla
okunma amaçlı kullanılan dönemi ifade etmektedir.
• Web 2.0:
•Statik içeriklerden dinamik içeriklere geçiş olmuştur. Bilginin üretildiği ve
paylaşıldığı, kullanıcılar arasında etkileşimin olduğu dönem ifade
edilmektedir.
•Web 3.0:
•İnternet içeriklerinin son kullanıcıya hitap edilirken anlamsal ağ içeriklerinin
de olduğu yeni dönemdir. Merkeziyetsiz ağ yapılarıyla web ortamının yeni
bir şekle bürüneceği dönemdir. Yapay zekanın da birincil unsur olduğu bu
dönemde kullanıcılar arasında platformsuz içerik paylaşımlarının yapılması
hedeflenmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 17


20
İnternetin Temelleri

DEĞERLENDİRME SORULARI
1. İnternet nedir?
a) Web tarayıcı çeşididir.
b) Dosyaların tutulduğu bir sunucudur.
c) Bilgisayar veya diğer cihazların bağlı olduğu ortak ağdır.
d) Sadece sosyal medya sitelerinin bulunduğu bir yerdir.
e) Mobil uygulama ağıdır.

2. IPv4 kaç bitlik bir adres yapısına sahiptir?


a) 16 bit
b) 32 bit
c) 64 bit
d) 128 bit
e) 256 bit

3. HTML nedir?
a) Bir işaretleme dilidir.
b) Arama motorudur.
c) Ürün sipariş platformudur.
d) Web tarayıcıdır.
e) Mobil web sitesidir.

4. İnternete bağlanmak için kullanılan protokol nedir?


a) HTML
b) FTP
c) SMTP
d) IMAP
e) TCP/IP

5. Dinamik web sitelerine geçiş hangisi ile başlamıştır?


a) Web 1.0
b) Web 2.0
c) Web 3.0
d) Web 4.0
e) Web 5.0

6. Türkiye’de internet alt yapısını oluşturmak için kurulan kuruluşun adı


nedir?
a) ASELSAN
b) YÖK
c) TÜVAKA
d) HAVELSAN
e) Türkiye Bilgi Teknolojileri ve İnternet Kurumu

Atatürk Üniversitesi Açıköğretim Fakültesi 18


21
İnternetin Temelleri

7. SMTP nedir?
a) Giden e-posta iletim protokolüdür.
b) Sunucu depolama hizmetidir.
c) Gelen e-posta iletim protokolüdür.
d) Veri paylaşım platformudur.
e) Dosya aktarım protokolüdür.

8. İnternet servis sağlayıcısı nedir?


a) Mobil içerik platformudur.
b) Web sitelerinin geneline verilen isimdir.
c) İnternet programlama platformudur.
d) Kişi, kurum ve şirketlere internet erişimine olanak sağlayan
kuruluşlardır.
e) Sunucu depolama hizmetidir.

9. Web 3.0 dönemi neyi ifade etmektedir?


a) Anlamsal içeriklerin olduğu merkeziyetsiz dönemdir.
b) Sadece statik içeriklerin olduğu dönemdir.
c) Ücretsiz internet paylaşım platformudur.
d) Sosyal medya sitelerinin ortaya çıktığı dönemdir.
e) Sadece okunma amaçlı erişim sağlanan dönemdir.

10. Hosting nedir?


a) E-posta hizmetinin adıdır.
b) İnternet sayfalarının içeriklerinin bir sunucu bilgisayarda tutulduğu
depolama hizmetinin adıdır.
c) Web mobil uygulama platformudur.
d) İnternet ağ protokolüdür.
e) Web programlama platformudur.

Cevap Anahtarı
1.c 2.b, 3a, 4.e, 5.b, 6.c, 7.a, 8.d, 9.a, 10.b

Atatürk Üniversitesi Açıköğretim Fakültesi 19


22
İnternetin Temelleri

YARARLANILAN KAYNAKLAR
ARPANET. 29 Aralık 2021 tarihinde https://www.britannica.com/topic/ARPANET
adresinden erişildi.
Atzori, M., Koutrika, G., Pes, B., ve Tanca, L. (2020). Special issue on “Data
exploration in the web 3.0 age”. Future Generation Computer Systems.
İnternet Teknolojileri. 3 Ocak 2022 tarihinde
https://www.tutorialspoint.com/internet_technologies/ adresinden erişildi.
Özgit, A., Cagiltay, K. ve Taner, E. (1995). Turkish Internet (TR-NET): Policies for
Organizational Framework and Funding. International Networking
Conference, Honolulu, Hawaii, 27-30 June 1995.
Radu, R. (2019). Revisiting the Origins: The Internet and its Early Governance.
DOI:10.1093/oso/9780198833079.003.0003 In book: Negotiating Internet
Governance, Oxford University Press.
Survey on Information and Communication Technology (ICT) Usage in Households
and by Individuals. 29 Aralık 2021 tarihinde
https://data.tuik.gov.tr/Bulten/Index?p=Survey-on-Information-and-
Communication-Technology-(ICT)-Usage-in-Households-and-by-Individuals-
2021-37437 adresinden erişildi.
Ulaknet Tarihçesi. 27 Aralık 2021 tarihinde
https://ulakbim.tubitak.gov.tr/tr/kurumsal/ulaknet-tarihcesi adresinden
erişildi.

Atatürk Üniversitesi Açıköğretim Fakültesi 20


23
WEB PROGRAMLAMA
ARAÇLARI VE DİNAMİK WEB

• Web Programlama
• Ön Yüz Web Geliştirme
İÇİNDEKİLER

• Ön Yüz Web Geliştirme


Dilleri
• Ön Yüz Web Geliştirme İNTERNET
Ortamları PROGRAMCILIĞI II
• Arka Yüz Web Geliştirme
• Arka Yüz Web Geliştirme Dr. Öğr. Üyesi Mahmut
Dilleri ve Dil Ortamları
• Arka Yüz Web Geliştirme
KAYA
Ortamları
• Arka Yüz Web Geliştirme
Veri Tabanları
• Web Sunucu Yazılımları
• Web Geliştirici Profilleri

• Bu üniteyi çalıştıktan sonra;


• Web programlama hakkında
HEDEFLER

bilgi edinip web programlamayı


açıklayabilecek,
• Ön Yüz Web Geliştirmede
kullanılan araçları öğrenip
açıklayabilecek,
• Arka Yüz Web Geliştirmede
kullanılan araçları öğrenip ÜNİTE
açıklayabilecek,
• Web Geliştirici profillerini
öğrenebileceksiniz.
2
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Web Programlama Araçları ve Dinamik Web

Ön Yüz

Ön Yüz Web Geliştirme Dilleri

Web Geliştirme Ön Yüz


Web Geliştirme Ortamları
WEB PROGRAMLAMA ARAÇLARI ve

Arka Yüz
Web Geliştirme Dilleri
DİNAMİK WEB

Arka Yüz
Arka Yüz Web Geliştirme Ortamları

Web Geliştirme Arka Yüz


Web Geliştirme Veri Tabanları

Web Sunucu Yazılımları

Web Geliştirici
Profilleri

Atatürk Üniversitesi Açıköğretim Fakültesi 2


25
Web Programlama Araçları ve Dinamik Web

GİRİŞ
Web sayfası ya da uygulaması dünya çapında ağ üzerinde (WWW) bulunan
metin, görüntü, ses, video ve link bağlantıları içeriklerinden oluşmaktadır. Web
sayfası ya da web uygulamasına ait içerikler, internet ağına dahil olan bir web
sunucusunda bulunur ve bir web tarayıcısı aracılığıyla bu web sayfası içeriklerine
erişilir. Her bir web sayfasının kendisine ait bir tek düzen kaynak bulucu (URL)
adresi bulunmaktadır.
Web 1.0 döneminde web sayfası uygulaması içerikleri statik içeriklerden
oluşmaktaydı. Web 2.0 dönemine geçiş ile beraber web içerikleri de değişmeye
başlamıştır. Kullanıcının etkileşimde olduğu ve dinamik içeriklerin etkin olduğu bu
dönemde web tasarımları da oldukça zenginleşmiştir. Aynı zamanda dinamik içerik
oluşturma amacıyla kullanılan birçok web programlama dili, web geliştirme
ortamları ve veri tabanı da bu dönemde geliştirilmiştir.
Günümüzde web siteleri ve uygulamalarına olan taleplerin artması ve
ihtiyaçların farklılaşmasından dolayı sürekli güncellenen yeni teknolojiler ortaya
çıkmaktadır. Web sayfası ve içerik geliştirme teknolojileri genellikle iki yönüyle ele
alınmaktadır. Bu iki yönden birincisi, kullanıcının görebildiği kısımda yapılan
geliştirmeler olarak istemci tarafı (client side) geliştirme dilleri ve web sayfası
geliştirme ortamlarıdır. İkinci yön ise arka planda, kullanıcının göremediği kısımda
yapılan geliştirmeler olarak sunulan sunucu tarafı (server side) geliştirme dilleri,
web geliştirme ortamları, sunucu yazılımları ve veri tabanlarıdır.

WEB PROGRAMLAMA
Web teknolojisinin ilk çıktığı dönem olan Web 1.0 döneminde web sayfaları
statik içeriklerden oluşmaktaydı. Kullanıcıların etkileşimde bulunamadığı bu
dönemde, web sayfaları daha çok basit tasarımlardan oluşmakta, HTML işaretleme
dilinin etkin olduğu görsel tasarımlar da oldukça yetersizdi. Web teknolojisinin bu
başlangıç döneminde temel bazı bilgiler ve basit görsel öğelerden oluşan web
tasarım örnekleri bulunmaktadır.
Web 2.0 ile web sayfalarının kullanıcılar tarafından görünen görsel kısmı
Web 1.0 dönemi statik dışında, görünmeyen arka kısmında da yeni bir dönemin kapısı aralanmıştır. Web
içeriklerin bulunduğu 2.0 dönemi ile beraber hem kullanıcı tarafından görünen kısımda oldukça zengin
web sayfaları, Web 2.0 ve görsel tasarımlar oluşturulmakta hem de sunucu tarafında oldukça başarılı
dönemi ise dinamik dinamik etkileşimli içerikler ve paylaşımlar sunulmaktadır.
içeriklerin bulunduğu Günümüzde herhangi bir web sitesi ya da uygulaması geliştirildiği zaman
web sayfaları dönemini web tasarım ve web geliştirme yönü olarak iki farklı kavram bulunmaktadır. Web
ifade etmektedir. tasarım kısmı, kullanıcının etkileşime girdiği web sitesinin ara yüzünün tasarımı ve
geliştirilmesi olaylarıdır. Web geliştirme kısmı ise; web sitesinin kullanıcılar
tarafından görünmeyen sunucu tarafında yapılan işlemler, bağlantıların kurulduğu
yazılımlar, veri tabanı işlemleridir.
Kullanıcı tarafından görünen kısım aynı zamanda ön yüz geliştirme bölümü
olarak ifade edilmektedir. Kullanıcı tarafından görünmeyen kısım da arka yüz

Atatürk Üniversitesi Açıköğretim Fakültesi 3


26
Web Programlama Araçları ve Dinamik Web

geliştirme diye ifade edilmektedir. Kitap bölümünün sonraki kısımlarında bu iki


geliştirme yaklaşımına ait yazılım dilleri, yazılım geliştirme ortamları ve arka yüzde
sıklıkla tercih edilen veri tabanları ile web sunucu yazılımları tanıtılacaktır. Ön yüz
geliştirme ile arka yüz geliştirmede yapılan işlemler Tablo 2.1’de karşılaştırmalı
olarak verilmektedir.
Tablo 2.1. Ön Yüz Geliştirme ve Arka Yüz Geliştirme

Ön Yüz Geliştirme (İstemci Tarafı) Arka Yüz Geliştirme (Sunucu Tarafı)


Kullanıcıdan veri alma Kullanıcı verisi işleme
Kullanıcı kodlara erişebilir Kullanıcı arka plandaki kodlara erişemez
Yerel bilgisayarda çalıştırılır Web sunucusunda çalıştırılır
Veri güvenliği sağlanmaz Veriler güvenle saklanır
HTML, CSS ve JavaScript PHP, ASP.NET, Java ve Python
Statik içerikler Dinamik içerikler
Web sayfasının görsel kısımları, kullanıcı Veri tabanı etkileşimi, web sunucularından
ara yüzleri bilgi alma

ÖN YÜZ WEB GELİŞTİRME


Ön yüz geliştirmede çalışan bir geliştiricinin temel sorumluğu kullanıcı ara
yüz görünümleridir. Ön yüz geliştirme bir web sayfası ya da uygulamasının aynı
zamanda istemci tarafı olarak ifade edilmektedir. Son zamanlarda kullanıcılara
Ön yüz geliştirme sunulan etkileşim odaklı içeriklerin artması ve kullanıcılara daha ilgi çekici
istemci tarafındaki web tasarımlar üretmek amacıyla ön yüz web geliştirme, ayrı bir alan olarak gelişimini
tasarım işlemlerini ifade devam ettirmektedir.
etmektedir. Ön yüz geliştirme iki alt başlık olarak ele alınmaktadır. İlki; web sayfası ya da
uygulamasının kullanıcı tarafından görünen kısmıyla ilgilenen yazılım dilleridir.
Sıklıkla kullanılan HTML, CSS ve JavaScript dillerini bu aşamada örnek olarak
verebiliriz. İkincisi ise web ara yüzünün görünümünü iyileştirmek için kullanılan
pratik web geliştirme ortamlarıdır.

Ön Yüz
(İstemci Tarafı)
Web Geliştirme

HTML, CSS ve Java


dilleri ön yüz
geliştirmede kullanılan Ön Yüz Web Ön Yüz Web
Betik Dilleri Geliştirme Ortamları
temel dillerdir.

Şekil 2.1. Ön Yüz Web Geliştirme

Atatürk Üniversitesi Açıköğretim Fakültesi 4


27
Web Programlama Araçları ve Dinamik Web

Ön Yüz Web Geliştirme Dilleri


Temel olarak birçok web geliştiricisi HTML, CSS ve JavaScript ön yüz
geliştirme dillerine aşinadır. Temel ön yüz geliştirme dilleri dışında jQuery, Sass ve
TypeScript gibi JavaScript ve CSS temelli geliştirilmiş diller de bulunmaktadır.

HTML (Hypertext Markup Language)


HTML, bir hiper metin ile işaretleme dilinin birleşimi olup web sayfalarını
tasarlamak için geliştirilmiş bir dildir. Hiper metin, web sayfaları arasındaki
bağlantıyı sağlamak için kullanılırken; işaretleme dili ise web sayfalarının yapısını
belirleyen etiket içindeki metin belgelerini tanımlamak için kullanılmaktadır. Web
tarayıcıları, web sayfalarının içeriğindeki metin, görüntü, ses içeriklerini HTML dili
aracılığıyla istenilen şekilde kullanıcıya sunmaktadır.
HTML bir web sayfasının iskeletini oluşturur. Web sayfaları HTML olmadan
tasarlanamaz. HTML ile basit statik içeriğe sahip web sayfalarını oluşturmak
mümkündür. HTML, web’in temel dili olduğu için web sayfası geliştiricilerinin bu
işaretleme dilini öğrenmeleri bir zorunluluktur.

CSS (Cascading Style Sheets)


Basamaklı stil sayfaları olarak isimlendirilen CSS, web sayfalarını kullanıcılar
için daha ilgi çekici bir hale getirmek için basit HTML görünümü dışında kullanılan
bir stil sayfası dili olarak ifade edilmektedir. Web sayfaları CSS sayesinde daha
kullanışlı bir görünüme getirilerek HTML’den bağımsız stiller oluşturulmasına
olanak tanımaktadır.
Bir web sayfası oluşturmak için temelde HTML kullanıldığı gibi, CSS kullanımı
da bir web sayfası için kritik öneme sahiptir. Sadece HTML dilinin kullanıldığı bir
sade içerik yerine, CSS kullanımı ile web sayfaları kullanıcılar için daha iyi bir
görünüm sağlarken, CSS kullanılarak oluşturulan web sayfası ara yüzü,
kullanıcıların web sayfasında daha iyi bir gezinti sunmasına olanak sağlamaktadır.
Aşağıdaki örnekte HTML ve CSS kodlarının birlikte yazıldığı basit bir statik
içerik görülmektedir. Metin içeriği “<html> </html>” etiketleri içerisinde başlık
olarak “<h> Atatürk Üniversitesi </h>” ve paragraf metni olarak “<p> Açıköğretim
Fakültesine hoşgeldiniz </p>” yazılırken, CSS kodları “<style> </style>” etiketleri
arasına yazılmıştır (Resim 2.1).

Atatürk Üniversitesi Açıköğretim Fakültesi 5


28
Web Programlama Araçları ve Dinamik Web

Resim 2.1. CSS Kodları ve Ekran Görüntüsü

JavaScript
JavaScript, HTML ve CSS gibi istemci tarafı bir betik dildir. Ön yüz geliştirme
de üstün özellikleriyle web geliştiricileri tarafından tercih edilmektedir. HTML ve
CSS dillerinden farklı olarak günümüzde sunucu taraflı uygulamalarda da
kullanılmaktadır. Tarayıcının olmadığı birçok ortamda kullanımı mümkün
olmaktadır. JavaScript web sayfası geliştirme, oyunlar geliştirme ve mobil
JavaScript hem ön yüz
uygulama geliştirme gibi oldukça geniş bir kullanım alanına sahiptir. JavaScript
geliştirmede hem de
tarayıcı (browser) tarafından yorumlandığı için herhangi bir derleyiciye ihtiyaç
arka yüz geliştirmede
duymamaktadır(Resim 2.2).
kullanılmaktadır.

Resim 2.2. JavaScript Kodları ve Ekran Görüntüsü

JavaScript kullanılarak yapılabilecek bazı çözümleri maddeler halinde


sıralayacak olursak;

 Web sayfasında kullanıcı etkileşimleri oluşturma,


 3 Boyutlu çizimler gerçekleştirme,
 Mobil uygulamalar gerçekleştirme,
 Sunucu tarafında uygulamalar geliştirme,

Atatürk Üniversitesi Açıköğretim Fakültesi 6


29
Web Programlama Araçları ve Dinamik Web

 Tarayıcı oyunları geliştirme vb.


avantajları ile JavaScript oldukça etkin bir betik dildir.

jQuery
En popüler JavaScript kütüphanelerinden biridir. Ön yüz geliştirmede hızlı,
JQuery ve TypeScript,
küçük ve basit özelliklere sahip platformlar arası bir JavaScript kütüphanesidir.
JavaScript dilini temel
Kullanımı kolay bir API ile HTML belgesi geçişi ve manipülasyonu, olay işleme,
alarak oluşturulmuş
animasyon ve Ajax gibi şeyleri çok daha basit hale getirip birçok tarayıcıda başarılı
dillerdir.
bir şekilde çalışmaktadır. jQuery ücretsiz bir açık kaynak kütüphanedir.

TypeScript
TypeScript, JavaScript'i temel alan ve JavaScript’e göre her ölçekte daha iyi
araçlar sağlayan bir ön yüz geliştirme dilidir. JavaScript’e ek söz dizimi ekleme
özelliği, kodların JavaScript’e dönüştürülüp her ortamda çalıştırılabilmesi özelliği
ve JavaScript’i anlayarak ek bir kod kullanmadan tür çıkarım özelliği avantajlarını
içermektedir.

Sass
CSS’in tüm sürümleriyle uyumlu bir CSS uzantı dilidir. Uzun yıllardır güçlü bir
ekip desteği ile yoluna devam eden bu dil, diğer CSS uzantısı dillere göre daha
fazla özellikler barındırmaktadır. İşletmeler tarafından CSS uzantı dili olarak sıklıkla
Sass, CSS dilini temel tercih edilmektedir.
alarak oluşturulmuş bir
uzantı dilidir. Ön Yüz Web Geliştirme Ortamları
Web geliştiricileri, web sayfası ya da uygulaması geliştirirken ücretli ya da
ücretsiz web geliştirme ortamlarını kullanarak daha etkin ve hızlı çözümler
sunmaktadırlar. Bu amaçla geliştirilmiş çok sayıda web geliştirme aracı ve
teknolojisi bulunmaktadır. Aşağıda istemci tarafında en çok tercih edilen web
gelişme ortamlarından bazıları hakkında bilgiler verilmektedir.

Sublime Text
En iyi metin editörlerinin başında gelmektedir. Küçük ve büyük ölçekli işler
için kullanımı uygundur. Güzel görünümü ve kullanım kolaylığı avantajlarıyla önde
gelen geliştirme araçlarından birisi olmaktadır. Basit ve kullanışlı bir editör
olmasının yanında bağlama duyarlı otomatik yazma özelliğiyle kullanıcılara yazım
kolaylığı sağlamaktadır.
Güncellenmiş Python uygulama programlama ara yüzü (api) ile önemli bir
Sketch, vektör grafikleri fayda sağlamaktadır. Ayrıca çok hızlı çalışma süresi ve söz dizimi tanımlarıyla önde
düzenleme ve başarılı gelen geliştirme araçlarından biridir. Sublime Text, ücretli bir web geliştirme
piksel hassasiyeti ortamıdır. Windows, Linux ve Mac işletim sistemlerinde çalışabilmekte iken mobil
sunmaktadır platformlarda kullanılamamaktadır.

Sketch
Güçlü vektör grafikleri düzenleme ve başarılı piksel hassasiyeti özelliklerine
sahiptir. Kullanım kolaylığı ve kullanışlı klavye kısa yolları sunmaktadır. Mac işletim

Atatürk Üniversitesi Açıköğretim Fakültesi 7


30
Web Programlama Araçları ve Dinamik Web

sisteminde web sayfaları geliştirmek için kullanılan bir platformdur. Sketch ücretli
bir web geliştirme ortamıdır.

Angular.JS
Google tarafından geliştirilen Angular.JS, küçükten büyüğe tüm web
projeleri için uygundur. Web uygulamaları için HTML kelime dağarcığını
genişletme imkanı sağlamaktadır. Anlamlı, okunabilir ve etkili bir geliştirme için
hızlı bir ortam yapısı vardır. Veri bağlama, denetçi ve sade JavaScript özelliklerine
sahiptir. Angular.JS ücretsiz bir açık kaynak yazılımıdır.

Chrome DevTools
Google tarafından geliştirilmiştir. HTML, CSS ya da JavaScript dillerinde
yapılan işleri gerçek zamanlı olarak düzenlememizi sağlamaktadır. Google Chrome
tarayıcısı üzerinde gerçek zamanlı çalışma imkanını sağlamaktadır. Chrome
DevTools ücretsiz bir yazılımdır.

Visual Studio Code


Microsoft tarafından geliştirilmiş açık kaynak düzenleme programıdır.
Windows, Linux ve Mac işletim sistemlerinde çalışmaktadır. Uzantılar kullanılarak
yeni diller, temalar ve hata ayıklayıcıların eklenebilmesi özellikleriyle hem
genelleştirilebilme hem de özelleştirilebilme avantajları bulunmaktadır. Visual
Studio Code ücretsiz bir yazılımdır.

Bootstrap
Hızlı ve etkin web sayfası geliştirme araçlarından biri olan Bootstrap açık
kaynak bir yazılımdır. HTML, CSS ve JavaScript dilleriyle web sayfaları geliştirmede
oldukça yaygın olarak kullanılan bir web geliştirme ortamıdır. Sass ve JQuery gibi
diğer web sayfası geliştirme araçlarını desteklemesiyle de geliştiricilere önemli
avantajlar sağlamaktadır. Bootstrap ücretsiz bir yazılımdır.

GitHub
Dünyada şu anda 70 milyonun üzerinde geliştirici ve 4 milyon üzerinde
organizasyon GitHub geliştirme ortamından yararlanmaktadır. Projeleri yönetmek
için ideal bir geliştirme ortamıdır. Windows, Linux ve macOS işletim sistemi
destekleri bulunmaktadır. İşbirlikçi kodlama, otomasyon ve CI/CD (Continuous
integration, Continuous delivery) desteği, güvenli kodlama, istemci uygulamaları
(mobil, masaüstü, komut satırı arayüzü), proje yönetimi, takım yönetimi gibi üstün
özellikleri bulunmaktadır. GitHub ücretsiz kullanımı ile beraber; ekip ve kurumsal
olmak üzere iki ayrı ücretli seçeneği olan bir geliştirme ortamıdır.

CodePen
CodePen web sayfası oluşturmak, öğrenmek, hata ayıklamak ve test
senaryoları oluşturmak için faydalı bir sosyal geliştirme ortamı olarak tercih
edilmektedir. Sınırlı bir hizmetle ücretsiz desteği bulunmaktadır. Ücretli
sürümlerinde ise sunulan hizmete göre ayrı fiyatlandırma seçenekleri
bulunmaktadır.

Atatürk Üniversitesi Açıköğretim Fakültesi 8


31
Web Programlama Araçları ve Dinamik Web

ARKA YÜZ WEB GELİŞTİRME


Arka yüz geliştirme aynı zamanda bir web sayfası ya da uygulamasının
sunucu tarafı olarak ifade edilmektedir. Ön yüz tarafında zengin içerikli
görünümler bulunmakta iken, web sayfasının sunucu tarafında dinamik bir işleyiş
söz konusudur. Günümüz teknolojisi olan web 2.0 ile beraber gelmiş olan bu
özellik ile kullanıcı etkileşimli web sayfası tasarlama ve veri tabanı erişimi
gerçekleştirilebilmektedir.
Arka yüz geliştirme Arka yüz web geliştirme çeşitli açılardan ele alınmaktadır. İlk olarak web
sunucu tarafındaki web sayfası ya da uygulamasının istemciyle etkileşimini oluşturmak amacıyla kullanılan
sayfası geliştirme web programlama dilleri sunucu tarafı geliştirmenin önemli adımlarından biridir.
işlemlerini ifade Temelde kullanılan ASP.NET, PHP, Java ve Python dillerini bu aşamada örnek
etmektedir. olarak verebiliriz. Arka yüz geliştirmenin diğer adımları ise web uygulamalarının
sunucu tarafında nasıl çalıştığı, uygun geliştirme araçlarının web sayfasına entegre
edilmesi ile veri tabanları ile bağlantıların sağlanması şeklindedir.

Arka Yüz
(Sunucu Tarafı)
Web Geliştirme

Arka Yüz Web Arka Yüz Web Web Sunucu


Web Veri Tabanları
Programlama Dilleri Geliştirme Ortamları Yazılımları

Şekil 2.2. Arka Yüz Web Geliştirme

Arka Yüz Web Geliştirme Dilleri ve Dil Ortamları


Ön yüz geliştirmede statik diller olarak HTML ve CSS tercih edilmektedir.
Arka yüz dinamik web sayfaları geliştirmede ise ASP, ASP.NET, PHP, Java, Python
web geliştiricileri tarafından en çok tercih edilen dillerdir.
ASP,
“Active Server Pages” ASP
kelimelerinin ilk Active Server Pages (aktif sunucu sayfaları) kelimelerinin ilk harflerinin
harflerinden birleşimi ile ifade edilen programlama dili geliştirme ortamıdır. 1998 yılında
türetilmiştir. Microsoft tarafından geliştirilmiş olan ilk sunucu taraflı betik dildir. Yazılan kodlar
“.asp” uzantısı ile kaydedilmektedir. VBScript kullanılarak yazılan kodlarla “.asp”
uzantılı dinamik içerikli web sayfaları oluşturulabilmektedir.

ASP.NET
2002 yılında klasik ASP dilinin başarısı üzerine Microsoft firması tarafından
.NET mimarisine dayalı geliştirilmiş olan popüler web uygulama geliştirme
teknolojisidir. Yazılan kodlar “.aspx” uzantısı ile kaydedilmektedir. Visual Basic ve
C# dilleri tarafından yazılan kodlarla “.aspx” uzantılı dinamik içerikli web sayfaları
oluşturulmaktadır. Başlangıçta sadece Windows işletim sistemi üzerinden

Atatürk Üniversitesi Açıköğretim Fakültesi 9


32
Web Programlama Araçları ve Dinamik Web

çalışmakta olan ASP.NET sayfaları, gelişen yeni teknolojilerle Linux sistemleri


üzerinde de çalışabilmektedir.

PHP
Dinamik web sayfalarına geçiş ile birlikte en çok tercih edilen dillerden biri
olmuştur. PHP, sunucu tarafında çalışan güçlü, çok amaçlı ve ücretsiz olarak
kullanılan bir web programlama dilidir. Linux ve Windows işletim sistemleri
üzerinde çalışabilmektedir. PHP dili öğrenilmesi çok kolay bir dil olup, arkasında
güçlü bir topluluk desteği vardır. HTML, CSS, JavaScript dilleriyle kolayca entegre
edilebilmesi, esnek olması, güvenilir olması programlama dilinin önemli
avantajlarındandır.

Java
Çok uzun yıllar önce geliştirilmiş bir dil olmasına karşın dinamik web
uygulamaları geliştirmek için hala en çok tercih edilen programlama dillerinden
biridir. Masaüstü uygulamaları, web uygulamaları ve mobil uygulamalar için
kullanımı mümkün olup çok amaçlı bir dildir. Java, günümüzde çevrimiçi
alışverişte, içerik yönetim sistemlerinde, oyunlarda, sosyal medyada, arama
motorlarında, reklamcılıkta vs. neredeyse tüm web içeriklerinde esnekliği, gücü ve
kullanım kolaylığı ile tercih edilmektedir.

Python
Son yıllarda programlama dilleri arasında üstünlüğünü ortaya koyan Python
sunucu tarafında bulunan web geliştirme dilleri arasında önemli bir yer edinmiştir.
Nesne yönelimli programlama desteğine sahip olup, prosedürel programlama
yapılarını da destekleyen üst seviye programlama dilidir. Basit söz dizimi ve kod
okunabilirliği yönleriyle öğrenmesi ve kullanımı oldukça kolay bir dildir.

Arka Yüz Web Geliştirme Ortamları


Arka yüz web geliştirme ortamları sunucu taraflı web programlama dilleri ile
uyumlu bir şekilde çalışan pratik ve etkili web geliştirme ortamlarıdır. Bu bölümde
sunucu tarafında en çok tercih edilen web gelişme ortamları hakkında genel
bilgiler verilmektedir.

Django
Güçlü bir Python web geliştirme ortamı olan Django, etkili ve sorunsuz web
sayfaları geliştirmeye yarayan bir web geliştirme aracıdır. MTV (Model-Template-
Views) mimarisini kullanan Django, geniş bir topluluk tarafından
desteklenmektedir. Genişletilebilme, ölçeklenebilirlik, hızlı geliştirme ve daha az
kod kullanımıyla önemli avantajlara sahiptir. Django ücretsiz ve açık kaynak
geliştirme ortamıdır.

ASP.NET Core
Hızlı, etkili, güvenli, platformlar arası ve bulut tabanlı uygulamalar
geliştirmek için Microsoft tarafından geliştirilen açık kaynak bir çapraz geliştirme
ortamıdır. Web uygulamaları, web servisler ve nesnelerin interneti uygulamaları

Atatürk Üniversitesi Açıköğretim Fakültesi 10


33
Web Programlama Araçları ve Dinamik Web

geliştirmek için idealdir. İstemci tarafı uygulamalarla sorunsuz bir şekilde bir araya
gelerek çalışma imkanı sağlamaktadır.

Node.js
Sunucu tarafı geliştirilen uygulamalarda, JavaScript’i aktif etmek için
kullanılan açık kaynaklı bir web geliştirme aracıdır. Node.js, Chrome web
tarayıcısının V8 JavaScript çalışma motoru üzerine kurulmuş olan bir JavaScript
çalışma zamanıdır. Ağ bağlantılı uygulamalar için geliştirilmiştir. Tüm işletim
sistemleri üzerinde çalışma desteği bulunmaktadır.

Laravel
Günümüzde PHP uygulamaları geliştirmek için kullanılan en popüler yazılım
geliştirme ortamlarından biridir. MVC (Model-View-Controller) mimarisini kullanan
Laravel, etkileyici ve iyi bir sözdizimine sahiptir. MVC mimarisi ile kodlar daha iyi
yapılandırıldığı için geliştiricilerin işlerini başlangıçta oldukça kolaylaştırmaktadır.
Laravel , MVC (Model-
Düz bir metin olarak kaydedilmeyip, karma ve şifreli parolalar oluşturmaktadır ve
View-Controler)
güvenli web sayfaları geliştirmek için idealdir.
mimarisini
kullanmaktadır. Java EE
Oracle tarafından geliştirilen Java EE, büyük ölçekteki projeler için
geliştirilmiş Java teknolojilerinin bütününü içeren bir web geliştirme aracıdır.
Geliştirilen her yeni sürüm, kurumsal işletmelerin ihtiyaçlarını karşılamaya
odaklanarak yeni özellikler eklemekte, uygulamanın taşınabilirlik özelliğini
geliştirmekte ve geliştiricilere daha üretken ortamlar oluşturmayı
hedeflemektedir.

Arka Yüz Web Geliştirme Veri Tabanları


Kullanıcıların etkileşimde bulunduğu tüm bilgiler sunucu bilgisayarlarında
oluşturulan veri tabanlarında saklanır. Sunucu tarafında çalışan web geliştiricisinin
yaptığı işlemlere bağlı olarak; veri tabanlarında veri ekleme, silme, sorgulama ve
Sunucu tarafında web güncelleme işlemleri gerçekleştirilir. Bu bölümde dinamik verilerin tutulduğu
sayfasına ait dinamik popüler veri tabanları ve uygulamaları ele alınacaktır.
veriler veri tabanlarında MongoDB
saklanmaktadır.
Ortak bir sorgu ara birimi ve geliştiricilerin veri modeli kullanılırken işlem,
arama, analiz ve mobil kullanımlarını destekleyen açık kaynak NoSQL (Not Only
SQL) veri tabanı uygulamasıdır. C++ programlama dili ile geliştirilmiştir.
MongoDB’de kayıtlar doküman olarak tutulmaktadır. Tutulan bu dokümanlarda
veriler, JSON formatında saklanmaktadır. İlişkisel veri tabanlarından ayrıldığı kısım,
verilerin tablo ve sütun yerine doküman olarak tutulmasıdır. Ücretsiz bir açık
kaynak veri tabanı uygulamasıdır.

MySQL
İlişkisel veri tabanı yönetim sistemlerinin en popüler örneklerinden biridir.
Hızlı ve yüksek performansa sahip olan MySQL, ölçeklenebilirlik, kullanılabilirlik ve
güvenilirlik konularında oldukça başarılıdır. MySQL veri tabanı yönetim sisteminin

Atatürk Üniversitesi Açıköğretim Fakültesi 11


34
Web Programlama Araçları ve Dinamik Web

etkinliği ve kullanım esnekliğinden dolayı, Facebook ve Twitter gibi sosyal medya


devleri de sunucu tarafında MySQL kullanmaktadırlar. Ücretsiz bir açık kaynak veri
tabanı uygulamasıdır. Aşağıda bir MySQL sunucusuna bağlantı açmak için yazılan
örnek bir kod verilmiştir.
Web sunucuları web
sayfasına ait içeriklerin
alınması, işlenmesi ve
nasıl sunulacağı ile • mysql_connect(
Örnek

ilgilenmektedir. string $sunucu = ini_get("mysql.default_host"),


string $kullanici = ini_get("mysql.default_user"),
string $parola = ini_get("mysql.default_password"),
bool $yeni_bağlantı = false,
int $istemci_seçenekleri = 0
): resource|false

PostgreSQL,
Güçlü, dayanıklı, yüksek performanslı ve ölçeklenebilir bir ilişkisel veri
tabanı yönetim sistemidir. PostgreSQL, SQL temeline dayanmakta olup açık kaynak
kodlu ücretsiz bir yazılımdır. Windows, Linux ve macOS işletim sistemleri desteği
bulunmaktadır. PostgreSQL, farklı tiplerde çeşitli veri tiplerini destekleme, veri
bütünlüğünü sağlama, eşzamanlılık hizmeti, veri güvenilirliği, olağanüstü
durumların üstesinden gelebilme, güvenlik sağlama, genişletilebilirlik ve metin
arama özelliklerine sahiptir.

SQL Server
Microsoft tarafından geliştirilmiş, windows tabanlı sunucu sistemlerinde
tercih edilen veri tabanı yönetim sistemidir. ASP.NET temelli web sayfalarıyla
uyumlu çalışmakta olup diğer web geliştirme dilleri ile de uyumlu bir şekilde
çalışmaktadır. İlişkisel bir veri tabanı olan SQL Server ile indeksleme, sorgulama ve
veri işleme ve raporlama işlemleri yapılabilmektedir. Güvenlik, ölçeklenebilirlik ve
güvenilirlik özelliklerini hem yerel sunucularda hem de bulut üzerinde
sağlamaktadır.

Web Sunucu Yazılımları


Web sunucusu, web sayfalarına ait bilgileri depolama, işleme ve
kullanıcılara web sayfasının içeriğini sunma görevinde bulunmaktadır. İnternet
ağına bağlı bulunan web sunucuları, çeşitli sunucu yazılımlarıyla hizmet
vermektedirler. Web sunucu yazılımları, herhangi bir kullanıcının içeriklere ne tür
bir erişim sağlayacağı kısmı ile ilgilenmektedir.
Web sunucu yazılımları ile bir kullanıcı web tarayıcı adres çubuğuna gideceği
web adresini yazdığında ilk önce DNS (Domain Name Server) aracılığıyla gidilecek
web sayfasının IP adresi tespit edilir. Daha sonra IP eşleşmesiyle web sunucusu
HTTP ile bu isteği işler ve kullanıcıya web sayfasının içeriği sunulur. Çok sayıda web

Atatürk Üniversitesi Açıköğretim Fakültesi 12


35
Web Programlama Araçları ve Dinamik Web

sunucu yazılımı olmakla beraber popüler web sunucu yazılımları olarak Apache, IIS
ve NGINX örnek verilebilir.

Apache HTTP Server


Windows ve UNIX işletim sistemleri desteği bulunan Apache Server, en çok
tercih edilen web sunucu yazılımlarından biridir. Apache yazılım kuruluşu
tarafından desteklenen sunucu yazılımı, mevcut HTTP standartlarını HTTP
servisleri aracılığıyla sağlayıp etkin, güvenli ve genişletilebilir bir sunucu yazılım
hizmeti sunmayı amaçlamaktadır. Kullanıcı isteklerine bağlı olarak sunucular
şekillendirilmektedir. Apache HTTP Server açık kaynak web sunucu yazılımı olup
ücretsiz olarak hizmet vermektedir.

Internet Information Server (IIS)


Windows platformlarında kullanılan bir web sunucu yazılımıdır. Microsoft
tarafından geliştirilmiş olup, internet bilgi servisleri olarak ifade edilmektedir. Web
ortamında esnek, güvenli ve yönetilebilir bir web hizmeti sunmaktadır.
Kullanıcılardan FTP, HTTP, HTTPS ve SMTP gibi protokollerle gelen istekleri
karşılama ve yanıtlama hizmetlerini gerçekleştirmektedir. Web geliştiricilerinin
ASP ve ASP.NET ile geliştirdikleri web sayfalarına ait içerikler, IIS yazılımları
bulunan sunucular üzerinde yer alıp çalışmaktadır.

NGINX
Günümüzde 400 milyondan fazla web sayfası ya da uygulamasına hizmet
vermekte olan NGINX açık kaynak web sunucu yazılımıdır. Rus yazılımcı Igor
Sysoev tarafından geliştirilmiş olan sunucu yazılımı, düşük kaynak kullanımı ve
ölçeklenebilir olmasıyla sunucu yazılımları arasında ön plana çıkmaktadır. Ters
vekil sunucu, yük dengeleme, ön belleğe alma, otomatik indeksleme işlemleri
dolayısıyla tercih edilebilmektedir.

WEB GELİŞTİRİCİ PROFİLLERİ


Günümüzde gelişen teknolojiler ve iş yüküne bağlı olarak web sayfası ya da
Yapılacak olan işin uygulama geliştiricileri, kullanıcı tarafı ve sunucu tarafı geliştirme ortamları
büyüklüğü ve açısından değerlendirildiğinde; 3 farklı web geliştirici profili bulunmaktadır. Bu
uzmanlığına göre ön profillerden biri, web tasarımını gerçekleştiren yani kullanıcının gördüğü kısımda
yüz geliştiricileri, arka gerçekleştirilen işlemleri yapan ön yüz geliştirici (front-end developer) profili,
yüz geliştiricileri ve tam diğeri kullanıcının göremediği arka plandaki işlemleri gerçekleştiren arka yüz
yığın geliştiricileri olmak geliştiricisi (back-end developer) profilidir. Ayrıca üçüncü bir geliştirici profili ise
üzere üç web geliştirici hem ön yüz geliştirme hem de arka yüz geliştirme özelliklerine sahip olan ve bu
profili bulunmaktadır. işlemleri gerçekleştiren tam yığın geliştirici (full stack developer) profilidir.
Büyük ölçekli projelerde ön yüz geliştirici ile arka yüz geliştirici profilleri iki
farklı çalışma yönüyle birbirinden ayrılırlar. Bu tür projelerde kullanıcıya doğrudan
hitap eden web tasarımında yapılacak işlerin yoğunluğundan dolayı ve uzmanlık
seviyesinden dolayı ön yüz geliştirme tasarımcıları sadece web tasarımı kısmında
yer almaktadırlar. Büyük ölçekli projelerin arka kısmında yoğun web programlama
ve veri tabanı işlemleri de olduğu için arka yüz web geliştirmeyi arka yüz geliştirme

Atatürk Üniversitesi Açıköğretim Fakültesi 13


36
Web Programlama Araçları ve Dinamik Web

uzmanı kişi ya da kişiler gerçekleştirmektedir. Üçüncü bir profil olarak küçük ve


orta ölçekli bazı web sayfası ya da uygulaması geliştirme projelerinde ise; hem ön
yüz geliştirme hem de arka yüz geliştirme sürecini, tam yığın geliştiricisinin
gerçekleştirmesi mümkün olabilmektedir.

Web Geliştirici
Profilleri

Ön Yüz Geliştiricisi Arka Yüz Geliştiricisi Tam Yığın Geliştiricisi


(Front-End Developer) (Back-End Developer) (Full Stack Developer)

Şekil 2.3. Web Geliştirici Profilleri


Bireysel Etkinlik

• Sadece HTML ve CSS kullanarak basit bir sayfa tasarımı yapınız.

Atatürk Üniversitesi Açıköğretim Fakültesi 14


37
Web Programlama Araçları ve Dinamik Web

•WEB PROGRAMLAMA
•Web içerikleri, dünya çapında ağda (WWW) yer alan ses, metin, resim, video
vb. içeriklerden oluşmaktadır. Web’in ilk başladığı dönemler olan Web 1.0
döneminde sadece statik içerikler bulunmaktaydı. Web 2.0 dönemine geçiş
ile beraber dinamik içerikler web dünyasında kendisine yer bulmuştur. Bu
dönemde web içerikleri oldukça zenginleşmiştir. Web tasarımı ara
yüzlerindeki teknolojiler gelişerek; istemci tarafı yeni teknolojiler web
Özet
dünyasında yer edinmiştir. Dinamik içerikler ile beraber sunucu tarafında da
birçok yeni dil ve araç geliştirilmiş ve daha faydalı, hızlı ve etkin web
programlama teknolojilerinin kullanımı ile giderek daha zengin ve ihtiyaçlara
cevap veren web içerikleri oluşturulmuştur.
•ÖN YÜZ WEB GELİŞTİRME
•Ön yüz geliştirme kullanıcılar tarafından görülen web sayfası ara yüzlerinin
tasarımından oluşmaktadır. İstemci tarafında görülen bu değişiklikler için; ön
yüz geliştirme dilleri tercih edilmektedir. Ön yüz geliştirme amacıyla birçok
web geliştirme ortamı bulunmaktadır. Bu geliştirme ortamlarıyla daha hızlı,
etkin ve pratik çözümler sunulmaktadır.
•Ön Yüz Web Geliştirme Dilleri: Ön yüz geliştirme dilleri, istemci tarafında
yazılabilen betik dillerden oluşmaktadır. HTML, CSS ve JavaScript temel ön
yüz geliştirme dillerindendir. Ayrıca bu dilleri temel alan bazı diller de
geliştirilmiştir.
•Ön Yüz Web Geliştirme Ortamları: İstemci tarafında web sayfalarının
kullanıcılar tarafından daha fazla ilgi çekici olması amacıyla pratik ve
kullanışlı web tasarım araçları geliştirilmiştir. Ücretli ve ücretsiz sürümleri
bulunan bu yazılımlar özel gereksinimlere bağlı olarak birbirlerine karşı çeşitli
üstünlükleriyle yazılım dünyasında yer edinmektedirler.
•ARKA YÜZ WEB GELİŞTİRME
•Web sayfalarının kullanıcı tarafından görünmediği sunucu tarafında
geliştiriciler tarafından yapılan işlemler ve kullanılan hizmetleri ifade
etmektedir. Dinamik bir işleyişin olduğu bu bölümde, web programlama
dilleri, sunucu tarafı web geliştirme ortamları, veri tabanları ve sunucu
yazılımları, sunucu tarafı geliştirmenin önemli bileşenleridir.
•Arka Yüz Web Geliştirme Dilleri ve Dil Ortamları: Dinamik web içerikleri
oluşturmada en sık tercih edilen programlama dil ve dil ortamları, ASP.NET,
PHP, Java ve Python olarak karşımıza çıkmaktadır.
•Arka Yüz Web Geliştirme Ortamları: Günümüzde geliştirilmiş olan web
programlama dilleri ile beraber bu dilleri destekleyen ve desteklenen
programlama dillerinde kodlama kolaylığı ve etkinliği sağlayan sunucu tarafı
web geliştirme ortamları bulunmaktadır.
•Arka Yüz Web Geliştirme Veri Tabanları: Sunucu tarafında oluşturulmuş
olan dinamik içerikler çeşitli veri tabanlarında saklanmaktadır. Bu veri
tabanlarında bulunan içerikler sayesinde kullanıcılarla etkileşimler
sağlanmaktadır. Veri tabanlarındaki içeriklere ekleme, silme ve güncelleme
işlemi yapılabilmektedir.
•Web Sunucu Yazılımları: Web sayfası ya da uygulamasına ait tüm içerikler
bir web sunucusunda tutulurlar. Kullanıcıların bu içeriklere hızlı ve güvenli
şekilde erişiminden web sunucu yazılımları sorumludur. Web sunucu
yazılımlarında dilsel ve işletim sistemlerine bağlı olarak çeşitli bağımlılıklar
olabilmektedir.
•WEB GELİŞTİRİCİ PROFİLLERİ
•Web sayfası ya da uygulaması geliştirmede gelişen teknolojiler ve ihtiyaçlar
ile içeriklerin zenginleşmesi sonucunda web geliştirici profilleri de
uzmanlıklarına göre farklılıklar gösterebilmektedir. İşin büyüklüğüne ve
uzmanlığına bağlı olarak ön yüz geliştiricisi, arka yüz geliştiricisi ve tam yığın
geliştiricisi olmak üzere çeşitli geliştirici profilleri ortaya çıkmıştır.

Atatürk Üniversitesi Açıköğretim Fakültesi 15


38
Web Programlama Araçları ve Dinamik Web

DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi istemci taraflı bir betik dildir?
a) HTML
b) ASP.NET
c) PHP
d) Python
e) ASP

2. Web geliştirmenin sunucu tarafında iş yapan geliştiricilere ne ad


verilmektedir?
a) Ön yüz geliştiricisi
b) Arka yüz geliştiricisi
c) Tam yığın geliştiricisi
d) Betik dil geliştiricisi
e) HTML ve CSS kodlayıcı

3. Aşağıdakilerden hangisi ön yüz web geliştirme tarafında yapılan


işlemlerden biri değildir?
a) Yerel bilgisayarda çalıştırılır.
b) Veri güvenliği sağlanmaz.
c) HTML, CSS ve JavaScript dilleri kullanılır.
d) Statik içerikler sunulur.
e) Veri tabanı etkileşimi, web sunucularından bilgi alınır.

4. Aşağıdakilerden hangisi ön yüz web geliştirmede kullanılan web geliştirme


dillerinden biri değildir?
a) HTML
b) CSS
c) JQuery
d) PHP
e) Sass

5. Aşağıdakilerden hangisi ön yüz web geliştirme ortamlarından biridir?


a) Django
b) Sublime Text
c) Node.js
d) Laravel
e) Java EE

Atatürk Üniversitesi Açıköğretim Fakültesi 16


39
Web Programlama Araçları ve Dinamik Web

6. Aşağıdaki hangisi arka yüz web geliştirmede kullanılan veri tabanı yönetim
sistemlerinden biri değildir?
a) PostgreSQL
b) SQL Server
c) MySQL
d) jQuery
e) MongoDB

7. Web sunucu yazılımlarının görevi nedir?


a) Programlama dili geliştirmek
b) İstemci tarafında HTML dili geliştirmek
c) Web sayfası stillerini iyileştirmek
d) Web ara yüzlerini iyileştirmek
e) Web sayfalarına ait bilgileri depolamak, işlemek ve bu bilgileri
kullanıcılara sunmak

8. Aşağıdakilerden hangisi ASP’nin açılımıdır?


a) Active Server Programming
b) Active Stil Programming
c) Active Server Pages
d) Access Server Pages
e) Access Server Programming

9. ASP.NET dil ortamında yazılan kodlar hangi dosya uzantısı ile


kaydedilmektedir?
a) .asp
b) .asr
c) .aspx
d) .net
e) .aspnet

10. Aşağıdakilerden hangisi istemci tarafında kullanılan bir web geliştirme


ortamı değildir?
a) Bootstrap
b) MySQL
c) Angular.JS
d) Sketch
e) Sublime Text

Cevap Anahtarı
1.a, 2.b, 3.e, 4.d, 5.b, 6.d, 7.e, 8.c, 9.c, 10.b

Atatürk Üniversitesi Açıköğretim Fakültesi 17


40
Web Programlama Araçları ve Dinamik Web

YARARLANILAN KAYNAKLAR
Angular.JS 7 Ocak 2022 tarihinde https://angularjs.org/ adresinden erişildi.
Apache HTTP Server. 11 Ocak 2022 tarihinde https://httpd.apache.org/
adresinden erişildi.
ASP.NET. 17 Ocak 2022 tarihinde https://dotnet.microsoft.com/en-
us/apps/aspnet adresinden erişildi.
ASP.NET Core. 11 Ocak 2022 tarihinde https://docs.microsoft.com/tr-
tr/aspnet/core/introduction-to-aspnet-core?view=aspnetcore-6.0
adresinden erişildi.
Bootstrap. 15 Ocak 2022 tarihinde https://getbootstrap.com/ adresinden erişildi.
Chrome DevTools. 10 Ocak 2022 tarihinde
https://developer.chrome.com/docs/devtools/ adresinden erişildi.
CodePen. 7 Ocak 2022 tarihinde https://codepen.io/ adresinden erişildi.
Dean, J. (2017). Web Programming with HTML5, CSS, and JavaScript.
Massachusetts, ABD Jones & Bartlett Learning
Django. 11 Ocak 2022 tarihinde https://www.djangoproject.com/ adresinden
erişildi.
GitHub. 8 Ocak 2022 tarihinde https://github.com/ adresinden erişildi.
IIS. 12 Ocak 2022 tarihinde https://www.iis.net/ adresinden erişildi.
İnternet Teknolojileri. 1 Ocak 2022 tarihinde
https://www.tutorialspoint.com/internet_technologies/web_pages.htm
adresinden erişildi.
Java EE. 19 Ocak 2022 tarihinde
https://www.oracle.com/tr/java/technologies/java-ee-glance.html
adresinden erişildi.
JQuery. 5 Ocak 2022 tarihinde https://www.jquery.com/ adresinden erişildi.
Laravel. 12 Ocak 2022 tarihinde https://laravel.com/ adresinden erişildi.
MongoDB. 21 Ocak 2022 tarihinde https://www.mongodb.com/ adresinden
erişildi.
MySQL. 11 Ocak 2022 tarihinde https://www.mysql.com/ adresinden erişildi.
NGINX. 10 Ocak 2022 tarihinde https://www.nginx.com/ adresinden erişildi.
Node.JS 19 Ocak 2022 tarihinde https://nodejs.org/ adresinden erişildi.
PHP. 13 Ocak 2022 tarihinde https://www.php.net/ adresinden erişildi.
PostgreSQL. 11 Ocak 2022 tarihinde https://www.postgresql.org/ adresinden
erişildi.
Sass. 12 Ocak 2022 tarihinde https://sass-lang.com/ adresinden erişildi.

Atatürk Üniversitesi Açıköğretim Fakültesi 18


41
Web Programlama Araçları ve Dinamik Web

Sketch. 5 Ocak 2022 tarihinde https://www.sketch.com/ adresinden erişildi.


Sublime Text. 3 Ocak 2022 tarihinde https://www.sublimetext.com/ adresinden
erişildi.
Vishal, K. (2011). Modern Web Proogramming Tools and Techniques – I. Yeni Delhi
(Hindistan): Excel Books Private Limited.

Atatürk Üniversitesi Açıköğretim Fakültesi 19


42
ASP

• ASP Nedir?
• ASP Nesneleri
İÇİNDEKİLER

• ASP Betik Dilleri İNTERNET


• ASP ile Web Programlama
• ASP'de Veri Tabanı İşlemleri PROGRAMCILIĞI II
Dr. Öğr. Üyesi Mahmut
KAYA

• Bu üniteyi çalıştıktan sonra;


• ASP Dil ortamını tanıyabilecek,
HEDEFLER

• ASP dosya yapısını bilecek ve


nasıl çalıştığını öğrenebilecek,
• ASP nesnelerini tanıyabilecek,
• ASP ile temel web
programlamayı öğrenebilecek,
• ASP'de veri tabanı kavramını
açıklayabileceksiniz.

ÜNİTE

3
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP

ASP Dosya Yapısı

ASP Sürümleri
ASP Nedir?
ASP Nasıl Çalışır?

IIS ve localhost bağlantısı

ASP Nesneleri

VBScript

JavaScript
ASP Betik Dilleri
PerlScript

Python
ASP

ASP'de Değişkenler

ASP'de Koşul İfadeleri


ASP ile Web
Programlama
ASP'de Döngüler

ASP'de Prosedürler

ASP'de
Veri Tabanı İşlemleri

Atatürk Üniversitesi Açıköğretim Fakültesi 2


44
ASP

GİRİŞ
Web 1.0 dönemi statik içeriklerin etkin olduğu dönemdir. Statik içerikler
istemci taraflı uygulamalar olup kullanıcı etkileşimi bulunmamaktadır. Dinamik
bilgi içeren web sayfaları ise internet ağının amacına ve hedeflerine daha uygun
bir yapıdır. Dinamik içerikler bilginin üretimi ve paylaşımını hedefleyen internet ağ
yapısının gelişimine çok olumlu katkılar sunmuştur. Bu tür dinamik içeriklere olan
talep ve ihtiyaçtan dolayı, sunucu taraflı geliştirilen dinamik web sayfası içerikleri
oluşturulmaya başlanmıştır.
Asp dilinin ortaya çıkışı ile beraber, kullanıcılar ile etkileşimin olduğu yeni bir
döneme geçiş yapılmıştır. Bu dönem, dinamik verilerin veri tabanında saklandığı,
işlendiği ve sunulduğu yeni bir dönem olmuştur. Asp ve benzeri teknolojilerin
ortaya çıkışı ile kullanıcıların web teknolojilerini kullanımı daha fazla artmış ve
internet ağından maksimum fayda sağlanmaya başlanmıştır.
IIS 4.0 (Internet Information Server) sürümünün ortaya çıkmasıyla beraber
ASP’de de çeşitli güncellemeler yapılmıştır. Günümüzde kullanımı devam eden
temel ASP nesneleri bu yeni güncellemeler ile gelmiştir. ASP yapısal olarak, nesne
modellerini içeren bir komut dosyası teknolojisidir. Temel ASP nesneleri Request,
Application, Response, ASPError, Session ve Server nesneleridir. ASP’de
başlangıçta VBScript betik dili tercih edilirken günümüzde JavaScript, PerlScript ve
Python dilleri de kullanılmaya başlanmıştır.
Her dilin kendi yapısında bulunan bazı temel öğeler bulunmaktadır. Bu
bölüm içerisinde ASP ile web programlaması yapılırken kullanılan bazı temel
öğelere yer verilmiştir. Bu temel öğeler anlatılırken ASP’de en çok tercih edilen
dillerden biri olan VBScript tercih edilmiştir. Temel öğeler olarak değişkenler, koşul
ifadeleri, döngüler ve prosedürler konularına yer verilmiştir.
ASP, sunucu tarafında betik dillerin kullanıldığı bir web geliştirme ortamıdır.
Bu dil ortamında kullanıcı etkileşimleri için web sayfalarında dinamik içerikler
kullanılmaktadır. Dinamik içerikleri oluşturmak, işlemek ve sunmak için veri
tabanlarından yararlanılmaktadır. ASP ile veri tabanlarında bu tür işlemleri
gerçekleştirmek için Microsoft tarafından geliştirilen ADO (ActiveX Data Objects)
nesneleri kullanılmaktadır. ADO teknolojisi ile hızlı, kolay ve güvenli veri tabanı
bağlantıları yapılmaktadır.

ASP (ACTIVE SERVER PAGES) NEDİR?


Kısaltması ASP olan “Active Server Pages”, Türkçe kelime karşılığı olarak
“Aktif Sunucu Sayfaları” anlamına gelmektedir. ASP’yi basit bir tanım olarak ifade
ASP
etmemiz gerekirse; sunucu tarafında çalışan dinamik web sayfaları olarak ifade
“Active Server Pages”
etmemiz mümkündür. Microsoft tarafından IIS 3.0’ın (Internet Information Server)
kelimelerinin
geliştirilmesiyle beraber 1996 yılında ortaya konulan web teknolojisidir. ASP,
kısaltmasıdır.
sunucu tarafında dinamik içerikleri alıp işleyen bir betik motorunu ifade
etmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 3


45
ASP

ASP, bir programlama dili değildir. Sunucu tarafında betik dilleri çalıştıran
bir teknoloji olan ASP’yi bir dil ortamı olarak ifade etmek daha yerinde bir ifade
olacaktır. ASP web sayfalarında, standart olarak VBScript dili ile JavaScript dili
kullanılmaktadır. Ayrıca yazılım destekleriyle Python ve PerlScript dillerine ait
kodlar da ASP sayfalarına entegre edilebilmektedir. Örnek olarak yazılan aşağıdaki
Asp kodunda, ASP etiketleri “<% %>” arasına “=Date” ifadesini yazdığımızda
sunucu makinede mevcut olan anlık tarih bilgisi değeri, web tarayıcı ekranına
getirilmektedir.
Örnek

•<%= Date %>

ASP geliştirildiği dönem itibariyle birçok önemli avantajı da beraberinde


getirmiştir. Yapısı itibariyle bir programlama dili olmayıp dil ortamı olması, en
büyük avantajlarından biridir. Çünkü ASP dil bağımsız sunucu taraflı bir web
geliştirme ortamıdır. Yani bir ASP web geliştiricisi, sadece tek bir programlama dili
değil, ASP’nin desteklediği çok sayıda betik dil ile kodlama avantajına sahiptir.
Web geliştiricileri, ASP’nin desteklediği VBScript, JavaScript, PerlScript ve Python
dillerini web sayfası geliştirme amacıyla kullanabilmektedirler.
ASP’nin dil bağımsız esnekliği web geliştiricilerine aşina oldukları dillerde
yazım kolaylığı getirmektedir. Bu durum desteklenen dil ortamlarına aşina olan
kişilerin, çok hızlı bir şekilde ASP ile web geliştirme ortamında da yetkin olma
avantajını beraberinde getirmektedir. Böylece programlama becerisi ve temel
HTML bilgisiyle esnek, hızlı ve etkin web sayfaları geliştirmek kullanıcılar açısından
oldukça kolay olacaktır.
ASP dil ortamının sağladığı kullanım kolaylığı ASP’nin bir diğer önemli
avantajıdır. Klasik ASP’de bir sayfa geliştirirken; ASP etiketleri arasına yazılan
kodlar HTML kodları arasına yazılmaktadır. Temel HTML bilgisi ve ASP’nin esnek
yapısıyla yazılacak olan kodlar “.asp” uzantılı dosyalara kaydedilmekte ve yazılan
kodların basit metin düzenleyicilerde düzenlenip, kaydedilme kolaylığı
bulunmaktadır. “.asp” uzantılı web sayfasına ait dosyaların yayınlanacağı klasör
dizinine yerleştirilmesi, yazılan kodların sunucu tarafında çalıştırılabilmesi için
yeterli olacaktır.
ASP ve benzeri teknolojiler sayesinde Web 1.0 döneminden Web 2.0
dönemine bir geçiş yaşanmıştır. Yeni bir web dönemine geçişin olmasını sağlayan
ASP’nin temel özellikleri şunlardır:
 ASP kullanıcıların etkileşimde bulabileceği dinamik içeriklerin bulunduğu
web sayfası geliştirme ortamıdır.
 Dil bağımsız yapısı sayesinde, birçok betik dilde yazılan kodlar ASP
içerisinde çalıştırılabilmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 4


46
ASP

 ASP sunucu taraflı bir dil ortamı olup yazılan kodlar ve kullanıcıdan gelen
istekler sunucu tarafında işlenerek web tarayıcısına HTML çıktısı olarak
iletilir ve web tarayıcı istemci tarafında HTML içeriğini okuyup tarayıcı
ekranına yansıtır.
 Sunucu tarafında ASP dosyalarını çalıştırmak için ASP motorundan
yararlanılmaktadır.
 Kullanıcı etkileşimlerini gerçekleştirmek için veri tabanı bağlantısı
gerçekleştirilir ve veri tabanlarında bulunan kullanıcı bilgileri ya da web
sayfası içerikleri statik olmayıp güncellenebilmektedir.

ASP Dosya Yapısı


ASP dosya yapısı itibariyle, hem sunucu tarafı komut dosyası hem de
standart HTML'ye gömülü olarak istemci taraflı komut dosyası kodu içerme
avantajına sahiptir. ASP dosya yapısı içerisinde, Şekil 3.1’de görüldüğü üzere HTML
ve CSS gibi istemci taraflı diller ve betik bir dile ait kodlar bulunmaktadır. Betik dil
olarak ASP’de standart olarak VBScript tercih edilmekle beraber JavaScript’te
ASP dosya yapısı sıklıkla tercih edilebilmektedir.
içerisinde HTML, CSS ve
sunucu taraflı betik
dillerden oluşmaktadır.
Betik Dil
VBScript
HTML
+ JavaScript
CSS
PerlScript
Python

Şekil 3.1. ASP Dosya Yapısı

ASP dosyaları içerisinde HTML kodlarına ait bölümü incelediğimizde, web


sayfasına ait istemci tarafında bulunan sayfa düzeni, yazı tipleri, metin içerikleri,
görsel öğeler gibi statik içerik ve bilgiler bulunmaktadır. Web sayfaları ya da web
uygulamalarında kullanıcılara dinamik içerikler sunmak ve kullanıcılarla
etkileşimde bulunmak için; betik dillere ait çeşitli sunucu taraflı kodlar
bulunmaktadır. ASP dosyası içerisinde bulunan betik dillere ait kodlar HTML
kodları içerisinde yer almaktadır. Betik diline ait kodlar ASP etiketleri olan “<% ve
%>” ifadeleri arasına yazılmaktadır. Aşağıdaki basit ASP dosyasına ait kodlarda
HTML kodları ve ASP dil ortamında bulunan “response” nesnesine ait kod satırı
görülmektedir. Örnek 3.1’de yazılan kod ile “response” nesnesi kullanılarak
tarayıcı ekranında “Atatürk Üniversitesi” ifadesi yazılmaktadır.

Atatürk Üniversitesi Açıköğretim Fakültesi 5


47
ASP

Kod Ekran Çıktısı


<!DOCTYPE html> Atatürk Üniversitesi
<html>
<body>

<%
response.write("Atatürk Üniversitesi")
%>

</body>
</html>

Örnek 3.1. ASP Örnek

ASP Sürümleri
Günümüzde, 2000 yılında geliştirilmiş olan ASP 3.0 sürümü kullanılmaktadır.
Microsoft tarafından .NET mimarisinin geliştirilmesiyle popülerliği azalsa da hala
günümüzde web uygulamaları geliştirmede yaygın bir şekilde kullanılmaktadır.
Kronolojik olarak ASP sürümlerini inceleyecek olursak;
Günümüzde ASP 3.0  İlk olarak IIS 3.0’ın geliştirilmesiyle, ASP 1.0 dinamik içerikli web sayfaları
sürümü oluşturmak için piyasaya sürülmüştür.
kullanılmaktadır.  IIS 4.0’ın ortaya çıkışıyla birlikte, 1997 yılında ASP 2.0 sürümü ile ASP 1.0
sürümüne yeni özellikler eklemiştir. ASP 2.0 ile altı yeni nesne gelmiştir.
Bu nesneler Response, Request, Application, Session, ASPError ve Server
nesneleridir.
 2000 yılına gelindiğinde, IIS 5.0 Microsoft tarafından sunulmuştur.
Bununla beraber, ASP 3.0 sürümü de piyasaya sürülmüştür. 2000 yılından
bu yana ASP 3.0 web sayfası geliştirme teknolojisi kullanılmaktadır.
ASP 3.0 ile yeni gelen veya güncellenen bazı temel özellikler şunlardır:
sunucu tarafı betik içermeyen “.asp" uzantılı dosyalar, yeni akış kontrol
yetenekleri, hata işleme ve yeni ASPError nesnesi, kodlanmış ASP betikleri, sunucu
betikleri, performansı arttırılmış aktif sunucu bileşenleri ve yapılan performans
iyileştirmeleridir.

ASP Nasıl Çalışır?


HTML istemci taraflı bir dil olup, HTML dilinde yazılan kodlar istemci
tarafında işlenerek kullanıcıya sunulmaktadır. Sunucu tarafında çalışan diller ve dil
ortamları ise, yazılan kodları ve kullanıcıdan gelen istekleri istemci tarafında alıp
sunucu tarafında işlemektedirler. Sunucu tarafında işlenen veriler, daha sonra
istemci tarafına iletilip kullanıcıya sunulmaktadır.
ASP dosyaları sunucu tarafında işlem görmektedirler. ASP dosyaları
içerisinde, istemci tarafında çalışan HTML kodlar ile sunucu tarafında çalışan ASP
dil ortamının desteklediği betik dillere ait kodlar bulunmaktadır. ASP dil ortamına
özgü kodların çalıştırılması için; sunucu tarafında gelen istekler karşılanmakta ve
kullanıcı etkileşimi amacıyla veri tabanı işlemleri gerçekleştirilmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 6


48
ASP

Sunucu tarafında ASP dosyalarını işlemek için ASP motoru kullanılmaktadır.


Şekil 3.2’de bir ASP sayfasının nasıl işlendiği görülmektedir. Görselde de görüldüğü
üzere herhangi bir kullanıcı ASP dil ortamında yazılmış web sayfasına giriş
yaptığında, gelen web sayfası isteği öncelikle web sunucusu tarafındaki web
sunucu yazılımlarına iletilmektedir. Web sunucu yazılımlarından biri olan IIS, gelen
isteğe bakarak bunun bir ASP dosyası olduğunu ASP motoruna iletmektedir. ASP
motoru kodları satır satır işleyip çalıştırmaktadır. Gelen isteğe bağlı olarak veri
tabanı işlemleri de bu aşamada gerçekleştirilmektedir. Daha sonra web sayfasına
ait işlenen bu öğeler, bir HTML çıktısına dönüştürülmektedir. Son aşamada web
tarayıcısı, istemci tarafında HTML çıktı sayfasını okuyarak kullanıcıya sunmaktadır.
Web Sunucusu

Web İstek
Sayfa İşleme
ASP ASP Sayfası
Motoru (*.asp)

HTML Çıktı Sayfası

Şekil 3.2. ASP Dosyalarının Çalıştırılması

IIS bağlantısı ve localhost


ASP dinamik içerikli web sayfaları oluşturmakta ve IIS ile birlikte
çalışmaktadır. Microsoft firması tarafından geliştirilen tüm Windows işletim
sistemlerinde IIS desteği bulunmaktadır. ASP uzantılı sayfalar, yerel bilgisayarlarda
veya sunucu taraflı bilgisayarlarda çalışabilmektedir. Bunu gerçekleştirebilmek
için; sunucu taraflı web yönetim yazılımlarından biri olan IIS yazılımına ihtiyaç
bulunmaktadır.
Kullanıcılar Windows işletim sistemi ayarlarından IIS hizmetini aktif ettiği
andan itibaren IIS kullanımı mümkün olmaktadır. IIS’in kurulumunun
tamamlanmasıyla oluşturulacak klasöre “.asp” uzantılı web dosyaları
yerleştirilerek bu sayfaların çalıştırılması için; sadece bir web tarayıcısına ihtiyaç
duyulmaktadır. Oluşturulan klasörde “ornek.asp” uzantılı bir web sayfası
olduğunu düşünürsek; bu web sayfasını yerel bilgisayarlarda çalıştırmak için
aşağıdaki örnekte olduğu gibi tarayıcının adres satırına
“http://localhost/ornek.asp” bilgisinin yazılması yeterli olacaktır.

127.0.0.1 IP adresi, özel


amaçlı bir IPv4 adresidir
ve localhost veya
Örnek

loopback adresi olarak •localhost/ornek.asp


da adlandırılır. •127.0.0.1/ornek.asp

Atatürk Üniversitesi Açıköğretim Fakültesi 7


49
ASP

Yukarıdaki örnekte görüldüğü üzere ASP dosyası “localhost” içerisinde yer


almaktadır. “localhost”, yerel bilgisayarı tanımlayan loopback addresss olarak da
bilinen addır. IIS ile localhost birlikte çalışarak yerel bilgisayarlarda geliştiriciler
tarafından kodların çalıştırılması sağlanmaktadır. Yerel makinenin tarayıcı kısmına
“localhost” yazmanın dışında doğrudan IP adresi yazılarak da erişim
sağlanabilmektedir. 127.0.0.1 IP adresi, özel amaçlı bir IPv4 adresidir ve localhost
veya loopback adresi olarak da adlandırılır.

ASP NESNELERİ
IIS 4.0 sürümünün ortaya çıkışıyla beraber; ASP 2.0 sürümü de piyasaya
sürülmüştür. Bu yeni ASP sürümünde, günümüzde de sıklıkla kullanılan bazı temel
ASP nesneleri ortaya çıkmıştır. ASP bu tür nesne modellerini içeren bir komut
dosyası teknolojisidir. Temel ASP nesneleri olarak Request, Application, Response,
ASPError, Session ve Server nesneleri karşımıza çıkmaktadır.

Request
Request nesnesi ile kullanıcı tarayıcıdan bir HTTP isteği gönderdiğinde,
tarayıcı tarafından sunucuya gönderilen bilgiler alınmaktadır. İstemci sunucudan
herhangi bir sayfa için bir istekte bulunmak istediğinde, Request nesnesinden
yararlanılmaktadır. Örnek 3.2’de Request nesnesi için örnek bir kod
bulunmaktadır.
Kod Ekran Çıktısı
<% Üniversitemiz Atatürk
response.Cookies("site")="Atatürk Üniversitesi" Üniversitesi
siteisim=Request.Cookies("site")
response.write("Üniversitemiz " & siteisim)
%>
Örnek 3.2. Request Örnek

Application
Application nesnesi, sunucu tarafında global değişkenleri depolamak için
kullanılan bir nesnedir. Bu nesne ile IIS sunucusunun çalıştığı süre boyunca mevcut
olan bilgiler kayıt altında tutulabilir. Örneğin bir web sayfasına sayaç bilgisi
eklenerek; web sayfasına erişim sağlayan kullanıcı sayılarına ait bilgi
hesaplanabilir.
Örnek 3.3’te bir sayaç uygulaması örneği verilmektedir. Uygulama nesnesi
ile ASP etiketleri arasında sayaç değişkeni her giriş yapıldığında 1 kez
arttırılmaktadır. Metin içerisindeki ifade de kayıt altına alınan ziyaret sayısı değeri
sunulmaktadır. Örnek 3.3’te oluşturduğunuz kodun bulunduğu ASP sayfasını
tarayıcıda “14” kez çalıştırdığınızda sağ taraftaki sonuç tarayıcı ekranında
görüntülenmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 8


50
ASP

Kod Ekran Çıktısı


<% Bu web sayfası 14 kez
Application("sayac")=Application("sayac")+1 ziyaret edilmiştir.
%>

Bu web sayfası <%= Application("sayac")%> kez


ziyaret edilmiştir.

Örnek 3.3. Application Örnek

Response
Kullanıcıya bilgi göndermek için kullanılan bir nesnedir. Kullanıcı bir ASP
sayfasına giriş yapmak istediğinde istekler önce sunucuya iletilir. Response nesnesi
Response nesnesi, ile sunucu tarafında bulunan bilgiler web tarayıcıya iletilmektedir. Sayfada
en çok kullanılan bulunan bir metin içeriği ya da web sayfasına ait çerez bilgileri Response nesnesi
nesnelerden olup bilgi ile iletilmektedir. Örnek 3.4’te “Atatürk Üniversitesi” metnini ekrana yazmak için
gönderme amacıyla kullanılan bir Response nesneyi örneği görülmektedir.
kullanılmaktadır.
Kod Ekran Çıktısı
<% Atatürk Üniversitesi
response.write("Atatürk Üniversitesi")
%>

Örnek 3.4. Response Örnek

ASPError
ASPError nesnesi, hataların yönetimi ile ilgilenen nesnedir. Bu nesne ile ASP
sayfalarında oluşan herhangi bir hataya ait ayrıntılı bilgiler kullanıcılara
sunulmaktadır. ASP dosyaları sunucu tarafında işlenirken; üç türlü hata durumu
olabilmektedir. Bu hatalar, derleme zamanı hataları, çalışma zamanı hataları ve
mantıksal hata türleridir. Bu tür hataların olduğu durumlarda, sunucu tarafında
işlenen kodlara ait hata bilgileri tarayıcıya iletildikten sonra kullanıcılara
sunulmaktadır.

Session
Session nesnesi, herhangi bir kullanıcıya ait oturum bilgilerini saklamak
amacıyla kullanılmaktadır. Özellikle kullanıcının sayfalar arasında gezinti yaptığı
durumlarda, kullanıcı bilgisinin kayıt altında tutulması gerekmektedir. Session
nesnesi ile kullanıcının web sayfasına erişimi olduğu süre boyunca, farklı sayfalar
arasında gezinti yapsa bile bilgiler kayıt altında tutulmaktadır. Örnek 3.5’te,
Session nesnesi kullanılarak; her bir kullanıcı için sunucu tarafında oluşturulan
benzersiz bir kimlik bilgisi döndürülmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 9


51
ASP

Kod
<%
response.write(Session.SessionID)
%>

Örnek 3.5. Session Örnek

Server
Sunucu nesnesini kullanılarak sunucuda bulunan yöntem ve özelliklere
erişim sağlanmaktadır. Bu nesne sınırlı bir dizi yardımcı fonksiyonlar içermektedir.
Temelde başvurulan bazı fonksiyonlar ise CreateObject, HTMLEncode, MapPath,
URLEncode ve GetLastError fonksiyonlarıdır.

ASP BETİK DİLLERİ


Betik bir dil herhangi bir programlama dilinde yazılmış ve çalıştırılmaya
hazır kod bloklarına denilmektedir. Betik bir dil ile oluşturulmuş olan bir kod, betik
dil yorumlayıcılarının bulunduğu ortamda çalıştırılırlar. ASP bir programlama dili
ASP’de sunucu taraflı olmayıp; betik dillerinin çalıştırılabildiği sunucu taraflı bir dil ortamıdır. ASP
kodlama için VBScript, standart olarak VBScript kodları ile çalışmaktadır. Ayrıca JavaScript, PerlScript ve
JavaScript, PerlScript ve Python dillerine ait kodlar da ASP dil ortamı tarafından desteklenmektedir.
Python dilleri
VBScript
kullanılmaktadır.
Microsoft tarafından Visual Basic kullanılarak oluşturulan bir betik dildir.
ASP sayfalarında kullanılan standart betik dildir. Basit bir sözdizimi yapısı olup,
öğrenmesi ve uygulaması kolaydır. Nesne tabanlı bir betik dil olup, yazılan kodlar
hem istemci tarafında hem de sunucu tarafında çalışabilme özelliğine sahiptir. Bu
dile ait kodlar HTML içerisinde <script> ve </script> etiketleri arasına
yazılmaktadır.

JavaScript
Netscape firması tarafından geliştirilmiş öğrenmesi kolay bir dildir. Web
sayfalarının davranışlarını programlama amacıyla kullanılmaktadır. Günümüzde
web programcılığında popüler dillerden biri olup, kullanıcılar için dinamik ve
etkileşimli web sayfaları oluşturulmasını sağlamaktadır.

PerlScript
Sözdizim yapısı olarak Perl dili ile benzer bir yapıya sahiptir. ASP
sayfalarında PerlScript dili kullanarak oluşturulan kodları çalıştırmak için
ActiveState firması tarafından hazırlanan PerlScript betik motoruna ihtiyaç
bulunmaktadır.

Python
Python günümüzde web sayfaları oluşturmaktan veri bilimine kadar birçok
alanda başarısını kanıtlamış esnek ve başarılı popüler programlama dilidir. Nesne
yönelimli kodlar yazmak için Python oldukça etkili bir dildir. ASP 2.0 ile gelen COM

Atatürk Üniversitesi Açıköğretim Fakültesi 10


52
ASP

(Component Object Model) betik dil desteği ile dil bağımsız ASP sayfaları
oluşturmak mümkündür. COM'un dilden bağımsız yapısı ve Python dilinin COM
desteğini kullanarak; Python dili ile ASP sayfaları oluşturmak mümkündür. Python
dili kullanılarak oluşturulan ASP web sayfası kodlarını çalıştırmak için Python
ActiveX betik motoruna ihtiyaç bulunmaktadır.

ASP İLE WEB PROGRAMLAMA


ASP bir programlama dili olmayıp, içerisinde farklı betik dillerle kodlamanın
yapılabildiği sunucu taraflı dinamik sayfalar oluşturulabilmesini sağlayan bir dil
ortamıdır. ASP içerisinde VBScript, JavaScript, PerlScript ve Java kodları yazılıp
çalıştırılabilmektedir. VBScript ASP içerisinde standart olarak tercih edilen bir dil
ASP ile sunucu taraflı
olduğu için alt bölümlerde ASP ile yazılan programlama olayları VBScript betik
dinamik web sayfaları
dilindeki sözdizimsel ifadelerle anlatılmıştır. Diğer dillerde de benzer yapılar
oluşturulabilmektedir.
bulunmaktadır.

ASP’de Değişkenler
ASP’de standart olarak kullanılan VBScript dilini ele aldığımızda değişkenler
ayrı ayrı olarak tanımlanıp tek tip olarak ifade edilmiştir. Tanımlanan bir değişken
istenilen tüm tiplerde (sayı, metin vs.) ifade edilebilir. Değişkenin tipi tanımlandığı
anda değil, aldığı değere göre kullanılabilmektedir. ASP’de değişkenler doğrudan
kullanılabilmektedirler. Örnek 3.6’da “Universite” değişkenini Response nesnesiyle
ekrana yazdırmak istediğimizde değişken değeri olan “Atatürk Üniversitesi”
tarayıcıya döndürülüp ekrana yazılacaktır.
Kod Ekran Çıktısı
<% Atatürk Üniversitesi
Universite = "Atatürk Üniversitesi"
response.write(Universite)
%>

Örnek 3.6. Değişken Örnek 1

Değişkenin bir sayı olarak tanımlanması da yine benzer şekilde olup, değer
olarak sayı bilgisinin girilmesi yeterli olacaktır. Örnek 3.7’de bulunan kodu
çalıştırdığımızda ekrana toplama değerinin sonucu olan 8 değeri gelecektir.
Kod Ekran Çıktısı
<% 8
sayi1=3
sayi2=5
response.write(sayi1+sayi2)
%>

ASP’de Dim ifadesiyle


Örnek 3.7. Değişken Örnek 1
çok boyutlu dizi
değişkenleri Değişkenler doğrudan yazıldığı gibi “Dim” ifadesiyle de
tanımlanabilmektedir. tanımlanabilmektedirler. Bunun için değişken değerini atamadan önce, üst satırda
Dim ifadesiyle değişkeni tanımlamak yeterli olacaktır. Dim ifadesi aynı zamanda

Atatürk Üniversitesi Açıköğretim Fakültesi 11


53
ASP

dizi değişkenleri tanımlamak için kullanılmaktadır. Örnek 3.8’de “Dim“ ifadesiyle


“Universite” isimli bir dizi değişken tanımlanmıştır. Response nesnesiyle
“Universite(1)” bilgisini istediğimizde tarayıcı ekranında “Açıköğretim” metni
yazacaktır.
Kod Ekran Çıktısı
<% Açıköğretim
Dim Universite(3)
Universite(0) = "Mühendislik"
Universite(1) = "Açıköğretim"
Universite(2) = "Hukuk"
response.write(Universite(1))
%>

Örnek 3.8. Değişken Örnek 3

ASP’de Koşul İfadeleri


Koşul ifadeleri, alınan değer ya da bilgiye bağlı olarak; program içerisinde
duruma göre işlemler ve bu durumlara göre kod bloklarını çalıştırmak için
kullanılmaktadır. Programlama dillerinde şartlı ifadeler için “if” ve “case” yapıları
tercih edilmektedir. Koşul ifadeleri, bir program parçacığında bir kez çalışan şartlı
programlama yapılarıdır. Şekil 3.3’te görüldüğü üzere; doğru veya yanlış diye ifade
edilen koşul durumlarına göre, bir programda koşul ifadeleri içerisindeki kod bloğu
sadece bir defa çalışmaktadır.

Koşul İfadesi Doğru ise Kod Bloğu

Yanlış İse Kod Bloğu

Şekil 3.3. Koşul İfadesi Örneği

ASP dil ortamında VBScript betik dili için koşul ifadelerinin söz dizimi yapısı,
“if…Then…Else”, “If...Then...ElseIf” ve “Select Case” ifadeleri ile sağlanmaktadır.

if…then…else Koşul İfadesi


Programlama dillerinde koşul ifadeleri için sıklıkla tercih edilen “if” yapısı,
ASP’de de bulunmaktadır. Koşul ifadesi olarak “if… then…else” yapısı için 3 farklı
olasılık durumu söz konusudur.

Atatürk Üniversitesi Açıköğretim Fakültesi 12


54
ASP

 İlk durum, “if…then” koşuludur. Bu durum, koşul sağlanmışsa anlamı


taşımaktadır.
 İkinci durum, “elseif … then” koşuludur. Bu durum, diğer koşulun
sağlanmadığı ve bu durumun sağlandığı koşul ifadesidir.
 Üçüncü durum, “else” koşuludur. Diğer durumlara ait koşulların
sağlanmadığı durumlarda devreye giren koşul ifadesidir.
“if” koşul ifadesi “end if” komutu ile sonlandırılır.
Örnek 3.9 kodunda görüldüğü üzere belirli not aralıklarında öğrencilerin
alacağı notlar hesaplanmaktadır. Öğrenci 50’den küçük bir not alırsa “D”, 50-69
arasında bir not alırsa “C”, 70-84 arası bir not alırsa “B” ve 85-100 arası bir not
alırsa “A” harf notu tarayıcı ekranında görüntülenecektir. Verilen örnekte “sonuç”
değişken değeri “78” olduğundan dolayı “HARF NOTU B” olarak tarayıcı ekranına
ASP’de VBScript yazılacaktır.
kullanılarak, koşul Kod Ekran Çıktısı
ifadeleri için diğer <% HARF NOTU B
dillerde olduğu gibi “if” sonuc = 78
ve “case” yapıları
kullanılmaktadır. if sonuc < 50 then
response.write "HARF NOTU D"
elseif sonuc=> 50 AND sonuc < 70 then
response.write "HARF NOTU C"
elseif sonuc=> 70 AND sonuc < 85 then
response.write "HARF NOTU B"
else
response.write "HARF NOTU A"
end if
%>
Örnek 3.9. if…then...else koşul örneği

If...Then...ElseIf Koşul İfadesi


Programlama dillerinde koşul ifadelerinde sıklıkla tercih edilen “if” yapısının
bir diğer uygulaması daha ASP’de kullanılmaktadır. “if...then…else” yapısı ile
benzer bir çalışma şekli mevcuttur.

Select Case Koşul İfadesi


Programlama dillerinde çok tercih edilen bir diğer koşul ifadesi “Case”
yapılarıdır. ASP dilinde kullanılan VBScript betik dilinde Case yapısı örneği, Örnek
3.10’da verilmiştir. “Fakulte” değeri 2 olduğu için Select Case koşul ifadesinde
ekrana “Açıköğretim seçtiniz.” sonucu yazılmaktadır.

Atatürk Üniversitesi Açıköğretim Fakültesi 13


55
ASP

Kod Ekran Çıktısı


<% Açıköğretim seçtiniz.
Dim Fakulte
Fakulte=2

Select Case Fakulte


Case 1
response.write ("Mühendislik seçtiniz.")
Case 2
response.write ("Açıköğretim seçtiniz.")
Case else
response.write ("Hukuk seçtiniz.")
End Select

%>

Örnek 3.10. Select Case Koşul Örneği

ASP’de Döngüler
Programlama dillerinde belirli koşullar altında çalışan bazı kod bloklarının
tekrarlı bir şekilde çalıştırılması için döngüler kullanılabilir. Bu amaçla kullanılan
döngü ifadeleri, içyapısında bulunan koşul ifadesiyle bir kod bloğunun birden çok
kez çalıştırılması gerektiğini anlayarak çalışmaktadır. Şekil 3.4’te görüldüğü üzere
kod bloğu, koşul ifadesi doğru olduğu sürece çalışmaktadır. Koşul ifadesi yanlış
olduğu durumda program akışına kaldığı yerden devam etmektedir.

Koşul İfadesi Yanlış ise

Tekrar

Doğru ise

Kod Bloğu

Şekil 3.4. Döngü İfadesi Örneği

Programlama dilleri ve betik dillerinde bulunan “for” döngüleri ve “while”


döngülerinin söz dizimi olarak farklı; ancak çalışma şekli aynı olan ifadeler VBScript
betik dilinde de kullanılmaktadır. VBScript betik dilinde döngü ifadeleri için tercih
edilen temel yapılar For...Next Loop, For Each...Next Loop ve Do...Loop
ifadeleridir. Bu yapılara ait örnek bazı uygulamalar aşağıda verilmiştir.

Atatürk Üniversitesi Açıköğretim Fakültesi 14


56
ASP

For...Next Loop
Klasik programlama döngülerinde kullanılan “for” döngüsü ile aynı işlevi
görmektedir. Örnek 3.11’de görüleceği üzere döngü 5 kez çalışmakta ve a
ASP’de döngü ifadeleri değişkeni “0” değerinden “4” değerine kadar sayısal değerler almaktadır. Ekrana
için For...Next Loop, For ise “Sayı” ifadesi ile “a” değişkeninin değerleri yazılmaktadır.
Each...Next Loop ve Kod Ekran Çıktısı
Do…Loop yapıları <% Sayı= 0
kullanılmaktadır. For a=0 To 4 Sayı= 1
response.write("Sayı= " & a &"<br/>") Sayı= 2
Next Sayı= 3
%> Sayı= 4

Örnek 3.11. For...Next Loop Örneği

For Each...Next Loop


Bu döngü türünde Örnek 3.12’de görüldüğü üzere “Fakulte” değişkeninin
boyutu kadar döngü tekrarlanmaktadır. Ekrana yazdırılan “x” değişkeni ise
“Fakulte” dizi değişkeninin 0 indeks değerinden başlayıp 2. indeks ifadesine kadar
dizi değerlerini almaktadır. Sonuç itibariyle her bir satırda indeks değerine bağlı
olarak fakülte isimleri ekrana yazılmaktadır.
Kod Ekran Çıktısı
<% Mühendislik Fakültesi
Dim Fakulte(2) Açıköğretim Fakültesi
Fakulte(0) = "Mühendislik Fakültesi" Hukuk Fakültesi
Fakulte(1) = "Açıköğretim Fakültesi"
Fakulte(2) = "Hukuk Fakültesi"

For Each x In Fakulte


response.write(x & "<br />")
Next
%>

Örnek 3.12. For Each...Next Loop Örneği

Do...Loop
Bu döngü türü diğer programlama dillerinde bulunan while, do…while,
repeat…until döngülerini kapsayan bir döngü türüdür. VBScript dilinde bu döngü
ifadesi, Do While … Loop, Do…Loop While, Do Until…Loop, Do…Loop Until şeklinde
4 farklı yapı içermektedir. Kullanımları ve çalışma şekilleri çok benzer olmakla
birlikte koşul ifadesi doğru olduğu sürece ya da koşul doğru olana kadar çalışmayı
ifade etmektedir. Örnek 3.13 Do While…Loop kod örneğinde i değişkeni 1
değerinden 5 değerine kadar değerler almaktadır.Tarayıcı ekranına “Sayı” metni
ile “i” değişkeninin değeri döngüsel olarak yazılmaktadır. Programda “i”
değişkenin değeri döngü boyunca birer arttırılmaktadır.

Atatürk Üniversitesi Açıköğretim Fakültesi 15


57
ASP

Kod Ekran Çıktısı


<% Sayı: 1
i=1 Sayı: 2
Do While i<=5 Sayı: 3
response.write("Sayı: "&i&"<br/>") Sayı: 4
i=i+1 Sayı: 5
Loop
%>
Örnek 3.13. Do While...Loop Örneği

ASP’de Prosedürler
Bir program yazılırken yazım kolaylığı amacıyla prosedürlerden yararlanılır.
Prosedürler hem programın okunurluğunu arttırmakta hem de tekrarlı şekilde
kullanılan veya çağrılan program parçacıkları için gereksiz yere fazla kod
yazılmasını engellemektedir. Program içerisinde çağrılan prosedürler ile
performans ve okunabilirlik anlamında en uygun kodların yazılması
hedeflenmektedir.
ASP’de geriye değer ASP dil ortamında standart olarak tercih edilen VBScript dilinde iki tür
döndürmeyen prosedür kullanımı bulunmaktadır. Bunlar “Subroutine” ve “Function” olarak ifade
Subroutine ve geriye edilmektedir. Her iki prosedür tipi de parametre alabilmektedir. İki prosedür
değer döndüren arasındaki temel fark ise geriye değer döndürülmesi olayıdır. “Subroutine”
Function olmak üzere prosedüründe geriye değer döndürülmezken, “Function” prosedüründe geriye
iki tane prosedür türü değer döndürülmesi olayı gerçekleşmektedir.
vardır.
Örnek 3.14’te yazılan “Subroutine” örneğinde “hos_geldiniz” isimli bir
prosedür tanımlanmıştır. Bu prosedür “Call” ifadesiyle çağrılmakta ve ekrana
“Response “ nesnesi kullanılarak “Hoş Geldiniz Öğrenciler” ifadesi yazılmaktadır.
Prosedür geriye değer döndürmemektedir.
Kod Ekran Çıktısı
<% Hoş Geldiniz Öğrenciler
Sub hosgeldiniz()
response.write ("Hoş Geldiniz Öğrenciler")
End Sub

Call hosgeldiniz()
%>

Örnek 3.14. Subroutine Örneği

Örnek 3.15’te yazılan “Function” örneğinde “Toplama” isimli bir prosedür


tanımlanmıştır. Bu prosedür, “response” nesnesi içerisinde doğrudan çağrılmakta
ve parametre değerleri olarak “2” ve”3” değerleri verilmektedir. “Toplama”
nesnesi gelen iki değeri toplayarak “8” değerini geri döndürmekte ve bu değerde
tarayıcı ekranına yazılmaktadır. Prosedür hem parametre almakta hem de geriye
değer döndürmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 16


58
ASP

Kod Ekran Çıktısı


<% 8
Function Toplama (A,B)
Toplama = A+B
End Function

response.write (Toplama (3,5))


%>

Örnek 3.15. Function Örneği

ASP’DE VERİ TABANI İŞLEMLERİ


ASP, kullanıcı etkileşimleri için geliştirilmiş bir teknoloji olup kullanıcılara
dinamik veriler sunmak için veri tabanlarından yararlanmaktadır. ASP ile veri
tabanlarında arama, seçme, ekleme, silme ve değiştirme gibi bazı temel işlemler
gerçekleştirilebilmektedir. ASP ile veri tabanlarında bu tür işlemleri
ASP’de veri tabanı gerçekleştirmek için ADO (ActiveX Data Objects) nesnelerinden yararlanılmaktadır.
işlemleri ADO nesneleri
ADO Microsoft tarafından geliştirilmiş bir teknoloji olup, ActiveX veri
ile yapılmaktadır.
nesneleri anlamına gelmektedir. Veri tabanında bulunan verilere etkili, hızlı ve
güvenli bir bağlantı kurmak için kullanılmaktadır. ADO, verilere erişmek için çok
sayıda bileşen nesne modeli (COM) içermektedir. Esnek yapısı sayesinde web
geliştiricilerine birçok kolaylık sağlamaktadır. Dilden bağımsız bir nesne modeli
olup, ADO ile istemci uygulamalarını gerçekleştirmek için OLE DB sağlayıcısı
kullanılmaktadır. OLE DB, ilişkisel veri tabanlarındaki verileri işleme konusunda
oldukça başarılıdır.
ADO, yapıdan bağımsız olarak herhangi bir veri kaynağına aynı programlama
ara yüzü ile erişim sağlama yapısına sahiptir. İçerisinde bulunan bağımsız nesneler,
veri tabanlı uygulamalarında veri depolama, işleme ve alma komutlarını sağlamak
için ADO kullanılmaktadır. Bu işlemleri gerçekleştirmek için ADO içerisinde
bulunan bazı nesneler ve koleksiyonlar şöyledir:

ADO ile istemci  Connection Object (Bağlantı nesnesi)


uygulamalarını  Command Object (Komut nesnesi)
gerçekleştirebilmek için  Parameter Object (Parametre nesnesi) ve Parameter Collection
OLE DB (Parametre koleksiyonu)
kullanılmaktadır.  Fields Object (Alan nesnesi) ve Fields Collection (Alan koleksiyonu)
 Record ve Stream Object (Kayıt ve Akış nesnesi)
 Property Object (Özellik nesnesi) ve Properties Collections (Özellik
koleksiyonları)
 Error object (Hata nesnesi) ve Error Collections (Hata koleksiyonu)
ASP web sayfalarından veri tabanlarına erişim sağlamak ve işlemler
gerçekleştirme adımları şu şekildedir:
1. Veri tabanına bir ADO bağlantısı oluşturma ve bağlantıyı açma
2. Veri tabanındaki verileri okumak için Recordset nesnesinden faydalanma
ve açma

Atatürk Üniversitesi Açıköğretim Fakültesi 17


59
ASP

3. Recordset nesnesinden gerekli bilgileri alma


4. Recordset nesnesindeki işlemleri kapatma
5. Veri tabanı bağlantısını sonlandırma
Örnek 3.16’da ADO veri tabanı bağlantısı ile adım adım yapılan işlerin basit
bir uygulaması bulunmaktadır. Bu uygulamada öncelikle “universite.mdb” isimli
veri tabanı ile bağlantısı kurularak veri tabanına erişim sağlanmaktadır. Daha
sonra Recordset nesnesi olan “rs” oluşturularak; bu nesne üzerinden bir SQL sorgu
cümleciği “Ogrenciler” tablosundaki tüm veriler “rs” nesnesiyle alınmaktadır. Daha
sonra “rs” içerisinde “field” koleksiyonu kullanılarak alınan tüm veriler bir “for
each…next” döngüsüyle ekrana yazılmaktadır. Son olarak “rs” nesnesi ve veri
tabanı bağlantısı olan “baglanti” sonlandırılmaktadır.
Kod
<%
set baglanti=Server.CreateObject("ADODB.Connection")
baglanti.Provider="Microsoft.Jet.OLEDB.4.0"
baglanti.Open "c:/database/universite.mdb"

set rs=Server.CreateObject("ADODB.recordset")
rs.Open "Select * from Ogrenciler", baglanti

for each x in rs.fields


response.write(x.name)
next

rs.Close
baglanti.Close
%>

Örnek 3.16. ADO ile Veri Tabanı Örneği


Bireysel Etkinlik

• ASP'de kullanılan nesnelerden yararlanarak bir telefon


rehberi uygulaması örneği yapınız.

Atatürk Üniversitesi Açıköğretim Fakültesi 18


60
ASP

•ASP NEDİR?
•ASP, “Active Server Pages” kelimelerinin kısaltmasından oluşmaktadır.
Türkçe ifade karşılığı “Aktif Sunucu Sayfaları” olarak ifade edilmektedir. Aktif
ifadesi, dinamik içerikler ifadesiyle örtüşmektedir. Sunucu sayfaları ile ifade
edilen durum ise; ASP dil ortamının sunucu tarafında çalışması durumudur.
ASP, ilk olarak 1999 yılında IIS 3.0 (Internet Information Server) sunucu
taraflı yönetim yazılımıyla beraber ortaya çıkmıştır. 1997 yılında ASP 2.0
Özet
teknolojisi ortaya konmuştur. ASP 2.0'da bu güncelleme ile Response,
Request, Application, Session, ASPError ve Server nesneleri gibi önemli
nesne modeli kavramları ortaya çıkmıştır. 2000 yılında günümüzde de
kullanılan ASP 3.0 güncellemesi gelmiştir. ASP dosya yapısı itibariyle; HTML
dili ve betik bir dilden oluşmaktadır. Betik dil olarak genellikle VBScript tercih
edilmekle birlikte farklı diller de kullanılabilmektedir. ASP dosyalarında betik
dile ait kodlar “<% ve %>” etiketleri arasına yazılmaktadır. ASP ile yazılmış
olan bir web sayfasında; web tarayıcıdan gelen sayfa isteği sunucu tarafında
ASP motoruna iletilir. ASP motoru gelen “.asp” uzantılı sayfayı satır satır
işleyerek bir HTML çıktısına dönüştürür. HTML çıktı sayfası web tarayıcısında
görüntülenir.
•ASP NESNELERİ
• IIS 4.0 sürümünün 1997 yılında ortaya çıkışıyla beraber ASP 2.0
güncellemesi gelmiştir. Bu güncellemede ki en temel değişiklik ASP
nesneleridir. 6 önemli nesne yapısı ortaya çıkmış olup bu nesneler Request,
Application, Response, ASPError, Session ve Server nesneleridir. Bu nesneler
günümüzde kullanılan klasik ASP’nin temel yapı taşlarıdır.
•ASP BETİK DİLLERİ
• Betik bir dil, herhangi bir programlama dilinde yazılmış ve çalıştırılmaya
hazır kod parçacıklarına denilmektedir. ASP bir programlama dili olmayıp,
içerisinde farklı betik dillerin çalışmasına izin veren ve aynı zamanda HTML
diline ait kodları da içeren bir dil ortamıdır. ASP başlangıçta Microsoft
tarafından geliştirilen VBScript betik dili ile çalışırken; günümüzde JavaScript,
PerlScript ve Python dilleri ile de yazılan kodlar ile de çalıştırılabilmektedir.
•ASP İLE WEB PROGRAMLAMA
•ASP içerisinde farklı betik diller ile kodlama imkanı sunan, sunucu taraflı
dinamik web sayfaları oluşturmaya yarayan bir dil ortamıdır. Bu dil
ortamında en çok tercih edilen betik dil olarak VBScript karşımıza
çıkmaktadır. VBScript dili, Visual Basic dilinin temel yapılarını içermekle
beraber daha sade bir betik dildir. Bu betik dilin kendisine has bazı yapıları
bulunmaktadır. Değişkenlerin tipi önceden belirlenmeyip, değişkenin aldığı
değere göre tipi (sayı, metin vs.) belirlenmektedir.
• VBScript dilinde koşul ifadeleri olarak “if…Then…Else”, “If...Then...ElseIf” ve
“Select Case” yapıları bulunmaktadır. Döngü diye tabir ettiğimiz tekrarlayan
kod blokları için For...Next Loop, For Each...Next Loop, Do...Loop yapıları
kullanılmaktadır. Prosedür kullanımında ise geriye değer döndürmeyen
“Subroutine” ve geriye değer döndüren “Functions” prosedürleri
kullanılmaktadır.
•ASP’DE VERİ TABANI İŞLEMLERİ
•ASP, dinamik içerikler oluşturmak için veri tabanlarından yararlanmaktadır.
Kullanıcı etkileşimi için veri tabanlarında veri ekleme, silme ve değiştirme
gibi bazı işlemler yapılmaktadır. ASP’de veri tabanlarında bu tür işlemleri
gerçekleştirmek için; hızlı ve etkili ADO (ActiveX Data Objects) nesneleri
kullanılmaktadır. Bu teknoloji dilden bağımsız bir nesne modeli olup,
geliştiricilere birçok kolaylığı beraberinde getirmektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 19


61
ASP

DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisinde sunucu tarafında kodları çalıştırmak için
yazılan ASP kodlarının başına ve sonuna yazılan etiketlerdir?
a) <%asp ve asp%>
b) <asp ve asp>
c) <-asp ve asp->
d) <! ve !>
e) <% ve%>

2. Aşağıdakilerden hangisi ASP dilinde geriye değer döndüren prosedür


tanımlamada kullanılır?
a) Function
b) Subroutine
c) Procedure
d) Dim
e) Variable

3. Aşağıdakilerden hangisi Windows işletim sistemlerinde bulunan ve ASP


dosyalarının çalıştırabilmesi için gerekli olan sunucu yönetim yazılımıdır?
a) MySql Server
b) Oracle Server
c) SQL Server
d) Internet Information Server
e) PostgreSQL

4. Aşağıdaki hangisi VBScript dilinde kullanılan Do…Loop döngü türlerinden


biri değildir?
a) Do While…Loop
b) Do…Loop While
c) Don Until…Loop
d) Do…Loop Until
e) Do if…Loop

5. Aşağıdakilerden hangisi VBScript dilinde dizi değişken isimleri tanımlamak


için kullanılan bir ifadedir?
a) Dim
b) Dizi
c) Array
d) Variable
e) Variant

Atatürk Üniversitesi Açıköğretim Fakültesi 20


62
ASP

6. VBScript dilinde “if..Then…Else” ifadesi ne amaçla kullanılmaktadır?


a) Koşul ifadesidir.
b) Döngü ifadesidir.
c) Değişken tanımlama ifadesidir.
d) Dizi değişken tanımlama ifadesidir.
e) Prosedür tanımlama ifadesidir.

7. Application nesnesinin görevi nedir?


a) Kullanıcıya bilgi göndermek için kullanılan bir nesnedir.
b) Kullanıcıdan bilgi almak için kullanılan bir nesnedir.
c) Hataları gösteren nesnedir.
d) Global değişkenleri depolamak için kullanılan nesnedir.
e) Sunucuda bulunan yöntem ve özelliklere erişmek için kullanılan
nesnedir.

8. Aşağıdakilerden hangisi ADO içerisinde bulunan bir nesne değildir?


a) Connection Object
b) Command Object
c) Property Object
d) Error Object
e) Programming object

9. Aşağıdakilerden hangisi klasik ASP’de kullanılan bir betik dil değildir?


a) VBScript
b) JavaScript
c) C++
d) PerlScript
e) Python

10. OLE DB ne amaçla kullanılmaktadır?


a) Dizi değişkeni tanımlama için kullanılmaktadır.
b) IIS sunucu yazılım hizmetini çalıştırmak için kullanılmaktadır.
c) İstemci tarafı uygulamaları çalıştırmak için kullanılmaktadır.
d) Prosedür tanımlamak için kullanılmaktadır.
e) ADO ile istemci uygulamalarını gerçekleştirebilmek için
kullanılmaktadır.

Cevap Anahtarı
1.e, 2.a, 3.d, 4.e, 5.a, 6.a, 7.d, 8.e, 9.c, 10.e

Atatürk Üniversitesi Açıköğretim Fakültesi 21


63
ASP

YARARLANILAN KAYNAKLAR
Anderson, R. ve diğerleri. Professional Active Server Pages 3.0, Birmingham: Wrox
Press
ASP. 3 Ocak 2022 tarihinde https://www.w3schools.com/asp/ adresinden erişildi.
Mitchell, S. (2000). Designing Active Server Pages, Sebastopol, CA: O’Reilly &
Associates
Roff, J. T. (2001). ADO: ActiveX Data Objects, Sebastopol, CA: O’Reilly & Associates
Scripting with COM Objects. 5 Ocak 2022 tarihinde
https://docs.microsoft.com/en-us/windows/win32/com/scripting-with-
com-objects adresinden erişildi.

Atatürk Üniversitesi Açıköğretim Fakültesi 22


64
ASP.NET: GİRİŞ

• .NET Framework
• ASP.NET
İÇİNDEKİLER

• .NET Mimarisi ve İNTERNET


Programlama Dilleri
• .NET Sınıf Kütüphaneleri PROGRAMCILIĞI II
• Dil Entegrasyonu Dr. Öğr. Üyesi Anıl
UTKU

• Bu üniteyi çalıştıktan sonra;


• .NET Framework'ü
HEDEFLER

açıklayabilecek,
• .NET dillerini tanımlabilecek,
• .NET sınıf kütüphanelerini
açıklabilecek,
• ASP ve ASP.NET arasındaki farkı
açıklayabileceksiniz.

ÜNİTE

4
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP.NET: Giriş

.NET Versiyonları

.NET Framework

.NET'in Temelleri
ASP.NET
ASP.NET: GİRİŞ

.NET Mimarisi ve
Programlama Dilleri Managed C++ ile Arac
Sınıfının Oluşturulması

.NET Sınıf
Kütüphaneleri VB.NET ile Otomobil
Sınıfının Oluşturulması

Dil Entegrasyonu
C#.NET ile Ucak Sınıfının
Oluşturulması

C#.NET ile Test Sürücüsü


Oluşturulması

66
Atatürk Üniversitesi Açıköğretim Fakültesi 2
ASP.NET: Giriş

GİRİŞ
.NET ilk olarak Microsoft tarafından Temmuz 2000'de duyurulan bir
platformdur. .NET platformu, 1990'ların sonlarına kadar kullanılmakta olan
teknolojileri birbirine entegre eden, Windows hizmetlerine ve API'lerine yönelik
yeni bir programlama arabirimine sahip bir uygulama geliştirme çerçevesidir
(framework). COM+ bileşen hizmetleri, ASP Web geliştirme çerçevesi, XML ve
nesne yönelimli tasarım, SOAP, WSDL ve UDDI gibi yeni Web hizmet protokolleri
için destek .NET çerçevesine dahil edilmiştir.
.NET platformu geliştirme araçları, özelleştirilmiş sunucular, Web hizmetleri
.NET platformu, ve cihazlar olmak üzere dört ayrı ürün grubundan oluşmaktadır. Geliştirme
Windows hizmetlerine araçları, C#.NET ve VB.NET gibi programlama dillerini; Visual Studio gibi uygulama
ve API'lerine yönelik dizi geliştirme araçlarını, Web ve Windows uygulamaları oluşturmak için kapsamlı
yeni bir programlama bir sınıf kütüphanesini ve bu çerçevede oluşturulmuş nesneleri yürütmek için
arabirimine sahip bir ortak dil çalışma platformunu ifade etmektedir. Uzmanlaşmış sunucular: İlişkisel
uygulama geliştirme
veri depolama, e-posta ve işletmeden işletmeye ticareti gibi özel işlevsellik
çerçevesidir.
sağlayan sunucuları ifade etmektedir. Web hizmetleri, geliştiricilerin belirli bir
ücret karşılığında, kullanıcı kimliği bilgisi gerektiren uygulamalar oluşturmaları için
kullandıkları ticari Web hizmetlerini ifade etmektedir. Cihazlar ise cep
telefonlarından oyun konsollarına kadar .NET desteği olan cihazları ifade
etmektedir.
Microsoft .NET teknolojisi, bilgi işlem ve iletişim teknolojilerini birleştiren,
yeni nesil gelişmiş bir yazılım platformudur. .NET, geliştiricilerin, işletmelerin ve
tüketicilerin teknolojiyi kendi şartlarına göre kullanmalarını sağlar. .NET'in
arkasındaki temel fikir, odak noktasının bireysel Web sitelerinden veya İnternet'e
bağlı cihazlardan daha geniş, daha zengin çözümler sunmak için birlikte çalışan
bilgisayar, cihaz ve hizmet kümelerine kaymasıdır.
.NET, bilgi işleme ve iletişimi her zamankinden daha basit ve kolay bir hale
getirmiştir. Bu sayede kullanıcılar kendilerine nasıl, ne zaman ve hangi bilgilerin
iletileceği konusunda kontrole sahip olacaktır. İşletmeler, ürün ve hizmetlerini,
müşterilerin kendi elektronik yapılarına sorunsuz bir şekilde yerleştirmelerini
sağlayacak şekilde sunabilecektir.

.NET FRAMEWORK
Microsoft .NET, çeşitli programlama dillerinde geliştirilmiş uygulamaların
yürütülmesi veya çalıştırılması için ortak bir platform sağlayan bir çerçevedir. .NET,
aşağıdaki hedefleri yerine getirmek için tasarlanmıştır:
 Nesneye yönelik programlama ortamı sağlamak,
 Windows tabanlı uygulamalar ve Web tabanlı uygulamalar gibi çeşitli
uygulama türlerinin geliştirilmesi için ortam sağlamak,
 .NET tabanlı kodun başka herhangi bir kodla bütünleşebilmesini sağlamak.
Microsoft .NET Framework, çeşitli Microsoft Windows işletim sistemlerinde
kullanılabilen, yazılımla uyumlu bir yapıdır. Yaygın programlama sorunlarına

67
Atatürk Üniversitesi Açıköğretim Fakültesi 3
ASP.NET: Giriş

yönelik önceden kodlanmış çözümlerden oluşan geniş bir kitaplık ve çerçeve için
özel olarak yazılmış programların yürütülmesini yöneten bir sanal makine içerir.
.NET Framework, Windows platformu için oluşturulan çoğu yeni uygulama
tarafından kullanılmak üzere tasarlanmıştır. Çerçevenin temel sınıf kitaplığını
oluşturan önceden kodlanmış çözümler, kullanıcı arabirimi, veri erişimi, veri tabanı
bağlantısı, kriptografi, web uygulaması geliştirme, sayısal algoritmalar ve ağ
iletişimi dâhil olmak üzere birçok alanda çok çeşitli programlama ihtiyaçlarını
kapsar.
Sınıf kitaplığı, uygulamalar üretmek için onu kendi kodlarıyla birleştiren
programcılar tarafından kullanılır. .NET Framework için yazılan programlar,
programın çalışma zamanı gereksinimlerini yöneten bir yazılım ortamında
yürütülür. Ayrıca .NET Framework'ün bir parçası olan bu çalışma zamanı ortamı,
Ortak Dil Çalışma Zamanı (Common Language Runtime-CLR) olarak bilinir. CLR, bir
uygulama sanal makinesinin görünümünü sağlar, böylece programcıların programı
CLR, uygulama yürütme yürütecek belirli CPU'nun yeteneklerini dikkate alması gerekmez. CLR ayrıca
için ortak çalışma güvenlik, bellek yönetimi ve özel durum işleme gibi diğer önemli hizmetleri de
zamanı sağlayan, dilden sağlar.
bağımsız bir geliştirme
ve yürütme ortamıdır. .NET Framework’ün sunduğu avantajlar aşağıdaki gibi sıralanabilir:
 Tutarlı ve nesne yönelimli bir programlama ortamı.
 Kodun güvenli bir şekilde yürütülmesini destekler.
 Yazılım dağıtımı ve sürüm çakışmalarını en aza indirir.
 Birden çok cihazda çeşitli Windows tabanlı ve Web tabanlı uygulamalarda
hem geliştiriciler hem de kullanıcılar için tutarlı bir şekilde kullanılmasını
sağlar.
 .NET Framework'e dayalı kodun diğer herhangi bir kodla
bütünleşebilmesini sağlamak için endüstri standartlarına dayalı iletişim
sağlar.
 .NET, HTTP, XML ve SOAP gibi protokolleri içeren açık İnternet
standartlarına dayanmaktadır.

.NET Versiyonları
Microsoft tarafından geliştirilen bir programlama modeli olan .NET
Framework, Windows, Windows Phone, Windows sunucuları, XML Web hizmetleri
ve Microsoft Azure için uygulamaların oluşturulmasını ve çalıştırılmasını destekler.
.NET Framework, VB.Net, C++, F# ve C# gibi çeşitli programlama dillerinde FCL
(Framework Class Library) ve CLR (Common Language Runtime) adlı büyük bir sınıf
kitaplığı içerir.
.NET Framework, veri erişimi, ara yüz, kriptografi, veri bağlantısı, algoritma,
ağ iletişimi ve Web uygulaması geliştirme gibi çeşitli programlama ihtiyaçlarını
kapsayan Temel Sınıf Kütüphanesi (Base Class Library-BCL) sağlar.
Microsoft, 1990'larda yeni nesil Windows hizmetleri adı altında .NET
Framework geliştirme sürecini başlattı ve 2000 yılının sonlarında ilk beta
sürümünü yayınladı. 13 Şubat 2002'de .NET Framework 1.0, Windows 98,

68
Atatürk Üniversitesi Açıköğretim Fakültesi 4
ASP.NET: Giriş

Windows ME ve Windows NT 4.0, Windows 2000 ve Windows XP için yayınlandı.


1.0 sürümünde büyük bir yükseltme yapıldı ve 3 Nisan 2003 tarihinde .NET
Framework 1.1 olarak yayınlandı. .NET’in 2. sürümü, 22 Ocak 2006'da piyasaya
sürüldü. Bu sürüm Windows ME ve Windows 98'i destekleyen son sürümdür. 21
Kasım 2006'da .NET Framework 3.0 piyasaya sürüldü. Önceki .NET sürümlerinden
farklı olarak Microsoft, 3. sürümün karşılığı olarak herhangi bir Compact
Framework sürümü yayınlamadı.
3.5 sürümü 19 Kasım 2007'de yayınlandı. Sürüm 3.0 gibi, .NET Framework
sürüm 3.5 de kullanılan .NET Framework 2.0 sürümüyle aynı olan CLR 2.0'ı
kullanır. .NET Framework 3.5, Windows Vista, Windows XP, Windows 7 ve
Windows Server 2008’de desteklenir. 12 Nisan 2010'da .NET Framework 4
çıkarıldı. Bu sürüm, yeni CLR 4.0'ı tanıttı. Bir sonraki sürüm .NET Framework 4.5,
15 Ağustos 2012'de yayınlandı. Microsoft bu sürümü güncelledi ve 20 Temmuz
2015'te .NET 4.6 adlı yeni bir sürüm yayınladı. 64 bit için yeni bir Just-in-Time (JIT)
derleyicisi olan RyuJIT'i desteklemektedir. Microsoft, .NET Framework'ün bir
sonraki sürümünü yayınlamak amacıyla 5 Nisan 2017'de Visual Studio 2017'yi
yayınladı. Daha sonra, .NET Framework sürüm 4.7, 2 Mayıs 2017'den itibaren
kullanılabilir hale geldi. .NET Framework'ün en son sürümü .NET 4.8, 18 Nisan
2019'da yayınlandı.

.Net Framework sürümleri ve özellikleri


.NET Framework'ün her sürümü yeni özelliklerle güncellenmektedir. Bu
bölümün devamında her bir sürüm ve özellikleri açıklanmıştır.
.NET Framework 1.0
• CLR sürümü: 1.0
• IDE: Visual Studio .NET
• .NET 1.0, .NET Framework'ün ilk sürümüdür ve .NET Framework
uygulamalarını çalıştırmak için ihtiyacınız olan CLR, Sınıf Kitaplığı ve
ASP.NET'i içerir.
.NET Framework 2.0
.NET Framework 1.1,
IPv6 için destek • CLR sürümü: 2.0
sunmaktadır. • IDE: Visual Studio .NET 2005
• FTP desteği, yeni veri kontrolleri, gelişmiş kod arkası modeli ve önbelleğe
alma özellikleri gibi ASP.NET'in tüm alanlarında önemli gelişmeler
içermektedir.
.NET Framework 3.0
• CLR sürümü: 2.0
• IDE: Visual Studio .NET 2005
• Bu sürümde yer alan dört temel bileşen aşağıdaki gibidir:
• Windows Presentation Foundation (WPF): Bu bileşen esas olarak zengin
istemci uygulamaları ve Web uygulaması pencereleri için kullanılır. Zengin
bir kullanıcı arabirimi oluşturmak için Genişletilmiş Uygulama İşaretleme
Dili'ni (Extended Application Markup Language-XAML) kullanır. Bu bileşen,

69
Atatürk Üniversitesi Açıköğretim Fakültesi 5
ASP.NET: Giriş

donanım hızlandırmalı, 2B ve 3B grafik efektlerinin uygulanmasını


destekler.
• Windows Communication Foundation (WCF): Bu bileşen, sunucular ve
istemciler arasında çalışan dağıtık, hizmet odaklı uygulamalar geliştirmeyi
amaçlar.
• Windows Workflow Foundations (WWF): .Net uygulamalarında iş akışı
olarak uygulamak için bir API ve bir süreç içi iş akışı motoru sağlar.
• Windows CardSpace: Bu bileşen, kullanıcıların kişisel bilgilerini
yönetmelerine ve kontrol etmelerine yardımcı olur. Güvenli, güvenilir ve
basit bir şekilde dijital bir kimlik sunarak kullanıcılara Web hizmetinde
veya Web sitesi kimlik doğrulamasında yardımcı olmayı amaçlayan istemci
yazılımıdır.
.NET Framework 3.5
• CLR sürümü: 2.0
• IDE: Visual Studio .NET 2008
• Microsoft .NET Framework 3.5’in hedefi, modern uygulamaların
oluşturulmasına yardımcı olmaktır. Ayrıca ASP.NET, Ajax desteğini almıştır
ve LINQ (Language –Integrated Query) ADO.Net tarafından erişilebilir hale
gelmiştir.
.NET Framework 4.0
• CLR sürümü: 4.0
• IDE: Visual Studio .NET 2010
.NET Framework, 3.5
• .NET 4.0, dağıtık veya çok çekirdekli sistemleri hedefleyen paralel bilgi
sürümü ile Ajax
işleme desteğini etkinleştirmek için uzantılar içermektedir.
desteğini almıştır.
.NET Framework 4.5
• CLR sürümü: 4.0
• IDE: Visual Studio .NET 2012
• Bu sürümde Visual Basic, C# veya F# gibi programlama dilleri birlikte
kullanılarak Windows uygulamaları oluşturulabilir.
.NET Framework 4.6
• CLR sürümü: 4.0
• IDE: Visual Studio .NET 2015
• Açık kaynaklı .NET Framework paketlerini içerir.
.NET Framework 4.7
• CLR sürümü: 4.0
• IDE: Visual Studio .NET 2017
• .NET Framework 4.7, güvenilirlik ve performans geliştirmeleriyle
donatılmıştır.
.NET Framework 4.8
• CLR sürümü: 4.0
• IDE: Visual Studio .NET 2017

70
Atatürk Üniversitesi Açıköğretim Fakültesi 6
ASP.NET: Giriş

• Bu sürüm, .NET Core 2.1'den taşınan JIT geliştirmelerini, WPF uygulamaları


için yüksek DPI geliştirmelerini, erişilebilirlik iyileştirmelerini, performans
güncellemelerini ve güvenlik geliştirmelerini içermektedir.

.NET’in Temelleri
.NET'in temel stratejisi yazılımı bir hizmet olarak etkinleştirmektir. .NET
ayrıca dağıtık bilgi işleme, bileşen oluşturma, kurumsal hizmetler, Web
paradigmasındaki değişiklikler ve tecrübe kazanımına yanıt vermeye
çalışmaktadır. Dağıtık bilgi işleme, istemci/sunucu uygulamalarının
geliştirilmesinin basitleştirilmesini sağlar. .NET’den önceki teknolojiler, işlem
sürecinde kişilerin ve makinelerin fiziksel yakınlığını gerektirdiği için Web üzerinde
birlikte çalışma konusunda eksikti. .NET, HTTP, XML ve SOAP gibi İnternet
standartlarından yararlanan bir uzaktan iletişim mimarisi sağlar.
Bileşen oluşturma, farklı üreticiler tarafından geliştirilen yazılım
bileşenlerinin entegrasyonunu ifade etmektedir. Bileşen Nesne Modeli
(Component Object Model-COM), tak-çalıştır yazılım teknolojisini beraberinde
getirmiştir ancak COM bileşenlerinin geliştirilmesi ve dağıtımı oldukça karmaşıktır.
.NET ise bu bileşenlerin oluşturulması ve dağıtımı için daha basit bir yol sağlar.
Kurumsal hizmetler, işlemlerin güvenliğini ve yönetilebilirlik için kod
yazmadan kurumsal uygulamaların geliştirilmesine izin verilmesini ifade
etmektedir. .NET, geliştirme süresini ve büyük ölçekli uygulamalar oluşturmaya
yönelik çabayı büyük ölçüde azalttığı için kurumsal hizmetleri desteklemeye
devam etmektedir.
Web paradigmasındaki değişiklikler, Web uygulamalarının geliştirilmesini
basitleştirmek için Web teknolojilerindeki değişiklikleri ifade eder. Günümüzde,
Web uygulaması geliştirme süreci, bağlanabilirlikten (TCP/IP), sunuma (HTML) ve
programlanabilirliğe (XML ve SOAP) geçiş göstermiştir.
Tecrübe kazanımı, yazılım endüstrisinin büyük ölçekli kurumsal ve web
uygulamaları geliştirirken kazandığı tecrübeleri ifade etmektedir. Örneğin, ticari
bir Web uygulaması birlikte çalışabilirliği, ölçeklenebilirliği, kullanılabilirliği ve
yönetilebilirliği desteklemelidir. .NET tüm bu hedefleri kolaylaştırmayı
hedeflemektedir. Bunlar .NET'in içerdiği ana kavramlar olsa da .NET'in bir nesneyi
İnternet üzerinden bir makineden diğerine iletmek için temel olarak açık İnternet
standartlarını (HTTP, XML ve SOAP) kullanmaktadır.
Microsoft .NET Framework'ün temel tasarım hedefleri, bileşen desteği, dil
entegrasyonu, uygulamaların birlikte çalışabilirliği, basit geliştirme ve güvenlik
olarak sıralanabilir. Bileşen desteği, geliştiricilerin kütüphane dosyası gibi
bileşenleri uygulamalarına kolay bir şekilde entegre edebilmeleri ifade etmektedir.
COM teknolojisinden önce, geliştiricilerinin kaynak kodlarına başvurmadan veya
değiştirmeden kütüphane dosyalarını uygulamalarına dâhil edebilmelerinin basit
bir yolu yoktu. COM'un ortaya çıkmasıyla, kütüphane dosyası gibi binary
bileşenlerin uygulamalara dâhil edilmesi kolaylaştı. Ancak COM’un getirdiği binary
yazma düzeni bir sınırlılık olarak ön plana çıkmaktadır. Benzer kodların sık sık
yeniden yazılmasına neden olan bu gereksinimler .NET ile ortadan kaldırılmıştır.
.NET’te tüm sınıflar binary düzeyde yeniden kullanılabilir.
COM, dil bağımsızlığını destekler. Bileşenler COM’da belirtilen tüm kuralları
karşıladığı sürece, uygulamalar tarafından kullanılabilir. Bu durum yeniden
kullanımı desteklerken, dil entegrasyonunu sağlamaz. Microsoft .NET yalnızca dil

71
Atatürk Üniversitesi Açıköğretim Fakültesi 7
ASP.NET: Giriş

bağımsızlığını değil, aynı zamanda dil entegrasyonunu da destekler. Microsoft


.NET, sınıflardan kalıtım yapılabilmesini, istisnaların yakalanabilmesini ve farklı
dillerde polimorfizmden yararlanılabilmesini sağlar. .NET Framework, tüm .NET
bileşenlerinin desteklemesi gereken Common Type System (CTS) belirtimiyle bunu
mümkün kılar. Örneğin, .NET'teki her şey, System.Object adlı kök sınıftan türetilen
belirli bir sınıfın nesnesidir. CTS, sınıflar, arabirimler, referans türleri ve değer
türleri gibi genel kavramları destekler. .NET temel sınıfları, tamsayı, string ve dosya
işlemleri gibi temel sistem türlerinin çoğunu sağlar. Her dil derleyicisinin Common
Language Specification (CLS) tarafından şart koşulan minimum şartları karşılaması
ve CTS'ye uygun kod oluşturması gerektiğinden, farklı .NET dilleri birlikte
kullanılabilir.
Uygulamaların birlikte çalışabilirliği konusunda COM, dağıtık kablo
protokolü (Distributed COM-DCOM) aracılığıyla dağıtık bilgi işlemeyi destekler.
Ancak DCOM, ana bilgisayarın TCP/IP adresini ağ veri temsili arabelleğine
gömdüğü için güvenlik duvarları ve ağ adresi çevirici yazılımı aracılığıyla
çalışmayacaktır. Ayrıca, DCOM’un dinamik aktivasyonu karmaşıktır. .NET
Framework, dağıtık bilgi işleme için XML ve HTTP standartlarına dayanan, endüstri
COM, dağıtık kablo tarafından desteklenen yeni SOAP protokolünü kullanır.
protokolü aracılığıyla
dağıtık bilgi işlemeyi Basit geliştirme, farklı bir derleyicide uygulama geliştirmeye başlandığında,
destekler. yeni bir API veya sınıf kütüphaneleri öğrenmek durumunda kalınması ile ilişkilidir.
.NET çözüm olarak, bir dizi framework sınıfı sağlar ve her dilin onu kullanmasına
izin verir. Böyle bir framework, dilleri her değiştirdiğinizde yeni bir API öğrenme
ihtiyacını ortadan kaldırır.
Güvenlik ise uygulamaların yürütülmeleri esnasında yaşanabilecek gizlilik
ihlallerini ifade etmektedir. İstemci/sunucu uygulamalarında, birden çok
kullanıcının sunuculara erişmiş olabilmesi ya da istemci ile sunucu arasında hassas
verilerin aktarımı gibi istenmeyen durumlar yaşanabilir. Bu sorunları azaltmak için
.NET bir dizi güvenlik özelliği sağlar. Yalnızca yürütülebilir dosyaya erişimin
korunduğu geleneksel güvenlik desteğinin aksine, .NET yürütülebilir kodun belirli
bölümlerine erişimi korumak için ileri seviye güvenlik destek sağlar.

ASP.NET
Active Server Pages (ASP), yıllarca Windows Web sunucularında dinamik
Web sayfaları oluşturmak amacıyla Web geliştiricileri açısından önde gelen bir
seçim olmuştur. ASP, çeşitli diller aracılığıyla esnek komut dosyası oluşturmanın
basitliğini sunarak popülerlik kazanmıştır. Klasik ASP’nin eksiklikleri aşağıdaki gibi
sıralanabilir:
 ASP, IIS altında çalıştırılır ve bu nedenle IIS'nin durdurulması veya yeniden
başlatılması gerektiğinden ASP uygulama çökmelerine karşı hassastır.
 Klasik ASP'nin, Microsoft dışı teknoloji platformlarında kendini çalıştırma
ASP'de, her zaman bir mekanizması yoktur.
yorumlayıcı (JScript
 ASP'de VBScript ve Jscript/JavaScript olmak üzere komut dosyası yazmak
veya VBScript)
aracılığıyla sunucu için yalnızca iki dil mevcuttur.
tarafı kodunu yürütülür.  ASP'de, her zaman bir yorumlayıcı (JScript veya VBScript) aracılığıyla
sunucu tarafı kodunu yürütülür. Geleneksel bir ASP sayfası istendiğinde, o
sayfanın metni doğrusal olarak ayrıştırılır. Sunucu tarafı komut dosyası
olmayan tüm içerik, yanıta geri döndüğü gibi işlenir. Sayfadaki tüm sunucu
tarafı komut dosyası, önce uygun yorumlayıcı aracılığıyla çalıştırılır ve

72
Atatürk Üniversitesi Açıköğretim Fakültesi 8
ASP.NET: Giriş

çıktısı daha sonra yanıta geri döndürülür. Bu mimari, sayfa oluşturmanın


verimliliğini çeşitli şekillerde etkiler.
 ASP'de hata ayıklamak zordur.
 ASP'de sayfa yönergelerinin aynı blok içinde yazılması gereklidir.
2002'nin başlarında Microsoft, İnternet geliştirme için yeni teknolojisini
piyasaya sürdü. Başlangıçta ASP+ olarak adlandırılan ASP.NET, geliştiriciler için
gelişmişlik ve üretkenlik açısından ASP'den öteye geçmiştir. ASP.NET desteklediği
programlama dilleri açısından esneklik sunmaktadır. ASP.NET'te uygulama
geliştirme, yalnızca HTML ve Web tasarımı anlayışını değil, aynı zamanda nesne
yönelimli programlama ve geliştirme kavramlarını da bilmeyi gerektirir.
ASP.NET’te, sayfadaki kod sunucu tarafından okunur ve ardından tarayıcıya
gönderilen standart HTML/JavaScript/CSS oluşturmak için dinamik olarak
kullanılır. ASP.NET kodunun işlenmesi sunucuda gerçekleştiğinden, sunucu tarafı
teknolojisi denilmektedir. Şekil 4.1'de görüldüğü gibi, kullanıcı (istemci) tarayıcı
ASP.NET, Microsoft içinde yalnızca HTML, JavaScript ve CSS'yi görür. Web sunucusu, sunucu tarafı
.NET Framework'e kodunu işlemekten ve çıktıyı kullanıcıya (istemciye) sunmaktan sorumludur.
dayalı Web Sunucu, sayfanın dinamik kısımlarını işlemekten sorumludur.
uygulamaları
geliştirmeye yönelik bir
sunucu tarafı
teknolojisidir.

Şekil 4.1. Web Sunucusu ve İstemci Etkileşimi


ASP.NET, Web uygulamaları geliştirmeye yönelik bir teknolojidir. Web
uygulamaları genellikle bilgileri Web sunucusundaki bir veri tabanında depolar ve
site ziyaretçilerinin bu bilgilere erişmesine ve bunları değiştirmesine izin verir.
Web uygulamaları oluşturmak için birçok farklı programlama teknolojisi ve
desteklenen dil geliştirilmiştir. PHP, JSP (JavaServer Pages), Perl programlama dili
kullanılarak oluşturulan CGI (Common Gateway Interface) ve ColdFusion popüler
olanlardan birkaçıdır. Ancak ASP.NET, kullanıcılarını belirli bir teknolojiye ve dile
bağlamak yerine, bilindik programlama dillerini kullanılarak Web uygulamaları
geliştirilmesine olanak tanır.
ASP.NET, Microsoft .NET Framework'ü temel alır. .NET Framework,
.NET Framework, Windows uygulamaları, Web uygulamaları ve Web Hizmetleri oluşturmak için
Windows uygulamaları, gereken tüm teknolojileri birçok programlama dilinden oluşan tek bir pakette
Web uygulamaları ve toplar. Web uygulamaları oluşturmaya yönelik diğer seçeneklerle
Web Hizmetleri karşılaştırıldığında, ASP.NET aşağıdaki avantajlara sahiptir:
oluşturmak için gereken
tüm teknolojileri birçok  ASP.NET, esnek bir şekilde programlama dillerinin kullanılmasını sağlar.
programlama dilinden  ASP.NET sayfaları derlenir, yorumlanmaz. Her dinamik sayfa istendiğinde
oluşan tek bir pakette kodunuzu okuyup yorumlamak yerine, ASP.NET dinamik sayfaları
toplar. sunucunun çok hızlı bir şekilde çalıştırabileceği binary dosyalar halinde
derler.

73
Atatürk Üniversitesi Açıköğretim Fakültesi 9
ASP.NET: Giriş

 ASP.NET, .NET Framework'ün işlevlerine tam erişime sahiptir. XML, Web


Hizmetleri, veri tabanı etkileşimi, e-posta, düzenli ifadeler ve diğer birçok
teknoloji desteği doğrudan .NET'te yerleşiktir.
 ASP.NET, sayfalarınızdaki sunucu tarafı kodunu HTML düzeninden
ayırmanıza olanak tanır.
ASP.NET’in dezavantajı olarak ASP.NET’in bir Microsoft teknolojisi olması
söylenebilir. Bu kendi başına bir sorun olmasa da, bir ASP.NET Web Sitesini
çalıştırmak için bir Windows sunucusu kullanılması gerekmektedir. Diğer bir
dezavantaj olarak ise ASP.NET kullanarak uygulama geliştirmek için nesne
yönelimli programlama anlayışının kavranması gerekliliği söylenebilir.
ASP.NET’i, ASP’den ayıran yönler aşağıdaki gibi sıralanabilir:
 Çalışan ASP.NET süreçleri, IIS'deki işlem ayarlarından bağımsızdır.
 ASP.NET, Microsoft dışı platformlarda da çalıştırılabilir.
 ASP.NET, geleneksel ASP'de bulunan iki komut dosyası diliyle sınırlı
değildir. C# ve VB.NET gibi tam uyumlu herhangi bir .NET dili, ASP.NET ile
kullanılabilir.
ASP.NET, .NET  ASP.NET sayfaları her zaman derlemeler içinde yer alan .NET sınıflarında
Framework'ün derlenir. Bu sınıf, tüm sunucu tarafı kodunu ve statik HTML'i içerir. Bu
işlevlerine tam erişime nedenle bir sayfaya ilk kez erişildiğinde, o sayfanın daha sonra
sahiptir. oluşturulmasına, derlenmiş kod yürütülerek hizmet verilir. Bu işlem,
geleneksel ASP'nin komut dosyası oluşturma modelinin tüm
verimsizliklerini ortadan kaldırır.
 ASP.NET'te, sınıflar halinde derlenen sayfalar ve masaüstü uygulamaları
için hata ayıklama araçları kullanılarak hata ayıklanabilir.

.NET MİMARİSİ VE PROGRAMLAMA DİLLERİ


.NET Framework Şekil 4.2’de görüldüğü gibi Ortak Dil Belirtimi (CLS), Temel
Sınıf Kütüphaneleri (BCL) ve Ortak Dil Çalışma Zamanı (CLR) bileşenlerinden
oluşmaktadır.
.NET Framework diller arası uyumluluk için tasarlanmıştır. Diller arası
uyumluluk, .NET bileşenlerinin, yazıldıkları dillerden bağımsız olarak birbirleriyle
etkileşime girebilecekleri anlamına gelir. VB .NET'te yazılmış bir uygulama, C# ile
yazılmış bir DLL dosyasına başvurabilir veya bir C# uygulaması, VC++ ile yazılmış bir
kaynağa başvurabilir. Diller arası uyumluluk, nesne yönelimli kalıtıma kadar uzanır.
Diller arası uyumluluk, ortak dil çalışma zamanı sayesinde mümkündür. .NET
programı derlendiğinde, derleyicinin çıktısı yürütülebilir bir dosya değil, Microsoft
Intermediate Language (MSIL) adı verilen özel bir tür kod içeren bir dosya
olmaktadır. MSIL, ortak dil çalışma zamanı tarafından okunacak ve anlaşılacak
şekilde tasarlanmış düşük seviyeli bir dildir. Tüm .NET yürütülebilir dosyaları
Intermediate Language (IL) olarak mevcut olduğundan serbestçe çalışabilirler.

74
Atatürk Üniversitesi Açıköğretim Fakültesi 10
ASP.NET: Giriş

.NET Framework diller


arası uyumluluk için
tasarlanmıştır.

Şekil 4.2. .NET Framework Mimarisi

Ortak Dil Belirtimi (Common Language Specification-CLS), .NET dil


uyumluluklarının onaylaması gereken minimum standartları tanımlar. Böylece, bir
.NET derleyicisi tarafından derlenen herhangi bir kod, .NET Framework ile birlikte
CLS, .NET dil
çalışabilir. CLS, diğer .NET dilleriyle iletişim kurulabilmesi için o dilin izlemesi
uyumluluklarının
onaylaması gereken gereken yönergeleri içerir. CLS, diller arası entegrasyon, tür güvenliği ve yüksek
minimum standartları performanslı kod yürütmeyi etkinleştirmeye yardımcı olan bir çerçeve oluşturur.
tanımlar. Birçok programlama dilinin eksiksiz uygulanmasını destekleyen nesne yönelimli bir
model sağlar. Farklı dillerde yazılmış nesnelerin birbirleriyle etkileşime
girebilmesini sağlamaya yardımcı olan, dillerin uyması gereken kuralları tanımlar.
CLS ayrıca tip eşleştirmesinden de sorumludur. Ortak Tip Sistemi (Common
Type System-CTS), veri türleri ile ilgili kuralları tanımlar ve kodun güvenli bir
ortamda yürütülmesini sağlar. Tüm .NET uygulamaları yürütülmeden önce IL'ye
dönüştürüldüğünden, tüm ilkel veri türleri .NET türleri olarak temsil edilir. Bu, bir
CTS, veri türleri ile ilgili VB ve bir C# tamsayısının IL kodunda System.Int32 olarak temsil edildiği
kuralları tanımlar ve anlamına gelir. Her iki dil de ortak bir tür sistemi kullandığından, bileşenler
kodun güvenli bir arasında veri aktarımı yapmak ve zaman alıcı dönüşümlerden kaçınmak
ortamda yürütülmesini mümkündür.
sağlar.
BCL, aşağıdaki şekilde görüldüğü gibi işlevsellik ve uygulamalardan oluşan
tutarlı, nesne yönelimli bir kütüphanedir.

BCL, veri tabanı


bağlantısı, IO işlemleri
gibi günlük işlemleri
gerçekleştirmeye
yardımcı olan sınıflar ve
türler sağlar.
Şekil 4.3. BCL Mimarisi

75
Atatürk Üniversitesi Açıköğretim Fakültesi 11
ASP.NET: Giriş

BCL, Framework Sınıf Kütüphanesinin (Framework Class Library-FCL) bir alt


kümesidir. Sınıf kütüphanesi, CLR ile entegre olan yeniden kullanılabilir türlerin
koleksiyonudur. Temel sınıf kütüphanesi, veri tabanı bağlantısı ve I/O işlemleri gibi
günlük işlemleri gerçekleştirmeye yardımcı olan sınıflar ve türler sağlar. BCL, her
türlü yazılım uygulamasını oluşturmak için kullanılabilecek türleri tanımlar. Ayrıca,
temel sınıf kütüphaneleri, belirli bir bilgisayardaki dizin ve dosya sistemiyle
etkileşime girmek, ilişkisel veri tabanlarıyla (ADO.NET aracılığıyla) iletişim kurmak
vb. için türler sağlar. Bu sınıf kitaplığı geleneksel komut satırı uygulamaları,
grafiksel kullanıcı arayüzü (GUI) uygulamaları ve ASP.NET tarafından sağlanan Web
formları ile XML Web hizmetleri gibi uygulamalar geliştirmek için kullanılabilir.
CLR, uygulama yürütme için ortak çalışma zamanı sağlayan, dilden bağımsız
bir geliştirme ve yürütme ortamıdır. Çalışma zamanı, Ortak Dil Çalışma Zamanı
(CLR) olarak adlandırılır. CLR'nin temel amacı, programcı adına .NET nesnelerini
yüklemek, bulmak ve yönetmektir. Bu, CLR'nin her zaman bu işlemleri
gerçekleştirdiği ve bir programcının bu işlemlere müdahale etmediği anlamına
gelir. Ayrıca CLR, bellek yönetimini, uygulama barındırmayı, bazı güvenlik
kontrollerini ve iş parçacıklarını koordine etmeyi sağlar.

CLR, uygulama yürütme .NET SINIF KÜTÜPHANELERİ


için ortak çalışma
zamanı sağlayan, dilden .NET Framework sınıf kütüphaneleri, Windows Software Development Kit'e
bağımsız bir geliştirme (SDK) dâhil edilen sınıflar, arabirimler ve değer türlerinden oluşmaktadır.
ve yürütme ortamıdır. Aşağıdaki işlevleri destekleyen binlerce sınıf içerir:
• Temel ve kullanıcı tanımlı veri türleri
• İstisnaların işlenmesi için destek
• Giriş/çıkış ve akış işlemleri
• Temel sistemle iletişim
• Verilere erişim
• Windows tabanlı ara yüz uygulamaları oluşturma yeteneği
• Web-istemci ve sunucu uygulamaları oluşturabilme
• Web hizmetleri oluşturma desteği
Aşağıda, Framework sınıf kütüphanesinde tanımlanan ve yaygın olarak
kullanılan isim alanları (namespace) verilmiştir.
• System: Tüm yaygın veri türleri, string değerleri, diziler ve metotlar için
veri dönüştürme yöntemlerini içerir.
• System.Data: Veri tabanına erişmek, veri tabanında komutları
gerçekleştirmek ve veri tabanını çekmek için kullanılır.
• System.IO, System.DirectoryServices: Dosyalara erişmek, okumak ve
yazmak için kullanılır.
• System.Diagnostics: Hata ayıklamak ve bir uygulamanın yürütülmesini
izlemek için kullanılır.
• System.Net: Eşler arası uygulamalar oluştururken İnternet üzerinden
iletişim kurmak için kullanılır.
• System.Windows.Forms: Windows kullanıcı arabirimi bileşenlerini
kullanarak Windows tabanlı uygulamalar oluşturmak için kullanılır.

76
Atatürk Üniversitesi Açıköğretim Fakültesi 12
ASP.NET: Giriş

• System.Web: ASP.NET Web uygulamaları oluşturmak için kullanılır.


• System.Web.Services: XML Web hizmetleri ve bileşenleri oluşturmak için
kullanılır.
• System.Security: Kimlik doğrulama, yetkilendirme ve şifreleme amaçlı
kullanılır.
• System.Xml: XML dosyaları oluşturmak ve erişmek için kullanılır.

•System isim alanının altında dosya ve dizin işlemleri için


Örnek

kullanılabilecek System.IO, kuyruk, yığın, liste ve dizi gibi işlemler için


kullanılabilecek System.Collections ve çoklu iş parçacıklı programlama
için System.Threading isim alanları bulunmaktadır.

DİL ENTEGRASYONU
.NET'in hedeflerinden biri, uygulama programlama için ortak bir
paradigmayı desteklemek olduğundan, programlama kavramlarını tutarlı bir
şekilde belirtmeli ve kullanmalıdır. Bu bölümün devamında, Managed C++, VB.NET
ve C# gibi üç temel Microsoft .NET dili ve.NET dillerinin desteklediği temel
programlama kavramları incelenecektir.
• Namespace: İsim çakışmalarını azaltır.
• Arayüz: Arabirimi ortaya çıkaran nesneler tarafından uygulanması gereken
yöntemleri ve özellikleri belirtir.
• Kapsülleme: Nesne yönelimli dillerde, bir sınıfın tüm verilerini ve
davranışını kapsüllemesine izin verir.
• Kalıtım: Bir sınıfın, üst sınıfın uyguladığı zengin işlevselliği yeniden
kullanabilmesi için bir üst sınıftan miras almasına izin verir, böylece
geliştirme çabasını ve programlama hatalarını azaltır.
• Polimorfizm: Geliştiricilerin, türetilmiş bir sınıf tarafından geçersiz
kılınabilecek bir temel sınıfta davranışları belirlemesine veya uygulamasına
izin verir. Bu çok güçlü bir özelliktir çünkü geliştiricilerin başvurulan
çalışma zamanı nesnesine dayalı olarak doğru davranışı seçmesine olanak
tanır.
• İstisna işleme: Anlaşılması daha kolay kod yazılmasına izin verir. Tüm
hataların ortak ve anlaşılır bir düzende yakalanmasını sağlar.
Yukarıda .NET'in desteklediği önemli kavramların özellikleri açıklanmıştır.
Tüm bu özelliklerin örnekleri Managed C++, VB.NET ve C# kullanılarak
incelenecektir. Dil entegrasyonu, tamamen farklı bir dilde oluşturulmuş bir koddan
sınıf türetme, farklı bir dilde yazılmış kodun istisnalarını yakalama veya farklı
dillerdeki polimorfizmin avantajlarını kullanma gibi konuları kapsamaktadır. Örnek
olarak, Araç adında soyut bir sınıf geliştirmek için öncelikle C++ kullanılacaktır.
Araç sınıfı, Sola_Don(), Saga_Don() ve Frenle() olmak üzere üç polimorfik metot
sunmaktadır. Ardından, Araç'tan türetilen bir Otomobil sınıfı geliştirmek için

77
Atatürk Üniversitesi Açıköğretim Fakültesi 13
ASP.NET: Giriş

VB.NET'i kullanılacaktır. Ayrıca, yine Araç’tan türetilen Ucak sınıfını geliştirmek için
C# kullanılacaktır.

Managed C++ ile Arac Sınıfının Oluşturulması


Frenle() sanal bir metot olduğu için soyut temel sınıf olan Arac sınıfını
geliştirmek için Managed C++ kullanılacaktır. Arac, sola ve sağa dönüşü
desteklemek için Direksiyon ara yüzünü uygular. Frenle() metodu sanal bir işlev
olduğundan, Arac öğesinin herhangi bir somut türevi Örnek 4.1’de görülen
yöntemi uygulamalıdır.
Soyut bir temel sınıf verildiğinde, bu tanımı barındıran bir DLL
oluşturulabilir:
cl /CLR /c arac.cpp
link -dll /out:arac.dll -noentry arac.obj
Buradaki ilk komut, önceki kodu içeren araç.cpp dosyasını derlemek için
Managed C++ derleyicisinin nasıl kullanılacağını göstermektedir. İkinci komut,
meta veriler ve IL kodu içeren bir DLL oluşturmak için C++’ın nasıl kullanılacağını
göstermektedir: Birkaç satırlık Managed C++ kodu verildiğinde, başka bir bileşen
tarafından kullanılabilecek bir DLL oluşturulabilir.
using namespace System;
public _ _gc _ _interface Direksiyon
{
void Sola_Don( );
void Saga_Don( );
}
public _ _gc class Arac : public Direksiyon
{
public:
virtual void Sola_Don( )
{ Console.WriteLine("Araç sola dönüyor."); }
virtual void Saga_Don( )
{ Console.WriteLine("Araç sağa dönüyor."); }
virtual void Frenle( ) = 0;
}

Örnek 4.1. Managed C++ ile Araç Sınıfının Oluşturulması

VB.NET ile Otomobil Sınıfının Oluşturulması


Soyut Arac sınıfı göz önüne alındığında, Otomobil sınıfı Arac sınıfından
türetilebilir ve Arac tarafından tanımlanan üç sanal yöntem için uygulama
sağlayabilir. Örnek 4.2’deki kod parçası ile Sola_Don (), Saga_Don () ve Frenle()
metotları geçersiz kılınmaktadır.

78
Atatürk Üniversitesi Açıköğretim Fakültesi 14
ASP.NET: Giriş

Imports System
Public Class Otomobil
Inherits Arac
Overrides Public Sub Sola_Don ( )
Console.WriteLine("Otomobil sola dönüyor.")
End Sub
Overrides Public Sub Saga_Don ( )
Console.WriteLine("Otomobil sağa dönüyor.")
End Sub
Overrides Public Sub Frenle( )
Console.WriteLine("Otomobil yavaşlıyor.")
throw new Exception("Frenleme hatası!")
End Sub
End Class

Örnek 4.2. Vb.NET ile Otomobil Sınıfının Oluşturulması

Frenle() yöntemi, C# ile yazılmış kod tarafından yakalanacak bir istisna


oluşturması bakımından önemlidir. Aşağıdaki kod parçasıyla, VB.NET derleyicisinin
komut satırı kullanılarak aşağıdaki gibi bir DLL oluşturulabilir:
vbc /r:arac.dll /t:library /out:otomobil.dll otomobil.vb
VB.NET derleyicisinin bir DLL oluşturması istendiği için /t:library seçeneğini
kullanılmalıdır. Ayrıca Otomobil, Arac'tan türetildiği için, VB.NET derleyicisi Arac’ın
referanslarını çözmelidir. /r: seçeneği kullanılarak VB.NET derleyicisine dış
referansların yeri belirtilir. Arac DLL'inin kodunu yeniden kullanmak için kaynak
koda sahip olmaya gerek yoktur. Tüm tür bilgileri herhangi bir .NET derleyicisinden
elde edilebilir.

VB.NET ile Otomobil Sınıfının Oluşturulması


Managed C++ ile yazılmış Arac sınıfından türetilen Ucak sınıfını geliştirmek
için C# kullanılabilir. Otomobil sınıfına benzer şekilde Ucak sınıfı, Araç sınıfından üç
sanal işlevi uygular. Örnek 4.3’te görüldüğü gibi Otomobil sınıfından farklı olarak,
bu sınıfın Frenle() metodu bir istisna oluşturmaz.
using System;
public class Ucak : Arac
{
override public void Sola_Don( )
{
Console.WriteLine("Uçak sola dönüyor.");
}
override public void Saga_Don( )
{
Console.WriteLine("Uçak sağa dönüyor.");
}
override public void Frenle( )

79
Atatürk Üniversitesi Açıköğretim Fakültesi 15
ASP.NET: Giriş

{
Console.WriteLine("Frenler kullanılıyor.");
}
}

Örnek 4.3. VB.NET ile Otomobil Sınıfının Oluşturulması

Aşağıdaki komut kullanılarak koddan bir DLL oluşturulabilir:


csc /r:arac.dll /t:library /out:ucak.dll ucak.cs
C# derleyicisine Arac'ın arac.dll'de tanımlı olduğunu belirtmek için /r:
seçeneği kullanılmaktadır.

C# ile Test Sürücüsü Oluşturulması


arac.dll, otomobil.dll ve ucak.dll geliştirildikten sonra, polimorfizm ve istisna
işlemenin farklı dillerde çalıştığı gösterilebilir. C# ile yazılan kod listesi, bir Arac
referansı ve bir istisna işleyicisi olan bir Main() yöntemi içerir. Try bloğunun içinde
öncelikle bir Ucak sınıfı örneklenir ve yerel Arac referansı kullanılarak bu örneğe
başvurulur. Ucak’a Sola_Don() veya Frenle() komutunu vermek yerine, Arac’a
bunu yapması söylenir. Benzer şekilde, bir Otomobil örneği oluşturulur ve yerel
Arac referansı kullanılarak bu örneğe başvurulur. Yine, Otomobil’e Sola_Don( )
veya Frenle( ) komutunu vermek yerine, Arac'a bunu yapması söylenir. Her iki
durumda da Arac'a Sola_Don() veya Frenle()'e komutu verilir. Ancak Sola_Don ()
veya Frenle() metotlarını kullanan birinci durumda Ucak örneği ve ikinci durumda
Otomobil örneğidir. Bu duruma polimorfizm denilmektedir ve diller arasında
çalışır. Otomobilin Frenle() metodundan bir istisna alındığı için Frenle() metoduna
yapılan ikinci çağrı bir istisnaya neden olacaktır. Otomobilin Frenle() metodu
VB.NET kullanılarak yazılmış olsa da, C#'ta oluşturduğu istisna yakalanarak, istisna
işlemenin diller arasında çalıştığı bu örnek ile gösterilmiş oldu (Örnek 4.4).
using System;
class TestDrive
{
public static void Main( )
{
Arac arc; // Arac referansı
try
{
Ucak uck = new Ucak( );
arc = uck;
arc.Sola_Don( );
arc.Frenle( );
Otomobil oto = new Otomobil( );
arc = oto;

80
Atatürk Üniversitesi Açıköğretim Fakültesi 16
ASP.NET: Giriş

arc. Sola_Don ( );
arc.Frenle( ); // Exception
}
catch(Exception e)
{
Console.WriteLine(e.ToString( ));
}
}
}

Örnek 4.4. C# ile Test Sürücüsü Oluşturulması

Bu özellikleri test etmek için, aşağıdaki komutu kullanılarak bir EXE


oluşturulabilir:
csc /r:arac.dll;otomobil.dll;ucak.dll /t:exe /out:deneme.exe deneme.cs
Bu kodda Arac, Otomobil ve Ucak sınıfları kullanıldığı için, tool.dll,
otomobil.dll ve ucak.dll referanslarına yer verilmelidir. Ayrıca bir EXE
oluşturulduğu için, /t:exe kullanılarak C# derleyicisine belirtilmesi gereklidir. EXE
oluşturulup çalıştırıldıktan sonra aşağıdaki çıktı alınacaktır:
 Uçak sola dönüyor.
 Frenler kullanılıyor.
 Otomobil sola dönüyor.
 Otomobil yavaşlıyor.
 System.Exception: Frenleme hatası! (Otomobil.Frenle( ) ve Deneme.Main(
) metotlarında)
Görüldüğü gibi, uçak önce sola döner ve ardından frenlerini kullanır. Daha
sonra otomobil sola döner, frenleyerek durmaya çalışır ama duramaz. Bu yüzden
Main() metodunda yakalanan bir istisna ortaya çıkar. Bu örnek ile.NET
Framework'te farklı dillerde kalıtım, polimorfizm ve özel durum işlemenin
avantajları gösterilmiştir.
Bireysel Etkinlik

•Siz de VB.NET kullanarak Arac sınıfından Gemi sınıfı türetiniz ve


Sola_Don(), Saga_Don() ve Frenle() metotlarını uygulayınız. Test
sürücüsü sınıfında Gemi örneğini oluşturunuz ve yerel Arac referansı
kullanılarak bu örneğe başvurunuz.

81
Atatürk Üniversitesi Açıköğretim Fakültesi 17
ASP.NET: Giriş

•GİRİŞ
• Microsoft .NET teknolojisi, bilgi işlem ve iletişim teknolojilerini birleştiren,
yeni nesil gelişmiş bir yazılım platformudur.
•.NET, geliştiricilerin, işletmelerin ve tüketicilerin teknolojiyi kendi şartlarına
göre kullanmalarını sağlar.
Özet
•.NET'in arkasındaki temel fikir, odak noktasının bireysel Web sitelerinden
veya İnternet'e bağlı cihazlardan daha geniş, daha zengin çözümler sunmak
için birlikte çalışan bilgisayar, cihaz ve hizmet kümelerine kaymasıdır.
•.NET FRAMEWORK
•Microsoft .NET, çeşitli programlama dillerinde geliştirilmiş uygulamaların
yürütülmesi veya çalıştırılması için ortak bir platform sağlayan bir çerçevedir.
•.NET, nesneye yönelik programlama ortamı sağlamak
•Windows tabanlı uygulamalar ve Web tabanlı uygulamalar gibi çeşitli
uygulama türlerinin geliştirilmesi için ortam sağlamak
•.NET tabanlı kodun başka herhangi bir kodla bütünleşebilmesini sağlamak
gibi amaçlar doğrultusunda geliştirilmiştir.
•.NET’İN TEMELLERİ
•.NET'in temel stratejisi yazılımı bir hizmet olarak etkinleştirmektir. .NET
ayrıca dağıtık bilgi işleme, bileşenleştirme, kurumsal hizmetler, Web
paradigmasındaki değişiklikler ve tecrübe kazanımına yanıt vermeye
çalışmaktadır.
•ASP.NET
•ASP.NET, Microsoft .NET Framework'e dayalı Web uygulamaları geliştirmeye
yönelik bir sunucu tarafı teknolojisidir.
•ASP.NET’te, sayfadaki kod sunucu tarafından okunur ve ardından tarayıcıya
gönderilen standart HTML/JavaScript/CSS oluşturmak için dinamik olarak
kullanılır.
•ASP.NET kodunun işlenmesi sunucuda gerçekleştiğinden, sunucu tarafı
teknolojisi denilmektedir.
• ASP.NET aşağıdaki avantajlara sahiptir:
•ASP.NET, esnek bir şekilde programlama dillerinin kullanılmasını sağlar.
•ASP.NET sayfaları derlenir, yorumlanmaz. Her dinamik sayfa istendiğinde
kodunuzu okuyup yorumlamak yerine, ASP.NET dinamik sayfaları sunucunun
çok hızlı bir şekilde çalıştırabileceği binary dosyalar halinde derler.
•ASP.NET, .NET Framework'ün işlevlerine tam erişime sahiptir. XML, Web
Hizmetleri, veri tabanı etkileşimi, e-posta, düzenli ifadeler ve diğer birçok
teknoloji desteği doğrudan .NET'te yerleşiktir.
•ASP.NET, sayfalarınızdaki sunucu tarafı kodunu HTML düzeninden
ayırmanıza olanak tanır.
•.NET MİMARİSİ VE PROGRAMLAMA DİLLERİ
•.NET Framework Ortak Dil Belirtimi (CLS), Temel Sınıf Kütüphaneleri (BCL) ve
Ortak Dil Çalışma Zamanı (CLR) bileşenlerinden oluşmaktadır.
•CLS, .NET dil uyumlularının onaylaması gereken minimum standartları
tanımlar.
•Böylece, bir .NET derleyicisi tarafından derlenen herhangi bir kod, .NET
Framework ile birlikte çalışabilir.

82
Atatürk Üniversitesi Açıköğretim Fakültesi 18
ASP.NET: Giriş

•BCL, her türlü yazılım uygulamasını oluşturmak için kullanılabilecek türleri


tanımlar.

Özet (devamı)
•Ayrıca, temel sınıf kütüphaneleri, belirli bir bilgisayardaki dizin ve dosya
sistemiyle etkileşime girmek, ilişkisel veri tabanlarıyla (ADO.NET aracılığıyla)
iletişim kurmak vb. için türler sağlar.
•BCL, işlevsellik ve uygulamalardan oluşan tutarlı, nesne yönelimli bir
kütüphanedir.
•CLR, uygulama yürütme için ortak çalışma zamanı sağlayan, dilden bağımsız bir
geliştirme ve yürütme ortamıdır.
• CLR'nin temel amacı, programcı adına .NET nesnelerini yüklemek, bulmak ve
yönetmektir.
•DİL ENTEGRASYONU
•Dil entegrasyonu, tamamen farklı bir dilde oluşturulmuş bir koddan sınıf
türetme, farklı bir dilde yazılmış kodun istisnalarını yakalama veya farklı
dillerdeki polimorfizmin avantajlarını kullanma gibi konuları kapsamaktadır.
•Dil entegrasyonu sayesinde Araç adında soyut bir sınıf geliştirmek için C++,
Araç'tan türetilen bir Otomobil sınıfı geliştirmek için VB.NET ve yine Araç’tan
türetilen Ucak sınıfını geliştirmek için C# kullanılabilir.

83
Atatürk Üniversitesi Açıköğretim Fakültesi 19
ASP.NET: Giriş

DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi uygulama yürütme için ortak çalışma zamanı
sağlayan bir ortamdır?
a) CLS
b) CLR
c) MSIL
d) IL
e) CTS

2. .NET Framework'teki tüm sınıflar için temel oluşturan sınıf hangisidir?


a) System
b) System.Object
c) System.Net
d) System.Drawing
e) System.Data

3. .NET bileşenlerinden hangisi tüm .NET dillerinin nesnelerini kullanarak


birbirleriyle etkileşime girebilmeleri için uyması gereken standart kuralları
tanımlar?
a) CLS
b) CLR
c) CTS
d) FCL
e) BCL

I. Dilden bağımsız bir geliştirme ve yürütme ortamı sağlar.


II. Bir uygulamanın, erişim yetkisi olmayan belleğe erişemeyeceğini
garanti eder.
III. Yönetilen uygulamaları çalıştırmak için hizmetler sağlar.
IV. Hafıza yönetimi sağlar.
4. .NET CLR ile ilgili aşağıdaki ifadelerden hangisi ya da hangileri doğrudur?
a) I ve II
b) I, II ve IV
c) I, II, III ve IV
d) III ve IV
e) II ve IV

84
Atatürk Üniversitesi Açıköğretim Fakültesi 20
ASP.NET: Giriş

5. Aşağıdaki ifadelerden hangisi .NET Framework'ü doğru bir şekilde


tanımlar?
a) Windows uygulamalarının geliştirilmesi ve yürütülmesi için bir
ortamdır.
b) Yalnızca Web Uygulamaları geliştirmek, oluşturmak, dağıtmak ve
yürütmek için bir ortamdır.
c) Dağıtık Uygulamaları geliştirmek, oluşturmak, dağıtmak ve yürütmek
için bir ortamdır.
d) Web Hizmetlerini geliştirmek, oluşturmak, dağıtmak ve yürütmek için
bir ortamdır.
e) Masaüstü Uygulamaları, Web Uygulamaları ve Web Hizmetleri
geliştirmek, oluşturmak, dağıtmak ve yürütmek için bir ortamdır.

I. ASP.NET uygulamaları
II. CLR
III. Framework sınıf kütüphanesi
IV. Windows form uygulamaları
6. Yukarıdakilerden hangisi ya da hangileri .NET Framework'ü oluşturur?
a) I ve II
b) II ve III
c) III ve IV
d) II ve IV
e) I ve IV

I. CLR
II. FCL
III. Microsoft Yayınlanmış Web Hizmetleri
IV. IIS’te dağıtılan uygulamalar
7. Yukarıdakilerden hangisi ya da hangileri .NET Framework'ün
bileşenlerindendir?
a) I, II ve III
b) I ve II
c) I, II ve IV
d) III ve IV
e) I, II, III ve IV

85
Atatürk Üniversitesi Açıköğretim Fakültesi 21
ASP.NET: Giriş

8. Hata ayıklamak ve bir uygulamanın yürütülmesini izlemek için kullanılan


isim alanı aşağıdakilerden hangisidir?
a) System.Net
b) System.Web
c) System.Data
d) System.Diagnostics
e) System.Xml

9. Aşağıdakilerden hangisi Microsoft .NET Framework'ün temel tasarım


hedeflerinden değildir?
a) Bileşen desteği
b) Dil entegrasyonu
c) Birlikte çalışabilirlik
d) Güvenlik
e) İstemci taraflı hizmet

10. .NET’te İsim çakışmalarını azaltmak için aşağıdakilerden hangisi kullanılır?


a) Arayüz
b) Kapsülleme
c) Kalıtım
d) Namespace
e) İstisna işleme

Cevap Anahtarı
1.b, 2.a, 3.a, 4.c, 5.e, 6.b, 7.e, 8.d, 9.e, 10.d

86
Atatürk Üniversitesi Açıköğretim Fakültesi 22
ASP.NET: Giriş

YARARLANILAN KAYNAKLAR
MacDonald, M. (2010). Beginning ASP. NET 4 in C# 2010. Apress.
Price, M. J. (2020). C# 9 and. NET 5–Modern Cross-Platform Development-: Build
intelligent apps, websites, and services with Blazor, ASP. NET Core, and
Entity Framework Core using Visual Studio Code (5. Baskı). Packt Publishing
Ltd.
Ravalcaba, Z. (2004). Build your own ASP. Net Website Using C# and VB. NET.
Spaanjaars, I. (2012). Beginning ASP. NET 4.5: in C# and VB. John Wiley & Sons.
Shepherd, G. (2010). Microsoft ASP. NET 4 Step by Step. Pearson Education.
Thai, T., & Lam, H. (2003). NET framework Essentials (2. Baskı). O'Reilly Media, Inc.
.NET Revolution : An Overview of the .Net Framework Versions (2019). 1 Ocak
2022 tarihinde https://www.clariontech.com/blog/the-.net-revolution-an-
overview-of-the-.net-framework-versions adresinden erişildi.

87
Atatürk Üniversitesi Açıköğretim Fakültesi 23
ASP.NET:CSHARP

• Değişkenler
• Operatörler
İÇİNDEKİLER

• Diziler İNTERNET
• Kontrol Yapıları
• Döngüler PROGRAMCILIĞI II
• Metotlar Dr. Öğr. Üyesi Anıl
• Nesneye Yönelik
Programlama UTKU

• Bu üniteyi çalıştıktan sonra;


• C#'ın temel söz dizimi hakkında
HEDEFLER

bilgi sahibi olabilecek,


• C#'ta dizileri tanımlabilecek,
• C#'ta kontrol yapılarını
tanımlabilecek,
• C#'ta döngü ifadelerini
tanımlabilecek,
• C#'ta metotları tanımlabilecek,
• C#'ta nesneye yönelik
programlamanın temel
kavramlarını öğrenebileceksiniz.
ÜNİTE

5
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP.NET: CSharp

Değişkenler Sabitler

Aritmetik Operatörler

İlişkisel Operatörler

Mantıksal Operatörler
Operatörler
Bitsel Operatörler

Atama Operatörleri
Diziler
Operatörlerde İşlem
ASP.NET:CSHARP

Önceliği

If Koşul İfadeleri
Kontrol Yapıları
Switch İfadesi

While Döngüsü

Do-While Döngüsü
Döngüler
For Döngüsü

Metotlar Foreach Döngüsü

Kalıtım

Nesne Oluşturma

Nesneye Yönelik Soyut Sınıflar ve Metotlar


Programlama
Kapsülleme

Çok Biçimlilik

89
Atatürk Üniversitesi Açıköğretim Fakültesi 2
ASP.NET: CSharp

GİRİŞ
C# (C Sharp), Microsoft tarafından geliştirilen bir programlama dilidir. Nesne
yönelimli bir programlama dili olan C#, .NET'ten tam olarak yararlanır. C#, C ve
C++'dan türetilmiş basit, modern nesne yönelimli ve güvenli bir programlama
dilidir. C#, Visual Basic'in yüksek üretkenliği ile C++'ın ham gücünü birleştirmeyi
amaçlar.
Visual C#.NET, görsel Visual C# .NET, Microsoft'un C# geliştirme aracıdır. Etkileşimli bir geliştirme
tasarım yardımcıları, ortamı, pencereler ve Web uygulamaları oluşturmak için görsel tasarım
derleyici ve hata yardımcıları, derleyici ve hata ayıklayıcı içerir. Visual C# .NET, Visual Basic .NET,
ayıklayıcı içerir. Visual C++ .NET ve Jscript komut dosyası dilini de içeren Visual Studio .NET
ürününün bir parçasıdır. Bu dillerin tümü, ortak bir yürütme motoru ve geniş bir
sınıf kitaplığı içeren Microsoft .NET Framework'e erişim sağlar. C#'ın modern
tasarımı, en yaygın C++ programlama hatalarını ortadan kaldırır. C#, aşağıdakileri
sağlayarak geleneksel C/C++ programcısını güçlendirir:

 Programcıyı manuel bellek yönetimi yükünden kurtaran otomatik çöp


toplama,
 Otomatik olarak başlatılan değişkenler,
 Tip güvenli değişkenler.
C#, geliştiricilerin karmaşık iş sorunlarını çözen uygulamalar oluşturmasını
ve sürdürmesini çok daha kolay hale getiren bir dildir. C# uygulamaları yazmanın
temel sözdizimini ve yapısını tanımak için örnek 5.1.’de, "Merhaba" uygulaması
gösterilmiştir.
using System; Merhaba
class Merhaba
{
public static void Main(string[] args)
{
Console.WriteLine("Merhaba");
}
}

Örnek 5.1. Merhaba Uygulaması

C# programları için varsayılan dosya uzantısı, merhaba.cs'de olduğu gibi


.cs'dir. Programın adı merhaba.cs veya istediğiniz herhangi bir isim olabilir.
Programın çıktısı “Merhaba” olacaktır.
Örnekte görülen “using System;” satırı, Microsoft .NET Framework sınıf
kitaplığı tarafından sağlanan System adlı bir isim alanına başvuru yapıldığını ifade
etmektedir. Bu isim alanı, Main metodunda belirtilen Console sınıfını içermektedir.
İsim alanları, bir veya daha fazla programın öğelerini düzenlemek için hiyerarşik
C#, uygulamaları için bir araç sağlar. "using" ifadesi, isim alanının üyesi olan türlerin kullanımını sağlar.
varsayılan dosya “Merhaba” programı, System.Console.WriteLine için kısa yol olarak
uzantısı .cs’dir.
Console.WriteLine'ı kullanır.

90
Atatürk Üniversitesi Açıköğretim Fakültesi 3
ASP.NET: CSharp

Main metodu “Merhaba” sınıfının bir üyesidir. Statik belirleyiciye (modifier)


sahiptir ve bu nedenle bu sınıfın örneklerinden ziyade “Merhaba” sınıfında bir
yöntemdir.
Bir uygulamanın giriş noktası ve yürütülmeye başlaması için çağrılan metot
her zaman Main isimli statik bir metottur. “Merhaba” çıktısı bir sınıf kitaplığı
kullanılarak üretilir. Dilin kendisi bir sınıf kitaplığı sağlamaz. Bunun yerine, Visual
Basic .NET ve Visual C++ .NET tarafından da kullanılan bir sınıf kitaplığı kullanır.

DEĞİŞKENLER
C#’ta değişken, belirli bir veri türüne ait veri değerini içeren yapılardır. Her
değişkenin boyutunu, değişkende saklanabilecek değer aralığını ve değişkene
uygulanabilecek işlemler kümesini belirleyen bir türü vardır. C#'taki temel
değişken türleri int, double, char, string ve bool’dur.
int, tamsayı değerleri depolamak için kullanılan bir değişken ifadesidir (123,
-123 gibi). double, ondalıklı sayıları depolamak için kullanılan bir değişken
C#’ta değişken, belirli
bir veri türüne ait veri ifadesidir (1.23, -1.23 gibi). char, 'a' veya 'B' gibi tekil karakterlerin depolanmasını
değerini içeren sağlar. Karakter değerlerinin tek tırnak içinde yazılması gereklidir. String,
yapılardır. "Merhaba Dünya" gibi metinlerin depolanmasını sağlar. string ifadeler çift tırnak
içinde yazılır. bool değerlerin true veya false olmak üzere iki farklı durumda
depolanmasını sağlar.
Örnek

•int sayi=1500;
•double ondalikli_sayi= 5.43;
•string kelime="Merhaba C#";
•char karakter ='a';

int, -2.147.483.648 ile 2.147.483.647 aralığındaki 32 bit işaretli tam sayıları


depolamak için kullanılan bir değişken türüdür. float 32 bitlik, double ise 64 bitlik
ondalıklı sayıları depolamak için kullanılan bir değişken türüdür. char karakterleri
string ise karakter dizilerini depolamak için kullanılan bir değişken türüdür.
Değişken bildirimi yaparken aşağıdaki kurallara dikkat edilmesi gereklidir:
 Değişken isimleri benzersiz olmalıdır.
 Değişken isimleri yalnızca harf, rakam ve alt çizgi _ içerebilir.
 Değişken isimleri bir harfle başlamalıdır.
 Değişken isimleri büyük/küçük harf duyarlıdır. sayi ve Sayi farklı isimler
olarak kabul edilir.
 C#’ta hangi değişken türüne hangi değişkenin atanacağına dikkat
edilmelidir. Örnek olarak string türünde tanımlanmış bir değişkene bir
tamsayı değeri atanamaz.
 Değişkenler tanımlandıktan sonra kullanılabilirler.

91
Atatürk Üniversitesi Açıköğretim Fakültesi 4
ASP.NET: CSharp

 Bir değişkene, bir işlemde kullanılmadan önce bir başlangıç değeri


atanmalıdır. Aksi takdirde C# derleme zamanı hatası verecektir.

Sabitler
Sabitler, mevcut değerlerinin üzerine yazmak istemediğimiz değişkenleri
ifade etmek için kullanılır. Sabitleri tanımlamak için const anahtar sözcüğü
kullanılır. const anahtar sözcüğü, bir değişkenin her zaman aynı değeri saklaması
istenildiğinde kullanışlıdır. Örneğin, sabit olarak adlandırılan pi sayısını depolamak
Sabitler, mevcut için “const double pi=3,14;” ifadesi kullanılabilir.
değerlerinin üzerine
yazmak istemediğimiz OPERATÖRLER
değişkenleri ifade
Operatörler, derleyiciye belirli matematiksel veya mantıksal işlemleri
etmek için kullanılır.
gerçekleştirmesini söyleyen sembollerdir. C#’ta aritmetik operatörler, ilişkisel
operatörler, mantıksal operatörler, bitsel operatörler, atama operatörleri gibi
operatörler bulunmaktadır.

Aritmetik Operatörler
Aritmetik operatörler Tablo 5.1’de görüldüğü gibi toplama, çıkarma,
çarpma ve bölme gibi temel aritmetik hesaplamalar için kullanılır.
Tablo 5.1. Matematik ve Atama Operatörleri

Operatör İsim Örnek (a=6, b=3)


+ Toplama a+b=9
– Çıkartma a–b=3
* Çarpma a*b=18
/ Bölme a/b=2
% Mod bulma a%b=0
++ Bir artırma a++=7
-- Bir eksiltme a--=5

İlişkisel Operatörler
İlişkisel operatörler, iki işlenen değerinin eşit olup olmadığını belirlemek gibi
iki değişken arasındaki ilişkiyi kontrol etmek için kullanılmaktadır. İlişkisel
operatörler, yalnızca değişkenler arasındaki ilişki doğru olduğunda true değerini
döndürür. Aksi takdirde false döndürür. Örneğin, a = 10, b = 20 tamsayı
değişkenleri için (a >= b) ilişkisel operatörü uygulanırsa, a değişkeni b
değişkeninden daha küçük bir değer içerdiği için false sonucu döndürür. Tablo
5.2’de ilişkisel operatörler görülmektedir.
Tablo 5.2. İlişkisel Operatörler

Operatör İsim Örnek (a=6, b=3)


== Eşit a == b (false)
> Büyük a > b (true)
< Küçük a < b (false)
>= Büyük eşit a >= b (true)
<= Küçük eşit a <= b (false)
!= Eşit değil a != b (true)
92
Atatürk Üniversitesi Açıköğretim Fakültesi 5
ASP.NET: CSharp

Mantıksal Operatörler
Mantıksal operatörler, AND, OR ve NOT gibi iki değişken arasında mantıksal
işlem gerçekleştirmek için kullanılır. Mantıksal operatörler her zaman Boole
ifadeleriyle (true veya false) çalışır ve Boolean değer döndürür. Mantıksal
ifadelerde işlenenler yalnızca Boolean değerleri içermelidir. Aksi takdirde
mantıksal operatörler hata verecektir. Tablo 5.3’te mantıksal operatörler
görülmektedir.
Tablo 5.3. Mantıksal Operatörler

Operatör İsim Örnek (a=true, b=false)


&& AND a && b (false)
|| OR a || b (true)
! NOT !(a && b) (true)

Bitsel Operatörler
Bitsel operatörler, bitler üzerinde çalışır ve bit bit işlem gerçekleştirir.
Boolean ve tamsayı veriler üzerinde bit düzeyinde işlemler gerçekleştirilebilir. &,
|, ^ ve ~ operatörleri için doğruluk tablosu Tablo 5.4’te görülmektedir.
Tablo 5.4. Bitsel Operatörler

p q p&q p|q p^q ~p


0 0 0 0 0 1
0 1 0 1 1 1
1 1 1 1 0 0
1 0 0 1 1 0

A = 60 ve B=13 olduğu varsayıldığında, A ve B sayıları A = 0011 1100 ve B =


0000 1101 şeklinde ikili sayı düzeninde ifade edilir. A&B ifadesi, her iki sayıdaki
aynı hanedeki bitler için & işlemi yapar. A&B = 0000 1100 olacaktır. A|B ifadesi,
her iki sayıdaki aynı hanedeki bitler için | işlemi yapar. A|B = 0011 1101 olacaktır.
Mantıksal operatörler
her zaman Boole A^B ifadesi, her iki sayıdaki aynı hanedeki bitler için ^ işlemi yapar. A^B = 0011
ifadeleriyle (true veya 0001 olacaktır. ~ yalnızca bir değişken üzerinde çalışır ve her bir değişken bitini
false) çalışır. tersine çevirir. ~A = 1100 0011 olacaktır.

Atama Operatörleri
Atama operatörleri, bir değişkene yeni bir değer atamak için kullanılır ve bu
operatörler yalnızca bir değişkenle çalışır. Tablo 5.5’te atama operatörleri
görülmektedir.
Tablo 5.5. Atama Operatörleri

Operatör İsim Örnek


= Eşit int a; a=10;
+= Ekleme ataması a+=10 ifadesi a=a+10’a eşittir.
-= Çıkarma ataması a-=10 ifadesi a=a-10’a eşittir.
*= Çarpma ataması a*=10 ifadesi a=a*10’a eşittir.
/= Bölme ataması a/=10 ifadesi a=a/10’a eşittir.
%= Mod ataması a%=10 ifadesi a=a%10’a eşittir.
93
Atatürk Üniversitesi Açıköğretim Fakültesi 6
ASP.NET: CSharp

&= AND ataması a&=10 ifadesi a=a&10’a eşittir.


|= OR ataması a|=10 ifadesi a=a|10’a eşittir.
^= Ayrıcalıklı OR ataması a^=10 ifadesi a=a^10’a eşittir.
>>= Sağa kaydırma ataması a>>=2 ifadesi a=a>>2’ye eşittir.
<<= Sola kaydırma ataması a<<=2 ifadesi a=a<<2’ye eşittir.

Operatörlerde İşlem Önceliği


Operatör önceliği, bir ifadedeki terimlerin gruplandırılmasını ifade eder. Bu
işlem, bir ifadenin değerlendirilmesini etkiler. Bazı operatörler diğerlerinden daha
Bazı operatörler yüksek önceliğe sahiptir. Örneğin çarpma operatörü, toplama operatöründen
diğerlerinden daha daha yüksek önceliğe sahiptir.
yüksek önceliğe
sahiptir.
Örnek

•x = 7 + 3 * 2;
•İşleminin sonucunda x'e 13 değeri atanır. * operatörü +'dan daha
yüksek önceliğe sahiptir. Bu nedenle ilk değerlendirme 3*2 için
yapılır ve ardından elde edilen sonuca 7 eklenir.

Tablo 5.6’da operatörler ve işlem yönleri görülmektedir. İşlem önceliği en


yüksek olan operatörler tablonun en üstünde, en düşük olan operatörler ise
tablonun en altında görülmektedir. Bir ifade işlenirken, önce daha yüksek öncelikli
operatörler değerlendirilir.
Tablo 5.6. Operatörler ve Öncelikleri

Kategori Operatör İşlem Yönü


Postfix () [] -> . ++ - - Soldan sağa
Tek girdili işlem + - ! ~ ++ - - (type)* & sizeof Sağdan sola
Çok girdili işlem */% Soldan sağa
Arttırma/azaltma +- Soldan sağa
Kaydırma << >> Soldan sağa
Karşılaştırma < <= > >= Soldan sağa
Eşitlik == != Soldan sağa
Bitsel AND & Soldan sağa
Bitsel XOR ^ Soldan sağa
Bitsel OR | Soldan sağa
Mantıksal AND && Soldan sağa
Mantıksal OR || Soldan sağa
Koşul ?: Soldan sağa
Atama = += -= *= /= %=>>= <<= &= ^= |= Soldan sağa
Virgül , Soldan sağa

94
Atatürk Üniversitesi Açıköğretim Fakültesi 7
ASP.NET: CSharp

DİZİLER
Diziler, aynı türdeki öğeleri sabit boyutlu ve sıralı bir şekilde depolayan
veri yapılarıdır. Dizide bulunan öğelerin veri türleri char, int, double gibi herhangi
bir geçerli veri türü olabilir. Dizinin uzunluğu, dizide bulunan öğelerin sayısını ifade
eder. C#'da diziler için bellek tahsisi dinamik olarak yapılır. Diziler bir tür nesnedir.
Bu nedenle önceden tanımlanmış işlevleri kullanarak boyutlarını bulmak kolaydır.
Dizideki değişkenler sıralanmıştır ve her birinin 0'dan başlayan bir indeksi vardır.
C#’ta diziler hakkında bilinmesi gereken önemli noktalar şunlardır:
Diziler, aynı türdeki
öğeleri sabit boyutlu ve  C#'da tüm diziler için bellek tahsis dinamik olarak yapılır.
sıralı bir şekilde  Diziler C#'ta nesne olarak ifade edildiği için uzunlukları öğe sayıları
depolayan veri
kullanarak belirlenebilir.
yapılarıdır.
 Bir dizi değişkeni, veri türünden sonra [] operatörü kullanılarak değişken
tanımlamasında olduğu gibi tanımlanabilir.
 Dizideki değişkenlerin 0'dan başlayan bir indeksi vardır.
 Diziler, System.Array türünde bir nesnedir.
 Sayısal dizilerin varsayılan değerleri sırasıyla sıfır olacak şekilde
ayarlanmıştır.
 Dizi öğeleri, herhangi bir türde olabilir.
 Dizi türleri, Array soyut temel türünden türetilen referans türleridir. Bu
türler IEnumerable'ı uygular ve bunun için C# içindeki tüm dizilerde
foreach döngüsü kullanır.
Şekil 5.1’de, dizide elemanların indekslerine göre depolanması
görülmektedir.

Şekil 5.1. Dizide elemanların indekslerine göre depolanması


İndeks değeri, 0'dan başlar. Dizideki indeks sayısı, dizi boyutundan 1
eksiktir.

Dizilerin Başlatılması
C#'da bir dizi bildirmek için “veri_türü [] dizi_adı;” sözdizimi kullanılır. Veri
türü, dizideki öğelerin türünü belirtmek için kullanılır. dizi_adı dizinin adını belirtir.
Köşeli parantez ( [ ] ) operatörü ise bir dizi tanımlaması yapıldığını belirtir.

Dizilerin Tanımlanması
Bir dizinin tanımlanması, dizinin bellekte başlatılmasını sağlamaz. Dizi
değişkeni başlatıldığında, diziye değer atanabilir. Dizi bir referans türüdür. Bu
nedenle dizinin bir örneğini oluşturmak için new anahtar sözcüğünün kullanılması

95
Atatürk Üniversitesi Açıköğretim Fakültesi 8
ASP.NET: CSharp

gerekir. Örneğin, double[] dizi = new double [10];. Bu örnekte new ifadesi,
belirlenen boyuta göre diziye bellekte yer ayıracaktır.

Dizilere Değer Atanması


Dizilere, indeks numaraları kullanılarak aşağıdaki örnekte görüldüğü gibi
değer ataması yapılabilir. Dizi bildirimi sırasında da diziye değer atanabilir.

Örnek
•double[] dizi = new double[10];
•dizi[0] = 1500.0;
•int [] dizi_2 = new int[5] { 15, 34, 23, 47, 6};

Dizi Elemanlarına Erişim


Dizi elemanlarına indeksler kullanılarak erişilebilir. Dizi adından sonra []
operatörleri arasına erişilmek istenen indeks numarası yazılarak istenilen dizi
elemanına erişilir. Aşağıdaki örnekte,
using System; Eleman[0] = 100
namespace Dizi_Uygulamasi { Eleman[1] = 101
class Dizi_Ornegi { Eleman[2] = 102
static void Main(string[] args) { Eleman[3] = 103
int [] n = new int[10]; /* n, dizinin boyutunu Eleman[4] = 104
ifade eder. */ Eleman[5] = 105
int i,j; Eleman[6] = 106
/* Diziye elemanların atanması n */ Eleman[7] = 107
for ( i = 0; i < 10; i++ ) { Eleman[8] = 108
n[ i ] = i + 100; Eleman[9] = 109
}
/* Dizinin elemanlarının ekrana yazdırılması */
for (j = 0; j < 10; j++ ) {
Console.WriteLine("Eleman[{0}] = {1}", j, n[j]);
}
}
}
}
Örnek 5.2. Dizi Elemanlarına Erişim

Örnek 5.2’de sunulan örnekte, ilk for döngüsü kullanılarak diziye 10 adet
eleman atanmıştır. Döngünün 10 defa çalışması için for döngüsündeki i değeri,
0’dan başlatılmış ve i değeri 9 oluncaya kadar döngünün devam etmesi
sağlanmıştır. Bu sayede dizideki tüm elemanlara i değerinin 100 fazlası atanmıştır.

96
Atatürk Üniversitesi Açıköğretim Fakültesi 9
ASP.NET: CSharp

İkinci for döngüsünde ise dizideki elemanların indeks numaralarına göre sıralı bir
şekilde ekrana yazdırılması sağlanmıştır.

Dizinin Uzunluğunun Belirlenmesi


Dizideki eleman sayısını belirlemek için length metodu kullanılmaktadır.
Aşağıdaki örnekte, Volvo, BMW, Mercedes ve Ferrari elemanlarından oluşan
arabalar dizisi görülmektedir. Bu dizinin uzunluğunu belirlemek için
“arabalar.length” ifadesi kullanılmaktadır. Length metodu 4 değerine sahip integer
bir sonuç döndürecektir.
Örnek

•string[] arabalar = {"Volvo", "BMW", "Mercedes", "Ferrari"};


•Console.WriteLine(arabalar.Length);

Tek Boyutlu Diziler


Tek boyutlu dizilerde, dizi elemanlarını saklamak için yalnızca bir satır
bulunmaktadır. Tek boyutlu dizinin tüm değerleri, 0'dan dizi boyutuna kadar sıralı
olarak depolanır. Örnek 5.3’te tek boyutlu dizilerin tanımlanması, dizi
elemanlarının belirlenmesi ve foreach döngüsü kullanılarak dizi elemanlarının
yazdırılması sağlanmıştır.
using System;
namespace diziler {
class dizi_ornegi {
public static void Main()
{
string[] gunler; // Tek boyutlu dizi tanımlanması.
Günler = new string[] {"Pazartesi", "Sali", "Carsamba", "Persembe",
"Cuma", "Cumartesi", "Pazar"};
// Elemanların yazdırılması
foreach(string gun in gunler)
Console.Write(gun + " ");
}
}
}
Örnek 5.3. Tek Boyutlu Dizi Tanımlanması

Örnek 5.3’te görüldüğü gibi, foreach döngüsü döngüler konusunda ayrıca


açıklanmıştır. Foreach döngüsü bir dizi içindeki her bir elemana indeks
numaralarına göre sıralı bir şekilde erişilmesini sağlar.

97
Atatürk Üniversitesi Açıköğretim Fakültesi 10
ASP.NET: CSharp

Çok Boyutlu Diziler


Çok boyutlu diziler, dizi elemanlarını depolamak için birden fazla satır
içermektedir. Her satır uzunluğu aynı sayıda eleman içerdiği için C# dilinde
dikdörtgen dizi olarak da bilinir. Çok boyutlu diziler, 2 veya daha fazla boyutta
olabilir. Dizinin değerlerini depolamak ve erişmek için iç içe döngü gereklidir.
Örnek 5.4’te çok boyutlu dizi tanımlanması ve elemanlarının yazdırılması
görülmektedir.
using System;
namespace diziler {
class dizi_ornegi {
public static void Main()
{
string[, ] str = new string[4, 2] { { "bir", "iki" },
{ "uc", "dort" },
{ "bes", "alti" },
{ "yedi", "sekiz" } }; }
Console.WriteLine("Dizinin elemanları:");
for (int i = 0; i < 4; i++)
for (int j = 0; j < 2; j++)
Console.Write(str[i, j] + " ");
}
}

Örnek 5.4. Çok Boyutlu Dizi Tanımlanması

Örnek 5. 4’te görüldüğü gibi, 4 satır ve 2 sütundan oluşan çok boyutlu bir
dizi tanımlanmıştır. Dizinin elemanlarını yazdırmak için iç içe for döngüsü
kullanılmıştır. İlk for döngüsü 4 defa çalışacak ve diziye 4 tane satır oluşturacaktır.
İkinci for döngüsü ise her bir satır için 2 defa çalışacak ve satırlardaki elemanları
yazdıracaktır.

KONTROL YAPILARI
Bilgisayar programı, bir programlama dili kullanılarak yazılan, bilgisayarın
yürütebileceği veya yorumlayabileceği talimatlar dizisidir. Koşullu ifadeler ise
belirli koşulların karşılanması durumunda, bilgisayara vereceği kararları söyleyen
programlama yapılarıdır. Belirtilen koşulların doğru veya yanlış olması durumunda
bu kararlar verilmektedir. Söz dizimi yapısı, programlama diline göre farklılık
gösterse de tüm programlama dillerinde koşullu ifade sözdizimi vardır.
C#’ta, akış kontrolü için
Koşullu ifadeler programlama ve yazılım mühendisliği alanında hayati
if-else ve switch-case
yapıları kullanılır. öneme sahiptir. C#’ta if, else if ve else koşullu ifadelerinin yanı sıra switch case gibi
deyimlerde bulunmaktadır. Kod akışı, bir if ifadesi kullanılarak kontrol edilir. Bu
ifadeler değişkenleri değerlendirir ve doğru veya yanlış döndürür. Sonuca bağlı
olarak, kod akışı kontrol if ifadesinin parantezlerinin içine girer veya dışından
devam eder.

98
Atatürk Üniversitesi Açıköğretim Fakültesi 11
ASP.NET: CSharp

if Koşul İfadeleri
if koşul ifadesi, söz dizimi olarak açık ve kapalı parantezler içine
karşılaştırılması veya kontrol edilmesi amaçlanan koşul ya da koşulların yazıldığı
bir yapıya sahiptir. if koşul ifadesi, parantez içindeki koşulun (veya koşulların)
doğru mu yanlış mı olduğunu karşılaştırır. Doğru ise, if kod bloğu yürütülür.
Yanlışsa, yürütme kontrol edilerek bir sonraki bloğa geçer. if, boolean koşulun
İf koşul ifadesi bir şartın değerine dayalı olarak yürütülecek bir ifade seçer. Örnek 5.5’te, giriş karakterinin
gerçekleşme durumunu küçük harf, büyük harf veya sayı olup olmadığını kontrol eden bir if yapısı
kontrol etmek için görülmektedir.
kullanılır.
public class if_kosul_ifadesi
{
static void Main (String()args)
{
Console.Write("Bir karekter giriniz: ");
char c = (char)Console.Read();
if (Char.IsUpper(c))
Console.WriteLine("Karakter büyük harftir.");
else if (Char.IsLower(c))
Console.WriteLine("Karakter küçük harftir.");
else if (Char.IsDigit(c))
Console.WriteLine("Karakter bir rakamdır."); }
else
Console.WriteLine("Karakter, harf ya da sayı değildir.");
}
}

Örnek 5.5. if Koşul İfadeleri


if ifadesi bir koşulu kontrol etmek için kullanılabilirken birden fazla koşulu
kontrol etmek için de kullanılır. else if deyimi (veya Python'daki kullanımıyla elif), if
deyimine benzer bir sözdizimine sahiptir ve ardından else if bloğu gelir. else if
ifadelerinde koşullar yukarıdan aşağıya doğru kontrol edilir, eğer ilk blok true
dönerse, ikinci ve üçüncü bloklar kontrol edilmez ancak birinci if bloğu false
dönerse ikinci blok kontrol edilir. Bu kontrol, bir blok gerçek bir sonuç döndürene
kadar devam eder.
else ifadesi, tüm programlama dillerindeki tüm koşullu ifadelerin varsayılan
ifadesidir. Yani, tüm if ve else if koşulları false döndürdüğünde (yukarıdan aşağıya),
son (varsayılan) else blok ifadesi yürütülür.
İç içe if koşulları, bir if deyiminin içinde bir boole koşulu gerçekleştirmek
gerektiğinde, if deyimlerinin gömülmesi gerekli olabilir. Örnek 5.6’da iç içe if koşul
ifadesinin kullanımıyla ilgili bir örnek görülmektedir.

99
Atatürk Üniversitesi Açıköğretim Fakültesi 12
ASP.NET: CSharp

int sayi = 0;
if (sayi > 2 || sayi < 1)
{
Console.WriteLine("Sayınız 2’den büyük veya 1’den küçüktür. ");
if (sayi == 0)
Console.WriteLine("Sayınız 0’a eşittir. ");
}
else
Console.WriteLine("Lütfen bir sayı giriniz.");

Örnek 5.6. İç İçe if Koşul İfadeleri

Örnek 5.6’da if parantezlerinin içine ek bir if ifadesi eklenmiştir. İlk olarak,


değişkenler ana if deyiminde değerlendirilir. Sayı 1'den küçük veya 2'den büyükse
koşulu true olarak ayarlamak için mantıksal veya operatörü kullanılır. Değişkene 0
atandığı için bu if ifadesi doğru olarak değerlendirilir. Mantıksal veya deyimiyle, if
ifadesinin tamamının doğru döndürmesi için yalnızca bir koşulun doğru olarak
değerlendirilmesi gereklidir. İkinci koşul doğru (sayı < 1) olarak
değerlendirildiğinden, yürütme akışı if ifadesi parantezlerine düşer.
İkinci if ifadesinin yalnızca bir koşulu vardır. Sayının 0'a eşit olup olmadığını
değerlendirir. Bu nedenle, ikinci if ifadesinin içeriği de yürütülür. Yukarıdaki kodun
çıktısı, "Sayınız 2’den büyük veya 1’den küçüktür" ifadesinin yanı sıra "Sayınız 0’a
eşittir" olacaktır. Görüldüğü gibi if koşulu, kodun yürütülme şeklini kontrol
etmenin güçlü bir yoludur.

switch İfadesi
switch, koşullu ifadenin başka bir deyimidir. Kodları geleneksel if, else if ve
else koşullu ifadelerinden daha anlaşılabilir ve okunabilir hale getirir. switch
Belirli şartlar için eylem ifadelerinde, her blok bir break anahtar sözcüğü ile sonlandırılır. switch içindeki
tanımlama işlemlerinde koşullar case ile ifade edilir.
Switch yapısından
faydalanılabilir. Bir switch deyimi, switch ifadesinin sonunda, isteğe bağlı bir varsayılan
duruma sahip olabilir. Varsayılan durum, durumların hiçbiri doğru olmadığında bir
görevi gerçekleştirmek için kullanılabilir. Varsayılan durumda break anahtar
sözcüğünün kullanılması gerekmez. Break deyimine ulaşıldığında, switch sona erer
ve kontrol akışı switch deyimini izleyen bir sonraki satıra atlar. Her case ifadesinin
break anahtar kelimesi içermesi gerekmez. Herhangi bir break ile karşılaşılmazsa,
kontrol akışı break ile karşılaşana kadar diğer case ifadelerini işlemeye devam
eder.

100
Atatürk Üniversitesi Açıköğretim Fakültesi 13
ASP.NET: CSharp

int Gun = 4; // Değer ataması


switch (Gun)
{
case 1:
Console.WriteLine("Kütüphaneye git.");
break;
case 2:
Console.WriteLine("Alışverişe git.");
break;
case 3:
Console.WriteLine("Pikniğe git.");
break;
default:
Console.WriteLine("Evde kal.");
break;
}
Örnek 5.7. Switch-case Koşul İfadeleri
switch ifadesi, Örnek 5.7’de görüldüğü gibi, kontrolü gövdesindeki case
ifadelerinden birine ileterek koşulların işletilmesini sağlar.
switch ifadesindeki her koşul, true döndürene kadar test edilir. Koşullardan
birinin true döndürmesi durumunda kod yürütme işlemi, break anahtar sözcüğüne
ulaşır. case ifadelerindeki hiçbir koşul sağlanmazsa, default ile ifade edilen
varsayılan blok yürütülür. Bu nedenle Örnek 5.7’de gerçek durum “Gun = 4”
olduğu için 1, 2 ve 3 test durumlarının hiçbiri doğru döndürmediği için varsayılan
değer yürütülecektir.

DÖNGÜLER
Döngüler, belirli bir koşula bağlı olarak, bir komut veya komut dizisinin
istenilen sayıda yürütülmesini sağlar. Döngüler içinde ifadeleri yürütmek için koşul
ifadesinin sonucunun doğru olması gereklidir.
Döngüler, giriş kontrollü dönüler ve çıkış kontrollü döngüler olmak üzere
temel olarak iki kategoriye ayrılır. Giriş kontrollü döngüler, döngü gövdesinin
başlangıcında test edilecek koşulun bulunduğu döngülerdir. while döngüsü ve for
döngüsü giriş kontrollü döngülerdir. Çıkış kontrollü döngüler, döngü gövdesinin
sonunda test koşulunun bulunduğu döngülerdir. Çıkış kontrollü döngülerde,
döngü gövdesinin sonunda test koşulu mevcut olduğundan, döngü gövdesi en az
bir kez değerlendirilecektir. do-while döngüsü çıkış kontrollü döngülere örnektir.

While döngüsü, belirli while Döngüsü


bir koşul doğru olduğu
sürece belirli bir while döngüsü, belirtilen koşul false döndürene kadar bir kod bloğunu art
ifadenin tekrar tekrar arda yürütmek için kullanılır. while döngüsü, while anahtar kelimesiyle başlar ve
yürütülmesini sağlar. parantez içinde true veya false döndüren bir boole koşullu ifade içerir. Belirtilen
koşullu ifade false döndürene kadar kod bloğunu yürütür. while döngüsünü

101
Atatürk Üniversitesi Açıköğretim Fakültesi 14
ASP.NET: CSharp

kullanırken, başlatma döngü başlamadan önce yapılmalı ve artırma veya eksiltme


adımları döngü içinde olmalıdır.
public class while_Dongusu
{
public static void Main ()
{
int i = 0; // Başlatma
while (i < 10) // Koşul
{
Console.WriteLine("i = {0}", i);
i++; // Arttırma
}
}
}

Örnek 5.8. while Döngüsü

Örnek 5.8’de, while döngüsü i < 10 ifadesini içermektedir. while


döngüsünün içinde, i++ kullanılarak başlangıçta 0 olarak atanmış i'nin değeri birer
birer arttırılır. while döngüsü, i'nin değeri 10'a eşit olduğunda ve i < 10 koşulu false
döndürülene kadar yürütülür. Ayrıca Örnek 5.9’da görüldüğü gibi, belirli bir
koşulda while döngüsünden çıkmak için break veya return anahtar sözcükleri
kullanılabilir.
public class break_yapisi
{
public static void Main ()
{

int i = 0;
while (true)
{
Console.WriteLine("i = {0}", i);
i++;
if (i > 10)
break;
}
}
}

Örnek 5.9. Break Anahtar Sözcüğü

while döngüsünde, sonsuz döngülerden kaçınmak için koşullu ifadenin false


olarak değerlendirildiğinden veya bir koşulda while döngüsünden çıkıldığından
emin olunmalıdır.

102
Atatürk Üniversitesi Açıköğretim Fakültesi 15
ASP.NET: CSharp

do-while Döngüsü
do deyimi, belirtilen bir ifade false olarak değerlendirilene kadar bir deyimi
veya bir deyim bloğunu tekrar tekrar yürütür. Aşağıdaki örnekte do-while
döngüsü, y değişkeni 5'ten küçük olduğu sürece çalışır. Do-while yapısı bir süreç
sembolü ve bir koşuldan oluşur. İlk olarak, blok içindeki kod çalıştırılır ve ardından
koşul değerlendirilir. Koşul doğruysa, blok içindeki kod yeniden yürütülür. Bu
işlem, koşul yanlış olana kadar tekrarlanır. Örnek 5.10’da, x’in değeri 5’ten küçük
olduğu sürece do döngüsü içinde x’in değeri 1 arttırılacaktır.
do-while döngüsü,
koşul yanlış olsa bile public class do-while_Dongusu
başlangıçta her zaman {
en az bir yineleme public static void Main ()
gerçekleştirmesi {
dışında, while int x = 0;
döngüsüyle aynı şekilde
do
çalışır.
{
Console.WriteLine(x);
x++;
}
while (x < 5);
}
}

Örnek 5.10. do-while Döngüsü

do-while döngüsünde, koşullu ifade döngünün sonunda bulunmaktadır. Bu


nedenle döngüdeki ifadeler koşul test edilmeden önce bir kez yürütülür. Koşul
doğruysa, kontrol akışı do'ya geri döner ve döngüdeki ifadeler yeniden yürütülür.
Bu işlem, verilen koşul yanlış olana kadar tekrarlanır.

for Döngüsü
for döngüsü, kodun tekrar tekrar yürütülmesini sağlayan, yinelemeyi
belirtmek için kullanılan bir kontrol akışı ifadesidir. for döngüsü, belirtilen bir ifade
yanlış olarak değerlendirilinceye kadar bir ifadeyi veya bir ifade bloğunu tekrar
tekrar yürütür. for döngüsü, diziler üzerinde yineleme yapmak ve sıralı işleme için
kullanışlıdır. for döngüsündeki kontrol akışı aşağıdaki gibi ifade edilebilir:

 Başlatma adımı ilk önce ve yalnızca bir kez yürütülür. Bu adım, herhangi
for döngüsü, belirtilen bir döngü kontrol değişkeninin bildirilmesine ve başlatılmasına izin verir.
koşul false dönene  Daha sonra koşul değerlendirilir. Doğruysa, döngünün gövdesi yürütülür.
kadar yürütülür. Yanlış ise, döngünün gövdesi çalışmaz ve kontrol akışı, for döngüsünden
hemen sonraki bir sonraki ifadeye atlar.
 for döngüsünün gövdesi yürütüldükten sonra, kontrol akışı artış ifadesine
geri döner. Bu ifade, herhangi bir döngü kontrol değişkeninin
güncellenmesine izin verir. Bu ifade, koşuldan sonra bir noktalı virgül
göründüğü sürece boş bırakılabilir.

103
Atatürk Üniversitesi Açıköğretim Fakültesi 16
ASP.NET: CSharp

 Koşul daha sonra tekrar değerlendirilir. Doğruysa, döngü yürütülür ve


süreç kendini tekrar eder (döngünün gövdesi, ardından adım adım artırma
ve ardından bir koşul için tekrar test etme). Koşul yanlış olduğunda, for
döngüsü sona erer.
public class for_dongusu
{
public static void Main()
{
for (int i = 1; i <= 5; i++)
Console.WriteLine(i);
}
}

Örnek 5.11. for Döngüsü


Örnek 5.11’de, integer tipindeki i değişkeninin değeri konsola yazılır ve i,
foreach döngüsü, bir
dizideki veya bir öğe döngü boyunca her seferinde 1 artırılır.
koleksiyonundaki her
foreach Döngüsü
öğe üzerinde bir kod
bloğu yürütür. Bir programlama dilinde döngü, değerlendirilecek bir koşulun sonucuna
bağlı olarak bir deyimi veya bir dizi deyimi birden çok kez yürütmenin bir yoludur.
Döngüler içinde ifadeleri yürütmek için elde edilen koşul doğru olmalıdır. foreach
döngüsü, koleksiyonun öğeleri üzerinde yineleme yapmak için kullanılır.
public class foreach_dongusu
{
public static void Main()
{
int[] deneme = new int[] {0, 1, 2, 3, 4, 5};
foreach (int i in deneme)
System.Console.WriteLine( i );
}
}

Örnek 5.12. foreach Döngüsü

Koleksiyon bir dizi veya liste olabilir. Dizide bulunan her eleman için
yürütülür. foreach ifadesi, bir dizideki veya bir nesne koleksiyonundaki her öğe
için bir grup gömülü ifadeyi tekrarlar.
foreach döngüsünün deyimlerinin parantezler içine alınması gerekir. Bir
döngü sayacı değişkeni tanımlamak ve başlatmak yerine, dizinin türüyle aynı türde
bir değişken bildirimi yapılır. Ardından in ifadesi gelir ve ardından dizi adı gelir.
Döngü gövdesinde, bir dizi öğesi kullanmak yerine oluşturulan döngü değişkeni
kullanılabilir. Örnek 5.12’de, deneme adı verilen dizi içindeki elemanların ekrana
yazdırılması amaçlanmıştır. foreach döngüsü, deneme dizisindeki her bir eleman
için ekrana yazdırma işlemi yapacaktır. Bu döngü dizinin eleman sayısı kadar tekrar
edecektir. for döngüsü ve foreach döngüsü arasındaki farklar aşağıdaki gibi
sıralanabilir:

104
Atatürk Üniversitesi Açıköğretim Fakültesi 17
ASP.NET: CSharp

 for döngüsü, verilen koşul yanlış olana kadar bir deyimi veya bir deyim
bloğunu yürütür. foreach döngüsü, dizide bulunan her eleman için bir
ifade veya bir ifade bloğu yürütür ve minimum veya maksimum limiti
tanımlamaya gerek yoktur.
 for döngüsünde, dizi hem ileri hem de geri yönde yinelenir. Örneğin 0'dan
9'a ve 9'dan 0'a kadar. Ancak foreach döngüsünde, bir dizi geriye doğru
Sonsuz döngülerde,
değil, yalnızca ileri yönde yinelenir.
döngünün bir çıkış
koşulu olsa bile, hangi  Değişken bildirimi açısından, foreach döngüsünün beş değişken bildirimi
nedenle olursa olsun bu varken for döngüsünün yalnızca üç değişken bildirimi vardır.
koşula ulaşılmaz. Bu  foreach döngüsü diziyi kopyalar ve bu kopyayı işlem için yeni diziye koyar.
sebeple döngü aynı Sonsuz döngü, hiçbir zaman sona ermeyen veya bitmeyen ve süresiz olarak
kodu tekrar tekrar yinelenen bir döngüdür. Döngü koşulların hiçbir zaman yanlış olmadığı, döngünün
yürütür.
sonsuza kadar devam ettiği yapılardır. Diğer bir deyişle sonsuz döngü, test
koşulunun yanlış olarak değerlendirilmediği ve onu sonlandırmak için harici bir
kuvvet kullanılana kadar döngünün sonsuza kadar devam ettiği bir yapıdır. Sonsuz
döngüler, kod akışını olumsuz etkileyebilecek, kaçınılması gereken yapılardır.

METOTLAR
Metotlar (fonksiyonlar), belirli eylemleri gerçekleştirmek için kullanılır.
Metotlar, yalnızca çağrıldığında çalışan kod bloklarıdır. Bu sayede karmaşık bir
sorunu daha küçük parçalara bölerek, programın kolay anlaşılır ve yeniden
kullanılabilir bir hale getirilmesi sağlanır. Metotlar Örnek 5.13’te görüldüğü gibi
geri dönüş tipi, metot adı ve metot gövdesi alanlarına sahiptir.
using System;
namespace Method {
class Program {
// Metot tanımlanması
public int En_Buyuk_Eleman(int sayi1, int sayi2)
{
int result;
if (sayi1 > sayi2)
sonuc = sayi1;
else
sonuc = sayi2;

return sonuc;
}
static void Main(string[] args) {
int a = 10;
int b = 20;
int en_buyuk;
en_buyuk = En_Buyuk_Eleman (a, b);
Console.WriteLine("En büyük eleman : {0}", en_buyuk);
}
}
105
Atatürk Üniversitesi Açıköğretim Fakültesi 18
ASP.NET: CSharp

Örnek 5.13. Metot Örneği

Geri dönüş tipi, bir yöntemin ne tür bir değer döndürdüğünü belirtir.
Örneğin, bir metodun integer geri dönüş türüne sahip olması o metodun integer
değer döndüreceğini ifade eder. Yöntem bir değer döndürmezse, dönüş türü
geçersizdir. Metot adı, bir programdaki belirli bir metodu çağırmak için kullanılan
bir tanımlayıcıdır. Metodun gövdesi, bazı görevleri gerçekleştirmek için kullanılan
programlama ifadelerini içerir. Metot gövdesi, küme parantezleri { } içine alınır.
Örnek 5.13’te en büyük elemanın bulunmasıyla ilgili bir metot örneği
görülmektedir. En büyük elemanı bulma metodu, Main metot içinden
çağrılmaktadır. Metot, sayi1 ve sayi2 olmak üzere iki parametre almaktadır. Main
Kurucu, nesne metodunda a=10 ve b=20 şeklinde iki sayı metoda parametre olarak
oluşturma sırasında gönderilmiştir.
otomatik olarak
çağrılan özel bir NESNEYE YÖNELİK PROGRAMLAMA
yöntemdir. Genel
olarak yeni nesnenin Nesne Yönelimli Programlama (Object Oriented Programming-OOP),
veri üyelerini başlatmak kavramları nesneler olarak temsil eden, veri alanları ve ilişkili metotlara sahip bir
için kullanılır. programlama mantığıdır. Genellikle sınıf örnekleri olan nesneler, birbirleriyle
etkileşim kurmak için kullanılır. C#'taki tüm kod ve veriler bir sınıfa dâhil
edilmelidir. Bir sınıfın dışında bir değişken tanımlanamaz ve bir sınıfta olmayan
herhangi bir kod yazılamaz.
class Aile
{
string adi;
string soyadi;
public Aile (string adi, string soyadi)
{
this.adi = adi;
this.soyadi = soyadi;
}
}
Örnek 5.14. Sınıf örneği

Sınıflar, bir nesne oluşturulduğunda otomatik yürütülen kuruculara


(constructors) ve sınıfın bir nesnesi yok edildiğinde otomatik yürütülen bir yıkıcıya
(destructor) sahip olabilir. Sınıflar tek kalıtımı destekler ve tüm sınıflar nihayetinde
nesne adı verilen bir temel sınıftan türer. C#, sınıfların önceki sürümlerini kullanan
kodla uyumluluğu korurken sınıfların zaman içinde gelişmesine yardımcı olacak
sürüm oluşturma tekniklerini destekler. Örnek 5.14’te, Aile isimli bir sınıf göz
önüne alındığında bu sınıf, bir aile üyesinin adını ve soyadını tutan iki string
değişkenin yanı sıra bir kurucu metot içerir.

106
Atatürk Üniversitesi Açıköğretim Fakültesi 19
ASP.NET: CSharp

Örnek
•Araç, motorlu veya motorsuz her türlü hava, kara ve deniz taşıtını
ifade etmek için kullanılan bir kavramdır. Bu araçların da
hızlanma, durma, direksiyon gibi ortak davranışları ve ortak
özellikleri vardır. Bu özelliklere sahip bütün nesneler için araç bir
sınıf olarak düşünülebilir. Otomobil, uçak ve gemi araç sınıfından
türetilmiş alt sınıflardır.

C#, sınıfların isim alanı adı verilen bir sınıflar koleksiyonunda


gruplandırılmasına olanak tanır. İsim alanlarının adları vardır ve sınıf
koleksiyonlarını mantıksal gruplar halinde düzenlemeye yardımcı olur. .NET
Framework ile ilgili tüm isim alanları System ile başlar. Microsoft ayrıca geriye
dönük uyumluluk ve API erişimine yardımcı olan bazı sınıfları dâhil etmektedir. Bu
sınıflar, Microsoft isim alanında bulunur.
Genellikle aynı isime sahip birden fazla metot kullanılmak istendiğinde aşırı
yükleme (overloading) kavramı ön plana çıkmaktadır. Aşırı yükleme, farklı işleve
sahip metotların aynı ada sahip olmasına izin verir. Kurucuların aşırı yüklemesi,
farklı parametreler kümesi ve farklı sayıda parametre ile birden çok kurucu
oluşturmak için kullanılmaktadır. Bir sınıfın farklı bir şekilde kullanılmasını sağlar.
Aynı sınıf, kurucuların aşırı yüklenmesine bağlı olarak farklı türde davranabilir. Bu
sayede örneğin bir nesne basit bir dizi mesajı gösterebilirken, farklı parametre ile
nesnenin bir aritmetik hesaplama yapması sağlanabilir.

Kalıtım
C#'ta kalıtım, bir nesnenin üst nesnesinin tüm özelliklerini ve davranışlarını
otomatik olarak elde ettiği bir süreçtir. Bu şekilde, başka bir sınıfta tanımlanan
öznitelikler ve davranışlar yeniden kullanabilir, genişletilebilir veya değiştirilebilir.
Kalıtım, nesneye yönelik programlamanın önemli bir bileşenidir. Bir sınıfın
başka bir sınıfın özelliklerini (alanlarını ve yöntemlerini) devralmasına izin veren
mekanizmadır. Kalıtımın temel kavramları süper sınıf, alt sınıf ve yeniden
kullanılabilirliktir.
 Süper sınıf: Özellikleri miras alınan sınıf, süper sınıf (temel sınıf veya üst
sınıf) olarak bilinir.
 Alt sınıf: Diğer sınıfı miras alan sınıf, alt sınıf (türetilmiş sınıf veya
genişletilmiş sınıf) olarak bilinir. Alt sınıf, üst sınıf alanlarına ve
Kalıtım, nesne yönelimli yöntemlerine ek olarak kendi alanlarını ve yöntemlerini ekleyebilir.
programlamanın temel
 Yeniden kullanılabilirlik: Kalıtım, yeniden kullanılabilirlik kavramını
kavramlarından biridir
ve özellikleri bir sınıftan destekler. Yeni bir sınıf oluşturmak istendiğinde ve istenilen kodun bir
(temel) başka bir (alt)
sınıfa miras almak için
kullanılır.

107
Atatürk Üniversitesi Açıköğretim Fakültesi 20
ASP.NET: CSharp

kısmını içeren bir sınıf zaten varsa, yeni sınıf mevcut sınıftan türetilebilir.
Bunu yaparak, mevcut sınıfın alanları ve yöntemleri yeniden kullanılabilir.
Bir sınıftan miras almak için “:” sembolü kullanılmaktadır. Örnek 5.15’te
görülen örnekte, Dikdortgen sınıfı (alt) Sekil sınıfından (üst öğe) alanları ve
metotları devralmaktadır.

Miras, namespace Kalitim {


gereksinimlerinize göre class Sekil {
diğer sınıf üyelerinin public void Genislik(int g) {
davranışlarını yeniden genislik = g;
kullanmak, genişletmek }
ve değiştirmek için public void Yukseklik(int y) {
özellikleri diğer
yukseklik = y;
sınıflardan devralarak
yeni bir sınıf }
oluşturmanızı protected int genislik, yukseklik;
sağlayacaktır. }
class Diktortgen: Sekil { //Türetilen sınıf
public int Alan() {
return (genislik * yukseklik);
}
}
class Deneme {
static void Main(string[] args) {
Diktortgen d = new Diktortgen();
d.genislik(8);
d.yukseklik(9);
Console.WriteLine("Alan: {0}", d.Alan());
}
}
}

Örnek 5.15. Kalıtım Örneği


C#'ta, başka bir sınıfın üyelerini miras alan sınıfa türetilmiş sınıf, üyeleri
miras alınan sınıfa ise temel sınıf denir. Türetilmiş sınıf, temel sınıf için özel sınıftır.
Kalıtımın avantajı ise kodun yeniden kullanılabilirliğini sağlamaktır. Kalıtım, üst
sınıfın özelliklerinin, alt sınıf tarafından yeniden kullanılabilmesini sağlar.
Dolayısıyla tekrar üye tanımlamaya gerek yoktur. Bu işlem de daha az kod
yazılmasını sağlayacaktır.

108
Atatürk Üniversitesi Açıköğretim Fakültesi 21
ASP.NET: CSharp

•Kalıtım konusuna bir bankanın kredi satışı için oluşturduğu

Örnek
çeşitli sınıf yapıları örnek olarak verilebilir. Kredi üst sınıfından
türetilmiş ihtiyaç kredisi, konut kredisi ya da taşıt kredisi gibi
seçenekler alt sınıftır.

Nesne Oluşturma
Sınıf, bir nesne için şablon tanımlar. Bir sınıf, kendisine ait olan nesnelerin
içeriğini (değişkenler, metotlar) tanımlar. Nesneler, sınıfların örnekleridir. Nesneler
kendi sınıflarının davranışlarına sahiptir. Nesne, programların gerçek bileşenidir.
Sınıf ise örneklerin nasıl oluşturulduğunu ve nasıl davrandıklarını belirtir.
Örnek 5.16’da, Otomobil isimli bir sınıf oluşturulmuştur. Bu sınıf nesneler
oluşturmak için kullanılabilir.
class Otomobil
{
string renk = "mavi";
static void Main(string[] args)
{
Otomobil oto = new Otomobil();
Console.WriteLine(oto.renk);
}
}

Örnek 5.16. Nesne Oluşturma


Otomobil sınıfından yeni bir nesne oluşturmak için, öncelikle sınıf adı ve
ardından oluşturulacak nesnenin adı belirtilir ve new (yeni) anahtar sözcüğü
kullanılır. Bir sınıf (oto.renk) içindeki değişkenlere ya da alanlara erişmek için
nokta (.) kullanılmaktadır.

•Siz de çok düzey kalıtıma örnek olarak Araç, Kara_Aracı ve


Bireysel Etkinlik

Otomobil sınıflarını oluşturunuz.


•Kara_Aracı sınıfından Otomobil sınıfını türetiniz. Her sınıf için
metotlar oluşturunuz.

Soyut Sınıflar ve Metotlar


Veri soyutlama, belirli ayrıntıları gizleme ve kullanıcıya yalnızca temel
bilgileri gösterme işlemidir. Soyutlama, soyut sınıflar ya da arabirimler aracılığı ile

109
Atatürk Üniversitesi Açıköğretim Fakültesi 22
ASP.NET: CSharp

gerçekleştirilebilir. Soyut anahtar kelimesi, sınıflar ve yöntemler için kullanılabilir.


Soyut sınıf, nesneler oluşturmak için kullanılamayan kısıtlı bir sınıftır. Soyut
sınıflara erişmek için başka bir sınıftan miras alınması gerekir. Soyut yöntem
yalnızca soyut bir sınıfta kullanılabilir ve bir gövdesi yoktur. Gövde, türetilmiş sınıf
tarafından kalıtımla sağlanır. Soyut bir sınıf hem soyut hem de normal yöntemlere
sahip olabilir.
Örnek 5.17’de görülen örnekte, Hayvan sınıfının bir nesnesini oluşturmak
mümkün değildir. Soyut sınıfa erişmek için başka bir sınıftan miras alınması
gerekir.
abstract class Hayvan
{
public abstract void Hayvan_Sesi();
public void uyku()
{
Console.WriteLine("Zzz");
}
}

Örnek 5.17. Soyut Sınıf Örneği

Kapsülleme
Kapsülleme, verilerin tek bir birim altında toplanması olarak tanımlanır.
Kodu ve manipüle ettiği verileri birbirine bağlayan bir mekanizmadır. Kapsülleme,
verilere bu kalkanın dışındaki kodun erişmesini engelleyen koruyucu bir kalkandır.
Kapsüllemede, bir sınıfın değişkenleri veya verileri diğer herhangi bir sınıftan
gizlenir ve yalnızca bildirildikleri kendi sınıfının herhangi bir üye işlevi aracılığıyla
erişilebilir. Kapsüllemede, bir sınıftaki veriler diğer sınıflardan gizlenir, bu nedenle
veri gizleme olarak da bilinir.

Çok Biçimlilik
Çok biçimlilik (polimorfizm), bir sınıfa aynı ada sahip birden çok
uygulamaya sahip olma yeteneği sağlar. C#'da statik (çalışma zamanı çok
biçimliliği) ve dinamik (çalışma zamanı çok biçimliliği) olmak üzere iki tür çok
biçimlilik vardır. Statik ok biçimliliğe, metot aşırı yüklemesi örnek olarak verilebilir.
Aşırı yüklemede, metot/fonksiyon aynı ada ancak farklı imzalara sahiptir. Hangi
metodun çağrılacağına derleme zamanında karar verildiği için derleme zamanı
polimorfizmi olarak da bilinir. Dinamik ok biçimlilikte, yöntem adı ve yöntem
imzası (parametre sayısı ve parametre türü) aynı olmalıdır. Derleyici, işlevselliği
geçersiz kılmak için kullanılabilen yöntemin farkında olmaz, bu nedenle derleyici
derleme zamanında bir hata vermez. Derleyici, çalışma zamanında hangi yöntemin
çağrılacağına karar verir ve herhangi bir yöntem bulunamazsa bir hata atar.

110
Atatürk Üniversitesi Açıköğretim Fakültesi 23
ASP.NET: CSharp

• GİRİŞ
• C#, C ve C++'dan türetilmiş basit, modern nesne yönelimli ve güvenli bir
programlama dilidir.
• Visual C# .NET, Microsoft'un C# geliştirme aracıdır. Etkileşimli bir geliştirme
ortamı, pencereler ve Web uygulamaları oluşturmak için görsel tasarım
yardımcıları, derleyici ve hata ayıklayıcı içerir.
Özet
•DEĞİŞKENLER
•C#’ta değişken, belirli bir veri türüne ait veri değerini içeren yapılardır. Her
değişkenin boyutunu, değişkende saklanabilecek değer aralığını ve değişkene
uygulanabilecek işlemler kümesini belirleyen bir türü vardır. C#'taki temel
değişken türleri int, double, char, string ve bool’dur.
•OPERATÖRLER
•Operatörler, derleyiciye belirli matematiksel veya mantıksal işlemleri
gerçekleştirmesini söyleyen sembollerdir. C#’ta aritmetik operatörler,
ilişkisel operatörler, mantıksal operatörler, bitsel operatörler, atama
operatörleri gibi operatörler bulunmaktadır.
•DİZİLER
•Diziler, aynı türdeki öğeleri sabit boyutlu ve sıralı bir şekilde depolayan veri
yapılarıdır.
•Dizide bulunan öğelerin veri türleri char, int, double gibi herhangi bir geçerli
veri türü olabilir.
•Dizinin uzunluğu, dizide bulunan öğelerin sayısını ifade eder.
•Dizideki değişkenler sıralanmıştır ve her birinin 0'dan başlayan bir indeksi
vardır.
•Çok boyutlu diziler, dizi elemanlarını depolamak için birden fazla satır
içermektedir. Her satır uzunluğu aynı sayıda eleman içerdiği için C# dilinde
dikdörtgen dizi olarak da bilinir. Çok boyutlu diziler, 2 veya daha fazla
boyutta olabilir.
•KONTROL YAPILARI
•Koşullu ifadeler, belirli koşulların karşılanması şartıyla bilgisayara belirli
eylemleri gerçekleştirmesini söyleyen programlama dillerinin özellikleridir.
•Koşullu ifadeler, bilgisayara bazı koşullar verildiğinde vereceği karar
konusunda talimat vermek için çeşitli programlama dilleri aracılığıyla
kullanılır.
•if Koşul İfadeleri
•if koşul ifadesi, söz dizimi olarak açık ve kapalı parantezler içine
karşılaştırılması veya kontrol edilmesi amaçlanan şartların yazıldığı bir yapıya
sahiptir.
•switch İfadesi
•switch ifadelerinde, her blok bir break anahtar sözcüğü ile sonlandırılır.
switch içindeki ifadeler case ile ifade edilir.
•switch ifadesi, kontrolü gövdesindeki case ifadelerinden birine ileterek
birden çok seçimi ve numaralandırmayı işleyen bir kontrol ifadesidir.
•DÖNGÜLER
•while Döngüsü
•while döngüsü, belirtilen koşul false döndürene kadar bir kod bloğunu art
arda yürütmek için kullanılır.
•while döngüsü, while anahtar kelimesiyle başlar ve parantez içinde true veya
false döndüren bir boole koşullu ifade içerir.
•Belirtilen koşullu ifade false döndürene kadar kod bloğunu yürütür.
•do-while Döngüsü

111
Atatürk Üniversitesi Açıköğretim Fakültesi 24
ASP.NET: CSharp

•do deyimi, belirtilen bir ifade false olarak değerlendirilene kadar tekrar
tekrar parantezler içine alınmış bir deyimi veya bir deyim bloğunu yürütür.
•do while yapısı bir süreç sembolü ve bir koşuldan oluşur.
Özet (devamı) •İlk olarak, blok içindeki kod çalıştırılır ve ardından koşul değerlendirilir.
•Koşul doğruysa, blok içindeki kod yeniden yürütülür.
•Bu işlem, koşul yanlış olana kadar tekrarlanır.
•for Döngüsü
•for döngüsü, belirtilen bir ifade yanlış olarak değerlendirilinceye kadar bir
ifadeyi veya bir ifade bloğunu tekrar tekrar yürütür.
•for döngüsü, diziler üzerinde yineleme yapmak ve sıralı işleme için
kullanışlıdır.
•foreach Döngüsü
•foreach döngüsü, bir dizi veya listenin öğeleri üzerinde yineleme yapmak için
kullanılır. Dizide bulunan her eleman için yürütülür.
•METOTLAR
•Metotlar (fonksiyonlar), belirli eylemleri gerçekleştirmek için kullanılır.
•Metotlar, yalnızca çağrıldığında çalışan kod bloklarıdır.
•Metotlar geri dönüş tipi, metot adı ve metot gövdesi alanlarına sahiptir.
•Nesneye Yönelik Programlama
•Nesne yönelimli programlama, kavramları nesneler olarak temsil eden, veri
alanları ve ilişkili metotlara sahip bir programlama mantığıdır.
•Sınıflar, sınıfın bir nesnesi oluşturulduğunda yürütülen kuruculara
(constructors) ve sınıfın bir nesnesi yok edildiğinde yürütülen bir yıkıcıya
(destructor) sahiptir.
•Kalıtım
•C#'ta kalıtım, bir nesnenin üst nesnesinin tüm özelliklerini ve davranışlarını
otomatik olarak elde ettiği bir süreçtir.
•Bu şekilde, başka bir sınıfta tanımlanan öznitelikler ve davranışlar yeniden
kullanabilir, genişletilebilir veya değiştirilebilir.
•Soyut Sınıflar ve Metotlar
•Veri soyutlama, belirli ayrıntıları gizleme ve kullanıcıya yalnızca temel
bilgileri gösterme işlemidir.
•Kapsülleme
•Kapsülleme, verilerin tek bir birim altında toplanması olarak tanımlanır.
Kodu ve manipüle ettiği verileri birbirine bağlayan bir mekanizmadır.
•Polymorphism
•Polimorfizm (çok biçimlilik), bir sınıfa aynı ada sahip birden çok uygulamaya
sahip olma yeteneği sağlar.

112
Atatürk Üniversitesi Açıköğretim Fakültesi 25
ASP.NET: CSharp

DEĞERLENDİRME SORULARI
1. Döngüdeki komutların koşul sağlanmasa da en az bir defa çalıştırılmasının
istendiği durumlarda aşağıdaki döngülerden hangisi kullanılır?
a) Do-While
b) For
c) Switch-Case
d) Foreach
e) If

2. Kalıtım vasıtasıyla türetilen bir sınıfta, temel sınıfta var olan bir metodu
yeniden tanımlamak için aşağıdaki kelimelerden hangisi kullanılmalıdır?
a) abstract
b) main
c) class
d) new
e) public

3. C#’ta bir sınıf tanımlamak için aşağıdaki anahtar kelimelerden hangisi


kullanılır?
a) Function
b) Namespace
c) Main
d) Inheritance
e) Class

4. Aşağıdaki seçeneklerden hangisinin ekran çıktısı X’in değeri=5 ve y’nin


değeri=7 şeklinde olur?
a) Console.WriteLine(“X’in değeri = x y’nin değeri=y”);
b) Console.WriteLine(“X’in değeri = {0} y’nin değeri={1}” + 5 + 7);
c) Console.WriteLine(“X’in değeri = {0} ve y’nin değeri={1}”, 5, 7);
d) Console.Write(“X’in değeri = {0} y’nin değeri={1}”, 5, 7);
e) Console.WriteLine(“X’in değeri = {0} y değeri={1}”, 5, 7);

5. Koşul ifadelerinin karşılaştırılmasında kullanılan operatörlere ne ad verilir?


a) İlişkisel
b) Mantıksal
c) Döngüler
d) Dallanma
e) Akış

113
Atatürk Üniversitesi Açıköğretim Fakültesi 26
ASP.NET: CSharp

6. String türündeki “isim” değişkeni “C#” içeriğine sahipse “C#’a hoşgeldiniz”


mesajını ekrana basan kod parçacığı aşağıdakilerden hangisidir?
a) If (ad = “C#”){ C#’a hoşgeldiniz };
b) If (isim ==” C#”) Console.Write(“C#’a hoşgeldiniz”);
c) If (isim = =“ C#” )Write(“C#’a hoşgeldiniz”);
d) If (isim = “C#”) Console.Write(“C#’a hoşgeldiniz”);
e) If (isim = “C#”) Console.Write(“C#’a hoşgeldiniz”)

int not=80;
if (not>70)
{ Console.WriteLine("Başarılı-"); }
else {
Console.WriteLine("Başarısız"); }

7. Yukarıdaki kodun ekran çıktısı hangisidir?


a) Başarılı-
b) Başarısız
c) Başarılı
d) Başarılı-Başarısız
e) –Başarısız

for(int i=3; i<=6;i++)


{
Console.WriteLine(“Merhaba”);
}

8. Aşağıdaki kod parçası çalıştırılınca “Merhaba” kelimesi ekranda kaç defa


görüntülenir?
a) 2
b) 3
c) 4
d) 5
e) 6

114
Atatürk Üniversitesi Açıköğretim Fakültesi 27
ASP.NET: CSharp

I. Kalıtım ile yalnızca tek sınıf türetilir.


II. Kalıtım ile türetilen sınıf temel sınıfın constructor metodunu
çağırabilir.
III. Constructor metotlar bir sonuç döndürür.
9. C#’ta sınıf kavramı için yukarıda verilenlerden hangisi veya hangileri
doğrudur?
a) Yalnız I
b) Yalnız II
c) I ve II
d) II ve III
e) I, II ve III

10. Aşağıda verilen for döngüsü kullanımlarından hangisi yanlıştır?


a) for(;;)
b) for(i=0;i<5;i++)
c) for(i=0;i<100;i=i+5)
d) for(i=a;i>z;i++)
e) for(i=10;i>0;i--)

Cevap Anahtarı
1.a, 2d., 3.e, 4.c, 5.b, 6.b, 7.a, 8.c, 9.c, 10.d

115
Atatürk Üniversitesi Açıköğretim Fakültesi 28
ASP.NET: CSharp

YARARLANILAN KAYNAKLAR
Dallanma ifadeleri ve döngüler. 11 Ocak 2022 tarihinde
http://programming-incsharp.blogspot.com/2014/04/branching-and-looping.html
adresinden erişildi.
C#’ta Döngüler. 13 Ocak 2022 tarihinde
https://www.geeksforgeeks.org/loops-in-c-sharp/ adresinden erişildi.
C#’ta Döngüler. 15 Ocak 2022 tarihinde
https://www.tutorialspoint.com/csharp/csharp_loops.htm adresinden erişildi.
C#’ta Kalıtım. 17 Ocak 2022 tarihinde
https://www.geeksforgeeks.org/c-sharp-inheritance/ adresinden erişildi.
Nakov, S. & Kolev, V. (2013). Fundamentals of Computer Programming with C#:
The Bulgarian C# Book. Faber Publishing.
Posadas, M. (2016). Mastering C# and. NET Framework. Packt Publishing Ltd.
Price, M. J. (2020). C# 9 and. NET 5–Modern Cross-Platform Development-: Build
intelligent apps, websites, and services with Blazor, ASP. NET Core, and
Entity Framework Core using Visual Studio Code. Packt Publishing Ltd.
Ravalcaba, Z. (2004). Build your own ASP. Net Website Using C# and VB. NET.
Taher, R. (2019). Hands-On Object-Oriented Programming with C#: Build
maintainable software with reusable code using C. Packt Publishing Ltd.

116
Atatürk Üniversitesi Açıköğretim Fakültesi 29
ASP.NET: MVC

• ASP.Net Formlar
• IIS
İÇİNDEKİLER

• ASP.Net Formlar ve MVC İNTERNET


Karşılaştırması
• ASP.Net MVC PROGRAMCILIĞI II
• Controller Öğr. Gör. Dr. İ. Cihan
• Model
• View YETİŞKEN

• Bu üniteyi çalıştıktan sonra;


• ASP.Net çatısı kavramlarını
açıklayabilecek,
HEDEFLER

• IIS öğrenebilecek,
• ASP.Net Formlar ve MVC
arasındaki farkları bilecek,
• ASP.Net MVC çatısını
kavrayabilecek,
• ASP.Net MVC ile web uygulaması
geliştirebileceksiniz.

ÜNİTE

6
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP.Net:MVC

ASP.NET Web Formlar

IIS – Internet Information Services

ASP.NET MVC
ASP.NET

Model View Controll MVC

Layout Partial
View View

Veri Taşıma

ViewData ViewBag TempData ViewModel

118
Atatürk Üniversitesi Açıköğretim Fakültesi 2
ASP.Net:MVC

GİRİŞ
ASP, 1996 yılında yayınlanmış ve 2002 yılına kadar kullanımına devam
ASP.Net, Microsoft edilmiştir. 2002 yılında ise yerini ASP.Net’e bırakmıştır (Active Server Pages, 2022).
firmasının geliştirmiş Bu bölümde, ASP.Net ile birlikte yeni bir web uygulamaları geliştirme
olduğu bir web
platformu olan ASP.Net web formlar tanıtılmıştır. Bu platformun bir önceki klasik
geliştirme
platformudur. ASP platformuna göre en önemli farkı code behind teknolojisi yani sunucu tarafı
kodların, arayüz geliştirmek için yazılan HTML, CSS, JavaScript kodlarından farklı
bir sayfada yazılabilmesidir. Bununla birlikte klasik ASP teknolojisinde olduğu gibi
arayüz içerisinde de sunucu taraflı kodlar yazılabilmektedir. Bu tekniğe satır içi
kodlama denilmektedir.
ASP.Net Web Formlar, Windows Forms Application ile masaüstü uygulama
geliştirebilen herkesin, web ortamında da rahat bir şekilde uygulama geliştirmesi
için tasarlanmıştır. Her iki proje tipi de textbox, label gibi kontrollerin sürükle-bırak
ile oluşturabildiği ve olay tabanlı programlamaya imkan sağlayan proje tipleridir.
Masaüstü uygulamalardan farklı olarak web uygulamalarında arayüzlerin HTML,
CSS ve JavaScript ile kodlanması gerekmektedir.
ASP.Net Web Forms ile birçok proje geliştirilmiştir ve günümüzde halen
kullanılmaya devam edilmektedir. Her ne kadar yoğun bir şekilde kullanılmış olsa
da, modern uygulama geliştirmenin gerisinde kalmaktan kurtulamamıştır. Bu
nedenle Microsoft firması, web form uygulamalarına alternatif olarak ASP.Net
çatısı altında yeni bir platform olan MVC (Model-View-Controller) yapısını
geliştirmiştir.
MVC ile geliştirilen uygulamalarda kodların ayrı parçalar halinde yazılması
ile kod yazma, hata ayıklama, test etme gibi yazılım geliştirme süreçlerinde
kolaylıklar sağlanmıştır. Bu nedenlerden dolayı günümüzde ASP.Net kullanılarak
yeni bir web uygulaması geliştirme işleminde MVC daha çok tercih edilmektedir.

ASP.Net Web Formlar

ASP.Net Web Form Uygulaması

Code Behind
Arayüz Kodları (Sunucu Taraflı
HTML, CSS, JS Kodlar)
C#, VB

Sunucu taraflı kodlar, sunucu kaynaklarına örneğin veri tabanları gibi


kaynaklara erişmek için kullanılan kodlardır. Bu kodların yazılmasında ASP.Net’in
desteklediği programlama dilleri kullanılır.
ASP.Net çatısının resmi programlama dili C#’tır.

119
Atatürk Üniversitesi Açıköğretim Fakültesi 3
ASP.Net:MVC

ASP.Net Web Form Uygulamaları geliştirebilmek için Visual Studio geliştirme


ortamında faydalanılır. Visual Studio, Microsoft firmasının geliştirmiş olduğu,
birçok yazılım geliştirme sürecinin yönetilebildiği bir ortamdır.
ASP.Net Web Form uygulamalarında her sayfaya web form ya da ASP.net
sayfası denilmektedir. Sayfaların uzantısı “.aspx” olmaktadır. Örnek bir web form
aşağıdaki gibidir.

Web Formlarda sunucu


taraflı ve istemci taraflı
kodlar aynı anda
yazılabilir.
Örnek 6.1. Örnek ASP.Net Web Form Sayfası
Sayfa incelendiğinde klasik HTML kodlarının bulunduğu görülmektedir.
Bununla beraber sayfanın birinci satırında ASP.Net direktifleri bölümünde Sayfa
Direktifi (Page Directive) bulunduğu görülmektedir. Direktifler, sayfa tarafından
kullanılacak ayarları belirtirler (Directives for ASP.Net Web Pages, 2022).
Örnek 6.1.’de görülen sayfa direktifinde, sayfada kullanılacak olan sunucu
taraflı programlama dilinin C# olduğu, sayfa yüklenirken tüm olayların (event)
tetikleneceği, sunucu taraflı yazılacak olan kodların bulunduğu sayfanın (code
behind) default.aspx.cs olduğu ve WebApplication2 isim uzayı içerisinde bulunan
_default sınıfından kalıtıldığı bilgileri yer almaktadır.
Şimdi, bir button ve bir label kontrolü kullanarak satır içi bir başka deyişle
arayüze yazılan kodlarla bir örnek yapalım.

Örnek 6.2. Sunucu Taraflı Kodların Arayüze Yazılması


Örnek 6.2. incelendiğinde, sunucu taraflı çalışan C# kodlarının, HTML kodları
ile birlikte yazıldığı görülmektedir. Bu noktada 5. Satır incelendiğinde sunucu
taraflı kodların yazılabilmesi için bir <script> etiketi açılmıştır ve “runat” özelliğine
ise “server” değeri atanmıştır. Bu atama ile script etiketi arasına yazılacak olan
kodların sunucu tarafından çalıştırılıp derleneceği bilgisi verilmiştir.

120
Atatürk Üniversitesi Açıköğretim Fakültesi 4
ASP.Net:MVC

Yazılan C# kodları incelendiğinde, btnMsg_Click adında bir metod


tanımlaması yapıldığı görülmektedir. İş yapan kod bloklarına metod denir. Bu
metod ile de sayfada bulunan bir Label kontrolünün Text değeri değiştirilmektedir.
19. satırda sayfaya eklenen button, 20. Satırda ise label kontrolleri
görülmektedir. Her iki kontrolün de ortak özelliği asp: ile başlaması ve
runat=”server” değerlerine sahip olmalarıdır. “asp:” ile başlayan bu kontrollere
Web Form Kontrolleri sunucu kontrolleri ismi verilmektedir. Bu kontroller, diğer Html kontrolleri gibi
asp: ile başlarlar. Bu web tarayıcıları tarafından anlaşılamamakta, uygulama çalıştığında sayfada
kontroller tarayıcılar görüntülenebilmeleri Render adı verilen işlem gerçekleşmesi gerekmektedir. Bu
tarafından
işlem, bir sonraki başlıkta anlatılacaktır.
anlaşılmadığından,
sunucuda Sayfaya eklenen ve ID’si bntMsg olan buton incelendiğinde OnClick olayına
yorumlanarak btnMsg_Click metodunun atandığı görülmektedir. Bunun anlamı, bu butona
kullanıcıya HTML tıklandığında btn_Click metodu çalıştıracak ve bu sayede Label kontrolünün text’i
formatında gönderilir.
“Merhaba Dünya!” olarak değiştirilecektir.
Örnek 6.2.’de anlatılan aynı senaryo, code behind tekniği ile de yapılabilir.

Örnek 6.3. Code Behind Tekniği ile Geliştirildiğinde .aspx Sayfası İçeriği

ASP.Net ile geliştirilen


uygulamalar, IIS
sunucusu tarafından
çalıştırılırlar.
Örnek 6.4. Sunucu Taraflı Kodların Yazıldığı Code Behind Sayfası
Code Behind tekniğinin en önemli avantajı, sunucu tarafında çalışacak olan
kodların ayrı bir dosyaya yazılarak, arayüz geliştirmede kod kalabalığının
azaltılmasıdır. Örnek 6.3. incelendiğinde arayüz için sadece HTML ve kontrolleri
içeren kodlar olduğu görülmektedir. Örnek 6.4.’de ise WebApplication2 isim uzayı

121
Atatürk Üniversitesi Açıköğretim Fakültesi 5
ASP.Net:MVC

altında _default isimli bir sınıf ve bu sınıf içerisinde de daha önce yazdığımız
btnMsg_Click metodunun bulunduğu görülmektedir. Bu noktada adı geçen isim
uzayı ve sınıfı sayfa direktifinden hatırlayınız. Arayüz ve Code Behind sayfaları
bağlantısı bu direktif ile sağlanmaktadır.
Örnek 6.3.’de görülen dosyanın uzantısı .aspx iken, sunucu taraflı kodların
yazıldığı dosyanın uzantısının .aspx.cs olduğu görülmektedir. Burada belirtilen cs,
C# (C Sharp)’ın kısaltmasıdır.
Görüldüğü üzere sunucu taraflı kodların yazılabilmesi için Code Behind
tekniği kullanımı, iş mantığı ve arayüz geliştirme mantığını birbirinden ayırarak
daha temiz bir geliştirme yapılmasına olanak sağlamaktadır.

ASP.Net Web Formlar ve MVC Karşılaştırması


ASP.Net web formların en önemli özelliği, sunucu tarafında olay tabanlı web
ASP sayfaları IIS programlama yapmaya olanak sağlamasıdır. Örnek ile açıklayacak olursak,
tarafından HTML’e kullanıcının bir butona tıklayarak işlem yaptırması bir olaydır. ASP.Net web form
dönüştürülerek cevap uygulamalarında olaylar sunucu taraflı yazılan metodlarla ilişkilendirilebilir. Örnek
oluşturulmaktadır. Bu 6.2 incelendiğinde, sayfaya eklenen button’un Click olayı, OnClick özelliğine
işleme render btnMsg_Click değeri atanarak bir metod ile ilişkilendirilmiştir. Bu metod sayfa
denilmektedir.
içerisinde ya da Code Behind sayfasına desteklenen programlama dilleri ile
yazılabilir. Örnek 6.2’de sayfa içerisinde, Örnek 6.4’de ise Code Behind sayfasına
C# dili ile yazıldığı görülmektedir.
ASP.Net web form uygulamalarında her web form’un arkasında çalışan bir
Code Behind sayfası bulunmaktadır. Bu noktada her web form sayfası bir Code
Behind sayfası ile çalışabilmektedir. MVC uygulamalarında ise View’lere farklı
Controller ve actionlar’dan erişilebilmektedir.
Web Formlarda kontroller sunucu kontrolü olarak oluşturulmaktayken,
MVC’de kontrolleri oluşturmak için HTML yardımcıları kullanmak zorunlu değildir.
View’ler içerisinde doğrudan HTML kontrolleri yazılabilir (Choudhary, 2019). Bu da
render aşamasının daha hızlı bir şekilde gerçekleşmesi anlamına gelmektedir.
ASP.Net MVC Web form uygulamalarında sayfa durumlarının korunması için geliştirilen
Uygulamaları, Model- yapıya ViewState adı verilmektedir. Bu yapının çalışması şu şekilde olmaktadır.
View-Controller Örneğin kullanıcı bir kayıt formu doldururken eksik bir alan bırakarak kayıt ol
yapılarından
butonuna tıkladığında, sayfa sunucuya gönderilir. Bu sırada eksik alan sunucu
oluşmaktadır.
tarafından tespit edilerek sayfa kullanıcıya geri gönderilir ve hata mesajı verilir. Bu
iletişim sırasında kullanıcın doldurduğu diğer alanların durumlarının başka bir
deyişle içeriklerinin korunması gerekir. Sunucu, cevap hazırlığı yaparken diğer alan
içeriklerini sayfanın kaynağına şifreleyerek kayıt eder. Bu da sunucudan gelen
verinin boyutunu arttırdığı için sayfanın ağırlaşmasına sebep olur. Çok sayıda
sunucu kontrolü içeren sayfalarda kaydedilen durumların büyüklüğü de çok
artmaktadır. MVC’de ise bu şekilde bir durum yönetimine gerek olmamaktadır.
MVC temel yapı olarak kavramların birbirinden bağımsız kodlanmasını esas
almaktadır. Buradaki temel kavramlar Model, View ve Controller’dır. Kavramların
bağımsız geliştirilmesi, kaynak kodların daha temiz yazılabilmesi ve üretilebilmesi,

122
Atatürk Üniversitesi Açıköğretim Fakültesi 6
ASP.Net:MVC

sunucuya düşen iş yükünün azalması, daha kolay test edilebilir uygulamalar


geliştirilmesi, çok katmanlı uygulamalar geliştirmeye daha yatkın esnek bir yapıya
sahip olması nedeniyle, yeni bir web uygulaması geliştirilirken ASP.Net MVC
kullanımı tavsiye edilmektedir.
Tablo 6.1. ASP.Net Web Forms ve MVC Farkları

WebForms MVC
Olay Tabanlı Programlama Evet Hayır
Code Behind Evet Hayır
Sunucu Kontrolleri Evet Hayır
ViewState Evet Hayır
Daha Temiz Kod Hayır Evet
Kolay Test Edilebilir Uygulama Hayır Evet
Model-View-Controller Ayrımı Hayır Evet
Kolay Hata Ayıklama Hayır Evet

ASP.Net MVC Core


ASP.Net MVC Core, Microsoft’un .Net Core çatısı altında geliştirilmiştir ve
bir web uygulaması geliştirme platformudur. .NET Core çatısının .NET
Framework’den farkı tüm işletim sistemlerinde çalışabilen uygulamalar
geliştirilebilmesidir. Bununla birlikte .NET Core tamamen yeniden geliştirilmiş olup
daha performanslıdır. Model, View, Controller kelimelerinin baş harflerinden
oluşan MVC’nin temel amacı, iş ve işlemleri birbirinden ayırarak, okunabilir,
düzenlenebilir ve test edilebilir bir kodlama ortamı sağlamaktır. Günümüzde birçok
modern web uygulaması ASP.Net MVC ile geliştirilmektedir.

MVC Routing
mekanizması ile
kullanıcının
anlayabileceği URL
yapıları oluşturmak
mümkündür. Bu yapılar
aynı zamanda arama
motoru optimizasyonu
için de oldukça
kullanışlıdır. Şekil 6.1. ASP.Net MVC Core Çalışma Mantığı (Dospinescu ve Donu, 2020)
1- Kullanıcı, web tarayıcısı aracılığı ile bir URL girişi yaparak sunucuya istekte
bulunur.
2- IIS tarafından karşılanan bu istek, MVC’nin Routing mekanizmasına iletilir.
3- Routing mekanizması, URL ve Controller’lar arasındaki eşleştirmeye
bakarak uygun Controller’ı arar. Controller bulunursa içindeki yapılan
isteğe uygun metod çağırılır.

123
Atatürk Üniversitesi Açıköğretim Fakültesi 7
ASP.Net:MVC

4- Gelen isteği karşılayan Controller, gerekirse MODEL katmanı ile iletişime


geçerek isteğe cevap verir.
5- Controller’ın vereceği cevap bir View ile olacaksa, ilgili View tespit edilerek
hazırlanır.
6- Cevap olarak tespit edilen View, HTTP cevabının bir parçası olarak
kullanıcıya iletilir.
7- İletilen View, HTML formatına dönüştürülerek kullanıcın tarayıcısında
görüntülenir (Dopinescu ve Donu, 2020).

Visual Studio 2019 ile Bir MVC Core Projesi Oluşturma


• Visual Studio 2019 açıldığında proje oluşturma ekranı başlatılır. Bu
ekrandan “Create a new project” butonu ile yeni proje oluşturma
aşamalarına geçilir. Açılan proje şablonu seçim ekranında, C#
programlama dili seçildikten sonra, ASP.NET Core Web Application
Proje isimlendirmesi
yapılırken, projenin şablonu seçilmelidir.
yaptığı işe uygun ve • Projenin adı belirtildikten sonra bilgisayarda kaydedilecek konum
kolay hatırlanacak
seçilmelidir.
isimler verilmelidir.
İsimlendirme sırasında • Açılan ekranda, proje tipi olarak ise “Web Application (Model-View-
Türkçe karakter, boşluk Controller)” seçilmelidir. Burada dikkat edilmesi gereken nokta, sağ tarafta
kullanılmamalıdır. bulunan Configure for HTTPS seçeneğinin bu aşamada seçili olmamasıdır.
Bu seçenek sadece SSL sertifikaları kurulumu yapılacak web uygulamaları
geliştirilmesi aşamasında kullanılmalıdır.

Visual Studio, birden


çok programlama dilini
desteklediğinden, yeni
proje oluştururken dil
seçimine dikkat
edilmelidir.

Şekil 6.2. ASP.Net Core Proje Yapısı

Solution’lar, projeleri bir arada tutan yapılardır. Şekil 6.2.’de yeni


oluşturulan proje için bir de solution oluşturulduğu görülmektedir. Gerektiği
takdirde bu solution içerisine başka projeler de eklenebilir.

124
Atatürk Üniversitesi Açıköğretim Fakültesi 8
ASP.Net:MVC

Oluşturulan proje yapısı incelendiğinde, Model, View ve Controller’lar için


ayrı klasörler oluşturulduğu görülmektedir.
Visual Studio ile oluşturulan bu proje, çalışabilen örnek bir proje olarak
hazırlanmaktadır. Ünitenin bundan sonraki bölümlerinde, projenin Model-View-
Controller yapıları,
uygulamaya gelen Controller klasörlerine yeni dosyalar eklenerek devam edecek ve her birinin
istekleri karşılayarak çalışma mantığı anlatılacaktır. Geliştirilecek olan örnek uygulama ile Öğrenci
işlemleri yaptıktan listeleme işlemi yapılacaktır.
sonra kullanıcıya
sonuçları View’ler Controller
aracılığı ile gösterirler. Uygulamaya gelen istekleri karşılayan yapılara Controller denir. Sadece
sunucu taraflı kodların yazıldığı yerdir. Controller’ lar, istekleri karşılayarak,
gerektiğinde model katmanı ile de iletişime geçerek kullanıcıya bir view ya da
JSON formatında cevap vermektedirler.

Uygulamaya Yeni Bir Controller Eklemek

• Projeye yeni bir controller eklemek için, proje içindeki Controllers


klasörüne sağ tıklayıp, Add -> Controller… seçeneği seçilmelidir.
• Açılan ekrandan, MVC Controller – Empty seçeneği seçilip, Add butonuna
tıklanarak devam edilmelidir.
• MVC Controller – Empty seçeneği seçilip, Name alanına Controller ismi
Controller girilmelidir. Geliştirilecek olan örnek uygulamada öğrenci işlemleri
isimlendirmede yapılacağından, controller ismi OgrenciController.cs olarak belirlenmiştir.
verilecek ismin yanına
• MVC uygulamalarında controller isimlendirmeleri yapılırken, dikkat
Controller ifadesi
eklenir. edilmesi gereken nokta, istenilen ismin sonuna Controller ifadesinin
eklenmesi gerektiğidir. Bu şekilde eklenen dosyanın bir controller dosyası
olduğu MVC tarafından anlaşılmaktadır.

• İsimlendirmede dikkat edilecek diğer bir nokta ise, Türkçe karakterler ve


boşluk kullanılmadan kelimeleri bitişik yazarak baş harflerinin büyük
yazılmasıdır. Bu yazım tekniğine Pascal notasyonu denilmektedir ve C# dili
ile programlama yapılırken tercih edilen bir tekniktir.

namespace MvcWebApp.Controllers
{
public class OgrenciController : Controller
{
public IActionResult Index()
{
return View();
}
}
}

Örnek 6.5. Oluşturulan OgrenciController Dosyası İçeriği


Controller eklendikten sonra karşımıza Örnek 6.5’de görülen C# kodları
gelmektedir. Bu kodlar incelendiğinde, eklenen controller’ın bir class olduğu ve
Controller isimli class’dan kalıtım yoluyla türetildiği görülmektedir.

125
Atatürk Üniversitesi Açıköğretim Fakültesi 9
ASP.Net:MVC

Class içerisinde, Index isimli bir metod tanımlaması yapıldığı görülmektedir.


ASP.Net MVC’de controller class’ları içerisinde oluşturulan metodlara, action
metodlar denir. Metod’un geri dönüş tipi “ActionResult” interface’i olarak
tanımlanmıştır. Bu Interface, ViewResult, ActionResult gibi class’ların base
interface’i olup, metodun bu tiplerin hepsinde geri dönüş yapmasına olanak
sağlamaktadır.
Index metodunun geriye View() metodu döndürdüğü görülmektedir. Bu
metod’un geri dönüş tipi incelendiğinde ViewResult olduğu görülmektedir. Bu veri
tipi ile, kullanıcı arayüzleri olan View’ların geri dönüşü yapılabilmektedir.

Portlar, veri alış Uygulamayı derleyip çalıştırılmak için F5 kısayolu kullanılabilir. Uygulama
verişinin yapıldığı çalıştırıldığında web tarayıcısı açılarak Şekil 6.3’deki ekran gelmektedir.
kapılardır.

Şekil 6.3. MVC Uygulaması Çalıştırıldığına Gelen Tarayıcı Ekranı


Uygulama çalıştıktan sonra Şekil 6.3.’de görüldüğü üzere adres satırında
localhost:50029 yazdığı görülmektedir. Localhost, yerel sunucu anlamına
gelmektedir. ASP.Net Core MVC uygulamaları Windows işletim sistemi üstünde, IIS
sunucularında çalışmaktadırlar.
Uygulamanın çalışması için herhangi bir sunucu kurulumu yapılmadığı halde
IIS’in çalışmasının sebebi, Visual Studio 2019 kurulumu ile birlikte IIS Express ismi
verilen bir geliştirme ve test sunucusunun da yüklenmesinden kaynaklanmaktadır.
Adres satırında görülen “50029“ sayısı ise, uygulamanın üstünde çalıştığı port
numarasını göstermektedir.
Adres satırı, localhost:50029/Home/Index olarak değiştirilerek
denendiğinde, aynı sayfanın görüntülendiği gözlemlenmektedir. Bu durum, bu
adresin varsayılan adres yapısı olduğunu göstermektedir. Bu ifade yazılsa da,
yazılmasa da aynı sayfa açılmaktadır. Bunun sebebi, MVC Routing mekanizmasıdır.

MVC Routing
Routing işlemleri, Routing kelimesi, rotalama anlamına gelmektedir. Bu sistem ile adres
startup class’ı içerisinde satırına yazılan adreslerle yapılan isteklerin, oluşturulan rotalar aracılığı ile
yapılmaktadır controller’lara, oradan da action metod’lara iletilmesi sağlanır. Böylece erişilen
metodun geri döndürdüğü View kullanıcılara iletilmektedir. Routing mekanizması,
kullanıcılar tarafından anlaşılabilen adresleme imkanı sağlamaktadır. Bununla
birlikte arama motorları optimizasyonu için de önemli bir rol oynamaktadır.

126
Atatürk Üniversitesi Açıköğretim Fakültesi 10
ASP.Net:MVC

“localhost:50029/Home/Index“ adresi incelendiğinde, HomeController


içinde bulunan Index action metoduna istek yapıldığı görülmektedir. Bu isteğin
yapılabilmesi için MVC projesi oluşturulurken, rotalama işlemleri otomatik olarak
yapılmıştır.

app.UseEndpoints(endpoints =>
{
Bir metod geriye View endpoints.MapControllerRoute(
name: "default",
döndürüyorsa mutlaka pattern: "{controller=Home}/{action=Index}/{id?}");
dönüşü karşılayan bir });
View eklenmelidir.
Örnek 6.6. Rotalama İşlemlerinin Yapıldığı Startup.cs Dosyası İçindeki Configure Metodu
ASP.Net MVC’de rotalama işlemleri, Örnek 6.6’da görülen proje içerisinde
bulunan Startup class’ı içerisinde yapılmaktadır.
Configure metodu içerisinde “EndPoints” kavramı ile rotalama işlemlerinin
yapıldığı görülmektedir. Rotaya eklenen endpoint adı “default”, pattern’i yani rota
deseni “{controller=Home}/{action=Index}/{id?}” olduğu görülmektedir. Bu desen,
sunucu adından sonra “/” işareti eklenerek controller adı yazılacağı, ardından yine
“/” işareti eklenerek action adı yazılacağını göstermektedir. Varsayılan
controller=Home, varsayılan action ise Index olarak belirtilmiştir.
Rota deseninin sonunda görülen “id” ifadesi ise opsiyoneldir. Bu durum,
yanında bulunan soru işaretinden anlaşılmaktadır.
Bu bilgilerden yola çıkılarak eklenen OgrenciController içindeki Index action
metoduna erişmek için adres satırına localhost:50029/Ogrenci/Index yazılması
gerektiği sonucuna varılmaktadır. Bu noktada Index, rotalama tanımlamasına göre
varsayılan action ismi olduğundan yalnızca localhost:50029/Ogrenci yazılarak da
aynı sayfaya ulaşılabilir.
Adres satırına localhost:50029/Ogrenci yazılarak istek yapıldığında Index
metodu ile ilişkili bir View bulunmadığından hata mesajı içeren ekran ile
karşılaşılmaktadır.

View Kavramı
ASP.Net MVC uygulamalarında verileri göstermek ve kullanıcılar ile
etkileşime geçmek için kullanılan yapılara View adı verilmektedir. View’ler, Razor
adı verilen işaretleme dili içeren HTML şablonlarıdır.
Bir view içerisinde C#
kodu yazmak için @ View dosyalarının uzantısı .cshtml’dir. View’ler, dosya uzantısından da
işareti kullanılır. anlaşılacağı üzere, Razor yapısında C# programlama dili ile HTML işaretleme dilinin
birleşiminden oluşmaktadır (Smith ve Brock, 2021).
Controller içerisinde bulunan ve View sonucu döndüren action metodlar için
View tanımlamaları yapılabilmektedir. Action metodun hazırladığı veriler, View
içerisinde gösterilerek kullanıcıya ulaştırılmaktadır.
Proje dosya yapısı incelendiğinde, proje içerisinde “Views” ismi verilen
klasör bulunmaktadır. Projeye ait tüm View’ler bu klasör içerisinde controller
isimleri ile sistematik olarak tutulmaktadır. Örneğin Home klasörü içerisinde

127
Atatürk Üniversitesi Açıköğretim Fakültesi 11
ASP.Net:MVC

görülen “Index.cstml” ve “Privacy.cshtml” View dosyaları, HomeController içindeki


action metodlarla ilişkili View dosyalarıdır.
Önceki bölümde, Ogrenci/Index metoduna istek yapıldığında henüz View
eklenmediği için hata mesajı alınmaktaydı. Bu hata mesajının düzeltilerek
kullanıcıya View sonucu gösterilebilmesi için Index metodunun dönüşünü
Bir metoda View karşılayacak bir View ekleme işlemi yapılmalıdır.
eklemek için, metod Bir action metod View eklemek için, metodun üstünde sağ tıklayarak açılan
üstünde sağ tıklanarak
menüden “Add View” seçeneğinin seçilmesi gerekmektedir.
açılan menüden Add
View seçeneği Açılan diyalog penceresinden “Razor View” seçeneği seçilerek “Add”
seçilmelidir. butonuna tıklanmalıdır. Razor motoru, HTML ve C# kodlarının birlikte yazılmasını
sağlayan yapıdır.
View eklenirken her View için bir isim belirlenmektedir. View ekleme işlemi,
Index metodu üstünden gerçekleştirildiğinden, “View Name” olarak Index
otomatik olarak getirilmiştir. Bu noktada farklı bir isim vermek de mümkündür
ancak bu durumda Index metodu içerisinde View dönüşü yapılırken, return
View(“YeniViewAdi”); şeklinde isim belirtilerek dönüş yapılmalıdır.
Yeni View ekleme işlemi tamamlandıktan sonra projenin Views klasöründe
Ogrenci klasörü oluşturulmuş ve içerisine Index.cshtml adıyla View kaydedilmiştir.

Metodlar için eklenen


View isimleri varsayılan
olarak, metod ismi ile
aynıdır ancak istenirse
değiştirebilir.

Örnek 6.7. Oluşturulan Index.cshtml View Dosyasının İçeriği


Örnek 6.7 incelendiğinde, yeni oluşturulan View içerisinde HTML kodları
ağırlıklı olduğu görülmektedir. 2 ve 4. Satılar arasında ise, @ işareti ile başlayan bir
blok yapısı oluşturulduğu görülmektedir. Bu blok yapısına Razor blokları denir.
Razor blokları içerisinde çok satırlı C# kodları yazmak mümkündür. Blok
@{} Razor blokları içerisindeki kod incelendiğinde, Layout=null ifadesiyle, bu View’ın herhangi bir
içerisinde çok satırlı C# layout kullanmadığı görülmektedir.
kodları
Yeni eklenen View’in <body> etiketleri arasına yeni bir <h1> etiketi açarak
yazılabilmektedir.
Öğrenci Listesi başlığı ekleyelim.

128
Atatürk Üniversitesi Açıköğretim Fakültesi 12
ASP.Net:MVC

•Index View’i İçerisine Başlık Ekleme

Örnek
•<body>
• <h1>Öğrenci Listesi</h1>
•</body>

Buraya kadar anlatılan kısım özetlenecek olursa, kullanıcılar tarayıcıları


aracılığı ile MVC uygulamasına istek yapmaktadırlar ve yapılan istekler ilgili
controller içindeki ilgili metod ile karşılanarak kullanıcıya HTML formatında cevap
döndürülmektedir. Yapılan örnekte, kullanıcı adres satırına “Ogrenci” yazarak
istekte bulunduğundan, varsayılan rotalamaya göre, OgrenciController classındaki
Index metoduna istek yapmış olmaktadır.
Her sayfada
görüntülenmesi istenen Layout View
menü gibi içerikler,
layout sayfalarında Web uygulama arayüzleri geliştirilirken, uygulamayı oluşturan her sayfada
tanımlanırlar. ortak görüntülenmesi gereken nesneler vardır. Örneğin uygulama içerisinde
gezinebilmek için kullanılan menüler, her sayfanın altında bulunması gereken altı
bilgi alanları vb. gibi. Bu nesneleri her sayfaya ayrı ayrı yazarak oluşturmak
mümkün olsa da, bir değişiklik yapılması gerektiğinde her sayfada ayrı ayrı yapmak
gerekmektedir.
Her sayfada aynı nesneleri tekrar tekrar oluşturmanın olumsuzlukları ve bir
kere yaz, her yerde kullan ilkesine uygun olarak arayüz geliştirmek için “Layout”
yapıları kullanılmaktadır. Layout’lar içerisine her sayfada görüntülenmesi istenen
nesneler yerleştirilmektedir.
Yeni bir MVC uygulaması başlatıldığında, uygulama içerisinde varsayılan bir
layout şablonu ile gelmektedir. Oluşturulan şablon, Views -> Shared klasörü
içerisinde _Layout.csthml olarak bulunmaktadır.

Varsayılan layout _Layout.cshtml doyası açıldığında içeriğinde HTML kodları ile birlikte bazı C#
dosyası, Views->Shared kodları olduğu görülmektedir.
klasörü içerisinde yer
alan _Layout.cshtml’dir. Layout sayfalarında önemli detaylardan birisi de “@RenderBody()”
metodunun çağırılmasıdır. Metod ile bu Layout sayfasını kullanan View’ların
içeriklerinin sayfanın bu noktasında gösterileceği bildirilmektedir.
Uygulamaya Layout kullanan bir View eklenmek istendiğinde, aşağıdaki
adımlar takip edilir.
1- View eklenmek istenen metoda sağ tıklanarak Add View seçilir.
2- Razor View seçilir
3- Açılan pencereden “Use a layout page” seçilerek “Add” butonuna tıklanır.
Burada herhangi bir layout adı belirtilmezse varsayılan layout olan Views->Shared
klasörü içindeki _Layout.cshtml dosyası kullanılır.

129
Atatürk Üniversitesi Açıköğretim Fakültesi 13
ASP.Net:MVC

MODEL Kavramı
Modeller, bellekte verilerin temsil edilebilmeleri için yazılan sınıflardır. .Net
çatısı altında önceden tanımlanmış değer tipi ve referans tipi veri tipleri
Uygulama içerisinde bulunmakla birlikte, bu veri tipleri her zaman ihtiyacı karşılamamaktadır. Örneğin
kullanılan verilerin metinsel bir veri bellekte string tipi ile temsil edilebilirken, sayısal veriler byte, int,
bellekte temsil
double, float gibi önceden tanımlanmış veri tipleri ile temsil edilmektedirler.
edilebilmesi için Model
sınıfları kullanılır. Önceden tanımlanmış veri tipleri uygulama geliştirilme esnasında sıkça
kullanılsa da, yeni veri tipi tanımlama ihtiyacı da ortaya çıkmaktadır. Bu noktada
model kavramından yararlanılmaktadır.
Örneğin bellekte bir öğrenci temsil edebilmek için .Net çatısı altında
önceden tanımlanmış bir veri tipi bulunmamaktadır. Bu durumda yeni bir veri tipi
oluşturma ihtiyacı ortaya çıkmaktadır.
C# dilinde veri tipi oluşturmanın birden fazla yöntemi bulunmaktadır.
Bunlardan en sık kullanılan yöntem yeni bir class tanımlamaktır. Class’lar kullanıcı
tanımlı bir veri tipi olup aynı zamanda referans tipidir.
Model klasörüne yeni bir class eklemek için Model klasörüne sağ tıklanarak
açılan menüden, Add->Class seçeneği seçilmelidir.
Açılan pencerede class isimlendirmesi yapılmalıdır. Yeni eklenen class’a
Model eklemek için Ogrenci ismi veriniz. Class dosyalarının uzantısı .cs’dir.
Models klasörüne sağ
Class ekleme işlemi tamamlandıktan sonra, bir öğrenciyi bellekte temsil
tıklanarak, Add->Class
edebilmek için gerekli alanların tanımlaması class içerisinde yapılmalıdır. Örnek
seçeneği seçilir.
6.9’ da ad, soyad ve sınıf alanlarının tanımlaması property olarak yapılmıştır.

public class Ogrenci


{
public string Ad { get; set; }
public string Soyad { get; set; }
public string Sinif { get; set; }
}

Örnek 6.9. Ogrenci Class’ı İçerisinde Property Tanımlamak

Bu işlem tamamlandıktan sonra, Models klasörüne Ogrenci.cs dosyası


kaydedilmiştir.

Controller’dan View’a veri taşıma yöntemleri


Bir MVC uygulaması geliştirilirken, controller’dan ilgili view’lara sık sık veri
taşıma işlemi yapılmaktadır. Örneğin kullanıcı controller’a istekte bulunduğunda,
ViewData yapısı, ilgili action metod veri tabanından veriyi çekerek ilişkili olduğu View’a
anahtar-değer gönderebilir. Başka bir senaryoda ise controller içerisinde yapılan bir işlem sonucu
çiftlerinden oluşan bir elde edilen verinin View’a gönderilmesi gerekebilir.
koleksiyondur.
ViewData ile veri taşıma
ViewData, adından da anlaşılacağı üzere view verisi taşımakta kullanılan bir
yöntemdir. ViewData’lar ile object tipinde veriler Controller’dan View’lara

130
Atatürk Üniversitesi Açıköğretim Fakültesi 14
ASP.Net:MVC

taşınabilir. C# programlama dilinde her veri tipi, Object class’ından türetildiğinden,


ViewData ile her veri tipindeki veriler taşınabilmektedir.

public class OgrenciController : Controller


{
public IActionResult Index()
{
ViewData["SayfaBaslik"] = "Öğrenci Listesi";
return View();
}
}

Örnek 6.10. ViewData İle Veri Taşıma


ViewData yapısı, anahtar-değer çiftleri şeklinde verileri tutan bir
koleksiyondur. Örnekte anahtar olarak “SayfaBaslik”, değer olarak ise “Öğrenci
Listesi” değerinin kullanıldığı görülmektedir. Bu tip koleksiyon yapılarında
anahtarlar tekil olmalıdır. “SayfaBaslik” anahtarı bu metod içerisinde başka bir
ViewData için kullanılmamalıdır.
ViewData, değer olarak object tipinde değerler taşımakla beraber, anahtar
olarak ise sadece string tipinde değerler kabul etmektedir (ASP.Net MVC –
ViewData, 2022).

<h1> @ViewData["SayfaBaslik"]</h1>

Örnek 6.11. Controller’dan Gönderilen ViewData’nın View İçerisinde Kullanımı


Controller tarafından View’a gönderilen ViewData, Örnek 6.11.’deki gibi
kullanılmaktadır. Bu ifade, sayfada ViewData içeriğinin görüntülenmesi istenen
yerde kullanılabilir.
Burada dikkat edilmesi gereken noktalar;
• ViewData bir C# kodu olduğundan, erişebilmek için @ işareti
kullanılmalıdır.
• Controller tarafında verilen key değeri, View’de de aynı şekilde
yazılmalıdır.
Uygulama çalıştırılıp Ogrenci/Index metoduna istek yapıldığında, Şekil
6.4’de görüldüğü gibi “SayfaBaslik” key değerine sahip ViewData verisi olan
“Öğrenci Listesi” string’i, sayfa içerisinde olarak gösterilmektedir.

ViewBag yapısı, arka


planda ViewData
koleksiyonunu
kullanmaktadır.

Şekil 6.4. ViewData ile Controller’dan Taşınan Verinin View’da Gösterilmesi

131
Atatürk Üniversitesi Açıköğretim Fakültesi 15
ASP.Net:MVC

ViewBag ile veri taşıma


ViewBag yapısı, arka planda ViewData ile aynı koleksiyonu kullanmaktadır.
Bu noktadan bakıldığında ViewBag ile de object tipindeki veriler View’lara
taşınabilmektedir.
ViewData ile taşınan aynı verinin ViewBag ile taşınması Örnek 6.12’de
gösterilmiştir.

public class OgrenciController : Controller


{
public IActionResult Index()
{
ViewBag.Baslik = "Öğrenci Listesi";
return View();
}
}

Örnek 6.12. ViewBag İle Veri Taşımak


Örnek 6.12’de ViewBag ile veri taşıma işlemi görülmektedir. ViewData ve
ViewBag aynı koleksiyon yapısını kullandığından, ikisinin aynı anda kullanılması
gerektiği durumlarda aynı anahtar değerlerinin kullanılmaması gerekmektedir.

<h1> @ViewBag.Baslik</h1>

Örnek 6.13. ViewBag ile Controllerden Taşınan Veriye View İçerisinde Erişmek
Örnek 6.13. incelendiğinde, Örnek 6.12’de oluşturulan ViewBag’in View
içerisinde nasıl erişileceği görülmektedir.

TempData ile veri taşıma


TempData, controller’dan View’e veri taşıma işlemlerinden birisidir.
TempData aynı zamanda View’dan Controller’a, bir action metod’dan diğer
TempData, controller action metoda’da veri taşıma işlemi yapabilmektedir (ASP.Net MVC – TempData
içindeki metodlar arası ,2022).
da veri taşıma
yapabilmektedir. Temp kelimesi, İngilizce temporary kelimesinin kısaltması ve geçici anlamına
gelmektedir. TempData yöntemi ile taşınan veriler, ulaşıldıktan sonra bellekten
silinmektedir.

public class OgrenciController : Controller


{
public IActionResult Index()
{
TempData[“GeciciVeri”] = "Öğrenci Listesi";
return View();
}
}

Örnek 6.14. TempData İle Veri Taşımak


View içerisinden TempData ile taşınan veriye erişmek için Örnek 6.15’de
görülen kod yazılmalıdır.

132
Atatürk Üniversitesi Açıköğretim Fakültesi 16
ASP.Net:MVC

<h1> @TempData[“GeciciVeri”]</h1>

Örnek 6.15. View İçerisinde TempData İle Taşınan Veriye Erişmek

ViewModel ile veri taşıma


MVC ile uygulama geliştirilirken, model ile veri taşıma işlemi sıkça
gerçekleştirilen işlemlerden bir tanesidir. Model katmanında oluşturulan classlar
aracılığı ile elde edilen veriler, View’lere taşınabilmektedir. Taşıma işlemi, action
metodlar içerisinden döndürülen View() Metodu ile gerçekleştirilmektedir.
Örnek Uygulama:
Öğrenci listesi hazırlayıp View’de göstermek
1- OgrenciController class’ı içinde bulunan Index() action metodu içerisinde
Verilerin modellerek liste oluşturulur.
View’e aktarılmasında
ViewModel yöntemi Bu uygulamada listenin veri tipi olarak Model klasörüne eklenen Ogrenci
kullanılır. class’ı kullanılmıştır.

public IActionResult Index()


{
List<Ogrenci> ogrenciler = new List<Ogrenci>
{
new Ogrenci{Ad="Ahmet",Soyad="Mehmet",Sinif="1-A"},
new Ogrenci{Ad="Ali",Soyad="Veli",Sinif="1-A"},
new Ogrenci{Ad="Hakan",Soyad="Yılmaz",Sinif="1-A"}
};
return View(ogrenciler);
}

Örnek 6.16. Öğrenci Listesi Oluşturup View’e Göndermek

Örnek 6.16.’de bulunan kodlarda, View() metodunun 4. Kullanımının


kullanılarak Index isimli View’e, ogrenciler isimli listenin model olarak gönderildiği
görülmektedir.

View’larda controller’ın 2- Controller’dan gönderilen modeller, View’den karşılanmalıdır. Gelen


gönderdiği modeller, modeli karşılayabilmek için View’in en üst satırına @model ifadesi ve yanına
@model ifadesi ile gelecek olan modelin tipi yazılmalıdır. Bu işlem şekil 6.17’de gösterilmiştir.
karşılanır.
@model List<Ogrenci>

Örnek 6.17. Controller’dan Gönderilen Modelin, View’de Karşılanması


3- Karşılanan model içerisinde bulunan öğrenci listesinin ekrana
yazdırabilmesi için “foreach” döngüsünden faydalanılmıştır. Öğrenci listesi, “HTML
table” kullanılarak ekranda görüntülenmiştir. Burada dikkat edilmesi gereken
nokta, sadece tekrar eden satırların “foreach” döngüsü içerisinde alınması
gerektiğidir. Örneğin tablo başlıkları, “<table>” etiketleri gibi yapılar tek yazılması
gerektiğinden, “foreach” döngüsüne dahil edilmemiştir. Örnek 6.18’de listeleme
işlemi gösterilmiştir.

133
Atatürk Üniversitesi Açıköğretim Fakültesi 17
ASP.Net:MVC

<table class="table table-striped">


<thead>
<tr>
<th>Ad</th>
<th>Soyad</th>
<th>Sınıf</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Ad</td>
<td>@item.Soyad</td>
<td>@item.Sinif</td>
</tr>
}
</tbody>
</table>

Örnek 6.18. Model ile Taşınan Öğrenci Listesinin View’da Gösterilmesi

Listeleme işlemi yapılan tablonun görselleştirilmesi için “Bootstrap” table


class’ından faydalanılmıştır.
Listeleme işlemi için “foreach” döngüsü ile yapılmıştır. Döngü yazılırken
içinde dönülecek koleksiyon yerine “Model” yazıldığı görülmektedir. Buradaki
“Model” ifadesi, View tarafından karşılanan modeli, bir başka deyişle
@model ile karşılanan “List<Ogrenci>” listesini temsil etmektedir. Bu döngü, “öğrenci listesi içinde
modele, View içerisinde bulunan her bir öğrenci için dönen döngü” olarak da okunabilir. Bu sayede liste
istenilen yerde Model içindeki tüm öğrencilere tek tek ulaşıp ekrana bilgiler yazdırılmaktadır.
(Baş harfi büyük) ifadesi
ile ulaşılabilir. Bilgilerin ekrana yazdırılabilmesi için, “<tr>” ile oluşturulan satır içerisindeki
“<td>” ler içerisine, “@item.” İle başlayan ifadeler yazılmıştır. Döngü yapısı
incelendiğinde her bir “item” bir öğrenciyi temsil etmektedir. Bu sayede örneğin
“@item.Ad” ifadesi ile listedeki her öğrencinin Ad bilgisine ulaşılabilir.
Öğrenci bilgilerine ulaşıp ekrana yazdırırken HTML ve C# kodlarının birlikte
kullanıldığı görülmektedir. HTML kodu arasına C# kodu yazdırabilmek için “@”
işaretinden faydalanılmıştır.
4- View içerisine yazılan kodlar tamamlandıktan sonra uygulama çalıştırılıp
“/Ogrenci” adresine istek yapıldığında Şekil 6.5’deki ekran karşımıza çıkmaktadır.

Şekil 6.5. Öğrenci Listesinin Tarayıcıda Görüntülenmesi

134
Atatürk Üniversitesi Açıköğretim Fakültesi 18
ASP.Net:MVC

• Siz de bir konu belirleyerek listeleme işlemi yapınız.

Bireysel Etkinlik
Dikkat etmeniz gerekenler;
• Model class'ı içindeki alanların doğru belirlenmesi,
Örn. Araba class'ı için, marka,model,renk vb.
• Oluşturulacak listenin yazılan model class'ı tipinde
olması,
• ViewModel ile veri taşıma işlemi yapılması,
• Aynı taşıma işlemini ViewBag ile de deneyiniz.

135
Atatürk Üniversitesi Açıköğretim Fakültesi 19
ASP.Net:MVC

•Bu bölümde ASP.Net MVC konusu ele alınmıştır. ASP.Net, Microsoft firması
tarafından geliştirilen bir web uygulaması geliştirme çatısıdır. Uygulama
geliştime çatılar, bir platformda uygulama geliştirebilmek için gerekli olan
kütüphaneleri, editörleri, programlama dillerini sunan yazılımlar bütünüdür.
Bu çatılar sayesinde istenilen platformda daha hızlı uygulama geliştirmek
mümkündür.
•ASP.Net öncesinde ASP (Active Server Pages) ile kullanılmaktaydı ve hem
Özet
sunucu hem de istemci taraflı kodlar aynı sayfa içerisine yazılmaktaydı.
ASP.Net geliştirilmesi ile birlikte bu kodlar birbirinden ayrılarak daha düzenli
bir kod yazım ortamı oluşturulmuştur. ASP.Net ilk lanse edildiği dönemde,
web uygulamaları geliştirmek için Web Form ortamını tanıtmıştır.
•Web Form uygulamaları, windows form uygulamalarına benzer olarak olay
tabanlı web uygulaması geliştirmeye olanak sağlayan web uygulaması
geliştirme ortamıdır. Bu ortam sayesinde sunucu taraflı kodlar,
"code behind" ismi verilen teknikle arayüzü oluşturan istemci kodlarından
ayrıştırılmıştır. Uygulamayı temel anlamda iki bölüme ayıran bu yöntem ile
bir çok başarılı web uygulaması geliştirilmiştir ancak uygulama geliştirilirken
alınan bu performans, uygulamanın çalışması esnasında bazı sınırlılıklardan
dolayı alınanamıştır. Örnek olarak web form uygulamalarında sayfa
durumlarının, sayfanın kaynak kodunda saklanması, oluşturulan kontrollerin
sunucu kontrolleri olarak oluşturulmasından kaynaklı sunucunun render
açısında iş yükün artması gibi sebepler gösterilebilir.
•Web Form uygulamalarının sınrasında, MVC tekniği ile uygulama geliştirme
platformu sunulmuştur. MVC, Model View Controller kelimelerinin baş
harflerinden oluşmaktadır ve bir uygulama geliştirme desenidir. Microsoft bu
deseni kendi ürettiği ASP.Net çatısına uyarlayarak yazılım geliştiricilere
sunmuştur.
•ASP.Net MVC adını verdiği bu yeni geliştirme ortamı, yazılım geliştiricilere
kodları çok daha iyi ayrıştırarak,test edilebilir, hata ayıklamasının daha kolay
yapıldığı kodlar üreterek uygulama geliştirme imkanı sunmuştur.
Günümüzde bir çok web uygulamasının bu yöntem ile geliştirildiği
görülmektedir.
•Bu yapı içerisinde Controller'lar, kullanıcıdan gelen istekleri karşılayarak
gerekli işlemleri içlerinde bulundurduğu action metod adı verilen metodlarla
gerçekleştirmekte ve kullanıcıya View'lar aracılığı ile sonuçları
göstermektedir. Bu işlemler sırasında verileri gösterirken gerektiğinde model
katmanını da kullanmaktadır.
•Model katmanında, uygulama içerisindeki verilerin bellekte temsil
edilebilmesi için gerekli class'larbulunmaktadır.
•View'ler ise kullanıcıya işlenen verilerin gösterildiği katman olarak
tanımlanmaktadır. View'ler içerisinde istemci taraflı HTML, CSS, JavaScript
gibi kodlarla birlikte aynı zamanda sunucu taraflı kodlar da yazılabilmektedir.
Bu kodların yazılabilmesi ve okunabilmesi Razor adı verilen yazım kuralları ile
sağlanmaktadır.
•Kullanıcıya her sayfada gösterilmek istenen verileri için Layout View adı
verilen kavram kullanılmaktadır. Örneğin uygulamanın gezinme menüsü,
layout içerisinde kodlanarak her sayfada aynı şekilde gösterilebilir. Bunun
getirdiği kolaylık ise, bir değişiklik yapılması gerektiğinde tek yerde yapılarak
bu değişikliğin her sayfaya yansıtılmasıdır.
•Controller katmanı sunucu taraflı çalışan bir katman olduğundan,
veritabanları ya da diğer kaynaklardan elde ettiği verileri kullanıcıya
göstermek için View’lere taşıyabilir. Controller’dan View’lere veri taşımak
için, ViewData, ViewBag, TempData ve ViewModel yöntemleri kullanılabilir.

136
Atatürk Üniversitesi Açıköğretim Fakültesi 20
ASP.Net:MVC

DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi ASP.Net uygulamalarının çalıştırılabilmesi için
gerekli olan sunucudur?
a) MVC
b) IIS
c) Web Forms
d) Windows Forms Application
e) ViewData

2. Aşağıdakilerden hangisi ASP.Net web form uygulamalarında sunucu taraflı


kodların yazıldığı yapıdır?
a) View
b) Controller
c) Code Behind
d) Javascript
e) Model

3. MVC’nin açılımı aşağıdakilerden hangisidir?


a) Model-View-Control
b) Model-Version-Controller
c) Model-ViewBag-Controller
d) Model-View-Controller
e) Model-ViewData-Control

4. MVC uygulamalarında Controller yapısının görevi nedir?


a) Uygulamaya gelen istekleri karşılamak
b) Render işlemini gerçekleştirmek
c) HTML kodlarının yazılmasını sağlamak
d) Javascript kodlarının yazılmasını sağlamak
e) Routing işlemlerini gerçekleştirmek

5. Aşağıdakilerden hangisi MVC’de bir View çeşididir?


a) ViewModel
b) ViewData
c) Layout View
d) View State
e) Web Form

137
Atatürk Üniversitesi Açıköğretim Fakültesi 21
ASP.Net:MVC

6. Aşağıdakilerden hangisi uygulamada kullanılan verilerin bellekte temsil


edilmesi için kullanılır?
a) Model
b) View
c) Controller
d) IIS
e) Data

7. Aşağıdakilerden hangisi Controller’dan View’e veri taşıma yöntemlerinden


değildir?
a) ViewBag
b) ViewData
c) TempData
d) ViewModel
e) DataCarrier

8. Aşağıdaki yöntemlerden hangisi ile Controller içindeki metodlardan


metodlara veri taşınabilir?
a) TempData
b) ViewData
c) ViewBag
d) ViewModel
e) DataCarrier

9. Tüm sayfalarda görüntülenmesi istenen içerikler hangi yapıya eklenebilir?


a) Layout View
b) ViewBag
c) View
d) TempData
e) ViewBag

10. Aşağıdakilerden hangisi Routing işleminin avantajlarından birisidir?


a) Kullanıcının anlaşılabilir adresler ile istek yapması
b) Uygulamanın performanslı çalışması
c) Verilerin controller’dan view’lere taşınması
d) Kullanıcıların rotalar belirleyebilmesi
e) View’ ler içerisinde hem sunucu hem istemci taraflı kodlar
yazılabilmesi

Cevap Anahtarı
1.b, 2.c, 3.d, 4.a, 5.c, 6.a, 7.e, 8.a, 9.a, 10.a

138
Atatürk Üniversitesi Açıköğretim Fakültesi 22
ASP.Net:MVC

YARARLANILAN KAYNAKLAR
Active Server Pages (2022). 10 Ocak 2022 tarihinde
https://en.wikipedia.org/wiki/Active_Server_Pages adresinden erişildi.
ASP.Net MVC – TempData (2022). 15 Ocak 2022 tarihinde
https://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc
adresinden erişildi.
ASP.Net MVC – ViewData (2022). 15 Ocak 2022 tarihinde
https://www.tutorialsteacher.com/mvc/viewdata-in-asp.net-mvc
adresinden erişildi.
Choudhary, K. (2019). Difference Between MVC And Web Forms . 12 Ocak 2022
tarihinde https://www.c-sharpcorner.com/article/difference-between-mvc-
and-web-forms/ adresinden erişildi.
Directives for ASP.Net Web Pages (2022). 10 Ocak 2022 tarihinde
https://docs.microsoft.com/en-us/previous-
versions/aspnet/t8syafc7(v=vs.100) adresinden erişildi.
Dospinescu,O., Donu, B.A. (2020). Model View Controller – A Comparative .NET
Versus Java Analysis. Innovation Management and Education Excellence
through Vision.
Rosencrance, L., Bigelow, J.S. (2019). Internet Information Services (IIS). 11 Ocak
2022 tarihinde
https://www.techtarget.com/searchwindowsserver/definition/IIS
adresinden erişildi.
Smith, S., Brock, D. (2021). Views in ASP.Net Core MVC. 15 Ocak 2022 tarihinde
https://docs.microsoft.com/en-
us/aspnet/core/mvc/views/overview?view=aspnetcore-6.0 adresinden
erişildi.

139
Atatürk Üniversitesi Açıköğretim Fakültesi 23
ASP.NET: VERİ TABANI

• MS-SQL Veri Tabanı


• Veri Tabanı Oluşturma
İÇİNDEKİLER

• Tablo Oluşturma İNTERNET


• Entity Framework
• ASP.Net MVC ile Veri Tabanı PROGRAMCILIĞI II
Uygulaması Öğr. Gör. Dr. İ. Cihan
YETİŞKEN

• Bu üniteyi çalıştıktan sonra;


• MS-SQL Veri tabanı
HEDEFLER

oluşturabilecek,
• Entity Framework kavramlarını
açıklayabilecek,
• MVC veri tabanı uygulaması
geliştirebileceksiniz.

ÜNİTE

7
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
ASP.NET: Veri Tabanı

MS-SQL Veri Tabanı


ASP.NET: VERİ TABANI

Entity Framework Core

Code First Database First

ASP.NET MVC – Veri Tabanı Uygulaması

141
Atatürk Üniversitesi Açıköğretim Fakültesi 2
ASP.NET: Veri Tabanı

GİRİŞ
Web uygulamalarının geçmişi incelendiğince, web 1.0 sürümünde
kullanıcılar web sayfalarını görüntüleyebilirken, etkileşime geçememekteydiler. Bu
alanda kullanılan teknolojilerin gelişmesine paralel olarak, kullanıcı etkileşimlerine
olanak sağlayan web 2.0 sürümünde, kullanıcılar web sitelerine kayıt olabilmekte,
kendi içeriklerini ekleyebilmekte ve hatta diğer kullanıcılarla da etkileşime
geçebilmektedirler. Günümüzde web 2.0 ile birlikte web 3.0’ da sanal gerçeklik
teknolojisi ile birlikte kullanılmaktadır.
Kullanıcı etkileşimi ile birlikte ortaya çıkan verilerin saklanması ve işlenmesi
ihtiyacı için web uygulamalarının barındırıldığı sunucularda bu verilerin sistematik
bir şekilde saklanması ve istenilen zamanda da erişebilmesi gerekmektedir.
Bilgisayar sistemlerinde verilerin kalıcı olarak saklandığı birimlere sabit disk
denilmektedir. Sabit disklerde tutulan veriler, dosyalar oluşturularak
tutulmaktadır. Her dosyanın bir uzantısı bulunmaktadır. Örneğin Word programı
ile oluşturulan dosyalar .docx uzantısına sahipken, fotoğraf dosyaları .jpg, .png gibi
uzantılara sahip olmaktadır.
Kullanıcılardan web uygulaması aracılığı ile alınan veriler, bir metin
dosyasında saklanabilecek nitelikte bile olsa, bu şekilde yapılan veri kayıt
işleminden sonra bu verilere ulaşmak, analizler yapmak oldukça zor olmaktadır.
Bu nedenlerden dolayı verilerin sistematik olarak tablolar içerisinde
saklanabilmesi için veri tabanı sistemleri kullanılmaktadır. Bu sistemler sadece
web uygulamalarında değil, masaüstü, mobil uygulamalar gibi diğer
uygulamalarda da sürekli olarak kullanılmaktadır.
Günümüzde web uygulamalarından gelen verileri saklayabilecek birçok veri
tabanı sistemi bulunmaktadır. Bunlardan bazıları, MS-SQL, Oracle, SqLite, MySQL
gibi sistemlerdir. Bu bölümde, ASP.Net MVC uygulaması ile birlikte kullanılacak
olan MS-SQL veri tabanı sistemi incelenecektir.
MS-SQL, Microsoft firmasının geliştirdiği bir veri tabanı sistemidir. Verileri
içinde oluşturulan ilişkili tablolar aracılığı ile sistematik olarak saklayabilmektedir.
Bir ASP.Net MVC uygulamasının veri tabanı ile haberleşebilmesi için veri
erişim teknolojilerinden faydalanılmaktadır. Microsoft firmasının bu alanda
geliştirdiği ve günümüzde sıkça yazılımcılar tarafından tercih edilen teknoloji,
Entity Framework teknolojisidir.
Entity Framework ile neredeyse her uygulamada yapılan işlemler olan CRUD
(Create, Read, Update ve Delete) işlemleri az sayıda satır kod yazarak
gerçekleştirilebilmektedir. Bu işlemlerin hızlı yapılabiliyor olması, uygulama
geliştirme süreçlerine de büyük katkı sağlamaktadır.
Bu bölümde, bir ASP.Net MVC uygulaması ile kullanıcıdan alınan verilerin
MS-SQL veri tabanında okuma, yazma, değiştirme ve silme işlemleri
gerçekleştirilecektir. ASP.Net MVC uygulaması ve MS-SQL veri tabanı arasındaki
bağlantı ve diğer işlemler ise, Entity Framework kullanılarak yapılacaktır.

142
Atatürk Üniversitesi Açıköğretim Fakültesi 3
ASP.NET: Veri Tabanı

ASP.NET: VERİ TABANI


Web 2.0 teknolojisi ile birlikte web uygulamalarında kullanıcıdan alınan
veriler, veri tabanlarında saklanarak gerektiğinde erişilebilir ve işlenebilir hale
gelmiştir. Örneğin bir sosyal medya platformuna kayıt olmak istendiğinde,
CRUD platformun kayıt formu doldurularak kullanıcı bilgileri veri tabanına kayıt
Create, Read, Update , edilmektedir. Kullanıcılar kayıtlı bu bilgilerine sonradan erişip, değiştirebilirler
Delete Kelimelerinin veya silebilme imkanına sahiptirler. Bu senaryoda tipik bir CRUD işlemi
kısaltmasıdır. anlatılmıştır. CRUD, Create (Oluşturma), Read (Okuma), Update (Güncelleme) ve
Delete (Silme) kelimelerinin baş harflerinden meydana gelen kısaltmadır.
CRUD işlemleri, uygulamalar aracılığı ile veri tabanlarındaki veriler üstünde
gerçekleştirilmektedir. Bu bölümde bu işlemlerin gerçekleştirilmesi için aşağıdaki
konular ele alınacaktır.
 MS-SQL Veri tabanı Sistemi
 Entity Framework Veri Erişimi Çatısı
 ASP.Net MVC ile veri tabanı işlemleri gerçekleştirme uygulaması

MS-SQL Veri Tabanı


Veri tabanları, bilgisayar ortamında verileri sistematik ve kalıcı olarak
saklamak için geliştirilmiş sistemlerdir. Verilerin sistematik olarak saklanması,
sonradan bu verilere ulaşıldığında işlenebilmesi için önemlidir.
Verilerin saklanması amacıyla geliştirilen bu sistemlerin veri, yazılım,
donanım ve kullanıcılar olmak üzere 4 ana bileşeni bulunmaktadır (Narang, 2018).
Microsoft SQL Server, kurumsal bilgi teknolojileri ortamlarında iş zekası ve
analitik uygulamalarını destekleyen ilişkisel bir veri tabanı yönetim sistemidir. Bu
sistem, Oracle ve IBM firmasının geliştirmiş olduğu DB2 veri tabanı yönetim
sistemleri ile birlikte pazar lideri 3 sistemden birisidir (Hughes, 2019).
MS-SQL veri tabanın Express sürümleri ücretsizdir ve internet üstünden
indirilerek kurulabilmektedir. Kurulum işleminin ardından MS-SQL sunucusu
bilgisayarda aktif hale gelmektedir. Sunucuya erişerek veri tabanı yönetimi
gerçekleştirmek içinse SQL Server Management Studio yazılımı kurulmalıdır.

Tablo yapıları
Veri tabanlarında veriler, tablo adı verilen yapılar içerisinde tutulmaktadır.
Tablolar, satır ve sütunlardan oluşan yapılardır. Saklanacak verilerin niteliğine
Veritabanı göre tablolar içinde sütunlar oluşturularak her veri bir satırda saklanmaktadır.
tablolarındaki her bir
kayıt entity (varlık) OgrenciId Ad Soyad Numara
olarak isimlendirilir. 1 Ahmet Yılmaz 123
2 Mehmet Demir 789
Şekil 7.1. Öğrenci Bilgilerinin Tutulduğu Veri Tabanı Tablosu

Şekil 7.1.’de, öğrenci bilgilerin tutulduğu bir tablo yapısı görülmektedir. Bu


tablo içerisinde her öğrenci bir entity (varlık) olarak isimlendirilmektedir. Tablo

143
Atatürk Üniversitesi Açıköğretim Fakültesi 4
ASP.NET: Veri Tabanı

tasarımları yapılırken, içinde tutulacak olan varlıkların nitelikleri dikkate


alınmalıdır.
Tablo tasarımı aşamasında, verileri tutan her alanın veri tipleri de
belirtilmelidir. Şekil 7.1’de görülen tabloda, OgrenciId için sayısal bir alan, ad ve
soyad için metinsel bir alan, Numara içinse yine sayısal bir alan tanımlaması
yapılmıştır.
MS-SQL veri tabanlarında sayısal alanlar int, metinsel alanlar ise varchar
olarak tanımlanabilir.
Metinsel veri saklayacak alanlar tanımlanırken aynı zamanda saklayabileceği
en uzun karakter sayısı da belirtilmelidir. Örneğin şekil 7.1.’deki “Ad” alanı için,
varchar(25) değeri kullanılabilir. Parantez içinde belirtilen 25 değeri, bu alanın
alabileceği en fazla karakter sayısıdır.

MS-SQL veritabanı ve tablo oluşturmak


Kurulumu gerçekleştirilen MS-SQL sunucusuna bağlanmak için SQL Server
Management Studio (SSMS) programı kullanılmaktadır. Programın açılış ekranında
sunucu adresi belirtildikten sonra bağlantı sağlanarak veri tabanı oluşturma
aşamasına geçilmektedir.

Şekil 7.2. SSMS Object Explorer Penceresi

Veri tabanı sunucusuna bağlandıktan sonra Şekil 7.2.’de gösterilen “Object


Explorer” penceresi açılmaktadır. Bu pencerede “Databases” klasörüne sağ
tıklanarak açılan menüde, “New Database…” komutu ile yeni veri tabanı
oluşturma diyalog penceresi açılmaktadır.

Şekil 7.3. Veritabanı İsimlendirme Alanı

Veri tabanına tablo Açılan diyalog penceresinde “Database name:” alanına oluşturulmak
eklemek için Tables istenen veri tabanı ismi yazıldıktan sonra altta bulunan “OK” butonuna
klasörüne sağ tıklanarak tıklandığında yeni veri tabanı oluşturulmaktadır.
açılan menüden “New-
>Table..” komutu
seçilmelidir.

144
Atatürk Üniversitesi Açıköğretim Fakültesi 5
ASP.NET: Veri Tabanı

Şekil 7.4. Oluşturulan Veritabanı ve Nesneleri

Yeni veri tabanı oluşturulmasının ardından, tablo eklemek için “Tables”


klasörüne sağ tıklanarak açılan menüden “New->Table..” komutu seçilerek tablo
tasarım ekranına ulaşılmaktadır. Şekil 7.1’de gösterilen alanların tablo tasarımı
ekranında tanımlanması Şekil 7.5.’de gösterilmiştir.

Şekil 7.5. Ogrenci Verilerinin Tutulabilmesi İçin Oluşturulan Tablo Tasarımı

Tablo tasarımı Şekil 7.5’deki gibi gerçekleştirildikten sonra “tblOgrenciler”


ismi ile kayıt edilmiştir. Burada, OgrenciId alanı “Primary Key” olarak
belirlenmiştir.
Primary Key (Birincil Anahtar) alanları, her kaydı benzersiz olarak temsil
eden ve veri tabanında indekslenmesi sayesinde hızlı bir şekilde kayıtlara
ulaşılmasını sağlayan alanlardır. “OgrenciId” alanı birincil anahtar olarak
işaretlendikten sonra kolon özellikleri penceresinde “Is Identity” özelliğine “Yes”
değerini atanarak bu alana gelecek olan verilerin otomatik olarak atanması
sağlanmıştır. Bu özellik ile her yeni öğrenci eklendiğinde, “OgrenciId” alanına
1’den başlayarak birer birer artan otomatik değerler atanacaktır.

Entity Framework Core


Entity framework core, yazılım geliştiricilerin veri tabanlarına ulaşmak için
kullandığı bir kütüphanedir. Bu amaçla geliştirilmiş birçok kütüphane olsa da,
Entity Framework ,veri entity framework bir Object-Relational Mapper (O/RM) olarak tasarlanmıştır.
tabanı işlemleri yapmak O/RM araçları, ilişkisel veri tabanları ile nesne tabanlı yazılımlar arasında çalışan
için geliştirilmiş bir yapılardır (Smith, 2021).
kütüphanedir.
Microsoft tarafından geliştirilen entity framework’ün temel amaçları;
 Yazılım geliştiricilerin tekrar kullanılabilir veri erişimi katmanları
oluşturmak için harcadıkları zamanı azaltmak,

145
Atatürk Üniversitesi Açıköğretim Fakültesi 6
ASP.NET: Veri Tabanı

 İşlem yapılmak istenen veri tabanı türünden bağımsız olarak kod


yazabilmek,
 Nesne tabanlı iş katmanları ile veri işlemlerini trigger, strored procedure
gibi veri tabanı nesneleri olmadan gerçekleştirebilmektir (Anbazhagan,
2017).
Entity framework yapısındaki temel öğeler;
 DbContext sınıfı
 DbSet veri tipi
 Nesnelerin bellekte oluşturulması için yazılan Model sınıfları
yapılarıdır. Örneğin bir web uygulamasından veri tabanına veri ekleme
senaryosu ele alındığında işlemler aşağıdaki sırayla gerçekleştirilmektedir.
1- Kullanıcı, uygulamada oluşturulan form aracılığı ile veri girişi yapar.
2- Alınan veriler, ilgili veri tipinden nesne oluşturularak bellekte oluşturulan
DbSet yapısına aktarılır. DbSet yapıları, veri tabanında oluşturulan
tabloların bellekteki karşılıkları olarak tanımlanabilir.
3- DbSet yapısına eklenen veri, DbContext sınıfı içerisinde bulunan
“SaveChanges()” metodu ile veri tabanına kayıt edilir.
Entity Framework Core Code First Yaklaşımı
Entity framework ile veri tabanı işlemleri yapabilmek için oluşturulan model
sınıflarının, veri tabanı oluşturulmadan önce yazıldığı yaklaşıma “Code First”
yaklaşımı denilmektedir. Bu yaklaşıma göre, öğrenciler için veri tabanı işlemleri
aşağıdaki adımlarla gerçekleştirilmektedir.
1- Model katmanında Ogrenci sınıfı oluşturulur. Sınıf oluşturulurken öğrenci
varlıklarına ait özellikler tanımlanır.
2- NuGet Package Manager uygulaması ile Entity Framework paketi
uygulamaya dahil edilir.
3- DbContext sınıfı, veri tabanına ulaşmak için kullanılan bir kapıdır ve base
class olarak kullanılır (Galloway ve ark., 2012). OkulContext sınıfı,
DbContext sınıfından miras alınarak oluşturulur.
Entity Framework Code 4- OkulContext sınıfında ConnectionString (Bağlantı Cümlesi), base class’da
First ile önce model bulunan OnConfiguring metodu override edilerek tanımlanır. Bağlantı
sınıfları ve DbContext cümleleri, uygulamanın kullanacağı veri tabanı ve bu veri tabanın
sınıfı yazılır ve bu bulunduğu sunucu bilgilerini içeren cümlelerdir.
sınıflara göre veri
5- OkulContext sınıfı içerisinde DbSet<Ogrenci> tipinde özellik oluşturulur.
tabanı sonradan
6- Package Manager Console ile add-migration komutu uygulanarak bir
oluşturulur.
migration sınıfı oluşturulur.
7- Son olarak update-database komutu ile veri tabanı ve tablo oluşturma
işlemi tamamlanır.
Entity Framework Code First Data Annotation
Veri tabanlarında tablo oluşturma süreçlerinde, tablonun adı ile birlikte her
alanın veri tipi de belirlenmektedir. Tiplerin belirlenme aşaması Şekil 7.5.’ de
gösterilmiştir.

146
Atatürk Üniversitesi Açıköğretim Fakültesi 7
ASP.NET: Veri Tabanı

Entity framework code first yaklaşımında veri tabanı ve tablo oluşturma


süreçlerinde oluşturulacak tablonun adı model sınıfının adı ile aynı, tablodaki
alanlar ise sınıf içinde belirtilen özelliklerin tiplerine göre tanımlanmaktadır.
Bu çerçeveden bakıldığında sınıf içerisinde örneğin “string” olarak
tanımlanan bir özelliğin tablodaki karşılığı “nvarchar(max)“ olmaktadır. Nvarchar,
tablodaki string alanları tutmak için kullanılan ve Unicode şeklinde verileri tutan
bir tiptir. Unicode olması sebebiyle, her karakterin Unicode sistemindeki karşılığı
ile veriler tutulmaktadır. Bunun dezavantajı, verilerin tabloda daha fazla yer
kaplamasıdır. Avantajı ise tüm dillerde kullanılan karakterlerin sorunsuz şekilde
tutulabilmesidir.
Türkçe dil desteği bulunan veri tabanı sunucularında, “nvarchar” a göre
daha az yer kapladığından “string” tipler için varchar kullanılabilir.
Örnek

•Entity framework code first, varsayılan olarak string tipleri için


nvarchar(max) tanımlaması yaptığından, bu durumun düzeltilmesi
gerekebilir. Bu noktada Entity framework Code First Data
Annotation’ları kullanılmaktadır.

Data Annotation yapıları aslında Attribute sınıflarından türetilmiş olan


sınıflardır. Bu sınıflar, model sınıfları içerisinde tanımlanan özelliklerin için
kullanıldığında, Entity Framework’e direktifler vererek, sınıf içerisindeki özelliğe
karşılık gelen tablodaki alanının nasıl tanımlaması gerektiğini belirlemektedir.
Sınıf içerisinde kullanılmak istenen attribute’ler köşeli parantez içerisinde
düzenlenmek istenen özellik üstüne yazılmaktadırlar.
Örneğin string tipinde tanımlanan “OgrenciAdi” isimli özelliğin üstüne,
[Column("OgrenciAd", TypeName="varchar")] attribute’i yazıldığında, veri
tabanında bu özellik için alan oluşturulurken, alan adı “OgrenciAd”, veri tipi ise
“varchar” olarak tanımlanacaktır. Bu attribute’in kullanılabilmesi için
System.ComponentModel.DataAnnotations.Schema isim uzayı sayfaya dahil
Entity Framework Code edilmelidir.
First ile oluşturulacak Aynı özelliğin üstüne bir diğer attribute olan MaxLength’de eklenebilir. Bu
olan veri tabanı ve
attribute ile bu alanın alabileceği en fazla karakter sayısı belirlenebilmektedir. Bu
tabloların özellikleri
attribute’in kullanılabilmesi için System.ComponentModel.DataAnnotations isim
Attribute’ler veya
Fluent Api ile uzayı sayfaya dahil edilmelidir.
özelleştirilebilir. Bu işlemi gerçekleştirebilmek için, “OgrenciAdi” özelliğinin üstüne
[MaxLength(25)] şeklinde attribute eklendiğinde, tabloda bu alanın alabileceği en
fazla karakter sayısı 25 olarak belirlenmektedir.
Entity Framework Code First varsayılan olarak, oluşturacağı tablodaki
birincil anahtar alanlarını belirlerken, sınıf adının yanına Id eklenerek isimlendirilen
özelliği aramaktadır. Örneğin “Ogrenci” isimli sınıfta, “OgrenciId” özelliği

147
Atatürk Üniversitesi Açıköğretim Fakültesi 8
ASP.NET: Veri Tabanı

tanımlandığında, tabloda bu alanı birincil anahtar olarak tanımlamaktadır ancak


her zaman bu şekilde özellik tanımlanması istenmeyebilir.
Örneğin TC Kimlik numarasının birincil anahtar olarak tanımlanması
gerektiğinde bir başka attribute olan Key attribute kullanılmaktadır. Bunun için,
oluşturulan TcKimlik özelliğinin üstüne [Key] yazmak yeterlidir.
Veri tabanında oluşturulacak tablonun adı ise, varsayılan olarak oluşturulan
model sınıfı ile aynı olmaktadır. Örneğin “Ogrenci” sınıfı için oluşturulan tablo
“Ogrenci” adı ile oluşturulmaktadır. Veri tabanlarında tablo isimlerinin model
sınıflarından farklı olması istenebilir. Bu durumda Table attribute kullanılmaktadır.
Bu attribute, sınıf tanımlamasının hemen üstüne yazılarak, tablo adı istenilen
şekilde belirlenebilmektedir. Örneğin, “Ogrenci” sınıfı tanımlamasının üstüne
[Table("tblOgrenciler")] yazıldığında, oluşturulacak tablo adı tblOgrenciler
olmaktadır.
Veri tabanı tablo tasarımları sırasında kullanılan bir diğer özellik ise,
tanımlanan alanın “Null” olup olamayacağıdır. Bu özellik alana null değer kabul
edilip edilmeyeceğini belirlemektedir. Burada genelde null ile boşluk değeri
karıştırılmaktadır. Boşluk da bir karakter olduğundan, null ile aynı anlama
gelmemektedir. Null, değersizlik ifadesidir. Attribute’ler ile bir alanın null
olmaması için [Required] attribute kullanılmaktadır. Diğer attributelerde olduğu
gibi, bu attribute’de istenilen özelliğin üstüne yazılarak kullanılabilir.

[Table("tblOgrenciler")]
public partial class Ogrenci
{

public int OgrenciId { get; set; }

[Column("OgrenciAd",TypeName ="varchar")]
[MaxLength(25)]
[Required]
public string OgrenciAdi { get; set; }
public string Soyad { get; set; }
public int Numara { get; set; }
}

Örnek 7.1. Data Annotation Attribute’leri Kullanımı

Fluent Api
Entity Framework code first ile oluşturulacak tabloların ve alanlarının
özelliklerinin belirlenebilmesi için kullanılan bir diğer teknik ise Fluent Api ‘dir.
Fluent Api kullanılarak yapılan özelleştirmelerde, zincirleme metodlardan
faydalanılmaktadır. Bu metodlar “DbContext” sınıfından türetilerek oluşturulan
“Context” sınıfında, “OnModelCreating“ metodu override edilerek
kullanılmaktadır.
OnModelCreating metodu, veri tabanında bulunan tablolar oluşturulurken
çalışan bir metottur ve DbContext sınıfı içerisinde yer almaktadır. Her uygulamada
farklı veri tabanı ve tabloları olabileceğinden dolayı override edilerek kullanılması
gerekmektedir.

148
Atatürk Üniversitesi Açıköğretim Fakültesi 9
ASP.NET: Veri Tabanı

Bu teknik ile yapılan özelleştirmeler temel olarak 2 başlıkta incelenebilir.


Varlık Konfigürasyonları
Varlık konfigürasyonları, tabloların özelliklerini belirlemede kullanılan
Entity Framework Code konfigürasyon metotlarıdır. Örneğin HasKey() metodu ile tablonun birincil
First ile kod üstündeki
anahtarı belirlenirken, ToTable() metodu ile oluşturulacak tablonun ismi
kontrol daha fazla
olmaktadır. belirlenmektedir.
Özellik Konfigürasyonları
Model sınıflarında tanımlanan özelliklere karşılık gelen alanların
özelleştirilebildiği konfigürasyon tipidir.
Örneğin bir alanın null olması istenmiyorsa, IsRequired() Metodu, alan
tipinin özelleştirilmesi isteniyorsa HasColumnType() metodu, bir alanın alabileceği
en fazla karakter sayısını belirlemek içinse, HasMaxLength() metodu
kullanılmaktadır.

protected override void OnModelCreating(ModelBuilder modelBuilder)


{
modelBuilder.Entity<Ogrenci>().ToTable("tblOgrenciler");
modelBuilder.Entity<Ogrenci>().Property(o =>
o.Ad).HasColumnType("varchar").HasMaxLength(25).IsRequired();
}

Örnek 7.2. Fluent Api Kullanımı

Entity Framework Code First Yaklaşımı avantajları


Entity Framework Code First yaklaşımı avantajları şöyle sıralanabilir:
 Code first tekniğinde kodlar veri tabanından önce yazıldığından, kod
üstündeki kontrol daha fazladır.
 Veri tabanı oluşturmada C# dili kullanıldığından bu işlemleri için kullanılan
SQL bilgisi gerektirmez.
 Programlama dili ile veri tabanı oluşturma işlemleri yapılabildiğinden,
oluşturulacak olan veri tabanı tipi bağımsız olarak aynı kodlar
yazılmaktadır.
 İlişkili tablolar için oluşturulan DbSet’lere veriler yüklenirken, tüm ilişkili
DbSet’lere aynı anda veri yüklenmesi yerine sadece ihtiyaç duyulduğunda
ilgili DbSet’lere verilerin yüklenmesi gerçekleştirilebilir. Bellek alanından
tasarruf sağlayan bu yönteme Eager Loading denilmektedir.
 Oluşturulan migration sınıfları ile, veri tabanı versiyon kontrolleri
gerçekleştirilebilmektedir.
 Az sayıda tabloları ve tablo ilişkileri olan küçük veri tabanları için kullanımı
pratiktir.
Entity Framework Code First Yaklaşımı dezavantajları
Entity Framework Code First yaklaşımı dezavantajları şöyle sıralanabilir:

149
Atatürk Üniversitesi Açıköğretim Fakültesi 10
ASP.NET: Veri Tabanı

 Veri tabanı için gerekli olan tüm kodlar, programlama dili ile
oluşturulmaktadır. SQL konusuna hakim programcılar için bu teknik
kullanışlı olmayabilir.
 Veri tabanında yapılacak her değişiklik için önce kodlarda değişiklik
yapılarak, update-dataabse komutu ile veri tabanına yansıtılmalıdır.
Entity Framework Core Database First Yaklaşımı
Entity Framework Entity Framework ile önce veri tabanı oluşturulup, veri tabanı işlemleri için
Database First ile önce
gerekli olan kodların daha sonra oluşturulduğu yaklaşıma Database First yaklaşımı
veri tabanı
oluşturulmaktadır. Veri denilmektedir. Bu yaklaşımda veri tabanı oluşturulduktan sonra Package Manager
tabanı işlemleri için Console’da Scaffold-DbContext komutu çalıştırılmalıdır.
gerekli olan kodlar
Scaffold-DbContext "Server=.\MSSQLSERVER2014;Database=OkulYonetimDB;Trusted_Connection=True;"
Entity Framework Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
tarafından oluşuturulur.
Örnek 7.3. Scaffold-DbContext Komutu

Örnek 7.1. incelendiğinde, komut için kullanılan parametrelerde , “Server”


parametresi, bağlanılacak olan veri tabanının bulunduğu MS-SQL sunucusunun
adresi, “Database” parametresi, bağlanılacak olan veri tabanının ismi,
“Trusted_Connection” parametresi, bu veri tabanına bağlanmak için kullanıcı adı
ve şifre gerektirmediğini belirtmektedir. Parametrelerden sonra gelen
“Microsoft.EntityFrameworkCore.SqlServer” ifadesi ise, “provider” olarak
isimlendirilir ve bağlanılacak olan veri tabanının bir MS-SQL veri tabanı olduğunu
belirtmektedir. Entity framework ile provider belirtilerek farklı veri tabanı
sistemlerine de bağlantı gerçekleştirilebilir. “-OutputDir Models” ile, oluşturulacak
dosyaların proje içinde kaydedileceği klasör “Models” klasörü olarak belirtilmiştir.
Şekil 7.6’da gösterilen komut çalıştırıldığında “OkulYonetimDBContext.cs”
sınıfı, “TblOgrenciler.cs” adında model sınıfı ve migration sınıfı veri tabanından
alınan bilgilerle otomatik olarak oluşturulmaktadır.

Entity Framework Core Database First Yaklaşımı avantajları


Entity Framework Core Database First yaklaşımı avantajları şöyle
sıralanabilir:

 Veri tabanı ve tabloları görsel olarak oluşturulabilir


 Oluşturulan veri tabanı ve tablolarına göre kodlar otomatik olarak
yazılmaktadır
 Çok sayıda tablo ve ilişki içeren veri tabanlarında kullanımı daha pratiktir
Entity Framework Core Database First Yaklaşımı dezavantajları
Entity Framework Core Database First yaklaşımı dezavantajları şöyle
sıralanabilir:
 Veri tabanı önce oluşturulduğundan, kodların otomatik olarak
oluşturulması ile kod üstündeki kontrol daha azdır.
 Veri tabanında yapılacak değişiklikler için kodlar üstünde de güncellemeler
yapılmalıdır.

150
Atatürk Üniversitesi Açıköğretim Fakültesi 11
ASP.NET: Veri Tabanı

Entity Framework ile CRUD işlemleri


Entity Framework yaklaşımlarından birisi ile veri tabanı oluşturulup gerekli
kodlar yazıldıktan sonra, CRUD işlemleri yapılabilmektedir. Bu işlemler;
 Create (Oluşturma)
 Read (Okuma)
 Update (Güncelleme)
Entity Framework ile  Delete (Silme)
kayıt bulmak için Find() olmak üzere 4 başlıkta incelenmektedir.
metodu kullanılır. Entity Framework kullanarak veri tabanı işlemleri yapabilmek için
oluşturulan context sınıfından bir nesne örneğine ihtiyaç bulunmaktadır.
1. Create İşlemi
MS-SQL veri tabanlarında bulunan tablolara veri eklemek için “Insert”
komutu kullanılmaktadır. Entity Framework ile bu işlem, “Insert” komutu
yazılmadan yapılabilmektedir ancak bu komut arka planda işletilmektedir.

using (var ctx=new OkulYonetimDBContext())


{
ctx.TblOgrencilers.Add(new TblOgrenciler { Ad = "Ahmet",
Soyad = "Mehmet", Numara = 123 });
ctx.SaveChanges();
}

Örnek 7.4. Entity Frameork ile Create İşlemi

“tblOgrenciler” sınıfından oluşturulan nesnenin önce “tblOgrencilers” isimli


DbSet yapısı içerisine eklendiği görülmektedir. DbSet içerisine eklenen nesneler,
bu aşamada bellekte tutulmaktadır.
SaveChanges() metodu, DbSet içerisindeki değişikliklerin veri tabanına
aktarılmasını sağlayan metoddur. Bu işlemde “Add” ile ekleme işlemi
yapıldığından, metod arka planda bir “Insert” komutu oluşturarak nesnenin veri
tabanına kayıt edilmesini sağlamaktadır.
2. Read İşlemi
Okuma işleminin MS-SQL’deki karşılığı “Select” komutudur. Bu komutu
Entity Framework arka planda yazılacak kodlarla işletmektedir.

using (var ctx=new OkulYonetimDBContext())


{
TblOgrenciler ogr = ctx.TblOgrencilers.Find(1);
}

Örnek 7.5. Entity Frameork ile Read İşlemi

DbSet içerisinden “Find()” metodu ile OgrenciId değeri 1 olan öğrenci


bulunarak, ogr referansına atanmıştır. Bu işlem sonrasında veri tabanından
getirilen öğrenci, ogr referansı ile erişilebilir durumdadır.
3. Update İşlemi
Güncelleme işleminin gerçekleştirilebilmesi için öncelikle güncellenecek
kaydın bulunması gerekmektedir. Kayıt bulma işlemi için “Find()” metodu

151
Atatürk Üniversitesi Açıköğretim Fakültesi 12
ASP.NET: Veri Tabanı

kullanılmaktadır. Kayıt bulunduktan sonra veri tabanından getirilen değerler ile


nesne oluşturularak ogr referansına atanmaktadır. Referans üstünden değerleri
değiştirilerek “SaveChanges()” metodu çağırılmaktadır.

using (var ctx=new OkulYonetimDBContext())


{
TblOgrenciler ogr = ctx.TblOgrencilers.Find(1);
ogr.Numara = 456;
ctx.Entry(ogr).State = EntityState.Modified;
ctx.SaveChanges();
}

Örnek 7.6. Entity Frameork ile Update İşlemi

Bu noktada SaveChanges() metodu çağırılmadan önce bulunan kaydın


durumunun “Modified” olarak değiştirildiği görülmektedir. Bu işlem ile kayıt DbSet
EntityState, DbSet
içerisinde güncellendi olarak işaretlenerek SaveChanges() metodu tarafından bu
içindeki her kaydın
durum bilgisini tutan kayıt için Update komutu gönderilmesini sağlamaktadır.
yapıdır. Bir kayıt 4. Delete İşlemi
eklendiğinde Added,
değiştirildiğinde Silme işleminde, güncelleme işlemi ile benzer olarak öncelikle silinecek
Modified, kaydın bulunması gerekmektedir. Kayıt bulunduktan sonra DbSet içerisinden
silindiğinde Deleted kaldırılır. SaveChanges() metodu, kaldırılan bu kayıt için veri tabanına bir Delete
olmaktadır. komutu göndermektedir.

using (var ctx=new OkulYonetimDBContext())


{
TblOgrenciler ogr = ctx.TblOgrencilers.Find(1);
ctx.TblOgrencilers.Remove(ogr);
ctx.SaveChanges();
}
Örnek 7.7. Entity Framework ile Delete İşlemi

ASP.Net MVC Uygulaması ile Veri Tabanı İşlemleri


ASP.Net MVC uygulamaları, Entity Framework kullanarak veri tabanı
işlemleri yapabilmektedirler. Örneğin View’ler aracılığı ile kullanıcıdan alınan
bilgileri veri tabanına kaydetme, güncelleme, silme ya da veri tabanından alınan
bilgilerin kullanıcılara yine View’lar aracılığı ile gösterilmesi mümkündür.
Bu işlemlerin gerçekleştirilebilmesi için birçok yöntem bulunmakla birlikte
bu bölümde ASP.Net MVC’ nin sağlamış olduğu şablonlar kullanılarak bir öğrenci
varlığı için CRUD işlemleri gerçekleştiren bir uygulamanın nasıl yapılacağı
anlatılmıştır.
1- Veri tabanı oluşturulması gerekmektedir. Bu uygulamada Şekil 7.4.’de
oluşturulan veri tabanı kullanılacaktır.
2- Visual Studio 2019 ile ASP.Net MVC Web Application tipinde proje
oluşturulmalıdır. Oluşturulan projenin programlama dili C#, .Net Core 3.1
ve “Web Application (Model-View-Controller)” tipinde olmasına dikkat
edilmelidir.
3- “Entity Framework Core”’un projede kullanılabilmesi için projeye sağ
tıklanarak “Manage Nuget Packages…” ile paket yöneticisi açılarak Şekil

152
Atatürk Üniversitesi Açıköğretim Fakültesi 13
ASP.NET: Veri Tabanı

7.6.’da belirtilen paketler yüklenir. Uygulamanın.Net Core sürümü 3.1


olduğundan, Entity Framework paketlerinde 5.0.0 sürümü seçilmiştir.

Entity Framework
kütüphanesinin
kullanılabilmesi için
EntityFrameworkCore. Şekil 7.6. Gerekli olan Entity Framework Paketleri
SqlServer ve
EntityFrameworkCore.
Tools
paketleri projeye dahil
edilmelidir.

Şekil 7.7. Yüklenen Paketlerin Proje İçerisinde Görüntülenmesi

4- Paketlerin yükleme işlemi tamamlandıktan sonra veri tabanı bağlantısı ve


işlemleri gerekli olan model ve context sınıflarının oluşturulabilmesi için
“Scaffold-DbContext” komutu “Package Manager Console” ile çalıştırılır.
Çalıştırılan komut, Örnek 7.1.’de görülmektedir.
5- Öğrenciler ile ilgili CRUD işlemlerinin yapılabilmesi için uygulamaya yeni
bir controller eklenmelidir. Controllers klasörüne sağ tıklanıp açılan
menüde “Add->Controller…” komutu seçildikten sonra açılan ekranda,
“MVC Controller with views, using Entity Framework” seçeneği ile devam
edilir. Bu seçenek, controller sınıfı ekleme işlemi ile birlikte CRUD
işlemlerinin kullanıcı ile etkileşimli bir şekilde yapılabilmesi için View’lerin
de otomatik olarak oluşturulmasını sağlamaktadır.

Şekil 7.8. Eklenen Controller Tipi

6- Sonraki adımda, CRUD işlemlerinin yapılabilmesi ve View’leri


tasarlanabilmesi için Model ve Context sınıflarının seçilmesi

153
Atatürk Üniversitesi Açıköğretim Fakültesi 14
ASP.NET: Veri Tabanı

gerekmektedir. Bu sınıflar, 4.adımda uygulanan “Scaffold-DbContext”


komutu ile birlikte proje içerisinde oluşturulmuştur. Yeni eklenecek olan
controller sınıfı, OgrenciController olarak isimlendirilmiştir.

Eklenen controller
sınıfında Entity
Framework ile veri
işlemlerinin yapılabilmesi
için Model ve
DataContext sınıflarının
seçilmesi gerekmektedir.

Şekil 7.9. Model ve Context Sınıfları Seçimi

7- Controller ekleme işlemi tamamlandıktan sonra proje içerisinde


OgrenciController ve CRUD işlemlerinin kullanıcı tarafından yapılabilmesi
için gerekli olan View’lar oluşturulmuştur.

Şekil 7.10. Eklenen Controller ve View’lar

8- Uygulamanın hatasız çalışabilmesi için yeni eklenen


“OkulYonetimDBContext” sınıfının servis olarak eklenmesi gerekmektedir.
Bu işlem startup sınıfı içerisinde yapılmaktadır ve Örnek 7.6’ da
gösterilmiştir.

154
Atatürk Üniversitesi Açıköğretim Fakültesi 15
ASP.NET: Veri Tabanı

public void ConfigureServices(IServiceCollection services)


{
services.AddControllersWithViews();
services.AddScoped<OkulYonetimDBContext>();
}
Oluşturulan
uygulamanın Örnek 7.8. Context Sınıfının Servis Olarak Eklenmesi
çalıştırılması için Visual 9- Uygulama F5 tuşu ile çalıştırılarak /Ogrenci adresine istek yapıldığında
Studio’da F5 tuşuna
Şekil 7.11.’deki View ekrana gelmektedir.
basılmalıdır.

Şekil 7.11. OgrenciController Index View’i Görüntüsü

Index View’i incelendiğinde “Create New” adında bir link ve hemen altında
öğrenci listesi olduğu görülmektedir. Bu noktada veri tabanında bir
öğrenci bulunmadığından liste boş olarak gelmektedir. Index View kodları
incelendiğinde Controller’dan ViewModel tekniği ile bir liste taşındığı ve
listenin “foreach” döngüsü ile görüntülendiği görülmektedir. Bu noktada
veri tabanına kayıt eklenmediğinden liste boş olarak görüntülenmektedir.
10- “Create New” linki ile yeni kayıt oluşturmak için “Create” isimli view’den
yeni öğrenci eklenerek kaydedildiğinde, veri tabanından okunan kayıtlar
Index View’inde gösterilmektedir.

View’ler içerisinde
bulunan formlardan
post edilen veriler,
controller sınıfındaki
[HttpPost] attribute’i ile Şekil 7.12. Create View’i ile Kayıt Eklendikten Sonra Güncellenen Liste
işaretlenmiş ilgili metod 11- Listede bulunan “Edit | Details | Delete” linkleri ile de güncelleme,
tarafından karşılanır. detayları gösterme ve silme işlemlerini yapan View’lere bağlantılar
verilmiştir.
12- View’lerde bulunan tüm bağlantılar İngilizce olarak görüntülenmektedir.
Bu bağlantılar, ilgili View’lerin kaynak kodlarından Türkçeleştirilebilir.
Örnek 7.7.’de Index View’inde bulunan ilgili kodlar gösterilmiştir.

<a asp-action="Create">Yeni Öğrenci</a>

<a asp-action="Edit" asp-route-id="@item.OgrenciId">Düzenle</a> |


<a asp-action="Details" asp-route-
id="@item.OgrenciId">Detaylar</a> |
<a asp-action="Delete" asp-route-id="@item.OgrenciId">Sil</a>

Örnek 7.9. Index View’inde Bulunan Linklerin Türkçeleştirilmesi

13- Create View’i kaynak kodları incelendiğinde bir HTML form etiketi
içerisinde input etiketleri ile veri girişi için alanlar tanımlandığı

155
Atatürk Üniversitesi Açıköğretim Fakültesi 16
ASP.NET: Veri Tabanı

görülmektedir. Bu alanlardan alınan veriler, OgrenciController içerisindeki


“[HttpPost]” attribute’i ile işaretlenmiş “Create” metoduna post
edilmektedir. Bu metod, post edilen verileri parametreleri aracılığı ile
karşılayarak, Context sınıfı aracılığı ile veri tabanına kayıt etmektedir.

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult>
Create([Bind("OgrenciId,Ad,Soyad,Numara")] TblOgrenciler
tblOgrenciler)
{
if (ModelState.IsValid)
{
context.Add(tblOgrenciler);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(tblOgrenciler);
}

Örnek 7.10. Create Metodu Kodları

Create metoduna gelen verilerde herhangi bir sorun yoksa veri tabanına
kayıt işlemi yapılarak Index metoduna dönüş sağlanmaktadır. Index
metodu da, Index isimli View’e dönüş sağladığından, başarılı bir ekleme
işleminin ardından RedirectToAction() metodu ile kayıtlı öğrenci listesi
kullanıcıya gösterilmektedir.
Bireysel Etkinlik

• Proje içinde oluşturulan tüm View'lerdeki metinleri


Türkçeleştiriniz.
• Verita banında tblOgretmenler tablosu oluşturunuz.
• Tablodaki alanlar: OgretmenId, Ad, Soyad, Brans
• Bu tabloya Entity Framework ile CRUD işlemleri yapacak
Controller ve View'leri oluşturunuz.

156
Atatürk Üniversitesi Açıköğretim Fakültesi 17
ASP.NET: Veri Tabanı

•Bu bölümde entity framework veri erişim kütüphanesi kullanılarak temel veri
tabanı işlemlerinin yapıldığı bir ASP.Net MVC uygulaması geliştirilmiştir.
•Bilgisayar ortamlarında verilerin sistematik olarak saklanması için veri
tabanları kullanılmaktadır.
•Günümüzde birçok veri tabanı yönetim sistemi bulunmakla birlikte, en sık
kullanılan sistemlerden birisi Microsoft SQL veri tabanı yönetim sistemidir.
•Geliştirilen nerdeyse her uygulamada veri tabanı ihtiyacı bulunmaktadır. Veri
Özet
tabanlarındaki verilere ulaşmak için, veri erişim teknolojilerine ihtiyaç
duyulmaktadır. Microsoft firması tarafından geliştirilen veri erişim
teknlojileri çatısına ADO.Net ismi verilmektedir.
•Entity Framework, Microsoft tarafından geliştirilen açık kaynaklı bir veri
erişim kütüphanelerinden bir tanesidir. Bu kütüphane ile, bağlanılacak veri
tabanı sistemi farketmeksizin veri erişim kodları geliştirilebilmektedir. Bunun
avantajı, uygulamanın kullandığı veri tabanı sonradan değiştirilse bile,
uygulama kodlarında yapılacak değişikliklerin en az seviyede olmasıdır.
•Entity framework ile veri işlemlerinin yapılabilmesi için temel anlamda 2
yaklaşım bulunmaktadır. Bu yaklaşımlardan birincisi code-first yaklaşımıdır.
Code first yaklaşımında veri tabanı oluşturulmadan önce model sınıfları ve
veri işlemlerinin yapılabilmesi için DbContext sınıfından türetilmiş bir context
sınıfı yazılmaktadır. Bu sınıfın yazılmasının ardından, veri tabanı ve içindeki
tablolar otomatik olarak Entity framework tarafından oluşturulmaktadır.
•Code First yaklaşımı ile oluşturulacak olan tablolar ve alanların
özelleştirilebilmesi için iki tane yaklaşım bulunmaktadır. Bunlardan birincisi
Data Annotation Attribute'leri ile gerçekleştirilen yaklaşımdır. Bu yaklaşımda
tablo veya alanların özelliştirilmesi, model sınıflarına yazılan Attribute'ler ile
gerçekleştirilmektedir. Diğer bir yaklaşım ise Fluent Api tekniğidir. Fluent Api
ile tabloların ve metodların özelleştirilmesi için yazılan Context sınıfında
OnModelCreating() metodu override edileren zincirleme metodlar
kullanılmaktadır. Her iki teknik de tabloların ve alanların özelliklerini
belirlemek için kullanılmaktadır.
•Entity framework kütüphanesinin ikinci temel yaklaşımı ise Database First
yaklaşımıdır. Adından da anlaşılacağı üzere, geleneksel yazılım geliştirme
modeline daha yakın olan bu yaklaşımda öncelikle veri tabanı
oluşturulmaktadır. Projede kullanılacak olan model ve DbContext sınıfları ise
bu veri tabanı yapısına göre yine Entity Framework tarafından
oluşturulmaktadır.
•Biribirlerinin tam tersi şekilde çalışan bu iki yaklaşımlardan birisi ile veri
tabanı işlemleri yapılan proje geliştirilebilmektedir. Yazılımcılar, kendi
geliştirme alışkanlıklarına göre yaklaşımlardan birisini seçebilmektedirler.
•Entity Framework kütüphanesinin bir MVC projesinde kullanılabilmesi için
NuGet Package Manager aracılığı ile projeye dahil edilmesi gerekmektedir.
•Asp.Net MVC proje yapısında, veri tabanında yapılacak olan CRUD
işlemlerinin hızlı bir şekilde yapılabilmesi için geliştirilmiş olan şablonlar
bulunmaktadır.
•Bu şablonlar controller sınıfları ekleme sırasında seçilerek, entity framework
ile veri işlemlerinin yapılması sağlanabilmektedir. Temel veri işlemlerinin
yapılabilmesi için şablonlar aracılığı ile CRUD işlemlerinin View’leri de
otomatik olarak oluşturulmaktadır. View’ler ile birlikte controller içerisinde
bulunan metodlar ile veri işlemleri yapacak kodlar da oluşturulmaktadır.
•Bu yöntem temel veri işlemleri için geliştiricilere büyük kolaylıklar
sağlamaktadır.
•Oluşturulan kodlar üstünde sonradan değişiklikler yapmak da mümkün
olduğundan aynı zamanda esnek bir sistemdir.

157
Atatürk Üniversitesi Açıköğretim Fakültesi 18
ASP.NET: Veri Tabanı

DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi CRUD kısaltmasının açılımıdır?
a) Create-Route-Update-Delete
b) Creative-Read-Update-Delete
c) Create-Read-Update-Delete
d) Create-Read-Updated-Deleted
e) Create-Read-Update-Display

2. Aşağıdakilerden hangisi veri tabanı tablolarındaki varlıkları ifade eder?


a) Entity
b) Model
c) SQL
d) View
e) Table

3. Aşağıdakilerden hangisi bir MS-SQL sunucusuna bağlanmak için kullanılan


programdır?
a) Entity Framework
b) Solution Explorer
c) Media Player
d) SQL Server Management Studio
e) Microsoft Access

4. Aşağıdakilerden hangisi Birincil Anahtar kavramını tanımlamaktadır?


a) Veritabanına bağlanırken şifre olarak kullanılmaktadır.
b) Tablodalardaki birinci kaydı temsil eden yapılardır.
c) Tablolardaki kayıtları temsil eden benzersiz değer içeren alanlardır.
d) SQL Management Studio programını kurarken girilen anahtardır.
e) Tablo alanlarını oluştururken tanımlanan bir veri tipidir.

5. Aşağıdakilerden hangisi Entity Framework kütüphanesinde kullanılan


verilerdeki değişiklikleri veri tabanına aktaran metod adıdır?
a) Model
b) SaveChanges
c) View
d) ViewModel
e) SQL

158
Atatürk Üniversitesi Açıköğretim Fakültesi 19
ASP.NET: Veri Tabanı

6. Bir projeye Entity Framework kütüphanesinin eklenmesi için


aşağıdakilerden hangisi kullanılmaktadır?
a) SQL Server Management Studio
b) SQL Server
c) NuGet Package Manager
d) Solution Explorer
e) Error List

7. Entity Framework Database First yaklaşımında aşağıdaki parametrelerden


hangisi veri tabanına bağlanırken kullanıcı adı ve şifre girmek
gerekmediğini belirtmektedir?
a) Provider
b) Trusted_Connection=True
c) OutputDir
d) Scaffold-DbContext
e) Server

8. Entity Framework ile kayıt bulma işlemi için aşağıdaki metodlardan hangisi
kullanılır?
a) SaveChanges
b) Find
c) Add
d) View
e) Remove

9. MVC uygulamalarında aşağıdaki metodlardan hangisi başka bir metoda


yönlendirme yapmak için kullanılmaktadır?
a) SaveChanges
b) RedirectToAction
c) Redirect
d) View
e) Create

10. Entity Framework Code First yaklaşımında zincirleme metodlar ile alan
özelliklerini belirlemede kullanılan teknik aşağıdakilerden hangisidir?
a) Code first
b) Database first
c) Data Annotations
d) Fluent Api
e) Scaffold-DbContext

Cevap Anahtarı
1.c, 2.a, 3.d, 4.c, 5.b, 6.c, 7.b, 8.b, 9.b, 10.d

159
Atatürk Üniversitesi Açıköğretim Fakültesi 20
ASP.NET: Veri Tabanı

YARARLANILAN KAYNAKLAR
Narang, R. (2018). Database management systems. PHI Learning Pvt. Ltd.
Hughes, A. (2019). Microsoft SQL Server. 3 Şubat 2022 tarihinde
https://searchdatamanagement.techtarget.com/definition/SQL-Server
adresinden erişildi.
Smith, J. P. (2021). Entity Framework core in action. Simon and Schuster.
Anbazhagan, P. (2017). Mastering entity framework core 2.0 : Dive into entities,
relationships, querying, performance optimization, and more, to learn
efficient data-driven development. Packt Publishing, Limited.
Galloway, J., Haack, P., Wilson, B., & Allen, K. S. (2012). Professional asp. net mvc
4. John Wiley & Sons, Incorporated.

160
Atatürk Üniversitesi Açıköğretim Fakültesi 21
PHP DİLİNE GİRİŞ

• Giriş
• PHP Destekli Web sunucusu
İÇİNDEKİLER

Kurulumu İNTERNET
• PHP Dilinin Yapısı
• Değişkenler PROGRAMCILIĞI II
• Matematik ve Atama
Operatörleri
Dr. Öğr. Üyesi Halil
• Diziler ERSOY
• Kontrol Yapıları
• If ve Switch Komutları
• For Döngüsü
• Foearch Döngüsü
• While Döngüsü
• Do-While Döngüsü

• Bu üniteyi çalıştıktan sonra;


• PHP'nin çalışması için gerekli
HEDEFLER

yazılımları kurabileceksiniz,
• PHP ile değişkenler ve diziler
üzerinde işlem yapabileceksiniz,
• PHP'de kontrol yapıları ile
program akışını
değiştirebileceksiniz.
ÜNİTE

8
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
PHP Diline Giriş

Web Sayfası

PHP Destekli Web


Sunucu Taraflı Diller
Sunucusu

XAMPP Paketi

PHP Kod Blokları

Değişkenler

PHP Dilinin Yapısı


Matematik, mantık ve
PHP

karşılaştırma operatörleri

Diziler

İf Komutu

Switch Komutu

For Döngüsü

Kontrol Yapıları
Foreach Döngüsü

While Döngüsü

Do-While Döngüsü

162
Atatürk Üniversitesi Açıköğretim Fakültesi 2
PHP Diline Giriş

GİRİŞ
Web sayfaları HTML dili, CSS ve Javascript gibi istemci (kullanıcı) taraflı diller
ile geliştirilmekte ve tarayıcılar tarafından görüntülenmektedir. Bu şekilde
yaratılmış web sayfalarını oluşturan kodlar, tüm istekte bulunan istemcilere aynı
şekilde gönderilir. İstemcinin kullandığı cihaz ve tarayıcı özelliklerine göre tasarım
ve içerik değişik biçimlerde görülebilir.
Kullanıcılara farklı içerik sunabilmek için daha karmaşık işlemlerin yapılması
gerektiği durumlarda (örneğin veri tabanından bilgi sunulması, kullanıcıdan bilgi
alınması ve işlenmesi, vb.) sunucu taraflı diller ile web sayfalarını oluşturan
kodların ve içeriğin sunucu üzerinde istemciye gönderilmeden önce değişik
biçimlerde oluşturulması mümkün olmaktadır. Örneğin bir kütüphanenin web
sayfasında arama yapan farklı kişiler için farklı sonuçların ekrana yazılabilmesi için,
sunucu tarafında çalışan diller ile arama sonucuna göre farklı sayfa içeriğinin
oluşturulup istemciye gönderilmesi gerekir. Sunucu üzerinde çalışan bu dillere
sunucu taraflı diller denmektedir.
PHP en popüler sunucu taraflı dillerden bir tanesidir. PHP, 1997 yılında
Rasmus Lerdorf tarafından “Personal Home Page” (Kişisel Web Sayfası) adı ile
geliştirilmiş, sonrasında Zeev Surask ve And Gutmans tarafından güncellenerek
2000 yılında “PHP: Hypertext Preprocessor” adıyla anılmaya devam etmiştir. Ocak
2022 itibariyle 8.1. sürümü yayınlanmaktadır. Ücretsiz olarak kullanılabilmesi,
farklı birçok web sunucusu tarafından desteklenmesi ve son sürümleri ile nesne
tabanlı programlamaya destek vermesi nedeniyle yaygın biçimde kullanılmaktadır.
Bu bölümde öncelikle PHP dilinin çalışması için gerekli olan web sunucusu
kurulumu anlatılacak, ardından PHP dilinin özellikleri örnekler verilerek
açıklanacaktır. Örneklerin okuyucu tarafından çalıştırılması ve farklı alıştırmaların
yapılabilmesi için önerilen web sunucusunun kişisel bilgisayara kurulması
gerekmektedir.

PHP DESTEKLİ WEB SUNUCUSU KURULUMU


PHP ile yazılmış dosyaları çalıştırmak için iki yol vardır. Birincisi PHP destekli
XAMPP paketinde bir web sunucusu kullanarak tarayıcıda çalıştırmak, ikincisi ise PHP yorumlayıcısını
önceden var olan kullanarak komut satırında çalıştırmaktır.
MySQL veri tabanı, kısa
süre önce Oracle Bu bölümde, birinci yol olan web sunucusu kurarak PHP çalıştırma yolu
firması tarafından satın kullanılacaktır. Bu amaçla ücretsiz olarak kullanılabilen XAMPP sunucu paketi
alınmış olduğundan, kurulumu anlatılacaktır. Paket içerisinde, web sunucu olan Apache, veri tabanı
paket içerisine bunun uygulaması olan MariaDB (MySQL ile birebir aynı) ve PHP yorumlayıcısı bir arada
yerine aynı özelliklere
bulunmaktadır. Bu bölümde veri tabanına ihtiyaç yoktur sonraki bölümlerde
sahip MariaDB
eklenmiştir. kullanılabilir. XAMPP paketinin indirilmesi ve kurulması aşağıdaki başlıkta
anlatılmıştır.

163
Atatürk Üniversitesi Açıköğretim Fakültesi 3
PHP Diline Giriş

Web Sunucusu Kurulumu


Web sunucusu olarak XAMPP paketi, sunucu taraflı diller ile web geliştirme
işlemlerinde en çok kullanılan sunucu paketidir. Bu paketi kurarak normalde ayrı
ayrı kurulup özelleştirilmesi gereken Apache, MariaDB ve PHP’yi tek kurulum ile
elde edebilirsiniz. Bunun için ilk önce en son XAMPP sürümünü Şekil 8.1’de
görülen Apache Friends web sitesinden indiriniz
(https://www.apachefriends.org/).

Şekil 8.1 Apache Friends Web Sitesi

Sitede Türkçe dil desteği mevcuttur. Windows için ilgili paketin (sürüm
8.1.1) boyutu 168 MB’tır. İndirme tamamlandıktan sonra kurulum dosyasını
yönetici yetkisi ile çalıştırınız. Kurulum adımları sırasında kurulum klasörü
XAMPP paketi sorulacaktır. Öneri olarak gelen “C:\xampp” klasörü seçilebilir, ancak eğer farklı bir
kurulumu bitince, C: sürücü ya da klasör seçmek isterseniz bu adımda müdahale etmelisiniz. Onay
sürücünde verdikten sonra paket kuruluma başlayacak ve birkaç dakika sonra kurulum
C:\xampp\htdocs
tamamlanacaktır. Kurulum sırasında Apache web sunucunuzun bilgisayarınızın
adında bir klasör
oluşmalıdır. Bu klasör güvenlik duvarını aşarak dış dünyaya bağlantı kurmasına izin vermek isteyip
web sunucumuzun ana istemediğiniz soracaktır; bu soruya evet demenizi tavsiye ederiz. Bu sayede web
dizinidir. sunucunuz çalışırken dışarıdan gelecek bağlantı taleplerine cevap verecektir.
Kurulum tamamlandığında Şekil 8.2’deki gibi bir pencere ile sona erecektir:

164
Atatürk Üniversitesi Açıköğretim Fakültesi 4
PHP Diline Giriş

Şekil 8.2 XAMPP Kurulum Sonu Ekranı

Dilerseniz Şekil 8.2’de “Finish” diyerek bu ekranı kapatabilirsiniz. Kapatırken


kontrol panele giriş seçeneği seçili ise aşağıdaki gibi görünen kontrol panele
ulaşabilirsiniz. Eğer seçenek seçili değilse, kurulum pençesi kapanacaktır;
dilediğiniz zaman “Başlat  XAMPP Control Panel” ile kontrol paneline
ulaşabilirsiniz.

Şekil 8.3 XAMPP Kontrol Paneli

Yukarıdaki Şekil 8.3’te, mavi renkli yazı ile verilen uyarıya dikkat ediniz.
Kontrol paneli uygulamasını yönetici olarak çalıştırmazsanız bu uyarıyı almaya
devam edeceksiniz, daha önemlisi XAMPP paketindeki farklı servisleri çalıştırmaya
kalktığınızda hata mesajları alabilirsiniz. Kontrol panelinin bu durumda ise kapatıp,
uygulamayı sağ tıklatıp “Yönetici olarak çalıştır” seçeneğini seçiniz (Şekil 8.4).

165
Atatürk Üniversitesi Açıköğretim Fakültesi 5
PHP Diline Giriş

Şekil 8.4 Windows’ta Kontrol Panelini Yönetici Olarak Çalıştırma

Apache Web Sunucu Servisini Çalıştırma


Kontrol panel her çalıştığında Apache, MySQL, Filezilla, Mercury ve Tomcat
servislerinin durumunu gösterecektir. Bunlardan PHP için önemli olan Apache’dir.
Şekil 8.5’te görülen bu servis ile aynı satırda bulunan “Start” düğmesini tıklayarak
Apache’nin çalışmasını sağlayınız.

Şekil 8.5 Apache Uygulamasının Çalışır Halini Gösteren Kontrol Panel

Bu ve bir sonraki bölümde sadece PHP dili ile ilgili konular ele alınacağından,
sadece Apache uygulamasının çalışması yeterlidir. Eğer PHP ile veri tabanı
Kontrol panelini uygulamaları geliştirmek isterseniz bu ekrandaki MySQL’i çalıştırmanız
kapatmak çalışan gerekecektir.
servisleri kapatmaz,
servisleri kapatmak için XAMPP’i sadece PHP öğrenme için kullanacaksanız, PHP kodlarınızı
kontrol panelini açıp çalıştırmadan önce bu paneli açıp Apache’yi başlatmalı, çalışmanız sona erdiğinde
“Stop” demelisiniz, durdurmalısınız. Başlatılan Apache servisini durdurmak için “Stop” düğmesine
ancak bilgisayarınız basmalısınız.
kapatırsanız servisler
kapanmış olacaktır. Eğer Apache servisinin bilgisayarı her açtığınızda otomatik başlamasını
isterseniz, Şekil 8.5’teki kontrol panelinde “Service” seçeneğini işaretleyiniz.

166
Atatürk Üniversitesi Açıköğretim Fakültesi 6
PHP Diline Giriş

PHP Kodlarının Test Edilmesi


XAMMP’i kurup Apache servisini başlattıysanız, ilk PHP kodları test
edebilirsiniz. Bunun için aşağıdaki kodları bir metin editöründe yazıp
“ilksayfa.php” adı ile “C:\Xampp\htdocs” klasörü içerisine kaydedin.
<html>
<head>
<meta charset="UTF-8">
<title>Merhaba PHP</title>
</head>
<body>
<?php echo "Merhaba"; ?>
</body>
</html>
Ardından bilgisayarınızdaki herhangi bir tarayıcıyı açıp adres satırına
http://localhost/ilksayfa.php yazıp “Enter” tuşuna basınız, sayfanızın Şekil 8.6’daki
gibi görüntülenmesi gerekir.

Şekil 8.6 İlk PHP Sayfasının Çalışma Görüntüsü

Web sunucumuz kendi bilgisayarımızda olduğu için adres satırına


http://localhost yazarak sunucumuza ulaşmış olduk. Devamındaki dosya adı ise
sizin yazdığınız PHP dosyalarının adı ve uzantısı birlikte olacak şekilde yazılmalıdır.
Eğer PHP dosyalarınızı “htdocs” klasörü altında alt klasörlere yerleştirirseniz, adres
satırına dosya adında önce alt klasör adını da Tablo 8.1’deki gibi yazmalısınız.
Tablo 8.1 PHP Dosyalarının Yeri ve Web Adresleri

Dosya konumu Adres satırı


C:\xampp\htdocs\ilksayfa.php http://localhost/ilksayfa.php
C:\xampp\htdocs\ilkbolum\ilksayfa.php http://localhost/ilkbolum/ilksayfa.php

Sunucunuzu ve PHP desteğini test etmek ve varsa hangi PHP versiyonunun


desteklendiğini görmek için tarayıcıda adres satırına http://localhost/
dashboard/phpinfo.php yazıp çalıştırın. Ekrana gelecek bilgiler içinde “CORE”
başlığı altında “PHP Version” satırında mevcut PHP sürümünü görebilirsiniz. Bu
sürüm bilgisi, farklı eklentilerin kurulması ve çalışması için gerekli ön bilgi olabilir.

167
Atatürk Üniversitesi Açıköğretim Fakültesi 7
PHP Diline Giriş

Şekil 8.7 PHP Desteğini ve Versiyonunu Öğrenme Ekranı

•Tarayıcınızda phpinfo.php sayfasını görüntüleyerek kendi


Bireysel Etkinlik

bilgisayarınızdaki web sunucusunun dosya yükleme boyutunun sınırını


öğreniniz.
•Apache servisini çalıştırmadan, tarayıcınızda "http://
localhost/index.php" adresini ziyaret edin, gösterilen hata mesajını
görün. Sonrasında Apache'yi çalıştırıp sayfayı yeniden yükleyin.

PHP Özelliklerinin Sunucuda Ayarlanması


Php.ini dosyası PHP
Web sunucusunu (Apache) ve PHP eklentisini kurduktan sonra, kodlamaya
eklentisinin olduğu
geçebilirsiniz. Yazılacak komutlar, dilin özelliklerine uygun olsalar bile, sunucu
(php.exe’nin
bulunduğu) klasördedir. üzerindeki PHP ayarlarına göre farklı çıktılar üretebilir. Bunu için gerekli olduğu
Windows bilgisayarlar yerlerde PHP’ye özgü ayarlamaları yapmanız için php.ini adındaki dosyayı açıp,
için bu içindeki bazı değerleri değiştirmeniz gerekebilir (Şekil 8.8). Dosya herhangi bir
“C:\xampp\php\” metin editörü ile açılıp, kaydedilmelidir. Ardından web sunucusu (XAMPP kontrol
olabilir. panelinden) durdurulup tekrar çalıştırılmalıdır.

168
Atatürk Üniversitesi Açıköğretim Fakültesi 8
PHP Diline Giriş

Şekil 8.8 Php.ini Dosyası Görünümü

Php.ini dosyası içerisinde bazı önemli ayarlamalar şöyledir:


 max_execution_time = 60  Sunucunun PHP komutlarını çalıştırması için
beklenecek süreyi 60 saniye yapar.
 error_reporting = E_ALL  PHP hata mesajlarının hangilerinin istemciye
(tarayıcıya) gönderileceğini belirler.
 file_uploads = On  Sunucuya istemciden dosya yüklenebileceğini
belirler.
 ignore_user_abort=Off  İstemci tarayıcısını kapatır ya da başka bir
sayfaya giderse, sunucudaki çalışmakta olan PHP komutlarını durdurur.
 upload_max_filesize = 40M  İstemciden sunucuya yüklenebilecek
dosyaların her birinin en fazla 40 MB olmasını sağlar.
Bu ve diğer farklı ayarlamalar hakkında detaylı bilgi almak için
https://www.php.net/manual/tr/ini.list.php adresini inceleyebilirsiniz.

PHP DİLİNİN YAPISI


PHP diliyle yazılmış komutlar, genellikle HTML sayfalarındaki HTML
kodlarının içine gömülerek yazılır. Örneğin aşağıdaki kodlara baktığımızda, HTML
Sayfanızın uzantısını
PHP olarak kodlarının arasına eklenmiş PHP komutlarını görebilirsiniz. PHP komutları HTML
kaydetmelisiniz. Aksi sayfalarına <?php ve ?> ifadeleri arasında yazılır. Eğer sunucudaki “php.ini”
takdirde, öncesinde dosyası içerisindeki “short_open_tag” değeri “On” yapılırsa; ayrıca <? ve ?>
ayarlama yapılmazsa, sembolleri de PHP komutları için blok oluşturmada kullanılabilir. Bu ifadeler, sayfa
PHP komutlarınız içerisinde istenilen her yerde açılıp kapatılabilir.
çalışmayacaktır.
<html> Merhaba PHP
<head>
<meta charset="UTF-8">
<title>Merhaba PHP</title>
</head>
<body>
<?php

169
Atatürk Üniversitesi Açıköğretim Fakültesi 9
PHP Diline Giriş

echo "Merhaba <b>PHP</b>";


?>
</body>
</html>
Örnek 8.1 ilkSayfa.php Dosyasının Kodları ve Çıktısı

Örnek 8.1’deki sayfaya bir istek geldiğinde, öncelikle, sayfanın tamamındaki


PHP kodları sunucuda yorumlanır ve varsa PHP komutlarının bulundukları yere
gerekli çıktılar yazılır; daha sonra HTML komutları bu çıktılar ile birlikte istemciye
gönderilir. Örnekteki echo komutu, bulunduğu yere, çift tırnak ile sınırlandırılmış
metinleri yazacaktır. Dolayısı ile istemciye PHP komutları gönderilmez, varsa bu
komutların çıktıları gönderilir.
Örnek

•Echo komutu, çift tırnak ile sınırlandırılmış metinleri ekrana yazar,


gerektiğinde aralarına "." sembolü konularak metinler birleştirilebilir.
•echo "Merhaba " . "<b>PHP</b>"; -- > Merhaba PHP
•echo "Merhaba " . "2022" . " yılı"; -- > Merhaba 2022 yılı

PHP komutlarının sonuna noktalı virgül ( ; ) sembolü konur, bu sayede


komutun bittiği yorumlayıcı tarafından anlaşılır. Bu sayede eğer istenirse komutlar
aralarına noktalı virgül konulara yan yana yazılabilir. Ancak bu durum komutların
okunabilirliğini azalttığı için tercih edilmez.
Echo komutu, bulunduğu yere yazdığı metinlerin sonuna alt satıra geçmeye
yönelik bir işaret koymaz, bu nedenle eğer gerekli ise ilk echo komutunun sonuna
“<br/>” sembolü eklenebilir.

• echo "Merhaba PHP";


echo "Merhaba 2022";
Örnek

• Çıktı:
Merhaba PHPMerhaba 2022;

•echo "Merhaba PHP<br/>";


echo "Merhaba 2022";
•Çıktı:
Merhaba PHP
Merhaba 2022

Kodlara Yorum veya Açıklama Ekleme


Yazılan PHP komutları arasına açıklama veya yorum satırları eklemek için //
sembolleri veya /* … */ blokları kullanılabilir. Tek bir satırı açıklama satırı yapmak
için // sembolleri satır başına eklenmelidir. Birden fazla satırı yorum satırları haline

170
Atatürk Üniversitesi Açıköğretim Fakültesi 10
PHP Diline Giriş

getirmek için en başa /* ve en sona */ sembolleri eklenmelidir. Açıklama satırları


Örnek 8.2’deki gibi yorumlayıcı tarafından çalıştırılmadan göz ardı edilir.
<?php 2,6,
// echo "1,";
echo "2,";
/* echo "3,";
echo "4,";
echo "5,";
*/
echo "6,";
?>
Örnek 8.2 Yorum Satırları veya Blokları

Değişkenler
PHP’de değişkenlerin tanımlanmasına gerek yoktur, tanımlamak için ayrıca
bir komut da yoktur. Değişkenleri ilk kullanmak istediğimiz yerde ilk değerlerini
atayarak Örnek 8.3’teki gibi kullanabiliriz. Değişkenler adlandırılırken şu kurallara
uyulmalıdır:

 Değişken adından önce $ sembolü olmalıdır.


 Değişken adında “A-Z” veya “a-z” aralığında harf, “_” sembolü veya rakam
olabilir, ancak ilk karakter rakam olamaz.
 Değişken adları büyük küçük harf duyarlıdır, ilk kullanıldığı gibi
kullanılmalıdır.
<?php 30Merhaba20
$degisken1=10;
$degisken1=$degisken1 + 20;
echo $degisken1;
$degisken1="Merhaba" . 20;
echo "$degisken1";
?>
Örnek 8.3 Değişken Oluşturma ve Kullanma

Örnek 8.3’te $degisken1’in ilk değerinin sayı (10) olduğunu, bu nedenle


toplama işleminin sayısal toplama olarak yapıldığını görüyoruz. Devamında ise
metin türünde (String) bir değer (“Merhaba”) alıp nokta operatörü ile (metin
PHP yorumlayıcısı birleştirme operatörü) birleştirme işleminin yapıldığını görüyoruz.
atanan değere göre
değişken üzerinde tür Değişken türü olarak, string, integer, float, boolean, array ve object türleri
dönüşümünü otomatik vardır. Bu türlerle ilgili özellikle bu bölümün devamında farklı başlıklar altında
yapmaktadır. verilmiştir.

Değişkenlerin Geçerlilik Kapsamları


PHP’de değişkenler ilk kullanıldıkları yere göre 4 farklı kapsamda olabilir:
1. Yerel (Lokal) değişkenler: Herhangi bir fonksiyonu içinde yer alırlar,
fonksiyon çalışmasını bitirince yok edilirler, fonksiyon dışından
kullanılamazlar.

171
Atatürk Üniversitesi Açıköğretim Fakültesi 11
PHP Diline Giriş

2. Genel (Global) değişkenler: Herhangi bir fonksiyon içinde olmayan,


tanımlandıkları yerden itibaren her yerde kullanılabilen değişkenlerdir.
Sayfanın tamamından erişilebilir ve sayfa sonuna kadar hayatta kalırlar.
3. Statik değişkenler: Bir fonksiyon içinde static kelimesi ile ilk değerini
alırlar. Fonksiyon sona erdiğinde, değişken yok edilmez ve değerini korur.
Ancak fonksiyon dışından kullanılamazlar.
4. Parametre değişkenler: Fonksiyon başlığında yer alan değişkenlerdir,
fonksiyonun içinde yerel değişkenler gibi davranırlar, fonksiyon dışında
kullanılamazlar.
Değişken kapsamı bu kitabın bir sonraki bölümünde fonksiyonlar konusunda
yine ele alınacaktır.

Sabit (Constant) Kullanımı


Değişkenlerin değerleri istenilen yerde değiştirilebilir. Ancak değeri ilk
Sabit tanımlamasında
ismin başına $ atmadan sonra değişmemesi gereken durumlarda sabit (constant) tanımlaması
konulmamalıdır. yapılabilir. Bunun için define komutu, sabitin adı ve ilk değerini alarak Örnek
8.4’teki gibi kullanılır:
<?php
define("SATIR",50);
define("HATAMESAJI","Hatalı değer girdiniz.");
echo SATIR."<br/>";
echo HATAMESAJI;
?>
50
Hatalı değer girdiniz
Örnek 8.4 Sabit Tanımlama

Matematik ve Hızlı Atama Operatörleri


Matematik operatörleri (Tablo 8.2) sayısal değişkenler ile yapılabilecek
hesaplamalarda kullanılırlar. Aynı satırda yapılacak işlemlerde öncelik çarpma,
bölme ve mod (bölüm sonucunda kalan) bulmaya aittir.
Tablo 8.2 Matematik Operatörleri
İşlem önceliği Operatör İsim Örnek
değiştirilmek istenirse, + Toplama $a + $b
ilgili işlem normal – Çıkartma $a – $b
parantez içine alınır. * Çarpma $a * $b
Örneğin / Bölme $a / $b
$a = $b * (75 - $c); % Mod bulma $a % $b
++ Bir artırma $a++
-- Bir eksiltme $a--
Hızlı atama operatörleri, yapılacak matematiksel işlemin değişkenin kendisi
ile yapılacağı zaman yazım şeklini Tablo 8.3’teki gibi kısaltmaya yarar.
Tablo 8.3 Hızlı Atama Operatörleri

Operatör Kullanışı Denk Karşılığı


+= $a += $b $a = $a + $b

172
Atatürk Üniversitesi Açıköğretim Fakültesi 12
PHP Diline Giriş

-= $a -= $b $a = $a – $b
*= $a *= $b $a = $a * $b
/= $a /= $b $a = $a / $b
%= $a %= $b $a = $a % $b
.= $a .= $b $a = $a . $b (String birleştirme)

Diziler
Birden fazla değeri hafızada tutmak için kullanılan diziler, PHP’de oldukça
esnek kullanım yapılarına sahiptir. Örnek 8.5’teki kodda 3 farklı dizi tanımlaması
yapılmıştır.
$dizi1 = array (10,20,30); 102030
$dizi2 = [10,20,30]; 102030
$dizi3 = [10,"yirmi",30.2];
echo $dizi1[0] . $dizi1[1] . $dizi1[2]; 10yirmi30.2
echo "<br/>";
echo $dizi2[0] . $dizi2[1] . $dizi2[2];
echo "<br/>";
echo $dizi3[0] . $dizi3[1] . $dizi3[2];
Örnek 8.5 Dizi Tanımlamaları

Yukarıda görüleceği üzere, diziler array kelimesi ile ya da köşeli parantezler


içerisine ilk değerleri vererek yaratılabilir. Dizilerin elemanlarına ulaşmak için
kullanılan indis değeri 0’dan başlar. Birçok dilden farklı olarak, PHP’de dizilerin
elemanları farklı veri türlerinde olabilir.
Dizi elemanlarına indis değeri ile ulaşmak yerine, elemanları ilk oluştururken
ve sonra ulaşırken anahtar kelimeler de kullanılabilir (Örnek 8.6).
$basliklar = array ("baslik1" => "PHP NEDİR?",
"baslik2" => "PHP KURULUMU");
echo $basliklar["baslik1"];
echo "<br/>";
echo $basliklar["baslik2"];
PHP NEDİR?
PHP KURULUMU
Örnek 8.6 Dizi Tanımlamada Anahtar Kullanımı

Dizi anahtarlarını tam sayı olarak tanımlayabilirsiniz. Bu durumda


tanımlamadaki anahtarlar kullanımda bire bir yer almalıdır.
Dizi anahtarları dizi
echo "<br/>"; Ocak
içerisinde benzersiz $dizi4 = [1=>"Ocak", 4=>"Nisan"]; Nisan
olmalıdır. echo $dizi4[1] ."<br/>";
array(2) {
//echo $dizi4[2] ."<br/>"; // HATA
[1]=> string(4) "Ocak"
//echo $dizi4[3] ."<br/>"; // HATA
[4]=> string(5) "Nisan" }
echo $dizi4[4] ."<br/>";
var_dump($dizi4);
Örnek 8.7 Dizi Elemanlarına Anahtar ile Erişim

Anahtar ile tanımlanan dizilere anahtarsız erişim hata oluşturur. Dizinin


eleman sayısını, varsa anahtarları ve değerleri görmek için var_dump komutunu
Örnek 8.7’deki gibi kullanabilirsiniz.

173
Atatürk Üniversitesi Açıköğretim Fakültesi 13
PHP Diline Giriş

Diziye Yeni Eleman Ekleme


Dizilere Örnek 8.8’deki kodun 3. satırında gösterildiği gibi yeni bir değer
atanırsa, bu değer dizinin sonuna eklenir. Örnekteki print_r komutu dizi benzeri
değişkenler varsa anahtarları ve değerleri ile birlikte Örnek 8.8’deki gibi sayfaya
yazar.
$dizi=[10,20,30]; Array ( [0] => 10 [1] => 20 [2] => 30 )
print_r($dizi); Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 40 )
$dizi[]=40;
print_r($dizi);
Örnek 8.8 Diziye Yeni Eleman Ekleme

Eğer dizi anahtarlı biçimde tanımlandıysa, yeni eleman yeni anahtar ile
birlikte Örnek 8.9’daki gibi eklenebilir.
$diziX=["genislik" => 20,"yukseklik"=> 40];
print_r($diziX);
$diziX["derinlik"]=60; // YENİ ELEMAN
print_r($diziX);
Array ( [genislik] => 20 [yukseklik] => 40 )
Array ( [genislik] => 20 [yukseklik] => 40 [derinlik] => 60 )
Örnek 8.9 Diziye Yeni Anahtar ve Değer Ekleme

Diziden Eleman Çıkarmak


Dizinin herhangi bir elemanı diziden unset komutu ile çıkarılabilir. Eğer
Dizinin tüm elemanları çıkarılan eleman aradaysa, bozulan indis numaralarını düzenlemek için
unset ile çıkarılırsa, dizi array_values() fonksiyonu Örnek 8.10’daki gibi kullanılabilir.
yok olmaz. Diziyi yok
$dizi=[10,20,30]; Array ( [0] => 10 [1] => 20 [3] => 40 )
etmek için unset($dizi) unset($dizi[2]); Array ( [0] => 10 [1] => 20 [2] => 40 )
komutu kullanılmalıdır. print_r($dizi);
$dizi=array_values($dizi);
print_r($dizi);
Örnek 8.10 Diziden Eleman Çıkarmak

Diziyi Sıralamak
Dizileri sort() ya da rsort() fonksiyonları ile küçükten büyüğe (A-Z) ya da
büyükten küçüğe (Z-A) Örnek 8.11’deki gibi sıralayabilirsiniz.
$dizi=[5,2,7,1]; Array ( [0] => 1 [1] => 2 [2] => 5 [3] => 7 )
sort($dizi);
print_r($dizi);
Örnek 8.11 Dizi Sıralama Komutları ve Çıktı

Diziyi Ters Çevirmek


Dizileri array_reverse() fonksiyonu ile ters çevirebilirsiniz. Fonksiyon Örnek
8.12’deki gibi ters çevrilecek diziyi parametre olarak alıp, ters çevriliş diziyi yeni
bir dizi olarak geri döndürür.
$diziR=[5,2,7,1]; Array([0] => 1 [1] => 7 [2] => 2 [3] => 5)
$diziR=array_reverse($diziR);
print_r($diziR);
Örnek 8.12 Diziyi Ters Çevirme

174
Atatürk Üniversitesi Açıköğretim Fakültesi 14
PHP Diline Giriş

KONTROL YAPILARI
Programın akışını etkileyen kontrol (akış) komutları if ve switch gibi karar
yapılarından ve for, do-while ve while gibi döngülerden oluşmaktadır.

If Komutu
Programın akışını mantıksal ifadelerin sonucuna göre değiştiren komuttur.
“If” komutu istenirse tek başına, istenirse if-else (Örnek 8.13) ya da if-elseif
(Örnek 8.14) şeklinde kullanılabilir.
$a=10; 10 değeri,
$b=20; 20'den daha
if($a>$b) büyük
echo "$a değeri, $b'den daha büyüktür";
değildir
else
echo "$a değeri, $b'den daha büyük değildir";
Örnek 8.13 if-else Komutu

Örnek 8.13’te if komutunun devamındaki parantezler içerisindeki mantıksal


ifadenin ($a>$b) sonucu hesaplanır. Sonuç doğru (true) ise devamındaki komut
veya komutlar çalıştırılır. Sonuç yanlış ise (false) devamındaki komutlar
if’e ya da else’e bağlı
komutlar tek komut ise çalıştırılmaz. Ancak else ifadesi varsa, yanlış sonuçta else ifadesinden sonraki
küme parantezine komut ya da komutlar çalıştırılır.
alınmayabilir. Eğer $a=10;
birden fazla komut if $b=24;
veya else bağlı ise $fark=0;
komutların hepsi küme if($a>$b){
echo "$a degeri, $b değerinden büyüktür<br>";
parantezine alınmalıdır.
$fark = $a - $b;
}
elseif($a<$b){
echo "$b degeri $a değerinden büyüktür<br>";
$fark = $b - $a;
}
else{
echo "$a degeri $b değerine eşittir<br>";
$fark = 0;
}
echo "Fark = $fark";
24 değeri 10 değerinden büyüktür
Fark = 14
Örnek 8.14 if-elseif-else Örneği

Örnek 8.14’te if’in koşulu doğru değilse, elseif komutunun koşulu kontrol
edilecektir. Elseif koşulu da doğru değilse, else komutunun altındaki blok
çalıştırılacaktır. Elseif komutu, if yapısı içerisinde birden fazla kullanılabilir, else
komutu ise, gerekirse, sadece bir defa ve en sonda yer almalıdır.

Mantık ve Karşılaştırma Operatörleri


If komutunun koşulunda yer alan ifade ($a > $b gibi), mantık ve
karşılaştırma operatörlerinin özelliklerine göre doğru (true) veya yanlış (false)
değerini üretir. Birden fazla karşılaştırma işlemi mantık operatörleri ile

175
Atatürk Üniversitesi Açıköğretim Fakültesi 15
PHP Diline Giriş

birleştirilebilir. Karşılaştırma operatörleri ve anlamları Tablo 8.4’te, mantık


operatörleri ise Tablo 8.5’te verilmiştir.
Tablo 8.4 Karşılaştırma Operatörleri

Operatör İsim Kullanılışı


< Küçüktür $a < $b
> Büyüktür $a $b
<= Küçük ve eşittir $a <= $b
>= Büyük ve eşittir $a >= $b
== Eşittir $a == $b
=== Denktir $a === $b
!= Eşit değildir $a != $b
!== Denk değildir $a !== $b
<> Eşit değildir $a <> $b
Eşitlik (==) ve denklik (===) operatörlerinin arasındaki fark şudur; eşitlik
operatörü karşılaştırılan sadece değerler üzerinden karar verirken, denklik
operatörü hem değer hem de veri türü üzerinde karar verir.
Örnek

•34==34.0 -> DOĞRU


34===34.0 -> YANLIŞ
•34=='34' -> DOĞRU
34==='34' -> YANLIŞ

Mantık operatörleri yan


yana ikiden fazla
Tablo 8.5 Mantık Operatörleri
karşılaştırma sonucunu
hesaplayabilir. Operatör Anlamı Örnek Açıklama
Gerekirse parantez ile ! Tersi !$a $a’nın değeri doğru ise yanlış, ya da tam tersi
öncelik verilebilir. yapar (True  False; False  True)
&& Ve $a && $b $a ve $b’nin değeri doğru (true) ise sonucu
doğru (true), ikisinden birisi yanlış ise sonucu
yanlış (false) yapar
|| Veya $a || $b $a’nın ya da $b’nin herhangi biri doğru (true)
ise sonucu doğru (true); her ikisi de yanlış ise
o zaman sonucu yanlış (false) yapar.

Switch Komutu
Switch komutu, bir değişkenin değerini özel değerler ile karşılaştırıp, eşitlik
durumunda programın akışını değiştirir (Örnek 8.15).
$renk = "mavi";
switch ($renk) {
case "mavi":
echo "Sevdiğiniz renk mavidir";
break;
case "blue":
echo " Sevdiğiniz renk kırmızıdır";
break;

176
Atatürk Üniversitesi Açıköğretim Fakültesi 16
PHP Diline Giriş

case "green":
echo " Sevdiğiniz renk yeşildir";
break;
default:
echo " Sevdiğiniz renk mavi, kırmızı veya yeşil değil";
}
Sevdiğiniz renk mavidir

Örnek 8.15 Switch Komutu Örneği

Switch komutunda değişken tamsayı, ondalıklı sayı, metin ya da ikili


(boolean) türünde olabilir. Case kelimelerinde sonra değişkenin olası değerleri
açıkça yazılmalıdır. İlgili case komutları sonuna mutlaka break kelimesi
eklenmelidir. Aksi takdirde bir sonraki case komutları da (değer aynı olmasa bile,
çalışacaktır. Default kelimesi, else benzeri, hiçbir case değeri eşleşmezse çalıştırılır.

For Döngüsü
For döngüsü, belirli sayıda tekrar etmesi istenilen komutların bir sayaç
değişkeni değeri kontrol edilerek çalıştırılmasını sağlar (Örnek 8.16).
a=0
for($a=0; $a<5;$a++){ a=1
echo "a=$a</br>"; a=2
}
a=3
a=4
Örnek 8.16 For Döngüsü Örneği
For döngüsünde, tekrar For döngüsü eleman sayısı bilinen diziler ile sıklıkla kullanılır. Döngünün
edilecek komut birden
sayaç değişkeni aynı zamanda Örnek 8.17’deki gibi dizinin indisi olarak
fazla ise komutlar blok
parantez içinde kullanılabilir.
yazılmalıdır $dizi=[5,10,15,20,25];
for($a=0; $a<5;$a++){
echo "Dizinin " . $a+1 . ". elemanı = $dizi[$a]</br>";
}
Dizinin 1. elemanı = 5
Dizinin 2. elemanı = 10
Dizinin 3. elemanı = 15
Dizinin 4. elemanı = 20
Dizinin 5. elemanı = 25

Örnek 8.17 For Döngüsü ve Dizi Örneği

Foreach Döngüsü
Dizilerin eleman sayıları bilinmediğinde ya da değişkenlik gösterdiğinde,
sayaç kontrollü for döngüsü kullanmak zor olabilir. Bunu yerine kaç eleman olursa
olsun, dizinin her elemanı için tekrar işlemini yapan foreach döngüsü Örnek
8.18’deki gibi kullanılabilir.

177
Atatürk Üniversitesi Açıköğretim Fakültesi 17
PHP Diline Giriş

$dizi=[5,10,15,20,25]; Dizi elemanı = 5


foreach($dizi as $eleman){ Dizi elemanı = 10
echo "Dizi elemanı = $eleman</br>"; Dizi elemanı = 15
}
Dizi elemanı = 20
Dizi elemanı = 25
Örnek 8.18 Foreach Döngüsü ve Diziler

İndis yerine anahtar kullanılan dizilerde, foreach döngüsü ile her elemanın
hem anahtarına hem de değerine Örnek 8.19’daki gibi ulaşılabilir.
$dizi=["genislik" => 200, genislik = 200
"yukseklik" => 300, yukseklik = 300
"derinlik" => 400]; derinlik = 400
foreach($dizi as $anahtar => $deger){
echo "$anahtar = $deger</br>";
}
Örnek 8.19 Foreach Döngüsü ve Anahtarlı Diziler

While Döngüsü
Döngüdeki tekrarın başlaması veya tekrar sayısı eğer bir koşula bağlı ise
while döngüsü kullanılabilir. Örnek 8.20’deki while döngüsünde koşul ($a < 4)
sonucu doğru olduğu sürece döngü tekrar etmeye devam eder.
$a=0; a=0
while ($a < 4){ a=1
echo "a = $a</br>"; a=2
$a++;
a=3
}
Örnek 8.20 While Döngüsü Örneğini

Do While Döngüsü
While ve Do-While
Do-While döngüsünde, tekrar için gerekli koşul kontrolü, tekrar edecek
döngülerinde, koşul
ifadesinin değeri hep komutların biz kez çalıştırılmasından sonra yazılır. Koşul doğru ise komutlar tekrar
doğru olursa, döngü çalıştırılır (Örnek 8.21).
sonsuz tekrara girer! do{ a=0
echo "a = $a</br>"; a=5
$a+=5; a = 10
}while ($a < 20);
a = 15
Örnek 8.21 Do-While Döngüsü Örneğini
Bireysel Etkinlik

• HTML başlık etketlerini (H1'den H6'ya kadar) ekrana herhangi bir


döngü ile yazdıran PHP kodlarını yazınız.

178
Atatürk Üniversitesi Açıköğretim Fakültesi 18
PHP Diline Giriş

•PHP Diline Giriş


•PHP web sayfaları geliştirmek için kullanılan sunucu taraflı dillerden bir
tanesidir.
•PHP DESTEKLİ WEB SUNUCUSU KURULUMU
•PHP dilini çalıştırmak için hem web sunucusu hem de PHP yorumlayısının bu
sunucu üzerinde kurulması gerekir.
Özet
•XAMPP paketi hem sunucuyu hem de PHP yorumlayısıcını birlikte kurmanızı
sağlar. Ücretsiz paketi Apache Friends web sitesinden
(https://www.apachefriends.org/tr/index.html) indirip kurabilirsiniz.
•Kurulum sonrasında herhangi bir metin editörlü ile yazacağınız PHP uzantılı
dosyaları sunucudaki ana web dizinize (örneğin c:\xampp\htdpcs\ kaydedin.
Talıştırmak için tarayıcınızda http://localhost/dosyaAdi.php şeklinde yazıp
Enter tuşuna basınız.
•PHP'ye özgü ayarlamaları yapmak için C:\xampp\php klasörüdeki php.ini
dosyasını açıp düzenleyebilirisiniz. Değişikliklerin geçerli olması için
sunucunun (örneğin Apache) durdurulup tekrar başlatılması gerekir.
•PHP DİLİNİN YAPISI
•PHP komutları HTML sayfalarında <?php ile ?> arasında yazılır. Bu PHP kod
bloğuna istediğiniz kadar PHP komutu yazabilirsiniz.
•Açıklama satırı eklemek için satır başına // sembollerini kolaybilir ya da /* ile
başlayıp açıklama sonuna */ koyabilirsiniz.
•Değişkenler: PHP'de değişkenler tanımlanmadan ilk değer atanarak
kullanılabilir. Atanan değerin türüne göre değişkenin türü belirlenir. Farklı
türde bir değer atanırsa değişken kabul eder ve o türe dönüşür.
•Değişken isimleri $ sembolü ile başlar, sonrasında A-Z, a-z ve ya rakamlar yer
alabilir. Bunlara ek olarak sadece alt tire karakteri kullanılabilir. Rakamlar en
başta yer alamaz.
•Değişkenlerin tanımlandıkları yere ve/veya static kelimesine göre yerel,
genel, statik ve parametre kapsamında olabilirler.
•Define kelimesi ile değeri değiştirilemeyen sabitler tanımlanabilir.
•Matematik işlemleri için +,- ,*, / ve % sembolleri kullanılırken, hızlı atama
için +=, -= *=, /= ve %= ile .= operatörleri kullanılır.
•Diziler: Birden çok değeri saklayabilen değişkenlerdir. Elemanları farklı türde
olabilir. Elemanlara ulaşmak için kullanılan indis değeri sıfırdan başlar. Eğer
istenirse indis yerine her elemana bir de anahtar eklenebilir.
•Dizileri sıralama veya ters çevirmek için sort, rsort ve array_reverse
fonksiyonları kullanılabilir. Diziye sonradan yeni eleman eklemek veya
elemanını çıkarmak mümkündür.
•KONTROL YAPILARI
•Programın akışını belirli koşullara göre değiştirmek ya da belirli komutların
tekrar çalışmasını sağlamak için kontrol yapıları olarak tanımlanan if, switch,
for, foreach, while ve do-while komutları kullanılır.
•If komutu: Bir koşula göre bazı komutların çalışmasını veya çalışmamasını
sağlayan yapıdır. Tek başına, if-else ya da if-elseif şeklinde 3 farklı şekilde
kullanılabilir.
•Koşulların doğru ya da yanlış değerini vermesi için karşılaştırma (>, <, == vb. )
ve mantık operatörleri (&&, ||) kullanılır.

179
Atatürk Üniversitesi Açıköğretim Fakültesi 19
PHP Diline Giriş

•Switch Komutu: Bir değişkenin alabileceği değerlere göre programın akışını


değiştirir. Aralık kontrolü yapacaz ancak açık değer kontrolü yapabilir.

Özet (devamı)
•For Döngüsü: Tekrar edilmesi istenen komutların tekrar sayısını, bir sayaç
değişkeninin ilk ve son değerine göre ayarlandığı döngüdür. Dizilerin
elemanlarına erişim için sıklıkla kullanılır. Sayaç istenilen bir değerden
başlatılabilir ve üst değer ulaşması için birer birer ya da farklı büyüklükte
artırılabilir.
•Foreach Döngüsü: Bir dizinin tüm elemanlarına erişim sağlayana kadar
komutların tekar edilmesini sağlar. Eleman sayısı belirsiz dizilerde daha çok
tercih edilir. Eğer dizi elemanları anahtar da içeriyorsa hem anahtara hem de
değere erişim mümkündür.
•While Döngüsü: Tekrar edilecek komutların bir koşulun sonucuna göre
tekrar edilmesini sağlar. Koşul döngü başında yer aldığı için koşul yanlış ise
komutlar hiç çalıştırılmadan döngü terk edilebilir. Eğer sonuç sürekli doğru
sonucunu üretirse, döngü sonsuz döngüye girebilir.
•Do-While Döngüsü: Tekrar durumunun koşula bağlı olduğu başka bir döngü
yapısıdır. Ancak koşul, döngü komutlarının sonunda yer alır. Bu nedenler
komutlar koşuldan bağımsız olarak en az bir kez çalıştırılır, sonraki tekrarlar
ise koşula bağlıdır. Koşul sürekli doğru olursa yine sonsuz döngü riski vardır.

180
Atatürk Üniversitesi Açıköğretim Fakültesi 20
PHP Diline Giriş

DEĞERLENDİRME SORULARI
1. PHP’nin çalışması için aşağıdaki ikililerden hangisi gereklidir?
a) Tarayıcı ve Web Sunucusu
b) Web Sunucu ve Veri Tabanı
c) Veri Tabanı ve PHP Yorumlayıcısı
d) PHP yorumlayıcısı ve Web Sunucusu
e) Web Sunucusu ve Metin Editörü

2. PHP komutlarının sonunda hangi karakter yer almalıdır?


a) .
b) ;
c) !
d) >
e) |

3. Aşağıdakilerden hangisi geçersiz değişken adıdır?


a) $2_sayfaNo
b) $sayfaNo2
c) $sayfa_2No
d) $sayfaNoiki
e) $SAYFA2No

4. $a = 3 * 2 + 1; işleminin sonucunda $a değişkeninin değeri kaçtır?


a) 61
b) 2221
c) 4
d) 9
e) 7

5. Diziler hakkında belirtilen ifadelerden hangisi yanlıştır?


a) Elemanları silinebilir
b) Yeni eleman eklenebilir
c) Tüm elemanlar aynı türde olmak zorundadır
d) Tüm anahtarlar farklı olmak zorundadır
e) Her değerin bir anahtarı vardır

6. Aşağıdaki for döngülerinin hangisinde tekrar sayısı 10’dur?


a) for($a=2; $a<=12; $a++)
b) for($a=2; $a<12; $a++)
c) for($a=2; $a<12; $a+=2)
d) for($a=2; $a>12; $a++)
e) for($a=2; $a==12; $a++)

181
Atatürk Üniversitesi Açıköğretim Fakültesi 21
PHP Diline Giriş

7. $a=45; if($a === “45”) ifadesindeki koşulun sonucu nedir?


a) 45
b) “45”
c) “1”
d) Doğru
e) Yanlış

8. Aşağıdaki komutların hangisinde sonsuz döngü riski vardır?


a) switch
b) if
c) while
d) if-elseif
e) Array_reverse()

9. Aşağıdaki değişken kapsamlarından hangisinde, fonksiyonda tanımlanmış


değişken fonksiyon tekrar çağrıldığında önceki değerini korur?
a) Yerel
b) Genel
c) Global
d) Statik
e) Parametre

10. Switch komutundaki default kelimesinin amacı nedir?


a) Önceki case’ler eşleşmez ise çalışacak komutları devreye sokmak
b) Çalışan en son case’e programın akışını geri göndermek
c) Kontrol edilen değişkenin değerini varsayılan değer ile değiştirmek
d) Kontrol edilen değişkenin değerini 1 artırmak
e) Açık değer yerine değer aralığı ile eşleşme kontrolü yapmak

Cevap Anahtarı
1.d, 2.b, 3.a, 4.e, 5c., 6.b, 7.e, 8.c, 9.d, 10.a

182
Atatürk Üniversitesi Açıköğretim Fakültesi 22
PHP Diline Giriş

YARARLANILAN KAYNAKLAR
PHP Group. (2022, 1 11). PHP Kılavuzu. PHP: Hypertext Preprocessor:
https://www.php.net/manual/tr/ adresinden alındı
Şahin, Y. L. (2016). PHP'ye Giriş. M. Fırat içinde, İnternet Tabanlı Programlama (s.
303). Eskişehir: Anadolu Üniversitesi. https://ets.anadolu.edu.tr/
storage/nfs/WTK210U/ebook/WTK210U-17V1S1-8-0-1-SV1-ebook.pdf
adresinden alındı
W3 Schools. (2022, 1 11). PHP Tutorial. W3Schools Online Web Tutorials:
https://www.w3schools.com/php/default.asp adresinden alındı

183
Atatürk Üniversitesi Açıköğretim Fakültesi 23
PHP’DE İLERİ KONULAR

• Giriş
• Dış dosyaların Dahil Edilmesi
İÇİNDEKİLER

• Fonksiyonlar İNTERNET
• HTML Formları ile Çalışma
• $_POST, $_GET ve PROGRAMCILIĞI II
$_REQUEST Değişkenleri
• Sunucu Değişkenleri ve Dr. Öğr. Üyesi Halil
Yönlendirme
• Oturum Yönetimi ERSOY
• Çerez Kullanımı

• Bu üniteyi çalıştıktan sonra;


• Fonksiyon yazabilecek ve
HEDEFLER

çağırabilecek,
• Dış dosyaları sayfalara dahil
edebilecek,
• Form'ları PHP ile işleyebilecek,
• Sayfa yönlendirme veya
sonlandırma yapabilecek,
• Oturum bilgilerini
yönetebilecek,
• Çerezleri kullanabileceksiniz.
ÜNİTE

9
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
PHP’de İleri Konular

Dosya Dahil Etme

Fonksiyonlar

HTML Form Etiketleri


PHP'DE İLERİ KONULAR

Form Etiketleri $_GET Değişkeni

GET ve POST İstekleri $_POST Değişkeni

$_SERVER Değişkeni $_REQUEST Değişkeni

$_SESSION Değişkeni

$_COOKIE Değişkeni

185
Atatürk Üniversitesi Açıköğretim Fakültesi 2
PHP’de İleri Konular

GİRİŞ
Bir önceki bölümde, PHP’e giriş yapmış ve programlama dillerine göre
oldukça esnek olduğundan bahsetmiştik. Özellikle değişkenler, diziler ve veri
türleri konusunda ihtiyaca göre oldukça fazla sayıda otomatik tür dönüşümleri ve
yardımcı hazır fonksiyonları mevcuttur.
Bu bölümde PHP dilini güçlü kılan kendine özgü öne çıkmış özellikler ele
alınmıştır. Bu kapsamda PHP komutlarının farklı dosyalar içerisine yazılıp istenilen
diğer sayfalara dahil edilmesi, fonksiyon tanımlama ve çağırma, form
elemanlarından gelen bilgilerin karşılanması ve işlenmesi ile farklı yerlerde
kullanılabilecek global değişkenler, oturum ve çerezlerin yönetimi ve kullanımları
anlatılmıştır.
Modüler program yazabilmek için çok kullanılan komutların farklı
dosyalarda saklanması ve gerektiğinde istenilen yere dahil edilmesi PHP’de
mümkündür. Bunun için bu bölümde require ve include komutları ele alınmıştır.
Fonksiyon tanımlama ve kullanma hemen hemen bütün programlama
dillerinde önemli bir konudur. PHP’de fonksiyon tanımlamaları ve kullanımı bu
Require ile include bölümde ele alınmıştır.
arasındaki fark, Kullanıcıların veri girmesine izin veren HTML elemanı olan form ve form
eklenecek dosya etiketleri, girilen verinin işlenmesi için yine sunucu taraflı dillerle yazılmış sayfalara
bulunamadığında
ihtiyaç duyar. PHP’de bunun için $_GET, $_POST ve $_REQUEST global
require komutunun
hata vermesi ve değişkenleri kullanılır. HTML sayfasındaki formdan gelen bilgiler, sunucu tarafında
çalışmayı bu değişkenler içerisinde tutulur ve farklı amaçlarla kullanılır.
durdurmasıdır, include Web sitelerinin kullanıcılar hakkında bazı bilgileri tutmak ve hatırlamak için
komutunun ise sadece
iki yolu vardır: Oturum değişkenleri kullanmak ya da çerezleri kullanmak. PHP ile
uyarı vermesi ancak
çalışmaya devam oturum değişkenlerine $_SESSION global değişkeni ile, çerezlere ise $_COOKIE
etmesidir. global değişkeni ile erişilebilir. Ayrıca web sunucusu ve sayfa hakkında detaylı
bilgilere kodlar içerisinden ulaşmak için $_SERVER global değişkeni kullanılır. Bu
global değişkenlerde bu bölümün konusu olacaktır.

DIŞ DOSYALARIN DAHİL EDİLMESİ


Özellikle çok sayıda sayfada aynı içeriklerin yer alması veya aynı komutların
çalışması gerekiyorsa, bunu tekrar tekrar yazmamak adına, ayrı bir PHP dosyasına
yazmak ve bu sayfayı gerekli olduğu diğer sayfaların içine dahil etmek daha iyi bir
yöntem olacaktır. Bunun için dışarıdaki dosyayı mevcut sayfaya ekleyen require
veya include komutları Tablo 9.1’deki gibi kullanılabilir.
Dahil edilen dosyalar,
Tablo 9.1 Require veya İnclude ile Dosya Eklenmesi
eğer farklı bir klasör
altındaysa, klasör adresi Dosya adı Dosyanın İçindeki Kodlar
komut satırında dosya
sabitler.php <?php
önüne eklenmelidir. define("BASLIK","Php Öğreniyorum");
define("ADRES","http://phpogren.com");
?>

186
Atatürk Üniversitesi Açıköğretim Fakültesi 3
PHP’de İleri Konular

sayfa1.php <?php
require "sabitler.php";
// YA DA include "sabitler.php";
?>
<html>
<head>
<?php
echo "<title>".BASLIK."</title>";
?>
</head>
<body>
<?php
echo "<a href='".ADRES."'>".ADRES."</a>";
?>
</body>
</html>

Yukarıdaki kodların çıktısı aşağıdaki gibi olacaktır

Şekil 9.1 Require ile Dosyanın Dahil Edilmiş Sayfanın Çıktısı

Require/Require_Once ve Include/Include_Once Komutları


Dahil edilmek istenen dosya aynı sayfaya birden fazla defa require veya
include ile dahil edilebilir. Eğer bir kez dahil edildikten sonra tekrar dahil edilmesi
istenmiyorsa, require_once veya include_once komutları kullanılabilir. Bu durumda
dış dosya önceden dahil edildiyse bir daha dahil edilmez.

FONKSİYONLAR
Tüm programlama dillerinde olduğu gibi PHP’de de kodları anlamlı parçalar
Fonksiyonlar halinde bölmek ve gerektiğinde tekrar kullanmak için fonksiyon tanımlanabilir.
tanımlandıkları sırada Fonksiyonların tanımlanması aşağıdaki kalıba göre yapılır:
değil, çağırıldıkları
function fonksiyonAdi(parametreler){
sırada çalışırlar. komutlar;
return geriDönüşDeğeri;
}
Fonksiyon adı, değişken isimlendirme kurallarına uygun yapılır. İstenirse hiç
parametre kullanılmayabilir veya birden fazla değişken ya da dizi parametre olarak
kullanılabilir. Fonksiyon içerisinde istenirse yeni değişken veya diziler
tanımlanabilir. Fonksiyon sonunda isteğe bağlı olarak geri dönüş değeri return
kelimesi ile birlikte kullanılabilir.
Fonksiyon bir kez tanımlanır ancak birden fazla çağrılabilir. Çağırma
sırasında sadece fonksiyonun adı ve parametreleri yazılmalıdır. Fonksiyonun geri
dönüş değeri olup olmadığına göre çağırma satırı değişebilir.

187
Atatürk Üniversitesi Açıköğretim Fakültesi 4
PHP’de İleri Konular

Geri Dönüş Değeri Olan Fonksiyonlar


Eğer fonksiyon içinde yapılan işlemler sonucunda, fonksiyonun çağırıldığı
noktaya bir değer aktarılması gerekirse, fonksiyon içinde return ile bu değer yer
almalıdır. Return ifadesinin yanındaki değerin türüne göre, fonksiyonun türü aynı
olur.
function topla($sayi1, $sayi2){ 44.9
return $sayi1 + $sayi2; 300
} 11
$a=32.4;
$b=12.5;
echo topla($a, $b) . "<br>";
echo topla(100, 200) . "<br>";
echo topla(true, 10) . "<br>";
Örnek 9.1 Geri Dönüş Değeri Olan Fonksiyon Tanımı ve Çağırılması

Geri Dönüş Değeri Olmayan Fonksiyonlar


Eğer fonksiyon içinde yapılan işlemler sonucunda, fonksiyonun çağırıldığı
noktaya bir değer aktarılması gerekmiyorsa, Örnek 9.2’deki gibi fonksiyon içinde
return yer almamalıdır.
function toplaVeYaz($sayi1, $sayi2){ 3.5
echo ($sayi1 + $sayi2) . "<BR/>"; 30
}
$a=2.4;
$b=1.1;
toplaVeYaz($a, $b);
toplaVeYaz(10, 20);
Örnek 9.2 Geri Dönüş Değeri Olmayan Fonksiyon

Parametrelerde Varsayılan Değer Kullanımı


Fonksiyonun çağırılması sırasında değer verilmeyen parametrelerin
varsayılan bir değer ile fonksiyonda kullanılması mümkündür. Bunun için
tanımlama satırında parametre adından sonra, Örnek 9.3’teki gibi, varsayılan
değer yazılır.
Varsayılan parametre,
tanımlama satırında function alanHesapla($yaricap, $pi=3.1417){ 50.2672
mutlaka en son sırada return $yaricap * $yaricap * $pi; 48
}
olmalıdır.
echo alanHesapla(4) . "<br>";
echo alanHesapla(4,3) . "<br>";
Örnek 9.3 Parametrelerde Varsayılan Değer Belirlenmesi

Parametrelerin Değer veya Adres ile Gönderilmesi


Fonksiyon çağırma satırındaki parametrelerin değerleri fonksiyon içinde
değişirse, çağırma aşamasındaki değerleri etkilemez çünkü normal parametrelerin
sadece değerleri fonksiyona gönderilir.
Eğer fonksiyon içindeki değer değişikliğin çağırma kısmındaki değişkenlere
yansıma istenirse, parametrelerin hem değeri hem de adresi gönderilmelidir.

188
Atatürk Üniversitesi Açıköğretim Fakültesi 5
PHP’de İleri Konular

Bunun için tanımlama satırında, Örnek 9.4’teki gibi, parametre adlarının önüne &
sembolü eklenmelidir.
function karesiniAl(&$sayi){ Fonksiyon öncesi a=3
$sayi *= $sayi; Fonksiyon içi sonuç=9
echo "Fonksiyon içi sonuç=$sayi<br>"; Fonksiyon sonrası a=9
return $sayi;
}

$a=3;
echo "Fonksiyon öncesi a=$a <br>";
karesiniAl($a) . "<br>";
echo "Fonksiyon sonrası a=$a <br>";
Örnek 9.4 Parametrede Adres ile Değer Gönderimi

Dizilerin Parametre Olarak Gönderilmesi


Fonksiyon parametresi, Örnek 9.5’teki gibi, dizi olabilir. Eleman sayısı
bilinmeyen dizilerin tüm elemanlarına fonksiyon içinden foreach döngüsü ile
örnekteki gibi ulaşılabilir. Gerekli olursa fonksiyonun geri dönüş değeri dizi olabilir.
function ortalamaBul($sayilar){ Ortalama = 5.89
$toplam=0; $adet=0;
foreach($sayilar as $sayi){
$toplam += $sayi;
$adet++;
}
return $toplam / $adet;
}
$dizi=[2,4,6,8,9];
echo "Ortalama=".ortalamaBul($dizi)."<br>";
Örnek 9.5 Parametre Olarak Dizi Kullanılması
HTML’deki form ve
içindeki form
HTML FORM ETİKETLERİ İLE ÇALIŞMA
etiketlerine name Kullanıcının web sayfalarında farklı amaçlarla veri girişi yaptıkları HTML
özelliği ile isim verirken, elemanları, form etiketi ile sarmalanmış input, textarea, select, radio ve checkbox
PHP’nin değişken
etiketleridir. Bu etiketlere girilmiş ya da işaretlemiş veriler bir paket halinde, form
isimlendirme
kurallarına uygun etiketinin action özelliğinde belirtilen farklı bir PHP sayfasına gönderilir. Gönderim
ifadeler seçilmelidir. şekli formun method özelliğinin get ya da post olmasına göre değişir. Get metodu
Yoksa dil kodlamasının ile gönderilen veriler, hedef dosyaya açık biçimde, adres satırında görülebilecek
farklı olması şekilde gönderilir. Post metodu ile gönderilen veriler ise kapalı (gizli) biçimde
durumunda sıkıntı hedef dosyaya gönderilir.
yaşanabilir.
$_REQUEST, $_GET ve $_POST Global Değişkenleri
Veriler hedef sayfada, PHP’deki $_GET, $_POST veya $_REQUEST global
değişkenleri yardımıyla tek tek kullanılabilir. $_REQUEST değişkeni, formun metot
özelliği ne olursa olsun (get ya da post) paketteki tüm bilgilere ulaşabilir. Bunun
yanında, eğer formun metot özelliği get ise $_GET, post ile $_POST global
değişkeni kullanılmalıdır. Örnek 9.6’da metot olarak get kullanılmıştır.
<body>
<h1>ÖRNEK 9.HTML FORMU</h1>
<form action="verileriIsle.php" method="get" name="bilgiFormu">

189
Atatürk Üniversitesi Açıköğretim Fakültesi 6
PHP’de İleri Konular

Adınızı Giriniz: <input name="ad" type="text"><br>


Soyadınızı Giriniz: <input name="soyad" type="text"><br>
Abonelik Durumu: <input name="abone" type="radio" value="1">Abone
- <input name="abone" type="radio" value="0"> Abone Değil<br>
Başvuru Tarihi: <input type="date" name="btarihi">
<input type="submit" value="Gönder" name="gonderButonu">
<input type="reset" value="Temizle" name="temizleButonu">
</form>
</body>

Örnek 9.6 Form.php Dosyası Kodları ve Çıktısı

PHP ile form elemanlarına erişimde, etiketlerin name özellikleri ve value


değerleri kullanılır. $_GET, $_POST veya $_REQUEST global değişkenleri, formun
içindeki tüm etiketlerin name ve value değerlerini, bir dizinin anahtar ve değerleri
biçiminde tutarlar.
<h1> GET ile gelen veriler:</h1>
<?php
echo "Ad: ". $_GET["ad"] ."<br>";
echo "Soyad: ". $_GET["soyad"] ."<br>";
if($_GET["abone"]==1)
echo "Abonelik mevcut<br>";
else
echo "Abonelik yok<br>";
echo "Başvuru Tarihi:". $_GET["btarihi"]."<br>";
?>

Örnek 9.7 Hedef Dosya (verileriIsle.php) Kodları ve Çıktısı

Örnek 9.6’daki örnekte formun metodu get olduğu için Örnek 9.7’deki
hedef dosyanın görüntülendiği tarayıcının adres satırında Şekil 9.2’teki ifade yer
alacaktır:

Şekil 9.2 Get metodu ile gidilen formun hedef sayfasında oluşan adres satırı

Şekil 9.2’deki adres satırında formun içindeki tüm etiketlerin isimleri ve


güncel değerleri açık biçimde görülmektedir. Bu durum bazen veri güvenliğini
riske ettiği için get yerine port metodu tercih edilir.

190
Atatürk Üniversitesi Açıköğretim Fakültesi 7
PHP’de İleri Konular

Hedef dosyaya gelen form bilgilerinin hepsine foreach döngüsü ile ulaşmak
mümkündür. Örnek 9.8’deki örnekte, formun metodu post olarak belirlenmiştir.
Bu durumda hedef dosyada $_POST global değişkeni kullanılır. Bu metotta adres
satırında gelen bilgilerin yazılmadığına dikkat ediniz.
<?php
echo "Tüm POST değişkenleri<br>";
Metot ne olursa olsun, foreach($_POST as $anahtar =>$deger){
$_REQUEST global echo $anahtar."=".$deger."<br>";
değişkeni ile aynı }
?>
sayıdaki form bilgisine
ulaşabilirsiniz.

Örnek 9.8 Post Metodu ile gönderilmiş Bilgilerin $_POST Değişkeni İle Yazdırılması

Form Verilerinin Kontrolü


Form alanlarında girmesi gereken zorunlu bilgilerin boş bırakılması ya da
farklı biçimde girilmesi, sonrasında yapılacak işleme göre sıkıntılı durumların
oluşmasına ya da güvenlik açıklarına neden olabilir. Bu nedenle form bilgilerinin
işlenmeden önce kontrol edilmesi gerekir. Bu kontrol PHP ile form ile aynı sayfada
ya da action kısmında yazan dosyada yapılabilir.
isset fonksiyonu
değişkenin varlığını Kullanıcıların girdiği veriler üç yönden kontrol edilmelidir:
kontrol eder, ancak 1. Zorunlu verilerin girilip girilmediği
değerini kontrol etmez.
2. Girilmiş verilerin uygun biçimde olup olmadığı
Hem var hem de dolu
olması için isset ve 3. Girilmiş verilerin tehlikeli olup olmadığı
empty birlikte Zorunlu Verilerin Kontrolü
kullanılabilir.
Form alanında girilmesi zorunlu alanlar boş bırakılırsa, gönderilen sayfada
alanlar $_POST, $_GET ya da $_REQUEST değişkenleri içerisinde yer almayabilirler.
Bunu kontrol etmek için isset() veya empty() fonksiyonları kullanılabilir. isset
fonksiyonu parametre olarak aldığı değişkenin var olup olmadığını kontrol eder ve
varsa true, yoksa false değerini üretir. empty fonksiyonu ise parametre olarak
aldığı değişkenin değerinin boş olup olmadığını kontrol eder. Boş olma
kontrolünde empty fonksiyonu, stringler için boş (“”) veya NULL olma durumunda,
sayısal değerler için 0, 0.0 ya da false olma durumunda true değerini verir.
if(isset($_POST["abone"])) Abone bilgileri VAR
echo "Abone bilgileri VAR";
else Abone bilgileri DOLU
echo "Abone bilgileri YOK";

if(empty($_POST["abone"]))
echo "Abone bilgileri BOŞ";
else

191
Atatürk Üniversitesi Açıköğretim Fakültesi 8
PHP’de İleri Konular

echo "Abone bilgileri DOLU";


?>

Örnek 9.9 Isset ve empty Fonksiyonları ile Kontrol

Düzenli ifadeler ile hem Girilen Verilerin Biçim Kontrolü


girdinin belirli bir desen Girilen verilerin istenilen biçimde olup olmadığını kontrol etmek için özel
uyup uymadığı, hem de metin fonksiyonları yazılabilir (Örneğin girilen bir kelimenin en az 5 karakter
desenin girdi içerisinde
içermesi gibi). Öte taraftan aşağıdaki Tablo 9.2’de gösterilen bazı hazır özel PHP
kaç kez tekrar edildiğini
bulabilirsiniz. fonksiyonları bu kontrolü kolaylaştırabilir.
Tablo 9.2 Hazır Kontrol Fonksiyonları

Fonksiyon Örnek
filter_var(); if(filter_var($_POST["eposta"],
FILTER_VALIDATE_EMAIL)
echo "Eposta adresi doğru biçimdedir";
if(filter_var($_POST["url"],
FILTER_VALIDATE_URL)
echo "URL adresi doğru biçimdedir";

if(filter_var($_POST["sayi"],
FILTER_VALIDATE_INT)
echo "Sayı doğru biçimdedir";

is_numeric()* if(is_numeric(($_POST["sayi"]))
echo "Değer sayısal biçimdedir";

is_string()* if(is_string(($_POST["ad"]))
echo "Ad alani sting türündedir";

preg_match() if(preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]
{2}$/', $_POST["btarihi"]))
echo $_POST["btarihi"]." doğru biçimde
girilmiş.";
* Bu fonksiyonlar sadece tür kontrolü yapar, değer kontrolü yapmaz.
Tablo 9.2’de örnekleri verilen filter_var() komutu ile is_numeric() ve
is_string() fonksiyonlarına benzer başka fonksiyonlar da mevcuttur. Bunun için
https://www.php.net/manual/tr/ref.var.php ve https://www.w3schools.
com/php/php_ref_filter.asp adresindeki komutlar incelenebilir. Tablo 9.daki son
satırda bulunan preg_match komutu ise, bir metnin belirli bir desende olup
olmadığını kontrol eder. Örneğin tarih girdisi için “2022-02-25” gibi dizilmiş rakam
ve tire sembolleri isteniyorsa, örnekteki gibi kontrol sağlanabilir. Bu şekilde
metinlerin desen kontrolü için preg_match komutuna ve desen oluşturmak için
“düzenli ifadeler” (regular pressions)” konusunda Avcı’nın (2013) “PHP ile regular
expression” sayfasına bakabilirsiniz.

Girilen Verilerde Tehlikeli İçerik Kontrolü ve Silinmesi


Formlar üzerinden girdi sağlanırken art niyetli kişiler tarafından tehlikeli
olabilecek JavaScript komutları veya SQL komutları girilebilir. Bir başka örnekte de
kullanıcının farkında olmadan bastığı gereksiz boşluk tuşları bir sonraki adımda

192
Atatürk Üniversitesi Açıköğretim Fakültesi 9
PHP’de İleri Konular

sıkıntı çıkarabilir. Bunlardan dolayı Tablo 9.3’teki üç fonksiyon ile girdi içeriğindeki
olası riskli karakterler yok edilebilir.
Tablo 9.3 Riskli Karakterlerin Silinmesi ya da Dönüştürülmesi için Hazır Fonksiyonlar

Fonksiyon Örnek Etki


trim() $a = trim($a); $a değişkenin
başındaki ve
" PHP "  "PHP" sonundaki boşluk,
Değişken ve değer satır sonu, satır başı
kontrolü yapan ve tab
fonksiyonlar sadece karakterlerini siler.
global değişkenlerde stripslashes() $a = stripslashes($a) $a değişkeni
değil, tüm değişkenler içerisindeki tüm
üzerinde çalışabilir. "\p\file"  "pfile" ters bölü ( \ )
karakterlerini siler.
htmlspecialchars $a = htmlspecialchars ($a) $a değişkeni
"<H1>"  "&gtH1&lt" içerisindeki tüm
<,>, ", ' ve &
karakterlerini farklı
karakterlere
dönüştürür.

$_SERVER DEĞİŞKENLERİ VE YÖNLENDİRME


PHP komutlarının çalıştığı dosya ya da web sunucusu hakkında detaylı
bilgilere erişmek için $_SERVER global değişkenlerini kullanabiliriz. Çok sayıda
bilgiye erişmeyi sağlayan $_SERVER global değişkeninin en çok kullanılan bazı
anahtar ve değerleri Tablo 9.4’te verilmiştir. Tüm listeye https://www.php.net
/manual/tr/reserved.variables.server.php adresinden erişebilirsiniz.
Tablo 9.4 $_SERVER Değişkeni Örnekleri

$_SERVER Değişken Anahtarı Örnek 9.Değeri


$_SERVER['SCRIPT_FILENAME'] Dosyanın fiziksel adresi
(C:/xampp/htdocs/phpornekleri/server.php gibi)
$_SERVER['PHP_SELF'] Dosyanın web sunucusu üzerindeki adresi
(/phpornekleri/server.php gibi)
$_SERVER['REQUEST_URI'] Dosyanın web’den erişim adresi
(/phpornekleri/server.php gibi)
$_SERVER['SERVER_NAME'] Web sunucusu adresi
www.ornek.com gibi
$_SERVER['SERVER_ADDR'] Web sunucusunın IP adresi
(193.45.23.11 gibi)

Sayfa İsteğini Yönlendirme


PHP ile yazılmış sayfalara gelen istekleri ihtiyaç duyulduğunda başka
sayfalara yönlendirebiliriz. Örneğin bir önceki sayfada doldurulan bir form
içerisindeki bilgilere göre kullanıcıya aboneOlmaSayfasi.php veya
abonelerinGirisSayfasi.php gibi yönlendirme gerekebilir. Yönlendirme aynı sunucu
üzerindeki bir başka PHP dosyasına veya farklı bir sunucu üzerindeki herhangi bir
sayfaya yapılabilir.

193
Atatürk Üniversitesi Açıköğretim Fakültesi 10
PHP’de İleri Konular

Yönlendirme yapmak için header komutu Örnek 9.10’daki gibi kullanılır:


if(isset($_POST["abone"]) && $_POST["abone"]==1)
header("Location: aboneGirisi.php");
else
header("Location: aboneOlmaSayfasi.php");
/* $_POST["abone"] değerine göre ilk ya da ikinci
sayfaya yönlendirilecektir. */

Örnek 9.10 Başka Sayfaya Yönlendirme

Exit ve Die Komutları


PHP komutlarının farklı nedenler ile derhal durdurulması gerekebilir.
Örneğin header olmasına rağmen yönlendirme yapılamadığı durumlarda ya da
Die ve exit komutları
aynı işlevi görür. Ancak herhangi bir kontrol sonucunda yönlendirme yapılmadan işlemlerin sonlanması
eskiye uyum açısından gerektiğinde exit() ya da die() komutları ile PHP’nin çalışması sonlandırılır. Bu
birisinin varlığı diğerinin noktadan sonra herhangi bir PHP komutu çalıştırılmaz veya varsa HTML içeriği
ortadan kalkmasına gönderilmez. İstenirse exit ya da die komutlarına aşağıdaki gibi parametre olarak
neden olmamıştır. mesaj yazılabilir.
if(isset($_POST["abone"]) && $_POST["abone"]==1)
header("Location: aboneGirisi.php");
else
exit("Abone olmayanlar için işlem yapılmamaz. ");

•Foreach komutu ile tüm $_SERVER değişkenlerini ve


Bireysel Etkinlik

anahtarlarını sayfaya liste şeklinde yazdırınız.


•POST ya da GET ile hedefe giren form sayfasında, herhangi
bir veri eksikliğinde, sayfayı önceki sayfaya yönlendiriniz.
•Sık kullanılan fonksiyonları her sayfaya yazmak yerine
include ile sayfalara dahil edebileceğiniz ayrı PHP dosyaları
olarak kaydediniz.
Php.ini içerisinde
belirtilen süre, herhangi
bir sayfanın
yüklenmesiyle baştan $_SESSION DEĞİŞKENLERİ VE OTURUM YÖNETİMİ
sayılmaya başlanır.
Örneğin süre dolmadan Web sayfalarında gezinen kullanıcılar hakkında sunucu üzerinde birtakım
aynı ya da sunucu bilgileri oturum (session) değişkenleri olarak saklamak ve kullanmak mümkündür.
üzerindeki farklı bir
Örneğin kullanıcının adı, soyadı ya da eposta adresi gibi bilgiler farklı sayfalarda
sayfa ziyaret edilirse,
süre baştan başlar. kullanılmak üzere oturum değişkeni olarak tanımlanabilir. Oturum değişkenleri
$_SESSION global değişkeni içinde anahtar ve değer şeklinde depolanır.
Oturum ve içerisindeki değişkenler;

 Kullanıcı tarayıcısını kapatıncaya,


 Özel olarak oturumun yok edilmesi komutu (session_destroy) verilinceye,
 Php.ini dosyasındaki ayarlanan (session.gc_maxlifetime=1440) saniye
cinsinden süre sonuna kadar sunucuda tutulur.

194
Atatürk Üniversitesi Açıköğretim Fakültesi 11
PHP’de İleri Konular

Oturumun Başlatılması ve Bilgilerin Session Değişkenine


Eklenmesi
Oturum, PHP’de session_start() komutu ile başlatılır. Bundan sonra
gerektiğinde $_SESSION global değişkenine anahtar ve değer ataması yapılarak
bilgiler depolanabilir.
<?php
session_start(); SAYFA 1
?>
<html> Oturum bilgileri
<head> eklendi:
ad=Ahmet
</head>
soyad=Öztürk
eposta=ahmet@birsu
<body> nucu.com
<h1>SAYFA 1</h1> sayfa2 ye git
<?php
$_SESSION["ad"]="Ahmet";
$_SESSION["soyad"]="Öztürk";
$_SESSION["eposta"]="ahmet@birsunucu.com";
echo "Oturum bilgileri eklendi:<br>";
foreach($_SESSION as $anahtar => $deger)
echo $anahtar."=".$deger."<br>";
}
?>
<a href="sayfa2.php">sayfa2 ye git</a>
</body>
</html>
Örnek 9.11 $_SESSION Değişkeninin Kullanımı

Örnek 9.11’de görüleceği üzere, session_start() komutu olabildiğince


sayfanın üst satırlarında çağırılmalıdır.

Oturumdaki Değişkenlerin Kullanılması


Oturuma eklenmiş bilgiler, $_SESSION değişkeni içinde anahtarları ile
birlikte kullanılabilirler veya değerleri değiştirilebilir (Örnek 9.12).
<?php SAYFA 2
session_start();
?> Merhaba sayın
<html> Ahmet Özbek
<head>
Session_start() komutu
</head> Tüm $_SESSION
oturum değişkenlerini <body> değişkenleri:
kullanmak için her <h1>SAYFA 2</h1> ad=Ahmet
sayfada diğer <?php soyad=Özbek
komutlardan önce yer eposta=ahmet@birsu
$_SESSION["soyad"]="Özbek";
almalıdır. nucu.com
echo "<h3>Merhaba sayın ". $_SESSION["ad"]
." ".$_SESSION["soyad"]."</h3><br>"; sayfa1'e dön
?>
<p>Tüm $_SESSION değişkenleri:<br>
<?php

195
Atatürk Üniversitesi Açıköğretim Fakültesi 12
PHP’de İleri Konular

foreach($_SESSION as $anahtar => $deger){


echo $anahtar."=".$deger."<br>";
}
?>
</p>
<a href="sayfa1.php">sayfa1'e dön</a>
</body>
</html>
Örnek 9.12 Tüm $_SESSION Değişkenlerine Foreach Döngüsü ile Erişim

Oturumdaki Değişkenlerin Silinmesi ve Oturumun


Sonlandırılması
Oturuma eklenmiş bilgilerin her biri unset() fonksiyonu ile teker teker yok
edilebilir. Eğer tüm değişkenlerin yok edilmesi istenirse session_unset() komutu
Oturumun yok edilmesi çalıştırılabilir.
için kullanılan Oturumdaki değişkenlerin yok edilmesi, oturumun kendisinin yok edilmesi
session_destroy()’dan
anlamına gelmez. Aynı ya da farklı değişkenler oturuma tekrar eklenebilir. Eğer
önce yine
session_start() oturumun tamamen yok edilmesi istenirse session_destroy() komutu çalıştırılır.
komutunun çalıştırılmış Oturum yok edilirse, sonraki oturum işlemlerinden önce yine session_start()
olması gerekir. denerek yeni oturum oluşturması sağlanmalıdır. Komutlar aşağıdaki gibi
çalıştırılabilir:

 unset($_SESSION['ad']); // Oturumdaki “ad” değişkenini yok eder


 session_unset(); // Oturumdaki tüm değişkenleri yok eder
 session_destroy(); // Oturumu yok eder

$_COOKIE VE ÇEREZLERİN YÖNETİMİ


Kullanıcılarla ilgili bilgileri sunucuda tutmak yerine kullanıcının
bilgisayarında belirli süre boyunca saklamak için çerezler (cookies) kullanılır. Çerez
bilgileri kullanıcı bir sayfayı ziyaret ettiğinde tarayıcı tarafından otomatik olarak
sunucuya gönderilir. Sunucuda PHP benzeri diller ($_COOKIE global değişkeni) ile
bu pakete yeni değerler eklenebilir ya da değiştirilebilir. Sonrasında bu değerler
yine kullanıcı bilgisayarına gönderilir ve orada saklanır. Bir web sitesiyle ilişkili
çerezleri ancak o web site ziyaret edilirse kullanılabilir.
Çerezlere JavaScript ile Çerez Yaratmak ve Kullanmak
ulaşmak ve kullanmak
mümkündür. Çerez değişkeni eklemek için setcookie() fonksiyonu, PHP dosyalarının
başında aşağıdaki gibi çağırılmalıdır:

 setcookie("dilTercihi1", "TR", time() + 3600);


 setcookie("dilTercihi2", "EN", time() + 3600);
Yukarıdaki fonksiyonlarda ilk parametre çerezin adı, ikinci parametre ise
değeridir. Üçüncü parametre ise isteğe bağlı olarak, çerezin saklanma süresini
saniye cinsinden veren ifadedir. Örnekte bu süre çerezin yaratıldığı andan itibaren
1 saat (3600 saniye) olarak belirtilmiştir. Eğer üçüncü parametre yazılmazsa çerez
oturum sona erene kadar (tarayıcı kapatılana kadar) saklanır, sonra silinir.

196
Atatürk Üniversitesi Açıköğretim Fakültesi 13
PHP’de İleri Konular

Bu üç parametre dışında setcookie() fonksiyonu içerisinde isteğe bağlı


dördüncü ve beşinci parametreler olarak çerezin dosya dışında geçerli olacağı
klasörlerin ve alanın (domain) bilgileri yazılır. Detaylı bilgiye https://php.org/php-
sessions-and-cookies/ adresinden ulaşılabilir.
Yaratılan çerez, yaratıldığı sayfanın yeniden yüklenmesi ya da başka bir
sayfaya gidilmesi ile $_COOKIE global değişkenine eklenir. Eklendikten sonra
$_COOKIE["dilTercihi1"] şeklinde kullanılabilir.
Yeni oluşturulan çerez
değişkeni, sayfa tekrar
yüklendikten sonra
$_COOKIE global
Örnek

değişkenine eklenir. •if ($_COOKIE["dilTercihi1"]=="TR")


header("Location: sayfa_TR.php");

Çerez Değişkenini Değiştirmek veya Silmek


Mevcut çerezlerin değeri yine setcookie() fonksiyonu ile aşağıdaki gibi
değiştirilebilir.
 setcookie("dilTercihi1", "Türkçe", time() + 3600);

 setcookie("dilTercihi2", "English", time() + 3600);


Yukarıdaki iki örnekte, her iki çerez değişkenin değerleri değiştirilmiştir.
Çerezleri silmek için de setcookie() fonksiyonu kullanılır. Bunun için fonksiyondaki
üçüncü (süre) parametrenin geçmiş bir tarihi gösterir biçimde verilmesi yeterlidir.
Çerezleri silerken ya da Her bir çerez değişkenini silmek için ayrı ayrı aşağıdakine benzer komut
değerini değiştirirken ilk verilmelidir.
oluşturmadaki ad ve
varsa kapsam (yol ve  setcookie("dilTercihi1", "", time() - 1); // dilTercihi1 silinir
alan) parametreleri  setcookie("dilTercihi2", "", time() - 1); // dilTercihi2 silinir
aynen kullanılmalıdır. Örnek 9.13’teki örnekte bir PHP sayfasındaki çerezlerin ilk oluşturulması ve
görüntülenmesi görülmektedir. Sayfa ilk yüklendiğinde çerezler oluşturulur ancak
görüntülenmesi ya da kullanılması için sayfanın yeniden yüklenmesi gerekir.
<?php
setcookie("dilTercihi1","TR");
setcookie("dilTercihi2","EN");
?>
<html>
<head><title>Çerezler</title></head>
<body>
<h1>ÇEREZLER ve $_COOKIE</h1>
<?php
echo "ÇEREZ bilgileri eklendi.<BR/>";
if(isset($_COOKIE["dilTercihi1"]))
foreach($_COOKIE as $anahtar => $deger)
echo $anahtar."=".$deger."<br>";

197
Atatürk Üniversitesi Açıköğretim Fakültesi 14
PHP’de İleri Konular

else
echo "Çerezleri görüntülemek için sayfayı yenileyin";
?><br />
</body>
</html>
ÇEREZLER ve $_COOKIE ÇEREZLER ve $_COOKIE
ÇEREZ bilgileri eklendi. ÇEREZ bilgileri eklendi.
Çerezleri görüntülemek için Sayfa yeniden
dilTercihi1=TR
sayfayı yenileyin yüklendiğinde dilTercihi2=EN
Örnek 9.13 Çerez Değişkeni Eklemek ve Kullanmak
Bireysel Etkinlik

•Çerez ve oturum değişkenlerinin kullanım amacı konusunda


araştırma yapınız.
•Çerezler kullanıcılar tarafından pasif hale getirilebilir, bunu
engellemek için sayfa yüklenirlen JavaScript ile ön kontrol
komutlarını araştırınız.

198
Atatürk Üniversitesi Açıköğretim Fakültesi 15
PHP’de İleri Konular

•PHP'DE İLERİ KONULAR


•Bu ünitede fonksiyonlar, formlar ve PHP'deki global değişkenler olan $_GET,
$_POST, $_REQUEST, $_SERVER, $_COOKIE ve $_SESSION konuları
anlatılmıştır.
•DIŞ DOSYALARIN DAHİL EDİLMESİ
Özet
•Farklı sayfalarda tekrar kullanılması gereken bir çok komut ayrı bir PHP
sayfası halinde kaydedilip, istenilen PHP sayfasına include veya require
komutları ile dahil edilebilir. Require komutu dosyayı bulamazsa hata
vererek çalışmanın durmasına neden olur.
•FONKSİYONLAR
•Belirli komutların bir isim altında toplanmasıyla oluşan yapılara fonksiyon
denir. Fonksiyonlar parametreli ya da parametresiz olabilir. Ayrıca geriye
değer döndürebilir ya da döndürmeyebilir. Fonksiyon tanımında istenilen
parametreler varsayılan değer atanabilir. Fonksiyon isimlendirme kuralları
değişken isimlenrdirme kuralları ile aynıdır.
•Fonksiyon tanımlama satırında değişkenlerin önüne & sembolü eklenirse,
değer yerien adres gönderilmiş olur, bu sayede parametreler değişince
çağrıdaki değişken de değişmiş olur.
•Fonksiyonlara diziler parametre olarak gönderilebilir.
•HTML FORM ETİKETLERİ İLE ÇALIŞMA
•Formlar kullanıcıların veri girdikleri arayüz elemanlarıdır. Bir forma girilen
bilgiler paket olarak sunucuya gönderildiğinde, formun metot özelliğine göre
sunucudaki $_GET ya da $_POST global değişkeni içerisinde saklanır. Ayrıca
metottan bağımsız olarak aynı bilgileri $_REQUEST global değişkeni içinde de
saklanır. HTML'deki formun içindeki etilektlerin name ve value değerleri,
sunucudaki global değişkende anahtar ve değer olarak bir dizi oluşturur.
Sonrasında, örneğin formun metoto özelliği get ise, sunucuda echo
$_GET["kullaniciAdi"]; şeklinde kullanılabilir, değeri değiştirilebilir.
•Form Verilerinin Kontrolü
•HTML sayfasından gelen bilgilerdeki eksiklik ya da biçim farkı, sonraki
işlemlerde hatalara neden olabilir. Ayrıca art niyetli kişiler veri olarak
JavaScript veya SQL betikleri girmiş olabilir. Bu nedenler gelen verilerin 3
açıdan kontrolü önerilir: 1) Zorunlu verilerin girilip girilmediği; 2) Girilen
verilerin biçiminin uygun olup olmadığı, 3) Girilen verilerde riskli içerik ya da
karakter olup olmadığı.
•Isset() ve empty() fonksiyonları, parametre olarak aldıkları değişkenin var
olup olmadığını ve değerinin, türüne uygun biçimde, boş olup olmadığını
kontrol eder.
•Biçim kontrolü için filter_var(), is_numeric(), is_string vb. komutlar, girdinin
eposta, URL, tam sayı ve diğer bazı veri türü biçimlerine uygun olup
olmadığını kontrol eder.
•Düzenli ifadeler yoluyla preg_match() fonksiyonu çok farklı karakter
dizilimlerini kontrol edebilir.
•Girdideki riskli karakterleri trim(), stripslashes() ve htmlspecialchars()
fonksiyonları yok edebilir ve ya dönüştürebilir.

199
Atatürk Üniversitesi Açıköğretim Fakültesi 16
PHP’de İleri Konular

•$_SERVER DEĞİŞKENLERİ VE YÖNLENDİRME


•PHP komutları içerisinde, web sunucusu ya da o sayfa hakkında detaylı bilgi
almak gerektiğinde $_SERVER global değişkeninin içindeki bir çok bilgi
Özet (devamı) kullanılabilir. Örneğin web sayfasının adresi, sayfanın adı, sayfanın disk
üzerindeki fiziksel adresi gibi.
•Bir sayfaya gelen istek, farklı nedenler ile bir başka sayfaya yönlendirilmek
istenirse header() komutu ile bu işlem yapılabilir
• PHP'nin durdurulması gerektiğinde exit() veya die() komutlarındna biri ile
çalışma durdurulur. Bu komutlardan sonra sayfanan devamındaki kodlar
gönderilmez.
•$_SESSION DEĞİŞKENİ VE OTURUM YÖNETİMİ
•Web sunucusunu ziyaret eden her kullanıcı için, sunucu üzerinde bir oturum
başlatılır. Bu oturum içine, istenirse PHP aracılığı ile bilgi eklenebilir. Bu
bilgiler oturum sonlanmadığı sürece farklı sayfalardan erişilebilir. Oturum
ancak tarayıcı kapatıldığında ya da PHP içerisinde oturum kapatma komutu
(session_destroy) verildiğinde sonlanır.
•Oturum bilgileri $_SESSION global değişkeni içerisine anahtar - değer
biçiminde bir dizi olarak eklenebilir, değiştirilebilir ya da silinebilir.
•Oturum süresi, sunucu üzerindeki farklı sayfalara gidildiğinde sıfırlanır. Bu
süre sınıra ulaşırsa (bu süre sınırı php.ini dosyasında belirlenir) oturum
sonlandırılır.
•$_COOKIE VE ÇEREZ YÖNETİMİ
•Çerezler, kullanıcının tarayıcısı üzerinde web siteleri tarafından saklanan
verilerdir. Kullanıcılar isterse bu verilerin saklanmasına engel olabilir.
•PHP ile çerezlere $_COOKIE global değişkeni üzerinden erişim sağlanabilir.
Yeni çerez eklenebilir, değiştirilebilir veya silinebilir.
•Çerezler, tanımlandıkları anda belirlenen süre sonunda otomatik silinirler.

200
Atatürk Üniversitesi Açıköğretim Fakültesi 17
PHP’de İleri Konular

DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi harici bir PHP dosyasını mevcut sayfaya eklemek
için kullanılır?
a) require
b) define
c) isset
d) request
e) header

2. Aşağıdakilerden hangisi geri dönüş değeri olan bir fonksiyonun içinde


mutlaka olması gereken bir komuttur?
a) static
b) define
c) array
d) include
e) return

3. function yap($a, $b=3) şeklinde tanımlanan bir fonksiyon için


aşağıdakilerden hangisinde hatalı çağrı yapılmıştır?
a) $c=yap(2,3);
b) $c=yap(2);
c) $c=yap();
d) $c=yap(2,5);
e) $c=yap(2,5.1);

4. Aşağıdakilerden hangisi metodu “get” olan bir formdaki bilgileri içerir?


a) $_POST
b) $_REQUEST
c) $_SESSION
d) $_SERVER
e) $_COOKIE

5. isset($_POST["tarih"]) fonksiyonu true değerini verdiğine göre, aşağıdaki


ifadelerin hangisi kesin doğrudur?
a) Bir önceki formun metodu “get” olarak ayarlamıştır.
b) Bir önceki formda “tarih” kutusuna bugünün tarihi girilmiştir.
c) Bir önceki formun adı “tarih” olarak ayarlanmıştır.
d) Bir önceki formda “tarih” adında bir etiket vardır.
e) Bir önceki formda “tarih” kutusuna yıl, ay ve gün doğru sırada
girilmiştir.

201
Atatürk Üniversitesi Açıköğretim Fakültesi 18
PHP’de İleri Konular

6. $a=trim($a); komutunun işlevi nedir?


a) $a değişkeni içindeki tüm boşlukları siler
b) $a değişkeni içindeki iki ve daha fazla yan yana olan tüm boşlukları
siler
c) $a değişkeni başındaki ve sonundaki tüm boşlukları siler
d) $a değişkeni içindeki tüm boşlukları alt tire karakteri ile değiştirir
e) $a değişkeni içindeki tüm boşlukları &nbsp ile karakteri ile değiştirir.

7. Aşağıdakilerden hangisi sunucu hakkında bilgileri içeren global


değişkendir?
a) $_POST
b) $_REQUEST
c) $_SESSION
d) $_COOKIE
e) $_SERVER

8. header(“Location: “abc.php”); komutunun işlevi nedir?


a) abc.php adındaki sayfayı mevcut sayfaya dahil eder.
b) Mevcut sayfayı “abc.php” adındaki sayfaya yönlendirir.
c) Mevcut sayfanın başlığını “abc.php” sayfası ile aynı yapar.
d) Sayfaya “abc.php” içeriğinde <title> etiketi ekler.
e) Mevcut sayfanın adını “abc.php” olarak değiştirir.

9. Aşağıdakilerden hangisi oturumu tamamen yok eder?


a) session_destroy();
b) session_unset();
c) unset();
d) $_SESSION = null;
e) delete $_SESSION;

10. setcookie("Tarayici","Mozilla", time() + 3600); komutunun işlevi nedir?


a) "Tarayici" adında bir çerez 3600 saat boyunca saklanacaktır.
b) "Tarayici" adında bir çerez 3600 saniye boyunca saklanacaktır.
c) "Tarayici" adında bir çerez 3600 gün boyunca saklanacaktır.
d) "Tarayici" adında bir çerez 3600 saat sonra "Mozilla" olarak
değiştirilecektir.
e) "Tarayici" adında bir çerez 3600 kez girişten sonra "Mozilla" olarak
değiştirilecektir.

Cevap Anahtarı
1.a, 2.e, 3.c, 4.b, 5.d, 6.c, 7.e, 8.b, 9.a, 10.b

202
Atatürk Üniversitesi Açıköğretim Fakültesi 19
PHP’de İleri Konular

YARARLANILAN KAYNAKLAR
Avcı, M. (2013, 8 11). PHP ile regular expression. 1 18, 2022 tarihinde PHP
Serüvenleri: https://www.phpr.org/php-ile-regular-expression-
regex/#more-2386 adresinden alındı
HP Group. (2022, 1 11). PHP Kılavuzu. PHP: Hypertext Preprocessor:
https://www.php.net/manual/tr/ adresinden alındı
Şahin, Y. L. (2016). PHP'ye Giriş. M. Fırat içinde, İnternet Tabanlı Programlama (s.
303). Eskişehir: Anadolu Üniversitesi. https://ets.anadolu.edu.tr/
storage/nfs/WTK210U/ebook/WTK210U-17V1S1-8-0-1-SV1-ebook.pdf
adresinden alındı
W3 Schools. (2022, 1 11). PHP Tutorial. W3Schools Online Web Tutorials:
https://www.w3schools.com/php/default.asp adresinden alındı

203
Atatürk Üniversitesi Açıköğretim Fakültesi 20
PHP: VERİ TABANI

• Veri Tabanına PHP ile Erişim


• İlişkisel Veri Tabanı ve SQL
İÇİNDEKİLER

• PDO (PHP Data Objects) İNTERNET


• PHP ve MySQL
PROGRAMCILIĞI II
Öğr. Gör. Dr. Uğur
YILDIRIM

• Bu üniteyi çalıştıktan sonra;


• Veri tabanı ve ilişkisel veri tabanı
HEDEFLER

kavramları hakkında bilgi sahibi


olabilecek,
• PHP betimleri ile veri tabanları
bağlantısı oluşturabilecek,
• Veri tabanı sorgulamasının
temel komutlarını
kullanabilecek,
• PHP ile MySQL arasında veri
iletişimi olan bir uygulama
geliştirebileceksiniz.
ÜNİTE

10
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
PHP: Veri Tabanı

Veri Tabanına PHP


ile Erişim
Bağlantı Oluşturma
İlişkisel Veri Tabanı
ve SQL
Veri Tabanı İle Etkileşim
PDO (PHP Data
Objects)
PHP: VERİ TABANI PDO ve Hazır Deyimler

Veri İşleme
(Transaction)

MySQL Veri Tabanı


Oluşturma

MySQL Veri Tabanı


Silme

MySQL Veri Tabanı


Seçimi

MySQL Tablosu
Oluşturma

MySQL Tablosu Silme


PHP ve MySQL

MySQL Tablosuna Veri


Ekleme

MySQL Tablosundan
Veri Alma

MySQL Tablosunda Veri


Güncelleme

MySQL Tablosundan
Veri Silme

Atatürk Üniversitesi Açıköğretim Fakültesi 2


205
PHP: Veri Tabanı

GİRİŞ
Php, dinamik web sayfaları oluşturmak için kullanılabilen, sunucu tarafında,
html'ye gömülü bir betik dilidir. Çoğu işletim sistemi ve web sunucusu için
mevcuttur. Php, açık kaynak kodlu olanlar da dâhil olmak üzere en yaygın olan
20'den fazla veri tabanını destekler. Bu veri tabanları arasında günümüzde
kullanılan ve pek çok yaygın web sitelerinin bel kemiği olan mysql, postgresql ve
oracle gibi ilişkisel veri tabanı sistemleri de vardır.
internette faydalandığımız hizmetlerin çoğu bir web sunucusu üzerinde
çalışan veri tabanı uygulamaları tarafından sağlanmaktadır. Web tabanlı e-posta,
çevrimiçi alışveriş, forumlar ve ilan panoları, kurumsal web siteleri, spor ve haber
portallarının tümü veri tabanına dayalıdır. Modern bir web sitesi oluşturmak için
PHP'de programlama bir veri tabanı uygulamasının geliştirilmesi gerekir.
sunucu tarafında
yapılır, yorumlanır ve Bu ünitede uygulamalar oluşturmak için web ve veri tabanlarını bir araya
çıktısı HTML olarak bir getirmenin oldukça popüler, kolay ve düşük maliyetli bir yolu anlatılacaktır. Bu
tarayıcıda görüntülenir. çözümlerde kullanılan en popüler veri tabanı yönetim sistemi, üreticisi mysql ab
tarafından açık kaynak lisansı altında dağıtılan, çok hızlı ve kullanımı kolay bir
sistem olan mysql'dir. Apache web sunucusu (burada anlatılan php kodları diğer
web sunucularıyla da çalışsa da, bu ünitede apache'yi varsayıyoruz) ve mysql gibi
bir web sunucusuyla, bir web veri tabanı uygulaması geliştirmek için ihtiyacınız
olan şeylerin çoğuna sahip olursunuz.
Bu ünitede php'den veri tabanlarına nasıl erişileceği, nasıl veri getirileceği,
nasıl saklanacağı ve nasıl silineceği üzerinde durulacaktır. İlişkisel veri tabanı
kavramına değinilecek ve veri tabanına özgü sayısız uzantı yerine herhangi bir veri
tabanına erişmek için aynı işlevlerin kullanılmasını sağlayan yerleşik php veri
nesneleri (pdo) sistemi öğretilecektir.

VERİ TABANINA PHP İLE ERİŞİM


PHP'den veri tabanlarına erişmenin iki yolu vardır. Biri, veri tabanına özgü
bir eklenti kullanmak, diğeri ise veri tabanından bağımsız PDO (PHP Data Objects)
kütüphanesi kullanmaktır. Her iki yaklaşımın avantajları ve dezavantajları vardır.
Kullanacağınız eklenti bağlanacağınız veri tabanı ile yakından ilgilidir. Örneğin,
Veri tabanı; bir
MySQL eklentisinin fonksiyon adları, parametreleri, hata işlemesi vb. diğer veri
bilgisayar sisteminde
tabanı eklentilerinden tamamen farklıdır. Veri tabanınızı MySQL'den PostgreSQL'e
elektronik olarak
taşımaya karar verirseniz, kodunuzda önemli değişiklikler yapmanız gerekecektir.
depolanan,
Diğer taraftan eğer PDO kullanırsanız, veri tabanına özgü işlevleri bir soyutlama
yapılandırılmış bilgi
katmanı aracılığıyla arka planda yaptığından dolayı veri tabanı sistemleri arasında
veya veriden oluşan
geçiş yapmak php.ini dosyanızda ya da programınızda sadece bir satırı değiştirmek
düzenli bir
kadar basit olabilir.
koleksiyondur.
PDO kitaplığı gibi bir soyutlama katmanının, taşınabilirlik özelliğine sahip
olmasının bir bedeli vardır. Kullanılan kod, yerel bir veri tabanına özel eklenti ile
bağlantıda kullanılandan biraz daha yavaştır. Eğer yazdığınız SQL sorguları
taşınabilir ise bu soyutlama katmanını kullanmanın gereksiz olduğunu

Atatürk Üniversitesi Açıköğretim Fakültesi 3


206
PHP: Veri Tabanı

unutmayınız. Diğer taraftan, uygulamanız herhangi bir tür genel olmayan SQL
kullanıyorsa, sorgularınızı bir veri tabanından diğerine dönüştürmek gerektiğinde
önemli işler yapmanız gerekir. Bu ünitede veri tabanı erişimine yönelik her iki
yaklaşıma da kısaca değineceğiz ve ardından PHP aracılığıyla veri tabanının
içeriğini yönetmek için bazı SQL komutlarını öğreneceğiz.

İLİŞKİSEL VERİ TABANI VE SQL


İlişkisel veri tabanı, birbirileriyle ilişkili verilerin aralarında bağlantı
kurularak tasarlanması ile oluşturulmuş, veri tekrarını ve hatalı veri girişini
engelleyen, tablo yapılarını sadeleştiren, veri tutarlılığını sağlayan ve yüksek
performans sağlayan bir veri tabanı türüdür. İlişkisel Veri Tabanı Yönetim Sistemi
Veri Tabanı Yönetim (Relational Database Management System, RDBMS) ise verileri sizin için yöneten
Sistemi; bir veri bir sunucudur. Veri, tablolarda depolanır ve her tablo, adı ve türü olan bir dizi
tabanında depolanacak sütuna sahiptir. Örneğin, bilim kurgu kitaplarını takip etmek için kitabın adını ve
bilgilerin sistematik bir yazar adını karakter (string) türünde, yayın yılını ise sayı (number) türünde
yolla oluşturulması, kaydedebileceğiniz “kitaplar” adında bir tablo oluşturulabilir.
silinmesi, değiştirilmesi
ve yönetilmesi için Tablolar veri tabanlarında gruplara ayrılırlar. Bir RDBMS genellikle veri
oluşturulmuş, genellikle tabanları için erişim haklarını kontrol eden kendi kullanıcı sistemine sahiptir
ara yüze sahip bir veri (örneğin, Ahmet kullanıcısı veri tabanında sadece yazarları güncelleyebilir).
tabanı yapılaşmasıdır.
Örnek

• Bilim kurgu kitaplarının takip edildiği bir veri tabanında yazarların


bilgilerini veya kitapta geçen zaman dilimlerini, hatta romandaki kötü
adamları depolayan tablolar oluşturulabilir.

PHP; Yapılandırılmış Sorgu Dili (Structured Query Language, SQL)


kullanarak MySQL ve Oracle gibi ilişkisel veri tabanlarıyla iletişim kurar. Yapısal
Sorgulama Dili’ni ilişkisel veri tabanları oluşturmak, değiştirmek ve sorgulamak
için kullanabilirsiniz.
SQL söz dizimi iki bölüme ayrılmıştır. Birincisi, mevcut bir veri tabanındaki
verileri almak ve değiştirmek için kullanılan Veri İşleme Dili (Data Manipulation
Language, DML)’dir. DML, yalnızca “SELECT, INSERT, UPDATE ve DELETE “ eylem
veya fiil kelimelerinden oluşan oldukça kısa ve etkili bir dildir. Diğeri ise, veriyi
depolayan veri tabanlarını oluşturmak, değiştirmek veya silmek için kullanılan
Veri Tanımlama Dili (Data Definition Language, DDL)’dir. DDL, “CREATE, ALTER,
DROP, TRUNCATE” gibi veri tabanı yapısını etkileyen komutlardan oluşur. Veri
İşleme Dili’nin söz dizimi Veri Tanımlama Dili’nin sözdizimi kadar standart
değildir, fakat PHP ile gönderdiğinizde, veri tabanınızın desteklediği her SQL
komutunu kullanabilmeniz mümkün olur. Veri İşleme Dilini kavramak için bazı
SQL komutlarını örneklerle açıklayalım:

Atatürk Üniversitesi Açıköğretim Fakültesi 4


207
PHP: Veri Tabanı

Kitaplar adında bir tablomuz olduğunu ve bu tablonun yazar_no, baslik,


ISBN, yayin_yili ve mevcut adında alanlara sahip olduğunu düşünelim:
Tablo 10.1’deki SQL komutu kitaplar tablosuna yeni bir satır ekler.
Tablo 10.1. SQL Satır Ekleme Komutu Örneği

SQL Komutları
INSERT INTO kitaplar VALUES (null, 4, 'Ben, ROBOT', '0-553-29438-5', 1950, 1)
Tablo 10.2’deki SQL komutu da tabloya yeni bir satır ekler, fakat bu sefer
alan isimlerini de kullanır.
Tablo 10.2. SQL Alan İsimleri ile Satır Ekleme Komutu Örneği

SQL Komutları
INSERT INTO kitaplar (yazar_no, baslik, ISBN, yayin_yili, mevcut) VALUES (4, 'Ben,
ROBOT', '0-553-29438-5', 1950, 1)
1979’da yayınlanan bütün kitapları eğer varsa silmek için Tablo 10.3’deki
SQL komutu kullanılır.
Tablo 10.3. SQL Kayıt Silme Komutu Örneği

SQL Komutları
DELETE FROM kitaplar WHERE yayin_yili = 1979
Kökler adlı kitabın yayın yılını 1983 olarak değiştirmek için Tablo 10.4’deki
SQL komutu kullanılır.
Tablo 10.4. SQL Kayıt Güncelleme Komutu Örneği

SQL Komutları
SQL’de en yaygın
kullanılan komutlar, UPDATE kitaplar SET yayin_yili = 1983 WHERE baslik = 'Kökler'
SELECT, INSERT, Yalnızca 80’li yıllarda yayınlanan kitapları bulmak için Tablo 10.5’deki SQL
UPDATE ve DELETE komutu kullanılır.
komutlarıdır.
Tablo 10.5. SQL Kayıt Filtreleme Komutu Örneği

SQL Komutları
SELECT * FROM kitaplar
WHERE yayin_yili > 1979 AND yayin_yili < 1990
Tablo 10.6’da görüldüğü gibi belirli alanları listelemek mümkündür.
Tablo 10.6. SQL Belirli Alanlar Listeleme Komutu Örneği

SQL Komutları
SELECT baslik, yayin_yili FROM kitaplar
WHERE yayin_yili > 1979 AND yayin_yili < 1990
Birden fazla tabloyu birleştiren sorgular oluşturabilirsiniz. Örneğin;
yazar_no ve adi alanlarına sahip olan yazarlar adında bir tablo olduğunu
düşünelim. Tablo 10.7’de görüldüğü gibi, kitaplar adlı tabloyla yazarlar adlı
tabloyu birleştirerek kitapları kimin yazdığını listeleyebiliriz.

Atatürk Üniversitesi Açıköğretim Fakültesi 5


208
PHP: Veri Tabanı

Tablo 10.7. SQL Birden Fazla Tabloyu Birleştirme Komutu Örneği

SQL Komutları
SELECT yazarlar.adi, kitaplar.baslik FROM kitaplar, yazarlar
WHERE yazarlar.yazar_no = kitaplar.yazar_no
Yukarıdaki sorguyu, Tablo 10.8’de gösterildiği gibi takma isimler (alias)
kullanarak da yapabilirsiniz.
Tablo 10.8. SQL Çoklu Tablolarda Takma İsim Kullanma Komutu Örneği

SQL Komutları
SELECT y.adi, k.baslik FROM kitaplar k, yazarlar y
WHERE y.yazar_no = k.yazar_no

PDO (PHP DATA OBJECTS)


PHP’nin resmi sitesi php.net’de PDO hakkında şu ifadeler kullanılıyor:
“PHP Veri Nesneleri (PHP Data Objects, PDO) eklentisi, PHP'deki veri
tabanlarına erişmek için basit, tutarlı bir arabirim tanımlar. PDO arabirimini
uygulayan her veri tabanı sürücüsü, veri tabanına özgü özellikleri normal eklenti
fonksiyonuymuş gibi gösterebilir. PDO uzantısını tek başına kullanarak herhangi
bir veri tabanı fonksiyonuna ulaşamayacağınızı unutmayın; bir veri tabanı
sunucusuna erişmek için o veri tabanına özgü PDO sürücüsünü de kullanmanız
gerekir.”
PDO, diğer özelliklerinin yanı sıra aşağıdaki şu benzersiz özelliklere de
sahiptir:
PDO, PHP 5 ve sonrası  PDO, native (direk makine diline çevrilen) C programlama dilinde yazılmış
sürümlerde bir eklentidir.
kullanılabilir.  PDO, sorgulama sonucu ara belleğe alınmış olan verileri kullanır.
 PDO, temel olarak ortak veri tabanı özelliklerini sunar.
 PDO, bağlandığı veri tabanının fonksiyonlarına erişebilir.
 PDO, veri işlemeye dayalı (transaction-based) teknikleri kullanabilir.
 PDO, veri tabanındaki Büyük Nesneler (Large Objects) ile etkileşime
girebilir.
 PDO, hazır ve çalıştırılabilir SQL sorgularını parametreleri ile birlikte
kullanabilir.
 PDO, veri kümesinde her veriyi adım adım (cursor scroll) sunabilir.
 PDO’nun SQLSTATE hata kodlarına erişimi vardır ve çok esnek hata
yakalama özellikleri bulunur.
PDO’nun çok sayıda özelliği vardır, fakat faydasını görmek açısından sadece
PDO kütüphanesi,
birkaçına değinilecektir. İlk olarak, var olan hemen hemen tüm veri tabanı
Nesne Yönelimli (Object
Oriented) bir eklentidir. motorları için sürücülere sahiptir, hatta sürücüsü olmayan veri tabanlarına bile
PDO'nun genel ODBC bağlantı sürücüsü aracılığıyla erişilebilmektedir. PDO
modüler yapıdadır, kullanılabilmesi için en az iki eklentisinin etkinleştirilmesi
gerekir. Bunlardan ilki PDO eklentisinin kendisi, diğeri arabirim oluşturacağınız veri
tabanına has olan PDO eklentisidir. Kullanacağınız veri tabanına nasıl bağlantı
kuracağınız öğrenmek için PHP’nin çevrimiçi yardım dosyalarından

Atatürk Üniversitesi Açıköğretim Fakültesi 6


209
PHP: Veri Tabanı

faydalanabilirsiniz. Örnek olarak, bir Windows sunucusunda MySQL veri tabanına


PDO bağlantısı sağlamak için php.ini dosyasına Tablo 10.9’daki iki satırı girmeniz ve
sunucunuzu yeniden başlatmanız yeterlidir.
Tablo 10.9. php.ini Dosyasına PDO Kütüphanelerini Ekleme

php.ini Dosyası
extension=php_pdo.dll
extension=php_pdo_mysql.dll

Bağlantı Oluşturma
PDO için gereken ilk şey, söz konusu veri tabanıyla bağlantı kurmanız ve bu
bağlantıyı, Tablo 10.10’daki program kodunda olduğu gibi bir bağlantı
değişkeninde tutmanızdır.
Tablo 10.10. PDO Bağlantı Değişkeni Oluşturma

PHP Komutları
$vt = new PDO ($dsn, $kullanici, $sifre);
$dsn; veri kaynağı adını temsil eder, diğer iki parametre veri kaynağında
Kullanıcı kodu ve Şifre
parametrelerine yetki sahibi bir kullanıcı kodu ve şifresi olarak atanmalıdır. Örneğin bir MySQL
değişken atanması, bağlantısı için Tablo 10.11’deki kodu yazarsınız.
sonraki aşamalarda Tablo 10.11. PDO-MySQL Bağlantısı Oluşturma Örneği
tekrar kullanılması
açısından fayda sağlar. PHP Komutları
$vt= new PDO("mysql:host=localhost;vtadi=kutuphane", "deneme", "abc123");

Veri Tabanı ile Etkileşim


Veri tabanı motorunuzla ve etkileşim kurmak istediğiniz veri tabanıyla bir
kez bağlantınız olduğunda, bu bağlantıyı bütün SQL komutlarınızı göndermek için
kullanabilirsiniz. Basit bir UPDATE ifadesi Tablo 10.12’deki gibi görünür.
Tablo 10.12. PDO ile SQL UPDATE Komutu Kullanma Örneği

PHP Komutları
$vt->query("UPDATE kitaplar SET yazar_no = 4 WHERE yayin_yili = 1982");
Yukarıdaki kod sadece kitaplar tablosunu günceller ve sorguyu bitirir. Hazır
deyimler (prepared statements) kullanmıyorsanız, PDO aracılığıyla veri tabanına
genellikle sonuç döndürmeyen basit SQL komutlarını (UPDATE, DELETE, INSERT)
bu şekilde gönderebilirsiniz.

PDO ve Hazır Deyimler


Hazır Deyim: PDO, hazır deyim olarak bilinen ifadelere de izin verir. Hazır deyim,
(PDO::prepare)
programın istenen aşamalarında veya adımlarında PDO çağrıları ile yapılır. Tablo
Çalıştırılmak için bir
deyim hazırlar ve bir 10.13’deki kodu göz önünde bulunduracak olursak; önce SQL sorgusunu
deyim nesnesi olarak hazırlıyoruz (prepare) ve ardından çalıştırıyoruz (execute). Sonra while kodu ile
döndürür. gelen sonuç satırları arasında dolaşıyoruz. Son olarak da sonuç nesnesine null
atayarak onu sonlandırıyoruz.

Atatürk Üniversitesi Açıköğretim Fakültesi 7


210
PHP: Veri Tabanı

Tablo 10.13. PDO ve Hazır Deyimler Örneği

PHP Komutları
$deyim = $vt->prepare( "SELECT * FROM kitaplar");
$deyim->execute();

// kayıt satırlarını bu aşamada getir.


while ($satir = $deyim->fetch()) {
print_r($satir);
// veya buraya gelen her bir kayıt satırı ile istediğiniz daha uygun kodlar
yazabilirsiniz.
}

$deyim = null;
Hazır deyimin diğer bir özelliğini gösteren örnek de Tablo 10.14’de
verilmiştir.
Tablo 10.14. PDO ve Hazır Deyimler İkinci Örneği

PHP Komutları
$deyim = $vt->prepare("INSERT INTO kitaplar (yazar_no, baslik, ISBN,
yayin_yili)"
. "VALUES (:yazar_no, :baslik, :ISBN, :yayin_yili)");

$deyim->execute(array(
'yazar_no' => 4,
'baslik' => "Kuruluş",
'ISBN' => "0-553-80371-9",
'yayin_yili' => 1951)
);
Ancak bu sadece daha iyi anlaşılması için yapılmıştır; yer tutucu adları size
anlamlı gelen her şey olabilir. $deyim->execute() komutunu çalıştırarak yer
tutucularını bu sorguda kullanmak istediğimiz gerçek verilerle değiştiririz. Hazır
$deyim ve $vt deyimlerin avantajlarından biri, aynı SQL komutunu çalıştırabilmeniz ve her
değişkenleri, programcı seferinde diziden farklı değerler geçirebilmenizdir. Aynı hazır deyimi herhangi bir
tanımlı isimlerdir. isimlendirme yapmadan, yer tutucu isimler yerine sadece “?” ile yazarak da
Değişkenlere isim tanımlayabilirsiniz. Önceki kodun Tablo 10.15’deki varyasyonuna bakalım:
verme kurallarına
uygun şekilde istenilen Tablo 10.15. PDO ve Hazır Deyimleri “?” ile Kullanım Örneği
isim verilebilir. PHP Komutları
$deyim = $vt->prepare("INSERT INTO kitaplar (yazar_no, baslik, ISBN,
yayin_yili)"
. "VALUES (?,?,?,?)");

$deyim->execute(array(4, "Kuruluş", "0-553-80371-9", 1951))


SQL ifadesinin değer alanı, değiştirilecek öğeleri adlandırmayacağından ve
yürütme ifadesindeki dizinin yalnızca ham verileri göndermesi ve ad vermemesi
gerektiğinden yukarıdaki kod önceki kod ile aynı şeyi yapar, ancak bunu daha az
kod yazarak gerçekleştirir. Bu aşamada hazır deyime gönderdiğiniz verilerin
yerlerinin doğru olduğundan emin olmanız yeterlidir.

Atatürk Üniversitesi Açıköğretim Fakültesi 8


211
PHP: Veri Tabanı

Veri İşleme (Transaction)


Bazı İlişkisel Veri Tabanı Yönetim Sistemleri, bir dizi veri tabanı
değişikliğinin aynı anda kaydedilebildiği (tümünün aynı anda uygulanabildiği)
veya geri alınabildiği (değişikliklerin hiçbirinin veri tabanına uygulanmadan iptal
edildiği) işlemleri destekler. Örneğin, bir banka bir para transferi yaptığında, bir
hesaptan para çekme ve diğerine para yatırma birlikte gerçekleşmelidir (ikisi de
olmadan diğeri olmamalı ve iki eylem arasında zaman olmamalıdır). PDO, Tablo
10.16’da verilen örnekteki gibi try...catch yapıları ile bu tür işlemlerin kusursuz bir
şekilde üstesinden gelir.
Tablo 10.16. PHP’de try…catch Kullanım Örneği

PHP Komutları
try {
$vt = new PDO("mysql:host=localhost;vtadi=banka_sistemi", "ahmetcan",
"abc123"); // Bağlantı başarılı
}
catch (Exception $error) {
die("Bağlantı hatası: " . $error->getMessage());
}
try {
$vt ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$ vt ->beginTransaction();
$ vt ->exec("INSERT INTO hesaplar (hesap_no, miktar) VALUES (23, '5000')" );
$ vt ->exec("INSERT INTO hesaplar (hesap_no, miktar) VALUES (27, '-5000')" );
$ vt ->commit();
}
catch (Exception $error) {
$ vt ->rollback();
echo "Veri işleme yapılamadı: " . $error->getMessage();
}
Veri İşlemeyi desteklemeyen bir veri tabanında commit() veya rollback()'i
çağırırsanız, yöntemler DB_ERROR hatası döndürür.

PHP ve MySQL
PHP ile bağlantı yapmanın iki çeşidi olduğunu bu ünitenin başında
belirtmiştik. Bunlardan birincisi PDO (PHP Data Objects) bağlantı çeşidi, diğeri ise
veri tabanına özgü bir eklenti kullanmak idi. MySQL veri tabanına özgü
eklentimiz mysqli() fonksiyonudur. Bu noktada dikkat edilmesi gereken unsur;
mysqli() fonksiyonunun sadece MySQL veri tabanına bağlantı sağlayabildiği,
PDO’nun ise esnek yapıya sahip olup çoğu yaygın veri tabanına bağlanabildiği
ancak performans olarak mysqli() fonksiyonunun gerisinde kalabildiğidir. Bu
bağlantı çeşitlerinden hangisini kullanacağınıza karar vermek size kalmış bir
seçimdir. Bu ünite kapsamında bundan sonra MySQL – PHP bağlantılarında
mysqli() fonksiyonunun kullanımı tercih edilecektir.

Atatürk Üniversitesi Açıköğretim Fakültesi 9


212
PHP: Veri Tabanı

PHP’nin mysqli() bağlantı fonksiyonu altı parametre alır ve başarılı


olduğunda bir MySQL bağlantı tanımlayıcısı (link identifier) veya başarısızlık
durumunda FALSE döndürür. Bu fonksiyonunun bütün parametreleri ile birlikte
kullanım yapısı Tablo 10.17’de verilmiştir.
mysqli() fonksiyonuna
herhangi bir parametre Tablo 10.17. mysqli() Fonksiyonunun Kullanımı
vermeden yerel bir
PHP Komutları
MySQL veri tabanına
bağlantı sağlanabilir. $mysqli = new mysqli ($host, $kullanici, $sifre, $vt_adi, $bport_no,
$bsoket_turu);
Tablo 10.17’deki $mysqli bağlantısının aldığı parametrelerin açıklamaları
ise Tablo 10.18’de verilmiştir.
Tablo 10.18. mysqli() Fonksiyonunun Parametre Açıklamaları

Sıra Parametre Durum Açıklama


Veri tabanı sunucusunu çalıştıran ana
bilgisayar adıdır. Zorunlu değildir, eğer
1 $host İsteğe bağlı
belirtilmezse varsayılan değer
localhost:3306 olacaktır.

Veri tabanına erişen kullanıcının adıdır.


Belirtilmezse, varsayılan değer,
2 $kullanici İsteğe bağlı
sunucunun sahibi olan kullanıcının adı
olacaktır.

Veri tabanına erişen kullanıcının


3 $sifre İsteğe bağlı parolasıdır. Belirtilmezse, varsayılan
boş bir parola olacaktır.

Sorguların gerçekleştirileceği veri


4 $vt_adi İsteğe bağlı
tabanının adıdır.

MySQL sunucusuna bağlantıyı sağlayan


5 $bport_no İsteğe bağlı
port numarasıdır.

Kullanılan bağlantı protokolünün adıdır


6 $bsoket_turu İsteğe bağlı
(ODBC, named pipe vb.).

Başka bir PHP fonksiyonu olan close() kullanılarak istendiği zaman MySQL
veri tabanıyla bağlantı kesilebilir. Söz dizimi Tablo 10.19’daki gibidir.
PHP betiğinde close() Tablo 10.19. close() Fonksiyonunun Kullanımı
fonksiyonu
kullanılmazsa, betik PHP Komutları
çalışması sonlandığında $mysqli -> close();
bağlantı otomatik
Tablo 10.20’deki HTML kodlarına gömülü PHP program kodu; mysqli()
olarak yok edilir.
fonksiyonunu kullanarak MySQL veri tabanına bağlantı sağlar ve kapatır.

Atatürk Üniversitesi Açıköğretim Fakültesi 10


213
PHP: Veri Tabanı

Tablo 10.20. PHP Kodu ile MySQL Veri Tabanına Bağlantı Örneği

HTML-PHP Entegrasyonu
<html>
<head>
<title>MySQL Sunucusuna Bağlantı</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$mysqli = new mysqli($host, $kullanici, $sifre);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$mysqli->close();
?>
</body>
</html>

MySQL Veri Tabanı Oluşturma


PHP, bir MySQL sorgusu çalıştırmak için mysqli->query() fonksiyonunu
kullanır. Bu fonksiyon Tablo 10.21’de gösterildiği gibi iki parametre alır ve başarı
durumunda TRUE veya başarısızlık durumunda FALSE döndürür. Ancak bunu
yapabilmek için veri tabanı yönetim sisteminde yeterli yetkiye sahip olmak gerekir.

Tablo 10.21. $mysqli->query() Fonksiyonunun Kullanımı

PHP Komutları
$mysqli->query($sql, $sonucmodu)
mysqli() fonksiyonu
mysql_query() mysqli->query() fonksiyonunun parametreleri Tablo 10.22’de açıklanmıştır.
fonksiyonun Tablo 10.22. $mysqli->query() Fonksiyonunun Parametreleri
geliştirilmiş halidir.
mysqli ile mysql Sıra Parametre Durum Açıklama
kelimelerindeki fark
olan “i” harfi, İngilizce MySQL’de veri tabanı oluşturmak için
1 $sql Zorunlu
“improved” yani SQL sorgusuna ihtiyaç olacaktır.
“geliştirilmiş”
MYSQLI_USE_RESULT (sorgulama
kelimesinin baş harfini
temsil etmektedir. sonucundaki tüm sonuçları
döndürmez) veya
2 $sonucmodu İsteğe bağlı MYSQLI_STORE_RESULT (sorgulama
sonucundaki tüm sonuçları döndürür)
sabitleri verilir. Varsayılan olarak
MYSQLI_STORE_RESULT kullanılır.

Atatürk Üniversitesi Açıköğretim Fakültesi 11


214
PHP: Veri Tabanı

SQL komutlarında “CREATE DATABASE <VERİ_TABANI_ADI>” yapısı, yeni bir


veri tabanı oluşturmak için kullanılır. Açılacak olan veri tabanı ismiyle aynı isimde
başka bir veri tabanı mevcut olmamasına dikkat edilmelidir. Tablo 10.23’deki
program kodu, EGITIM adında yeni bir veri tabanı oluşturur:
Tablo 10.23. mysqli->query() Fonksiyonu ile Yeni Bir Veri Tabanı Oluşturma

HTML-PHP Entegrasyonu
<html>
<head><title>MySQL Veri Tabanı Oluşturma</title></head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$mysqli = new mysqli($host, $kullanici, $sifre);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');

if ($mysqli->query("CREATE DATABASE EGITIM")) {


printf("EGITIM veri tabanı oluşturuldu.<br />");
}
if ($mysqli->errno) {
printf("Veri tabanı Oluşturulamadı: %s<br />", $mysqli->error);
}
$mysqli->close();
?>
</body>
Bireysel Etkinlik

• php_mysql_vtolustur.php adında bir dosya oluşturarak yukarıdaki


kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve
"EGITIM veri tabanı oluşturuldu." mesajlarını aldığınızdan emin
olunuz.

Atatürk Üniversitesi Açıköğretim Fakültesi 12


215
PHP: Veri Tabanı

Şekil 10.1. MySQL Veri Tabanı Oluşturma Sonuç Ekranı

MySQL Veri Tabanı Silme


SQL komutlarında “DROP DATABASE <VERİ_TABANI_ADI>” yapısı, mevcut
bir veri tabanını silmek için kullanılır. Silme işlemi çok dikkatli yapılmalıdır, çünkü
bu işlemin geri dönüşü yoktur. Veri tabanı içindeki bütün nesneler veri tabanıyla
birlikte silinecektir. Tablo 10.24’deki program kodu EGITIM adındaki veri tabanını
SQL’de DROP içindekilerle birlikte siler.
DATABASE komutu
Tablo 10.24. mysqli->query() Fonksiyonu ile Mevcut Bir Veri Tabanını Silme
çalıştırıldığında, söz
konusu veri tabanı o HTML-PHP Entegrasyonu
anda kullanımda değil <html>
ise herhangi bir uyarı <head><title>MySQL Veri Tabanı Silme</title></head>
vermeden veya onay <body>
sormadan silinir. <?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$mysqli = new mysqli($host, $kullanici, $sifre);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');

if ($mysqli->query("DROP DATABASE EGITIM")) {


printf("EGITIM veri tabanı silindi.<br />");
}
if ($mysqli->errno) {
printf("Veri tabanı silinemedi: %s<br />", $mysqli->error);
}
$mysqli->close();
?>
</body>

Atatürk Üniversitesi Açıköğretim Fakültesi 13


216
PHP: Veri Tabanı

Bireysel Etkinlik
• php_mysql_vtsil.php adında bir dosya oluşturarak yukarıdaki kodu
içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve
"EGITIM veri tabanı silindi." mesajlarını aldığınızdan emin olunuz.

Şekil 10.2. MySQL Veri Tabanı Silme Sonuç Ekranı

MySQL Veri Tabanı Seçimi


MySQL sunucusuna bağlandıktan sonra, çalışmak için bir veri tabanı seçimi
yapılmalıdır. Bunun nedeni, MySQL sunucusunda birden fazla veri tabanı
bulunabilmesidir. PHP’de çalışılmak istenen veri tabanını seçmek için Tablo
10.25’de belirtildiği gibi mysqli_select_db() fonksiyonu kullanılır. Parametre
açıklamaları Tablo 10.26.’da yapılmıştır.
MySQL bağlantısı
yapılırken veri tabanı Tablo 10.25. mysqli_select_db() Fonksiyonunun Kullanımı
parametresi PHP Komutları
tanımlanmış ise,
$mysqli-> mysqli_select_db ($link, $veritabani)
mysqli_select_db()
fonksiyonu ile tekrar Tablo 10.26. mysqli_select_db() Fonksiyonunun Parametreleri
seçim yapmaya gerek Sıra Parametre Durum Açıklama
olmaz, farklı bir veri
tabanına geçilmesi 1 $link Zorunlu MySQL bağlantı tanımlayıcısıdır.
durumunda kullanılır.
2 $veritabani Zorunlu Veri tabanı adıdır.

Tablo 10.27. mysqli_select_db() Fonksiyonu ile Mevcut Bir Veri Tabanını Seçme

HTML-PHP Entegrasyonu
<html>
<head>
<title> MySQL Veri Tabanı Seçme</title>
</head>
<body>
<?php

Atatürk Üniversitesi Açıköğretim Fakültesi 14


217
PHP: Veri Tabanı

$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$baglanti = mysqli_connect($host, $kullanici, $sifre);

if(! $baglanti ) {
die('Bağlantı hatası: ' . mysqli_error($baglanti));
}
echo 'Bağlantı kuruldu.<br />';

$retval = mysqli_select_db( $baglanti, 'EGITIM' );


if(! $retval ) {
die('Veri tabanı seçimi yapılamadı: ' . mysqli_error($baglanti));
}
echo "EGITIM veri tabanı seçildi.\n";

mysqli_close($baglanti);
?>
</body>
</html>
Bireysel Etkinlik

• php_mysql_vtsec.php adında bir dosya oluşturarak yukarıdaki


kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre
kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve
"EGITIM veri tabanı seçildi." mesajlarını aldığınızdan emin
olunuz.

MySQL’de oluşturulan
tabloları listelemek için
SHOW TABLES;
Şekil 10.3. MySQL Veri Tabanı Seçme Sonuç Ekranı
komutu kullanılır.
MySQL Tablosu Oluşturma
SQL komutlarında “CREATE TABLE <TABLO_ADI> (<ALAN_ADI,
ALAN_TÜRÜ>)” yapısı, yeni bir tablo oluşturmak için kullanılır. Oluşturulacak olan
tablo ismiyle aynı isimde başka bir tablonun mevcut olmamasına dikkat
edilmelidir. Bu komutun detaylı açıklamaları için https://dev.mysql.com web/doc
web adresini ziyaret ediniz.

Atatürk Üniversitesi Açıköğretim Fakültesi 15


218
PHP: Veri Tabanı

MySQL veri tabanında bir tablo oluşturmak için aşağıdaki ayrıntıların


önceden belirlenmiş olması gerekir:

 Oluşturulacağı veri tabanı


 Tablonun adı ve amacı
 Alan (sütun) adları ve amaçları
 Her alan için veri türü

•MySQL veri tabanında tablo oluşturmak için EGITIM adındaki


Örnek

veri tabanı kullanılsın.


•Eğitim verilecek kurs adlarını tutan egitim_tbl adında bir tablo
oluşturulsun.
•Alan adlarımız: egitim_no alanı kaydın birincil anahtarı,
egitim_baslik alanı kursun içeriği, egitim_veren alanı kursu
anlatan egitimci ve kayıt_tarihi'da kursun açıldığı tarih olsun.
•Alan Türlerimiz: egitim_no alanı INT, egitim_baslik alanı
VARCHAR(100), egitim_veren alanı VARCHAR(40) ve
kayit_tarihi alanı da DATE olsun.

Yukarıdaki örnekte verilen bilgiler dâhilinde Tablo 10.28’de EGITIM veri


tabanında egitim_no, egitim_baslik, egitim_veren ve kayit_tarihi alanlarına sahip,
eğitim_tbl adında tablo oluşturan bir program yazılmıştır.

Tablo 10.28. MySQL VTYS’de Tablo Oluşturma

PHP Komutları
<html>
<head>
<title> MySQL Tablosu Oluşturma</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');

$sql = "CREATE TABLE egitim_tbl ( ".


"egitim_no INT NOT NULL AUTO_INCREMENT, ".
"egitim_baslik VARCHAR(100) NOT NULL, ".

Atatürk Üniversitesi Açıköğretim Fakültesi 16


219
PHP: Veri Tabanı

"egitim_veren VARCHAR(40) NOT NULL, ".


"kayit_tarihi DATE, ".
"PRIMARY KEY ( egitim_no )); ";
if ($mysqli->query($sql)) {
printf("egitim_tbl tablosu oluşturuldu.<br />");
}
if ($mysqli->errno) {
printf("Tablo oluşturulamadı: %s<br />", $mysqli->error);
}

$mysqli->close();
?>
</body>
</html>
Burada, birkaç öğenin açıklanması gerekmektedir:
 Alana NULL değerinin girilmesini engellemek için “NOT NULL” kullanılır. Bu
nedenle, bir kullanıcı NULL değerine sahip bir kayıt oluşturmaya çalışırsa,
MySQL bir hata verir.
 AUTO_INCREMENT niteliği, MySQL'e bir sonraki uygun numarayı
MySQL’de oluşturulan
tabloların detayını eğitim_no alanına eklemesini söyler.
listelemek için;  Anahtar Kelime PRIMARY KEY, bir sütunu birincil anahtar olarak
DESCRIBE tanımlamak için kullanılır. Birincil anahtarı tanımlamak için virgülle
<TABLO_ADI>; komutu ayrılmış birden çok sütun kullanılabilir.
kullanılır.

• php_mysql_tblolustur.php adında bir dosya oluşturarak yukarıdaki


Bireysel Etkinlik

kodu içine yazınız.


• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve
"egitim_tbl tablosu oluşturuldu." mesajlarını aldığınızdan emin
olunuz.

Şekil 10.4. MySQL Tablo Oluşturma Sonuç Ekranı

Atatürk Üniversitesi Açıköğretim Fakültesi 17


220
PHP: Veri Tabanı

MySQL Tablosu Silme


SQL komutlarında “DROP TABLE <TABLO_ADI>” yapısı, mevcut bir tabloyu
bulunduğunuz veri tabanından silmek için kullanılır. Silme işlemi çok dikkatli
MySQL’de bir tabloyu yapılmalıdır, çünkü bu işlemin geri dönüşü yoktur. Bütün veriler tabloyla birlikte
silmek için DROP silinecektir. Tablo 10.29’daki program kodu EGITIM veri tabanındaki egitim_tbl
yetkisine sahip olmak tablosunu bütün verileriyle birlikte siler.
gerekir.
Tablo 10.29. MySQL VTYS’de Tablo Silme

HTML-PHP Entegrasyonu
<html>
<head><title> MySQL Tablo Silme</title></head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');

if ($mysqli->query("DROP TABLE egitim_tbl")) {


printf("egitim_tbl tablosu silindi.<br />");
}
if ($mysqli->errno) {
printf("Tablo silinemedi: %s<br />", $mysqli->error);
}

$mysqli->close();
?>
</body>
</html>

Atatürk Üniversitesi Açıköğretim Fakültesi 18


221
PHP: Veri Tabanı

• php_mysql_tblsil.php adında bir dosya oluşturarak yukarıdaki

Bireysel Etkinlik
kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre
kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve
"egitim_tbl tablosu silindi." mesajlarını aldığınızdan emin olunuz.

Şekil 10.5. MySQL Tablo Silme Sonuç Ekranı

MySQL Tablosuna Veri Ekleme


SQL komutlarında “INSERT INTO <TABLO_ADI> (<ALAN_ADI1>,
<ALAN_ADI2>, <ALAN_ADI3>, …) VALUES (<DEĞER1>, <DEĞER2>, <DEĞER3>,
…)” yapısı, tabloya veri eklemek için kullanılır.

Tablo 10.30. MySQL Tabloya Veri Ekleme

HTML-PHP Entegrasyonu
<html>
<head><title>MySQL Veri Tabanına Veri Ekleme</title></head>
<body>
<?php
if(isset($_POST['ekle'])) {
$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$egitim_baslik = addslashes ($_POST['egitim_baslik']);
$egitim_veren = addslashes ($_POST['egitim_veren']);

Atatürk Üniversitesi Açıköğretim Fakültesi 19


222
PHP: Veri Tabanı

$kayit_tarihi = $_POST['kayit_tarihi'];
$sql = "INSERT INTO egitim_tbl ".
" (egitim_baslik, egitim_veren, kayit_tarihi) ".
"VALUES ('$egitim_baslik','$egitim_veren','$kayit_tarihi')";

if ($mysqli->query($sql)) {
printf("Kayıt başarı ile eklendi.<br />");
}
if ($mysqli->errno) {
printf("Tabloya kayıt eklenemedi: %s<br />", $mysqli->error);
}
$mysqli->close();
} else {
?>
<form method = "post" action = "<?php $_PHP_SELF ?>">
<table width = "600" border = "0" cellspacing = "1" cellpadding = "2">
<tr>
<td width = "250">Kurs Başlığı</td>
<td><input name = "egitim_baslik" type = "text" id =
"egitim_baslik"></td>
</tr>
addslashes(): Özel <tr>
karakterlerin önüne <td width = "250">Eğitmen Adı</td>
ters bölüm ( \ ) <td><input name = "egitim_veren" type = "text" id =
yerleştirir. Sebebi, SQL "egitim_veren"></td>
enjeksiyonunu ve </tr>
PHP’deki olası karakter <tr>
hatalarını <td width = "250">Kayıt Tarihi [ yyyy-mm-dd ]</td>
engellemektir. <td><input name = "kayit_tarihi" type = "text" id = "kayit_tarihi"></td>
</tr>
<tr>
<td width = "250"> </td>
<td></td>
</tr>
<tr>
<td width = "250"> </td>
<td><input name = "ekle" type = "submit" id = "ekle" value = "Kurs
Ekle"></td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>
Tablo 10.30’daki örnekte; egitim_no alanını SQL sorgusuna eklemedik,
çünkü bu alan MySQL tarafından otomatik verilecektir.

Atatürk Üniversitesi Açıköğretim Fakültesi 20


223
PHP: Veri Tabanı

• php_mysql_kytekle.php adında bir dosya oluşturarak yukarıdaki

Bireysel Etkinlik
kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda Kurs Başlığı, Eğitmen Adı
ve Kayıt Tarihi alanlarını doldurarak "Kurs Ekle" düğmesini
tıklayınız.
• Sonuç ekranında "Bağlantı kuruldu." ve "Kayıt başarı ile eklendi."
mesajlarını aldığınızdan emin olunuz.

Şekil 10.6. MySQL Veri Ekleme ve Sonuç Alma Ekranı

MySQL Tablosundan Veri Alma


SQL komutlarında “SELECT <ALAN1>, <ALAN2>, <ALAN3>, … FROM
<TABLO1>, <TABLO2>, <TABLO3>, … WHERE <KOŞUL> OFFSET <M> LIMIT <N>”
yapısı, tablo veya tablolardan veri almak için kullanılır. Bu komutun bazı özellikleri
aşağıda açıklanmıştır:

 WHERE cümlesini kullanarak çeşitli koşulları dâhil etmek için virgülle


ayrılmış bir veya daha fazla tablo kullanılabilir, ancak SELECT sorgusunda
SQL’de tekrarlı kayıtları WHERE cümlesini kullanmak zorunlu değildir.
teke düşürmek veya  Tek bir SELECT komutunda bir veya daha fazla alan getirebilirsiniz.
sadeleştirmek için  Alan yerine yıldız (*) belirtebilirsiniz. Bu durumda SELECT, tüm alanları
SELECT komutuna döndürür.
DISTINCT parametresi  WHERE yan tümcesini kullanarak herhangi bir koşulu belirtebilirsiniz.
eklenir.

Atatürk Üniversitesi Açıköğretim Fakültesi 21


224
PHP: Veri Tabanı

 SELECT ile tablodan kayıt alırken OFFSET parametresini kullanarak


belirteceğiniz M sayısı kadar kaydı atlayabilirsiniz (örneğin M yerine beş
yazarsanız beşinci kayıttan sonraki veriler alınır). Varsayılan olarak ofset
sıfırdır.
 LIMIT özelliğini kullanarak alınacak veri sayısını sınırlayabilirsiniz.
MySQL veri tabanında, bir tablodan nasıl veri alındığını gösteren örnek bir
PHP program kodu Tablo 10.31’de verilmiştir.
Tablo 10.31. MySQL VTYS’de Veri Alma

HTML-PHP Entegrasyonu
<html>
<head>
<title>MySQL Tablosundan Veri Alma</title>
</head>
<body>
<?php

$host = 'localhost';
$kullanici = 'root';
$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');
$sql = "SELECT egitim_no, egitim_baslik, egitim_veren, kayit_tarihi FROM
egitim_tbl";

$result = $mysqli->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
printf("No: %s, Başlık: %s, Eğitmen: %s, Tarih: %d <br />",
$row["egitim_no"],
$row["egitim_baslik"],
$row["egitim_veren"],
$row["kayit_tarihi"]);
}
} else {
printf('Kayıt bulunamadı.<br />');
}
mysqli_free_result($result);
$mysqli->close();
?>
</body>
</html>

Atatürk Üniversitesi Açıköğretim Fakültesi 22


225
PHP: Veri Tabanı

• php_mysql_verial.php adında bir dosya oluşturarak yukarıdaki

Bireysel Etkinlik
kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve No,
Başlık, Eğitmen ve Tarih başlıkları ile birlikte kayıtlı olan verilerin
ekrana geldiğinden emin olunuz.

Şekil 10.7. MySQL Veri Alma Sonuç Ekranı

MySQL Tablosunda Veri Güncelleme


SQL komutlarında “UPDATE <TABLO_ADI> SET <ALAN1> = <YENI_DEĞER1>,
<ALAN2> = <YENI_DEĞER2>, <ALAN3> = <YENI_DEĞER3> … WHERE <KOŞUL>”
yapısı, tabloda veri güncellemek için kullanılır. Bu komutun bazı özellikleri aşağıda
açıklanmıştır:


Bir veya daha fazla alan aynı sorguda güncellenebilir.

WHERE cümlesi kullanılarak herhangi bir koşul belirtilerek kısmi veri
güncellemesi yapılabilir.
 Tek seferde bir tablodaki birden fazla kayıt güncellenebilir.
MySQL veri tabanında, bir tabloda nasıl veri güncelleneceğini gösteren
örnek bir PHP program kodu Tablo 10.32’de verilmiştir.
Tablo 10.32. MySQL VTYS’de Veri Güncelleme

HTML-PHP Entegrasyonu
<html>
<head>
<title>MySQL Tablosunda Veri Güncelleme</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';

Atatürk Üniversitesi Açıköğretim Fakültesi 23


226
PHP: Veri Tabanı

$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');

if ($mysqli->query('UPDATE egitim_tbl SET egitim_baslik = "PHP EĞİTİMİ"


WHERE egitim_no = 1')) {
printf("egitim_tbl tablosu güncellendi.<br />");
}
if ($mysqli->errno) {
printf("Tablo güncellenemedi: %s<br />", $mysqli->error);
}

$sql = "SELECT egitim_no, egitim_baslik, egitim_veren, kayit_tarihi FROM


egitim_tbl";

$result = $mysqli->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
printf("No: %s, Başlık: %s, Eğitmen: %s, Tarih: %d <br />",
$row["egitim_no"],
$row["egitim_baslik"],
$row["egitim_veren"],
$row["kayit_tarihi"]);
}
} else {
printf('Kayıt bulunamadı.<br />');
}
mysqli_free_result($result);
$mysqli->close();
?>
</body>
</html>

Atatürk Üniversitesi Açıköğretim Fakültesi 24


227
PHP: Veri Tabanı

Bireysel Etkinlik
• php_mysql_veriguncelle.php adında bir dosya oluşturarak
yukarıdaki kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu.",
"egitim_tbl tablosu güncellendi." ve No, Başlık, Eğitmen ve Tarih
başlıkları ile birlikte kayıtlı olan verilerin ekrana geldiğinden emin
olunuz.

Şekil 10.8. MySQL Veri Güncelleme ve Alma Sonuç Ekranı

MySQL Tablosundan Veri Silme


SQL komutlarında “DELETE FROM <TABLO_ADI> WHERE <KOŞUL>” yapısı,
tablodan verileri satır bazında silmek için kullanılır. Bu SQL komutu çok dikkatli
kullanılmalıdır, çünkü silinen verinin geri dönüşü yoktur. Bu komutun bazı
özellikleri aşağıda açıklanmıştır:


WHERE cümlesini kullanarak herhangi bir koşul belirtilebilir.

WHERE cümlesi belirtilmezse, verilen MySQL tablosundaki tüm kayıtlar
silinir.
 Tek seferde tablodaki birden fazla kayıt silinebilir.
MySQL veri tabanında, bir tablodan nasıl veri silineceğini gösteren örnek bir
PHP program kodu Tablo 10.33’de verilmiştir.
Tablo 10.33. MySQL VTYS’de Veri Silme

HTML-PHP Entegrasyonu
<html>
<head>
<title> MySQL Tablosundan Veri Silme</title>
</head>
<body>
<?php
$host = 'localhost';
$kullanici = 'root';

Atatürk Üniversitesi Açıköğretim Fakültesi 25


228
PHP: Veri Tabanı

$sifre = 'root@123';
$vtadi = 'EGITIM';
$mysqli = new mysqli($host, $kullanici, $sifre, $vtadi);

if($mysqli->connect_errno ) {
printf("Bağlantı hatası: %s<br />", $mysqli->connect_error);
exit();
}
printf('Bağlantı kuruldu.<br />');

if ($mysqli->query('DELETE FROM egitim_tbl WHERE egitim_no = 1')) {


printf("egitim_tbl tablosundaki veri silindi.<br />");
}
if ($mysqli->errno) {
printf("Tablodan kayıt silinemedi: %s<br />", $mysqli->error);
}
$mysqli->close();
?>
</body>
</html>
Bireysel Etkinlik

• php_mysql_verisil.php adında bir dosya oluşturarak yukarıdaki


kodu içine yazınız.
• Bu dosyayı web sunucunuzdaki erişime açık bir klasöre kaydediniz.
• Web tarayıcınızdan sayfaya ulaştığınızda "Bağlantı kuruldu." ve
"egitim_tbl tablosundaki veri silindi." mesajlarını aldığınızdan
emin olunuz.

Şekil 10.9. MySQL Veri Tabanından Veri Silme Sonuç Ekranı

Atatürk Üniversitesi Açıköğretim Fakültesi 26


229
PHP: Veri Tabanı

•PHP: VERİ TABANI


•PHP, dinamik web sayfaları oluşturmak için kullanılabilen, sunucu tarafında,
HTML'ye gömülü bir betik dilidir. Çoğu işletim sistemi ve web sunucusu için
mevcuttur. Yaygın olan bütün veri tabanlarıyla çalışabilmektedir.
•VERİ TABANINA PHP İLE ERİŞİM
•PHP'den veri tabanlarına erişmenin iki yolu vardır. Biri, veri tabanına özgü bir
Özet
eklenti kullanmak, diğeri ise veri tabanından bağımsız PDO (PHP Data
Objects) kitaplığını kullanmaktır.
•İLİŞKİSEL VERİ TABANI VE SQL
•İlişkisel veri tabanı, birbirileriyle ilişkili verilerin aralarında bağlantı kurularak
tasarlanması ile oluşturulmuş, veri tekrarını ve hatalı veri girişini engelleyen,
tablo yapılarını sadeleştiren, veri tutarlılığını sağlayan ve yüksek performans
sağlayan bir veri tabanı türüdür. İlişkisel Veri Tabanı Yönetim Sistemi
(Relational Database Management System, RDBMS) ise verileri sizin için
yöneten bir sunucudur. Yapısal Sorgulama Dili’ni ilişkisel veri tabanlarını
oluşturmak, değiştirmek ve sorgulamak için kullanabilirsiniz.
•PDO (PHP Data Objects)
•PDO; PHP'den veri tabanlarına erişmek için kullanılan basit, tutarlı bir ara
birimdir. Veri tabanının kendine özgü eklentisi ile bağlanmak daha
performanslı sonuçlar verebilir. PDO kütüphanesi kullanılırsa farklı veri
tabanları ile uyumlu çalışacağı dikkate alınması gereken bir avantajdır.
•PHP ve MySQL
•Günümüzde kullanılan ve pek çok yaygın web sitelerinin bel kemiği olan
MySQL, PostgreSQL ve Oracle gibi ilişkisel veri tabanı sistemleri vardır. PHP
MySQL veri tabanına bağlanmak için kendi eklentisi olan mysqli()
fonksiyonunu kullanır.PHP’nin mysqli() bağlantı fonksiyonu altı parametre
alır ve başarılı olduğunda bir MySQL bağlantı tanımlayıcısı (link identifier)
veya başarısızlık durumunda FALSE döndürür.
•PHP, bir MySQL sorgusu çalıştırmak için mysqli->query() fonksiyonunu
kullanır. Bu fonksiyon iki parametre alır ve başarı durumunda TRUE veya
başarısızlık durumunda FALSE döndürür.
•SQL komutlarında “CREATE DATABASE <VERİ_TABANI_ADI>” yapısı, yeni bir
veri tabanı oluşturmak için kullanılır.
•SQL komutlarında “DROP DATABASE <VERİ_TABANI_ADI>” yapısı, mevcut bir
veri tabanını silmek için kullanılır.
•PHP’de çalışılmak istenen veri tabanını seçmek için mysqli_select_db()
fonksiyonu kullanılır.
•SQL komutlarında “CREATE TABLE <TABLO_ADI> (<ALAN_ADI,
ALAN_TÜRÜ>)” yapısı, yeni bir tablo oluşturmak için kullanılır.
•SQL komutlarında “DROP TABLE <TABLO_ADI>” yapısı, mevcut bir tabloyu
bulunduğunuz veri tabanından silmek için kullanılır.
•SQL komutlarında “INSERT INTO <TABLO_ADI> (<ALAN_ADI1>,
<ALAN_ADI2>, <ALAN_ADI3>, …) VALUES (<DEĞER1>, <DEĞER2>,
<DEĞER3>, …)” yapısı, tabloya veri eklemek için kullanılır.
•SQL komutlarında “SELECT <ALAN1>, <ALAN2>, <ALAN3>, … FROM
<TABLO1>, <TABLO2>, <TABLO3>, … WHERE <KOŞUL> OFFSET <M> LIMIT
<N>” yapısı, tablo veya tablolardan veri almak için kullanılır.
•SQL komutlarında “UPDATE <TABLO_ADI> SET <ALAN1> = <YENI_DEĞER1>,
<ALAN2> = <YENI_DEĞER2>, <ALAN3> = <YENI_DEĞER3> … WHERE
<KOŞUL>” yapısı, tabloda veri güncellemek için kullanılır.
•SQL komutlarında “DELETE FROM <TABLO_ADI> WHERE <KOŞUL>” yapısı,
tablodan verileri satır bazında silmek için kullanılır.

Atatürk Üniversitesi Açıköğretim Fakültesi 27


230
PHP: Veri Tabanı

DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi PHP’nin bütün veri tabanı motorlarına
erişebilmesi için kullandığı kütüphanelerden biridir?
a) PDO()
b) mysqli()
c) sqlsrv_connect()
d) oci_connect()
e) pg_connect()

2. Aşağıdakilerden hangisi SQL söz dizimi olan Veri İşleme Dilinde kullanılan
eylem veya fiil kelimelerinden birini kapsar?
a) CREATE
b) DROP
c) UPDATE
d) ALTER
e) TRUNCATE

I. Sorgulama sonucu ara belleğe alınmış olan verileri kullanır.


II. Bağlandığı veri tabanının fonksiyonlarına erişebilir.
III. Veri kümesinde her veriyi adım adım sunabilir.
IV. Temel olarak ortak veri tabanı özelliklerini sunar.
V. Assembly programlama dilinde yazılmış bir eklentidir.
3. Yukarıda maddeler halinde verilen açıklamalardan kaç tanesi PDO (PHP
Data Objects)’nun benzersiz özelliklerindendir?
a) 1
b) 2
c) 3
d) 4
e) 5

«Bazı ilişkisel veri tabanı sistemleri, bir dizi veri tabanı değişikliklerini aynı
anda kaydedilebildiği veya uygulanmadan geri alınabildiği özelliğe
sahiptir.»
4. Yukarıda bahsedilen veri tabanı özelliği aşağıdakilerden hangisidir?
a) Veri Güncelleme (Update)
b) Veri İşleme (Transaction)
c) Veri Silme (Delete)
d) Veri Seçme (Select)
e) Veri Ekleme (Insert)

Atatürk Üniversitesi Açıköğretim Fakültesi 28


231
PHP: Veri Tabanı

5. PHP’nin MySQL veri tabanına bağlantı sağladığı mysqli() fonksiyonu kaç


parametreye sahiptir?
a) 2
b) 3
c) 4
d) 5
e) 6

6. Aşağıdakilerden hangisi PHP’den MySQL sorgusu çalıştırmak için kullanılan


bir fonksiyondur?
a) mysqli->query()
b) mysqli_select_db()
c) mysqli->sqlstate()
d) mysqli->connect()
e) mysqli->commit()

7. Aşağıdaki SQL Sorgularından hangisi EGITIM adında yeni bir veri tabanı
oluşturur?
a) DROP DATABASE EGITIM
b) USE EGITIM
c) CREATE DATABASE EGITIM
d) TRUNCATE DATABASE EGITIM
e) ALTER DATABASE EGITIM

8. Aşağıdaki sorgulardan hangisi geri dönüşü olmadığı için dikkatli yapılması


gereken bir sorgu yapısıdır?
a) CREATE DATABASE <VERİ_TABANI_ADI>
b) USE <VERİ_TABANI_ADI>
c) DROP DATABASE <VERİ_TABANI_ADI>
d) TRUNCATE DATABASE <VERİ_TABANI_ADI>
e) ALTER DATABASE <VERİ_TABANI_ADI>

Atatürk Üniversitesi Açıköğretim Fakültesi 29


232
PHP: Veri Tabanı

I. Oluşturulacağı veri tabanı


II. Tablonun adı ve amacı
III. Alan (sütun) adları ve amaçları
IV. Her alan için veri türü
9. Yukarıda maddeler halinde verilen açıklamalardan hangisi veya hangileri
MySQL veri tabanında bir tablo oluşturmak için önceden belirlenmesi
gereken ayrıntılardır?
a) I, II
b) III, IV
c) I, III, IV
d) Yalnız I
e) I, II, III, IV

10. OFFSET ve LIMIT kelimeleri hangi SQL sorgusunda parametre olarak


kullanılır?
a) UPDATE
b) SELECT
c) DELETE
d) INSERT
e) USE

Cevap Anahtarı
1.a, 2.c, 3.d, 4.b, 5.e, 6.a, 7.c, 8.c, 9.e, 10.b

Atatürk Üniversitesi Açıköğretim Fakültesi 30


233
PHP: Veri Tabanı

YARARLANILAN KAYNAKLAR
Gilmore, W.J. (2010). Beginning PHP and MySQL (4.Baskı), New York: Apress
Tatroe K., MacIntryre P. ve Lerdorf R. (2013). Programming PHP – PHP
Programlama (3. Baskı). California: O’Reilly
Tutorialpoints. LEARN PHP:simply easy learning–PHP Öğrenin: basit kolay
öğrenim. 15.12.2021 tarihinde https://www.tutorialspoint.com/php/
adresinden erişildi.
W3 Schools. PHP Tutorial. 20.12.2021 tarihinde
https://www.w3schools.com/php/ adresinden erişildi.

Atatürk Üniversitesi Açıköğretim Fakültesi 31


234
PYTHON PROGRAMLAMA
DİLİNE GİRİŞ

• Python Programlama Dili


• Kurulum
İÇİNDEKİLER

• Temel Bilgiler İNTERNET


PROGRAMCILIĞI II
Öğr. Gör. Dr. Uğur
YILDIRIM

• Bu üniteyi çalıştıktan sonra;


• Python dilinin oluşumu hakkında
bilgi sahibi olacak,
HEDEFLER

• Python dilinin Microsoft


Windows, Linux ve Machintosh
İşletim Sistemleri üzerine nasıl
kurulacağını ve çalıştırılabilir
hale getirileceğini ve temel
komutlarını öğrenecek,
• Başlangıç aşamasında
uygulamalar
geliştirebileceksiniz.
ÜNİTE

11
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Python Programlama Diline Giriş

Microsoft
Windows İçin
Python Kurulum
Programlama
Dili macOS İçin
Kurulum
PYTHON PROGRAMLAMA DİLİNE GİRİŞ
Kurulum
Linux İçin
Kurulum

İlk Python
Programınız

Söz Dizimi

Sayı (Number)
Değişkenler
Metin (String)

Veri Türleri Liste (List)

Temel Bilgiler
Demet (Tuple)
Operatörler
Sözlük (Dictionary)

Karar Verme

Döngüler

Atatürk Üniversitesi Açıköğretim Fakültesi 2


236
Python Programlama Diline Giriş

GİRİŞ
Python, 1989 yılında Guido Van Rossum tarafından oluşturulmuş, sunucu
taraflı, açık kaynak kodlu, diğer programlama dillerine göre öğrenmesi daha kolay,
üst seviye bir bilgisayar programlama dilidir. Yapay zeka ve makine öğreniminde,
karar-destek sistemlerinde, modellemede (simülasyon), veri analizinde, görsel
programlamada, uygulama geliştirmede (guı, apı, dosya dizinleri okuma ve
Python kelimesini
[paytın] şeklinde oluşturma, blok zincir uygulamaları, ses ve video uygulamaları vb.), veri tabanı
telaffuz edebilirsiniz. uygulamalarında, web programlamada, bilgisayar oyunu geliştirmede, finans
işlemlerinde, tasarım programlarında, akademik çalışmalarda, astronomide, hatta
başka programlama dili oluşturmak gibi akla gelebilecek pek çok farklı alanda
kullanılabilmektedir. Ayrıca python ile kullanıma hazır paket programlar
geliştirilebilmektedir.
Python programlama dili, pek çok farklı işletim sistemi ve donanım üzerinde
çalışabilir. Gnu/linux, microsoft windows, mac os x, as/400, beos, morphos, ms-
dos, os/2, os/390, z/os, riscos, s60, solaris, vms, windows ce, hp-ux, ios ve android
gibi pek çok ortamda python uygulamaları geliştirilebilmektedir. Ayrıca herhangi
bir ortamda yazılan bir python programı, üzerinde hiçbir değişiklik yapılmadan
veya ufak değişikliklerle başka ortamlarda da çalıştırılabilir.
Python, ingilizce söz dizimine benzer yapıdadır. Programcılara diğer pek çok
programlama diline göre daha kısa programlama kodlarıyla yazım imkânı sağlar. C
ve c++ gibi dillerin aksine derleme (compile) yerine yorumlama (interpreter)
yoluyla çalışır ve bu sayede çok daha hızlı program üretilebilir. Python, hem
yöntemsel (procedural), hem nesne yönelimli (object-oriented), hem de
fonksiyonel (functional) özellikleri destekler.
2022 yılı, ocak ayı itibariyle en yeni ana sürümü python 3’tür. Ancak python
2 sürümünün de güvenlik problemleri dışında güncellenmemesine rağmen bu
tarih itibariyle yoğun olarak kullanıldığı gözlenmektedir.
ABC programlama dili,
basıc, pascal ve awk PYTHON PROGRAMLAMA DİLİ
programlama dilleri
yerine kullanılmak Python programlama dili, Amsterdam’daki Hollanda Bilimsel Araştırma
amacıyla oluşturulmuş, Örgütü’nün bir parçası olan Centrum Wiskunde & Informatica adlı enstitüde ABC
etkileşimli, Programlama dilinin alternatifi olarak tasarlanmıştır. Python’ın 1.0 versiyonu Ocak
yapılandırılmış, üst 1994 kullanıma sunulmuş, ara sürümlerden sonra Ekim 2000 yılında 2.0
düzey ve genel amaçlı versiyonuna geçilmiştir. Aralık 2008 yılında önceki sürümleriyle tam uyumlu
bir programlama diliydi
olmayan 3.0 versiyonu piyasaya sürülmüştür. Aralık 2021 itibariyle Python’ın resmi
ve aynı zamanda
web sitesi olan python.org’da 3.10 versiyonu kullanıcıların erişimine açılmıştır.
entegre geliştirme
ortamıydı. Tablo 11.1. Python Sürüm Bilgileri

Sürüm No En Son Mikro Sürümü Sürüm Tarihi

0.9 0.9.9 20.02.1991

1.0 1.6.1 26.01.1994

Atatürk Üniversitesi Açıköğretim Fakültesi 3


237
Python Programlama Diline Giriş

2.0 2.7.18 03.07.2010

3.0 3.10.0 04.10.2021

Yeni bir programlama dili öğrenilmeye başlandığında; ilk aşamada, bu dilin


ihtiyaçlara cevap verip vermeyeceği, öğrenilmesinin kolay olup olmadığı,
sürekliliğinin sağlanıp sağlanmayacağı gibi sorunlar programcıyı endişeye sokabilir.
Nitekim gelişen teknoloji ile birlikte pek çok programlama dili güncel kalamamış ve
tarihin tozlu sayfalarında yerlerini almışlardır (örn. FORTRAN, COBOL, PASCAL).
Ülkemizde TÜBİTAK Diğer taraftan, Python programlama dilinin sadeliği, bütün işletim sistemleri ile
tarafından geliştirilen uyumluluğu gibi önemli kıstaslar, bu konuda kullanıcıya güven vermektedir.
Unix tabanlı PARDUS’un
bel kemiği Python’ dır. Python dilinin sadeliğini, bütün programcı adaylarının genellikle yazdığı ilk
kaynak kodu olan ve ekrana "Merhaba Dünya" yazan Şekil 11.1’deki program kodu
ile örneklendirebiliriz.

Şekil 11.1. Farklı Dillerde “Merhaba Dünya” Programlama Kodları.

Bilgisayar programcılığı ile ilgili kullanıcı odaklı popüler bir soru cevap sitesi
olan stack overflow’dan alınan istatiksel verilere göre programlamaya yönelimde
python, şekil 11.2’de gösterildiği gibi ilk sırada yer almaktadır.

Şekil 11.2. Stackoverflow Web Sitesinde Programlama Dilleri Konusunda Soru-Cevap


İstatistikleri

Şekil 11.3'de ise Berkeley Üniversitesi Bootcamp sitesinden alınan


istatistiklerde, 2021 yılında programcılar tarafından en çok tercih edilip kullanılan

Atatürk Üniversitesi Açıköğretim Fakültesi 4


238
Python Programlama Diline Giriş

11 programlama dili öncelik sırasına göre verilmiştir. Python programlama dilinin


JavaScript programlama dilinden sonra ikinci sırada yer aldığına dikkat ediniz.
(https://bootcamp.berkeley.edu/blog/most-in-demand-programming-languages/)

Şekil 11.3. 2021 Yılında En Çok Tercih Edilen 11 Programlama Dili.

Python programlama dili de dâhil olmak üzere bütün programlama dillerini


öğrenirken, konuyu anladıktan sonra uygulama aşamasında programcı adayının
örnek olarak verilen program kodlarını bilgisayara el ile yazıp tecrübe etmesi ve
bilgisayar ortamındaki kopyala-yapıştır yapmaktan sakınması önerilmektedir. Bu
Program yazarken ünitede verilen bütün kod örneklerinin okunmakla kalmayıp okuyucu tarafından
yazım hatası yapma ve
bilgisayara satır satır girilmesi kavramların daha iyi öğrenilmesine ve söz diziminde
hatayı düzeltme eylemi,
kavramların daha iyi hız kazanılmasına imkân sağlayacaktır. Program kodları yazılırken Tablo 11.2’deki
anlaşılmasına ve hata biçim yapısı kullanılacaktır. Windows komut satırında programlar çalıştırılırken
ayıklamanın nasıl Tablo 11.3’deki, Linux ve macOS işletim sistemlerinin komut satırında ise Tablo
yapılacağının 11.4’deki biçim yapısı kullanılacaktır.
öğrenilmesine yardımcı
olur. Tablo 11.2. Python Program Kodları Yazım Ekranı

Python Program Kodu


>>> print (“Merhaba Dünya”) # Bu bir Python program kodudur.
Tablo 11.3. Windows Komut Satırında Program Çalıştırma Ekranı

Windows Komut Satırı


C:\> python merhaba-dunya.py
Tablo 11.4. macOS ve Linux Terminal Komut Satırında Program Çalıştırma Ekranı

macOS / Linux Komut Satırı


$ python merhaba-dunya.py

Atatürk Üniversitesi Açıköğretim Fakültesi 5


239
Python Programlama Diline Giriş

• Python kelimesi İngilizce’de hayvanlar âleminin en büyük

Bireysel Etkinlik
sürüngenlerinden biri sayılan piton yılanına karşılık gelir.
Ancak Python programla dilinin ismi bu hayvana ithafen
verilmemiştir. Bu dilin yaratıcısı olan Guido Van Rossum'un
bu ismi neden verdiğini siz araştırınız.

KURULUM
Python programlamasını öğrenebilmek için yazılımın kurulabileceği işletim
sistemine sahip bir bilgisayara ihtiyaç vardır. Bu bilgisayarın genel olarak minimum
aşağıdaki özelliklerde olması önerilmektedir:

• Güncel bir işletim sistemi


• Intel/AMD mimarisine sahip x86 64-bit Merkezi İşlem Ünitesi (CPU)
• 4 GB RAM
• 5 GB disk alanı
Linux, macos (machintosh operating system) gibi bazı işletim sistemlerinde
python programı hazır kurulmuş olarak bulunur. Fakat genellikle kurulu olan
sürüm güncelliğini yitirmiş olur ve yükseltmek gerekir. Bu ünite kapsamında
python programlama dilinin güncel olan en son sürümünün kurulması microsoft
windows, macos ve linux işletim sistemleri için anlatılacaktır.

Microsoft Windows İçin Kurulum


Microsoft windows işletim sisteminde python, kurulu olarak gelmez. Python
kurmak için bilgisayarın internet tarayıcısından PYTHON.ORG adresinin ziyaret
edilmesi gerekir (şekil 11.4.’de 1 numaralı halka).
Python açılış sayfasına erişimden sonra fare imleci, menüdeki Downloads
(İndirmeler) linkinin (Şekil 11.4.’de 2 numaralı halka) üzerine getirildiğinde, bir
pop-up menüsü açılır ve Download for Windows başlığının altındaki Python 3.10.1
düğmesi tıklanır (Şekil 11.4.’de 3 numaralı halka). Bu düğmede programın
kurulacağı son sürüm numarası verilmiştir. Program, internet hızınıza bağlı olarak
indirilir (Şekil 11.4.’de 4 numaralı halka). İndirme işlemi bittiğinde Python
programı kurulum için hazırdır.

Atatürk Üniversitesi Açıköğretim Fakültesi 6


240
Python Programlama Diline Giriş

Şekil 11.4. python.org Açılış Sayfası, Kurulum Linki

Kurulum dosyası tıklandığında, kurulumun disk üzerinde nereye


yapılacağının bilgisinin olduğu ve özel kurulum seçeneğinin sunulduğu bir ara yüz
açılır. Customize installation (kurulumu özelleştir) tıklanır ve optional features
(isteğe bağlı özellikler) ekranında tüm seçenekler işaretlenir ve next (sonraki)
düğmesi tıklanır. Advanced options (gelişmiş seçenekler) ekranında mevcut
seçilmişlere ek olarak ınstall for all users (tüm kullanıcılar için kur) seçeneği de
seçilerek ınstall (kur) düğmesine basılır ve işlem bittikten sonra close (kapat)
düğmesi tıklanarak kurulum işlemi tamamlanır. Şekil 11.5’de işlem sırasına göre
kurulum ekranları verilmiştir.

Şekil 11.5. Python 3.10 64 Bit Windows 10 İşletim Sistemine 4 Adımda Kurulumu

Atatürk Üniversitesi Açıköğretim Fakültesi 7


241
Python Programlama Diline Giriş

Kurulum bittiğinde Windows başlat menüsüne eklenen IDLE (Python 3.10


64-bit) tıklanarak programın açılması sağlanır. IDLE programı açıldığında Python
programlama dilinin kullanılabileceği Python Interactive Shell (Python Etkileşim
Kabuğu) ara yüzü açılır ve Python kodlarının işletilebileceği komut satırı belirir. Bu
komut satırında etkileşimli bir şekilde Python program kodları yazılabilir ve hızlı bir
şekilde işletilebilir. Bu ara yüz, Python programlamaya giriş için büyük bir başlangıç
olarak nitelendirilebilir. IDLE ekran ara yüzü Şekil 11.6.’deki gibidir. Bu ara yüzün üst
kısmında Python programının sürüm bilgisi ve yüklü olduğu işletim sistemi bilgisi
bulunur. “>>>” işaretine Prompt adı verilir ve Python kodunun yazılacağı komut satırını
işaret eder.

Şekil 11.6. Python IDLE Ara Yüzü

macOS İçin Kurulum


Çoğu macOS işletim sisteminde Python 2.0 kurulu halde bulunur. Bu
nedenle son sürümü kurmak uygun olacaktır. Kurulum dosyaları python.org
adresinden indirilebilir. Bilgisayarın internet tarayıcısından Python macOS kurulum
sayfasına (https://www.python.org/downloads/macos/) ulaşılıp Latest Python 3
Release - Python3.x.x. linki tıklandığında gelen sayfanın en altına inilip Files başlığı
altındaki macOS 64-bit universal2 installer dosyası tıklanarak indirme işlemi
başlatılır. İndirme tamamlandığında dosya çift tıklanır ve Şekil 11.7’deki gibi bir ara
yüz açılır.

Şekil 11.7. macOS İçin Python Kurulum Ara Yüzü

Atatürk Üniversitesi Açıköğretim Fakültesi 8


242
Python Programlama Diline Giriş

Lisans sözleşmesi ekranına ulaşana kadar birkaç kez Continue (devam)


düğmesine basılır. Lisans sözleşmesinde Agree (Onaylama) düğmesi tıklandıktan
sonra Python programının nereye kurulacağını ve ne kadar yer işgal edeceği
bilgisini gösteren bir pencere açılır. Kurulumun başlaması için Install (kurulum)
düğmesi tıklanır. Dosyaların kopyalanması bittiğinde Close (Kapat) düğmesi
tıklanarak kurulum sonlandırılır. Artık masaüstündeki IDLE simgesi tıklanarak Şekil
11.8’de gösterilen Python IDLE Shell ekranına ulaşılabilir.

Şekil 11.8. MACOS IDLE Ekranı

Linux İçin Kurulum


Linux, açık kaynaklı bir işletim sistemi çekirdeğidir, tek başına bir işletim
sistemi değildir. Linux çekirdeğini işletim sistemi haline getiren, bu çekirdeğin
üzerine eklemeler yapılarak ve yan yazılımlarla desteklenerek dağıtılmalarıdır.
Python programının kurulum aşamaları anlatılırken, bu dağıtımlar içinde en
popülerlerinden biri olan Ubuntu Linux'u kullanmak uygun olacaktır. Ubuntu
dağıtımında Python programının kurulu olup olmadığını test etmek için terminal
ekranı açıp Tablo 11.5’deki komutlar kullanılarak sürüm numaraları öğrenilebilir.
Tablo 11.5. macOS ve Linux Terminal Komut Satırında Program Çalıştırma Ekranı

Linux Komut Satırı


$ python3 --version
Python 3.9.7
$
Ocak 2022 itibari ile Python’ın son sürümü olan Python 3.10, ek özellikler ve
güncellemelerle 25 Ekim 2021'de yayınlandı. Bu sürüm, hata mesajlarının daha iyi
işlenmesini, yeni kalıp eşleştirme özellikleri, TypeAlias, kullanıcı tanımlı tip
korumaları gibi pek çok yeni özelliği içermektedir. Ubuntu’nun son versiyonu
Ubuntu 21.10 Imprish Indri ise, ilk sistem kurulumunda Python 3.9.x’i kullanmaya
devam etmektedir (https://www.debugpoint.com/2021/10/install-python-3-10-
ubuntu/). Python sürüm 3.10’a geçişin ise Ubuntu 22.04 LTS sürümünde olacağı
planlanmaktadır. Bu nedenle Python’un son Ubuntu sürümünü kurmak için
aşağıda açıklamaları takip ediniz:
Python programının 3.10 sürümü, Ubuntu’nun resmi paket deposunda
olmadığı için, sisteme yeni bir PPA (Personel Package Archive) yani Kişisel Paket
Arşivi tanımı yapılması gerekir. Bu sayede sistem; resmi paketler dışında, güvenilir
başka bir kurulum arşivine yönlendirilir. Tablo 11.6.’daki komut uygulandığında
gelen mesaj enter tuşu ile onaylanır ve ilgili deponun arşivi sistemin depo
tanımlarına kaydedilir.

Atatürk Üniversitesi Açıköğretim Fakültesi 9


243
Python Programlama Diline Giriş

Tablo 11.6. Ubuntu İşletim Sistemine Yeni PPA Ekleme.

Linux Komut Satırı


$ sudo add-apt-repository ppa:deadsnakes/ppa
Yeni paket arşiv deposunu etkinleştirmek için önbelleğin güncellenmesi
gerekir. Bunun için Tablo 11.7’de verilen komut kullanılır.
Tablo 11.7. PPA için Önbelleğin Güncellenmesi.

Linux Komut Satırı


$ sudo apt update
Tablo 11.8’deki komut ile Python 3.10 sisteme kurulur.
Tablo 11.8. Python Programının 3.10 Sürümünün Kurulması.

Linux Komut Satırı


$ sudo apt install python3.10
Kurulum tamamlandığında, komut satırına python3.10 --version komutu
yazılıp enter tuşuna basıldığında ekrana Python 3.10.0 yazısı gelirse kurulum
başarıyla tamamlanmış ve Python programlama dilinin 3.10 sürümü kullanıma
hazır hale gelmiş demektir. Komut satırına python3.10 yazıp enter tuşuna basarak
Python komut satırına erişilebilir. Bu adımlar Tablo 11.9’da gösterilmiştir.
Tablo 11.9. Python Programının 3.10 Sürümünün Kurulması.

Linux Komut Satırı


$ python3.10 --version
Python 3.10.0
$ python3.10
Python 3.10.0 (default, Oct 11 2021, 05:33:59) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

İlk Python Programınız


Microsoft Windows veya macOS işletim sistemlerinde kurulan IDLE
programında; ilki program açılır açılmaz ekrana gelen etkileşimli ara yüz, diğeri
kaynak kodlarının yazılabileceği betimleme ara yüzü olmak üzere iki ana pencere
bulunur. Her iki ara yüzde de program kodları yazılabilir. Etkileşimli ara yüz;
program kodlarının metin olarak yazıldığı ve programlama dili ile iletişim kurduğu
Python Kabuğu olarak tanımlanır.
Python program betimleri; program açıldığı zaman >>> (prompt)
sembolünün olduğu satıra yazılır.
Fonksiyonlar, argüman Etkileşimli ara yüzü kullanarak ilk programı yazalım. Python’da herhangi bir
dediğimiz girdileri olan metni ekrana basmak için print() fonksiyonu kullanılır. Bu fonksiyonda, basılacak
kısa ve özel
metin parantezlerin içinde çift tırnak arasında yazılır. Bütün programlama
sözcüklerdir.
dillerinin sembolü haline gelmiş bir metin olan Merhaba Dünya yazısının ekrana
basılması, Şekil 11.9’da IDLE programının etkileşimli ara yüzünde gösterilmiştir.

Atatürk Üniversitesi Açıköğretim Fakültesi 10


244
Python Programlama Diline Giriş

Python programlama
dilinin kullanıldığı
dosyalar, uzantısı py
olacak şekilde
Şekil 11.9. IDLE Ekranında İlk Program Komutu: Merhaba Dünya
oluşturulur.
Komut yazıldıktan sonra üç adımlık bir döngü oluşur:

• Python, ilk önce prompt satırına yazılan kodu okur.


• Sonra kod değerlendirilir.
• Son olarak döngü ekrana basılır ve yeni kod yazmak için boş prompt satırı
ekrana gelir.
Bu işlem; Oku (Read)-Değerlendir(Evaluate) ve Döngüyü Bas (Print Loop)
anlamına gelen REPL olarak bilinir.
Aynı programı bu kez betimleme ara yüzü kullanarak yazalım. IDLE
programının menüsünde yer alan Şekil 11.10.’da görüldüğü gibi “File/New File”
seçildiğinde Şekil 11.11.’deki gibi betim yazılabilen boş bir dosya ekranı açılır.

Şekil 11.10. IDLE Ekranında Yeni Bir Betim Dosyası Açma

Şimdi, betim dosyasının içine print() fonksiyonu kullanarak çift tırnak


arasında Merhaba Dünya yazalım.

Şekil 11.11. Boş Betim Dosyasına Python Dili İle “Merhaba Dünya” Yazma

Program menüsünden “File/Save As…” seçerek açılan bu yeni dosyaya


uzantısı py olacak şekilde uygun bir isim verelim ve dosyayı sabit disk üzerine veya
başka bir depolanabilir alana (flash disk, ağ yolu vb.) kaydedelim.

Atatürk Üniversitesi Açıköğretim Fakültesi 11


245
Python Programlama Diline Giriş

Şekil 11.12. IDLE İle Açılan Boş Sayfaya Bir İsim Verip Kaydetme

Şekil 11.12’de görüldüğü gibi bu dosyaya merhaba_dunya.py adı verilmiştir.


Dosyayı kaydettikten sonra menüden “Run/Run Module” seçelim veya klavyede F5
tuşuna basalım. Böylece Şekil 11.13’de görüldüğü gibi, ilk Python programımızın
derleme işlemini tamamlamış oluruz.

Şekil 11.13. Python Dili İle Betim Dosyasından Ekrana “Merhaba Dünya” Yazma

Linux işletim sistemlerinin masaüstü (desktop) sürümlerinde IDLE programı


aynı şekilde çalışacaktır. Sunucu (server) sürümlerinde ise farklıdır. Yeni bir
terminal açarak komut satırına ulaşılır. Sistemdeki önceden hazır kurulu
editörlerden biri (vim, vi, pico, emacs vb.) kullanılarak boş bir dosya oluşturulur.
print() fonksiyonu Python komutu yazılır ve disk üzerine merhaba_dunya.py olarak
kaydedilir. Derlemek için Tablo 11.9.’daki gibi dosya çalıştırılır.

Atatürk Üniversitesi Açıköğretim Fakültesi 12


246
Python Programlama Diline Giriş

Tablo 11.10. Linux’da merhaba_dunya.py Dosyasının Derlenmesi

Linux Komut Satırı


$ python3.10 merhaba_dunya.py
Merhaba Dünya
$
Buraya kadar Python programlama dilinin çeşitli işletim sistemlerinde
kurulum aşamaları incelendi. Sonra IDLE ara yüzü ile ve komut satırı kullanılarak ilk
Python programı çalıştırıldı. Şimdi Python programlama dilinin bazı temel
komutlarını ve bunların kullanım amaçlarını inceleyelim.

TEMEL BİLGİLER
Python programlama dilinin temel komutlarına geçmeden bilinmesi
gereken bazı temel özelliklerden bahsetmekte fayda olacaktır.
Örnek

•Örneğin, önceki konu başlıklarında kullanmayı öğrendiğimiz Python


komut satırını pek çok matematik işlemi yapabilen bir hesap makinesi
Matematikte çarpma ve olarak kullanmak mümkündür.
bölme işlemleri öncelik
sırasına sahiptir.
Python’da matematik işlemleri yapılırken bilinen matematik kuralları
geçerlidir. Örneğin aynı anda yapılan bölme, çıkarma, toplama ve çarpma
işlemlerindeki öncelik sırası komut satırında da geçerlidir. Tablo 11.11’de verilen
işlemi yapacak olursak: 2 * 3 işlemi 6 değerini, 8 / 2 işlemi 4 değerini verir. Sonuç
olarak 6 + 4 – 1 ise 9 değerini verecektir.
Tablo 11.11. Python Komut satırında Temel Matematik İşlemleri

Linux Komut Satırı


$ python3.10
Python 3.10.0 (default, Oct 11 2021, 05:33:59) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 2*3+8/2-1
9.0
>>>
Bu işlemin sonucu ekrana 9.0 olarak yansımıştır. Buradaki nokta işareti
sonucun ondalık sayı olduğunu gösterir. Ondalık sayı, Python veri türleri içinde
floating point’e (kayan nokta) karşılık gelir ve kısaca float olarak adlandırılır.
Genellikle tam sayı olmayan numerik değerler için kullanılır. Python
programlamada veri türleri ve örnekleri Tablo 11.12.’de listelenmiştir. Bu veri
türleri ilerleyen bölümlerde Veri Türleri konu başlığında ayrıntılı olarak ele
Pyhon programlamada alınacaktır.
sayıların ondalık kısmı
nokta ile ayrılır (virgül
kullanılmaz).

Atatürk Üniversitesi Açıköğretim Fakültesi 13


247
Python Programlama Diline Giriş

Tablo 11.12. Veri Türleri ve Örnekler

Açıklama Veri Türü Örnek


Metin (string) türü str x = “Merhaba Dünya”
int x = 256
Sayısal (numeric)
float x = 3.14
türü
complex x = 2+3j
list x = ["elma", "muz", "kiraz"]
Dizi (sequence) türü tuple x = ("elma", "muz", "kiraz")
range x = range(1,10,2) //1: başlangıç, 10:bitiş, 2:adım
Sözlük (mapping) dict x = {"ad" : "Umut", "Yaş" : 18}
set x = {"elma", "muz", "kiraz"}
Küme (set)
frozenset x = frozenset({"elma", "muz", "kiraz"})
Boolean (true/false) bool x = true
bytes x = b”Merhaba”
İkili (binary) bytearray x = bytearray(5)
memoryview x = memoryview(bytes(5))

Yalnızca boşluk veya


yorum içeren bir satır
boş satır olarak bilinir
ve Python bunu
• Python komut satırını kullanmadan (88/4+6)/7-2
Bireysel Etkinlik

tamamen yok sayar.


matematiksel işlemini hesaplayınız (parantezin içindeki
Bir boşluk olmalıdır.
işlemin öncelikli olduğunu hatırlayınız).
• Python komut satırını kullanarak yukarıdaki matematiksel
işlemin sonucunu kontrol ediniz.

Söz Dizimi
Python kodu çalıştırmanın etkileşimli ara yüz (komut satırı) ve betimleme
ara yüzü olmak üzere iki metodu olduğunu daha önce öğrenmiştik. Bunlardan
birincisi Python komut satırına direk kod yazıp yürütmek, diğeri de “.py” dosya
uzantılı dosyanın içine kod yazıp Windows veya Linux komut satırında Python
yorumlayıcısıyla çalıştırmak idi.
Girinti, bir kod satırının başındaki boşlukları ifade eder. Diğer programlama
dillerinde kodların yazıldığı girintiler programcıya kolaylık sağlamak ve
okunabilirliğini artırmak için kullanılır. Python programlama dilinde ise girinti çok
önemlidir. Python, bir kod bloğunu belirtmek için girinti kullanır. Tablo 11.13’de
görüldüğü gibi girinti verilmeyen ilk program kodu hata ile sonuçlanmış, sonraki
girintili sonuç ise program sonucunu ekrana hatasız basmıştır.

Pyhon programlamada, Tablo 11.13. Python’da Girinti Kullanımı


girinti oluştururken en Linux Komut Satırı
az bir boşluk olmalıdır.
$ python3.10
Python 3.10.2 (main, Jan 15 2022, 18:02:07) [GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> if 5 > 2:

Atatürk Üniversitesi Açıköğretim Fakültesi 14


248
Python Programlama Diline Giriş

... print("Beş ikiden büyüktür.")


File "<stdin>", line 2
print("Beş ikiden büyüktür.")
^
IndentationError: expected an indented block after 'if' statement on line 1
>>> if 5 > 2:
... print("Beş ikiden büyüktür.")
...
Beş ikiden büyüktür.
>>>
Python programlamada, tanımlayıcı (identifier) oluşturmak için komut
yoktur, Tablo 11.14.’deki gibi bir kelimeye değer atadığınızda onu değişken,
fonksiyon, sınıf, modül veya başka bir nesneye çevirmiş olursunuz. Bir
tanımlayıcıya; A ile Z veya a ile z arasında kalan bütün harflerle başlayan isimler
verilebilir. Başına “_” koyarak 0’dan 9’a kadar rakamları da tanımlayıcı oluşturmak
için kullanabilirsiniz. @, $, % gibi özel karakterler ve noktalama işaretleri
tanımlayıcılarda kullanılmaz. Python büyük küçük harfe duyarlı (case-sensitive) bir
programlama dilidir. Örneğin X ile x farklı tanımlayıcı oluşturur.
Tablo 11.14. Python’da Değişken Oluşturma

Python Program Kodu


x=5
y = “Merhaba Dünya”
değişkenadı = ”Türkçe’ye özgü karakterler (ç, ğ, ı, ö, ş, ü) kullanılır ama önerilmez.”
_0 = “alt çizgi ile rakamlar tanımlama için kullanılabilir.”

Python tanımlayıcıları için diğer önemli adlandırma kuralları şunlardır:


• Sınıf (class) isimleri büyük harfle başlar. Diğer tüm tanımlayıcılar küçük
harfle başlar.
• Bir tanımlayıcıyı tek alt çizgi (_) ile başlatılması, onun özel bir tanımlayıcı (a
private identifier) olduğunu gösterir.
• Bir tanımlayıcıyı iki alt çizgi (__) ile başlatılması, onun güçlü bir özel
tanımlayıcı (a strong private identifier) olduğunu gösterir.
• Tanımlayıcı ayrıca iki alt çizgi ile bitiyorsa bu onun dil-tanımlı özel isime
sahip (language-defined special name) bir tanımlayıcı olduğunu gösterir.
Tablo 11.15’deki kelimeler Python programlama dilindeki anahtar
kelimelerdir. Bu kelimeleri sabit isim, değişken veya başka bir tanımlamada
kullanamazsınız.
Tablo 11.15. Python’da Reserve Kelimeler

and exec not


as finally or
assert for pass
break from print
class global raise
continue if return

Atatürk Üniversitesi Açıköğretim Fakültesi 15


249
Python Programlama Diline Giriş

def import try


del in while
elif is with
else lambda yield
except
Diğer programlama dillerinde olduğu gibi Python’da da önemli notlar almayı
sağlayacak yorum (comment) yazma özelliği bulunur. Tablo 11.16’da görüldüğü
gibi, yorumlar # ile başlar ve Python satırın geri kalanını yorum olarak algılar.
Tablo 11.16. Python’da Yorum (Comment) Oluşturma

Python Program Kodu


# Bu satır ve alttaki satır yorum satırlarıdır.
# print (“Merhaba”)
print (“Merhaba Dünya”) # Satırın bundan sonrası yoruma aittir.
# Alttaki yorum farklıdır. Python yorumlayıcısının (interpreter) diskteki yerini bildirir.
#!/usr/bin/python3
Değişkenler
Değişkenleri, değerleri depolamak için ayrılmış bellek konumu olarak
tanımlamak yanlış olmaz. Yorumlayıcı, değişkenin veri tipine bağlı olarak hafızada
yer ayırır ve burada nelerin saklanabileceğine karar verir. Bu nedenle değişkenlere
farklı veri türleri atayarak bu değişkenlerde tamsayı, ondalık sayı veya metin
saklamak mümkün olur.
Bir değişken Python değişkenleri, bellek alanı ayırmak için herhangi bir bildirime ihtiyaç
oluşturmanız, duymaz. Bir değişkene değer atadığınızda bildirim otomatik olarak gerçekleşir.
bilgisayarın belleğinde
Değişkenlere değer atamak için eşittir işareti (=) kullanılır. İşaretin solundaki
bir miktar yer
değişkenin adı olur. Sağındaki ise değişkende depolanan değerdir. Bazı değişken
ayırdığınız anlamına
gelir. atama örnekleri Tablo 11.17’de verilmiştir.
bir boşluk olmalıdır. Tablo 11.17. Değişkenlere Değer Atama

Python Program Kodu


sayac = 100 # integer türünde atama
mesafe = 1000.0 # floating point türünde atama (nokta olduğu için)
ad = "Ahmet" # metin türünde atama

print (sayac)
print (mesafe)
print (ad)

Atatürk Üniversitesi Açıköğretim Fakültesi 16


250
Python Programlama Diline Giriş

Program işletildiğinde Şekil 11.14’deki sonuçlar üretilir:

Aynı anda birden fazla


değişkene değer
ataması yapılabilir:
a=b=c=1
a, b, c = 1,2,”Ahmet” Şekil 11.14. Python’da Değişken Atama Sonuç Ekranı

Veri Türleri
Bellekte saklanan veri farklı türlerde olabilir. Örneğin, bir kişinin yaşı sayısal
bir değer olarak kaydedilir fakat adresi alfanümerik (hem karakter, hem sayı, hem
de bazı noktalama işaretleri) olarak saklanır. Python, işlem tanımlamak veya
depolamak için kullanılan çeşitli standart veri türlerine sahiptir. Bu veri türleri ve
örnekleri Tablo 11.11’de verilmişti.
Python, 5 standart veri türüne sahiptir:
• Sayı (Number)
• Metin (String)
• Liste (List)
• Demet (Tuple)
• Sözlük (Dictionary)
Sayı (Number)
Sayı (number) veri türü, sayısal değerleri depolar. Bir nesneye sayısal değer
atandığı anda sayı türünde bir değişken oluşturulmuş olur. Bazı sayısal değişken
atama örnekleri Tablo 11.18’de gösterilmiştir.
Tablo 11.18. Sayı Türünde Değişken Oluşturma

Python Program Kodu


var1 = 10 # integer
var2 = 3.14 # float
var3 = 1+2j # complex
Python, aşağıda verilen 3 farklı sayı türünü destekler:

del ifadesi kullanılarak • int (işaretli tam sayılar)


daha önce oluşturulan • float (kayan nokta gerçel sayılar)
sayı nesnesi hafızadan • complex (karmaşık sayılar)
silinebilir.
del var1, var2 Tablo 11.19’da bu üç sayı türüne ait bazı örnekler verilmiştir.
Tablo 11.19. Python’da Sayı Türü Örnekleri

int float complex


10 0.0 3.14j

Atatürk Üniversitesi Açıköğretim Fakültesi 17


251
Python Programlama Diline Giriş

100 15.20 45.j


-786 -21.9 9.322e-36j
080 32.3+e18 .876j
-0490 -90. -.6545+0J
Artı (+) işareti metinleri -0x260 -32.54e100 3e+26J
birleştirmek için, yıldız 0x69 70.2-E12 4.53e-7j
(*) işareti çoğaltmak Metin (String)
için kullanılır.
Python'daki metinler, tırnak işaretleri içinde gösterilen bitişik bir dizi
karakter olarak tanımlanır. Python, tek veya çift tırnak çiftine izin verir. Metinler
( [ ] veya [:] ) operatörleri kullanılarak dilimlere bölünebilirler. Bazı metin örnekleri
ve verilerin dilimlenmesi Tablo 11.20’de verilmiştir.
Tablo 11.20. Python’da Metin Verilerinin Dilimlenmesi

Python Program Kodu


>>> mtn = 'Merhaba Dünya!'
>>>
Python’ın sürüm 1 ve 2 >>> print (mtn) # Bütün metni ekrana basar.
de mevcut olan long Merhaba Dünya!
veri türü, 3. sürümünde >>> print (mtn[0]) # Metnin ilk karakterini ekrana basar.
int veri türüne M
aktarılmıştır. >>> print (mtn [2:5]) # metindeki 3, 4 ve 5. karakteri ekrana basar.
rha
>>> print (mtn [2:]) # 3. karakter ve sonrasını ekrana basar.
rhaba Dünya!
>>> print (mtn * 2) # Aynı metni iki defa ekrana basar.
Merhaba Dünya!Merhaba Dünya!
>>> print (mtn + "TEST") # Metnin sonuna “TEST” ekleyip ekrana basar.
Merhaba Dünya!TEST
>>>
Liste (List)
Liste (list), Python'daki farklı veri türlerinin bir arada kullanılabildiği en
kullanışlı olan dizi veri türüdür. Bir liste, virgülle ayrılmış ve köşeli parantez ( [] )
içine alınmış öğeler içerir. Listeler bir dereceye kadar C programlama dilindeki
dizilere benzer. Aralarındaki farklardan biri, bir listeye ait tüm öğelerin farklı veri
türünde olabilmesidir.
Bir listede saklanan değerlere metin veri türünde olduğu gibi, dilim
operatörü ( [ ] veya [:] ) kullanılarak erişilebilir. Dizin indeksi 0’dan başlar. Python
programlama dilinde Liste kullanımı ve veri dilimlenmesinin bazı örnekleri Tablo
11.21’de verilmiştir.
Tablo 11.21. Python’da Liste Kullanımı

Python Program Kodu


>>> list = [ 'abcd', 786 , 2.23, 'Ahmet', 70.2 ]
>>> tinylist = [123, 'Ahmet']
>>>
>>> print (list) # Bütün Listeyi ekrana basar.
['abcd', 786, 2.23, 'Ahmet', 70.2]

Atatürk Üniversitesi Açıköğretim Fakültesi 18


252
Python Programlama Diline Giriş

>>> print (list[0]) # Listenin birinci elemanını ekrana basar.


abcd
>>> print (list[1:3]) # Listenin 2 ve 3. elemanını ekrana basar.
[786, 2.23]
>>> print (list[2:]) # Listenin 3.elemanından itibaren tamamını ekrana basar.
[2.23, 'Ahmet', 70.2]
>>> print (tinylist * 2) # Listeyi iki defa ekrana basar.
[123, 'Ahmet', 123, 'Ahmet']
>>> print (list + tinylist) # İki listeyi birleştirip ekrana basar.
['abcd', 786, 2.23, 'Ahmet', 70.2, 123, 'Ahmet']
>>>
Demet (Tuple)
Demet (tuple), listeye benzer başka bir dizi veri türüdür. Bir demet, virgülle
ayrılmış bir dizi değerden oluşur. Listeler ve demetler arasındaki temel farklar;
listeler parantez ( [ ] ) içine alınır, öğeleri ve boyutları değiştirilebilir, demetler ise
parantez ( ( ) ) içine alınır ve güncellenemezler. Demetler salt okunur listeler olarak
düşünülebilir. Python programla dilinde Demet kullanımı ve veri dilimleme
örnekleri Tablo 11.22’de verilmiştir.
Tablo 11.22. Python’da Demet Kullanımı

Python Program Kodu


>>> demet = ( 'abcd', 786 , 2.23, 'Ahmet', 70.2 )
>>> dmt = (123, 'Ahmet')
>>>
>>> print (demet) # Bütün demeti ekrana basar.
('abcd', 786, 2.23, 'Ahmet', 70.2)
Sözlüklerde öğeler
>>> print (demet[0]) # Demetin birinci elemanını ekrana basar.
arasında bir düzen
abcd
yoktur, fakat "düzensiz"
>>> print (demet[1:3]) # Demetin 2 ve 3. elemanını ekrana basar.
demek doğru değildir,
(786, 2.23)
sadece belli bir sıra
>>> print (demet[2:]) # Demetin 3.elemanından itibaren tamamını ekrana basar.
yoktur.
(2.23, 'Ahmet', 70.2)
>>> print (dmt * 2) # Demeti iki defa ekrana basar.
(123, 'Ahmet', 123, 'Ahmet')
>>> print (demet + dmt) # İki demeti birleştirip ekrana basar.
('abcd', 786, 2.23, 'Ahmet', 70.2, 123, 'Ahmet')
>>>
Sözlük (Dictionary)
Python’ın sözlükleri bir tür karma-tablo (hash-table) türüdür. Perl'de
bulunan ilişkisel diziler (arrays) veya karmalar (hashes) gibi çalışırlar ve
anahtar/değer (key/value) çiftlerinden oluşurlar. Sözlük anahtarı hemen hemen
her Python veri türü olabilir, ancak genellikle sayılar veya metinlerdir. Değerler ise
rastgele bir Python nesnesi olabilir.
Sözlükler, küme parantezleri ({ }) içine alınır. Sözlüklere erişmek veya değer
atamak için köşeli parantezler ( [ ] ) kullanılır. Python programla dilinde Sözlük
kullanımı ve veri dilimleme örnekleri Tablo 11.23’de verilmiştir
Tablo 11.23. Python’da Sözlük Kullanımı

Atatürk Üniversitesi Açıköğretim Fakültesi 19


253
Python Programlama Diline Giriş

Python Program Kodu


>>> sozluk = {}
>>> sozluk['bir'] = "Bu birdir."
>>> sozluk[2] = "Bu ikidir."
>>>
>>> szlk = {'adı': 'Ahmet', 'Kodu': 6734, 'bölümü': 'satış'}
>>>
>>> print (sozluk['bir']) # 'bir' anahtarının değerini ekrana basar.
Bu birdir.
>>> print (sozluk[2]) # 2 anahtarının değerini ekrana basar.
Bu ikidir.
>>> print (szlk) # Bütün sözlüğü ekrana basar.
{'adı': 'Ahmet', 'Kodu': 6734, 'bölümü': 'satış'}
>>> print (szlk.keys()) # Bütün anahtarları ekrana basar.
dict_keys(['adı', 'Kodu', 'bölümü'])
>>> print (szlk.values()) # Bütün değerleri ekrana basar.
dict_values(['Ahmet', 6734, 'satış'])
>>>
Operatörler
Programlamada, değer atanan değişkene işlenen (operand), işlenenlerin
değerlerini değiştirene ise operatör (operator) denir. Diğer bir değişle,
operatörler, işlenenlerin değerini değiştirebilen yapılardır. 4 + 5 ifadesini ele
aldığımızda 4 ve 5 işlenen, + ise operatördür. Python dili aşağıdaki operatör
türlerini destekler:

• Aritmetik Operatörler (Tablo 11.20.)


• Karşılaştırma (İlişkisel) Operatörleri
• Atama Operatörleri
• Mantıksal operatörler
• Bit (0/1) Operatörleri
• Üyelik Operatörleri
• Kimlik Operatörleri
En çok kullanılan Aritmetik, Karşılaştırma, Atama ve Mantıksal operatörlerin
simgeleriyle birlikte açıklamaları ve örnekleri sırasıyla Tablo 11.24, Tablo 11.25,
Tablo 11.26 ve Tablo 11.27’de verilmiştir. Tabloların örnek sütunlarında verilen a
ve b değişkenlerinin başlangıç değerleri; a = 10, b = 21, c = 0, d = true ve e = false’
dur. Bu tablolardaki örneklerde, c değişkeninin, her örnek işleminin sonucunda
aldığı değeri bir sonraki örnek için saklı tuttuğuna dikkat ediniz.
Tablo 11.24. Python’da, a = 10 ve b = 21 Değerleri için Aritmetik Operatörler

Operatör Açıklama Örnek


+ (Ekleme) Operatörün her iki tarafına da değerler ekler. a + b = 31
- (Çıkarma) Sağ işleneni sol işlenenden çıkarır. a – b = -11
Operatörün her iki tarafındaki değerleri
* (Çarpma) a * b = 210
çarpar
/ (Bölme) Sol el işlenenini sağ el işlenenine böler s / a = 2.1

Atatürk Üniversitesi Açıköğretim Fakültesi 20


254
Python Programlama Diline Giriş

Sol işleneni sağ işlenene böler ve kalanı


% (Modül) b %a = 1
döndürür
** Üs Operatörler üzerinde üstel (güç) hesaplama
a**b =10 üzeri 21
(kuvvet) yapar
Tabana Bölme (Floor Division) - Sonucun
9//2 = 4
ondalık noktadan sonraki rakamlarını
9.0//2.0 = 4.0
// kaldırılır. Ancak işlenenlerden biri negatifse,
-11//3 = -4
sonuç tam sayıya ve sıfırdan uzağa yuvarlanır
-11.0//3 = -4.0
(negatif sonsuza doğru):
Tablo 11.25. Python’da, a = 10 ve b = 21 Değerleri için Karşılaştırma Operatörleri

Operatör Açıklama Örnek


== İki işlenenin değerleri eşitse, koşul doğru (a == b) doğru
olur. değil
!= İki işlenenin değerleri eşit değilse, koşul (a!= b) doğru
doğru olur.
> Sol işlenenin değeri sağ işlenenin (a > b) doğru
değerinden büyükse, koşul doğru olur. değildir.
< Sol işlenenin değeri sağ işlenenin (a < b) doğru
değerinden küçükse, koşul doğru olur.
>= Sol işlenenin değeri, sağ işlenenin (a >= b) doğru
değerinden büyük veya ona eşitse, koşul değil.
doğru olur.
<= Sol işlenenin değeri, sağ işlenenin (a <= b) doğru
değerinden küçük veya ona eşitse, koşul
doğru olur.
Tablo 11.26. Python’da, a = 10 ve b = 21 Değerleri için Atama Operatörleri

Operatör Açıklama Örnek


= Sağ taraftaki işlenenlerden sol taraftaki c = a + b,
işlenenlere değer atar. a + b'nin değerini
c'ye atar.
(c = 10 + 21 = 31)
+= Sağ işleneni sol işlenene ekler ve sonucu sol c += a,
işlenene atar. c = c + a ile aynıdır.
c = 31 +21 =52
-= Sağ işleneni sol işlenenden çıkarır ve sonucu c -= a,
sol işlenene atar. c = c – a ile aynıdır.
c = 52 – 10 =42
*= Sağ işleneni sol işlenenle çarpar ve sonucu c *= a,
sol işlenene atar. c = c * a ile aynıdır.
c = 42 * 10 = 420
/= Sol işleneni sağ işlenenle böler ve sonucu sol c /= a,
işlenene atar. c = 420 / 10 = 42.0
%= İki işlenen kullanarak modül alır ve sonucu c %= a ve
sol işlenene atar. c = c % a aynıdır.
c = 2.0 (42 / 10
işleminde kalan 2
olduğu için)
**= Operatörler üzerinde üstel (kuvvet) c **= a ve
hesaplama yapar ve sol işlenene değer atar c = c ** a aynıdır.

Atatürk Üniversitesi Açıköğretim Fakültesi 21


255
Python Programlama Diline Giriş

c = 1024.0
(𝟐𝟐𝟏𝟏𝟏𝟏 =1024 olduğu
için)
//= Operatörler üzerinde tabana yuvarlama c //= a ve
bölüm (floor division) işlemi gerçekleştirir ve c = c // a aynıdır.
sol işlenene değer atar. c = 102.0
(1024.0 / 10
=102.4 tabana
yuvarlanır ve
sonuç 102.0 olur)
Tablo 11.27. Python’da, d = true ve e = false Değerleri için Mantıksal Operatörler

Operatör Açıklama Örnek


and (ve) Her iki işlenen de doğruysa, koşul doğru (d ve e) yanlıştır.
olur.
or (VEYA) İki işlenenden herhangi biri sıfır değilse, (d veya e)
koşul doğru olur. doğrudur.
not (DEĞİL) İşleneninin mantıksal durumunu tersine not (d ve e)
çevirmek için kullanılır. doğrudur.
Karar Verme
Karar verme, bir programın yürütülmesi sırasında ortaya çıkan koşulların ve
o koşullara göre yapılan belirli eylemlerin öngörülmesidir. Karar verme yapıları,
sonuç olarak DOĞRU veya YANLIŞ üreten birden çok ifadeyi değerlendirir. Sonuç
DOĞRU veya YANLIŞ ise hangi işlemin gerçekleştirileceğine ve hangi ifadelerin
yürütüleceğine önceden karar vermek gerekir. Programlama dillerinin çoğunda
bulunan tipik bir karar verme yapısının genel şekli Şekil 11.14’de verilmiştir.

Şekil 11.14. Programlamada Karar Verme Yapısı

Python programlama dili, sıfır olmayan veya boş olmayan tüm değerleri
TRUE (DOĞRU), sıfır olan veya boş olan tüm değerleri FALSE (YANLIŞ) olarak kabul
eder. Python, aşağıdaki türde karar verme ifadelerini destekler:

• if yapısı; bir “if” ifadesi, onu takip eden bir veya daha fazla ifadenin olduğu
bir doğru/yanlış ifadesinden (boolean expression) oluşur. if ifadesinin bazı
kullanım örnekleri Tablo 11.28’de verilmiştir.

Tablo 11.28. Python’da if Kullanımı

Python Program Kodu


>>> deger1 = 1 # kullanılacak değişkene değer ataması yapıldı.
>>> if deger1 :

Atatürk Üniversitesi Açıköğretim Fakültesi 22


256
Python Programlama Diline Giriş

... print ("TRUE değeri döner.")


...
TRUE değeri döner.
>>> deger2 = 0 # deger2, 0’da olsa değer atandığı için if koşulu TRUE döner.
>>> if deger2 : # deger2 “TRUE” döneceği için aşağıdaki satıra girmez.
... print ("TRUE değeri döner.")
...
# ekrana boş satır basıldı.
>>>

• if .. else yapısı; bir “if” ifadesini, ifade FALSE (YANLIŞ) olduğu durumlarda
isteğe bağlı bir “else” ifadesi izleyebilir. İf .. else yapısının bazı kullanım
örnekleri Tablo 11.29’da verilmiştir.
Tablo 11.29. Python’da if .. else Kullanımı

Python Program Kodu


>>> miktar = 600 # kullanılacak değişkene değer ataması yapıldı.
>>> if miktar < 1000 : # miktar 1000’den küçük ise,
... indirim = miktar * 0.05 # yüzde 5 indirim yap.
... print ("İndirim", indirim)
... else: # Değilse (600’den büyük ise)
... indirim = miktar * 0.10 # yüzde 10 indirim yap.
... print ("İndirim", indirim)
...
İndirim 30.0 # indirim yüzde 5’den hesaplandı.
>>> print ("Net ödeme", miktar - indirim)
Net ödeme 570.0 # İndirim sonrası net fiyat ekrana basıldı.
>>>

• İç içe ifadeler; bir “if” veya “else if” ifadesi, başka bir “if” veya “else if”
ifadesi veya ifadeleri içinde kullanılabilir. İç içe ifadelerin bazı kullanım
örnekleri Tablo 11.30’da verilmiştir.
Tablo 11.30. Python’da if .. else İçinde Başka if .. else Kullanımı

Python Program Kodu


>>> sayi = 15 # kullanılacak değişkene değer ataması yapıldı.
>>> if sayi %2 == 0: # sayi değişkeninin 2’ye bölümünde kalan 0 ise
... if sayi %3 == 0: # sayi değişkeninin 3’e bölümünde kalan 0 ise
... print ("3'e ve 2'ye bölünebilir.")
... else: # sayi değişkeninin 3’e bölümünde kalan 0 değil ise
... print ("2'ye bölünebilir, 3'e bölünemez.")
... else: # sayi değişkeninin 2’ye bölümünde kalan 0 değil ise
... if sayi %3 == 0: # sayi değişkeninin 3’e bölümünde kalan 0 ise
... print ("3'e bölünebilir, 2'ye bölünemez.")
... else: # sayi değişkeninin 3’e bölümünde kalan 0 değil ise
... print ("2'ye ve 3'e bölünemez")
...
3'e bölünebilir, 2'ye bölünemez.
>>>

Döngüler

Atatürk Üniversitesi Açıköğretim Fakültesi 23


257
Python Programlama Diline Giriş

Genel olarak, ifadeler sırayla yürütülür. Bir fonksiyonda, önce ilk ifade
yürütülür, ardından ikincisi, üçüncüsü, .. şeklinde devam eder. Bir kod bloğunu
tekrar tekrar çalıştırmanız gereken durumlar olabilir. Döngüler, bir ifadeyi veya
ifade grubunu birden çok yürütmemize izin verirler. Şekil 11.15’deki şema bir
döngü yapısını göstermektedir.

Şekil 11.15. Koşullu Döngü Yapısı

Python programlama dilinde, aşağıdaki döngü türleri mevcuttur:


• while Döngüsü; Belirli bir koşul TRUE (DOĞRU) iken bir ifadeyi veya ifade
grubunu tekrarlar. Döngü gövdesini (loop body) çalıştırmadan önce koşulu
test eder. while döngüsünün kullanım örneği Tablo 11.31’de verilmiştir.
Tablo 11.31. Python’da while Döngüsünün Kullanımı

Python Program Kodu


>>> sayac = 0 # sayaç değişkeni 0’dan başlatıldı.
>>> while (sayac < 2): # sayac değişkeni 2’den küçükse döngü devam etsin.
... print ("Sayaç:", sayac) # sayac değişkeninin değerini ekrana bas.
... sayac = sayac +1 # sayac değişkeninin değerini 1 artır.
...
Sayaç: 0 # Her döngüde sayac’ın değeri ekrana basıldı.
Sayaç: 1
>>>
• for Döngüsü; Bir dizi ifadeyi birden çok kez yürütür ve döngü değişkenini
yöneten kodu kısaltır. for döngüsünün kullanım örneği Tablo 11.32’de
verilmiştir.
Tablo 11.32. Python’da For Döngüsünün Kullanımı

Python Program Kodu


>>> lst = ['Python', 'öğrenmek', 'kolaydır.'] # lst liste dizisi oluşturuldu.
>>> for deger in lst: # lst listesindeki her lst elemanı deger değişkenine atandı
... print (deger)
...
Python # lst listesindeki her lst elemanı sırayla ekrana basıldı.
öğrenmek
kolaydır.
>>>

Atatürk Üniversitesi Açıköğretim Fakültesi 24


258
Python Programlama Diline Giriş

• İç içe geçmiş döngüler; Bir veya daha fazla döngü herhangi bir while veya
for döngüsü içinde kullanılabilir. İç içe geçmiş döngü örneği Tablo 11.33’de
verilmiştir.
Tablo 11.33. Python’da For Döngüsünün İç İçe Kullanımı

Python Program Kodu


>>> list_dis = ['a', 'b', 'c'] # dış for döngüsü için liste oluşturuldu.
>>> list_ic = [1, 2] # iç for döngüsü için liste oluşturuldu.
>>> for dis in list_dis : # list_dis listesindeki her eleman dis değişkenine atandı.
... for ic in list_ic: # list_ic listesindeki her eleman ic değişkenine atandı.
... print (dis, ic)
...
a1 # list_dis ve list ic listesindeki her dis ve ic elemanı sırayla ekrana basıldı.
a2
b1
b2
c1
c2
>>>

Atatürk Üniversitesi Açıköğretim Fakültesi 25


259
Python Programlama Diline Giriş

•PYTHON PROGRAMLAMA DİLİNE GİRİŞ


•Python, 1989 yılında Guido van Rossum tarafından oluşturulmuş, sunucu
taraflı, açık kaynak kodlu, diğer programlama dillerine göre öğrenmesi daha
kolay, üst seviye bir bilgisayar programlama dilidir. Pek çok farklı işletim
sistemi üzerinde çalışabilir. İngilizce söz dizimine benzer yapıdadır. Derleme
Özet
(compile) yerine Yorumlama (interpreter) yoluyla çalışır ve bu sayede çok
daha hızlı program üretilebilir. Yöntemsel (procedural), nesne yönelimli
(object-oriented) ve fonksiyonel (functional) özellikleri destekler.
•PYTHON PROGRAMLAMA DİLİ
•Python 1.0 versiyonu 1994 yılında kullanıma sunulmuştur. Aralık 2008 yılında
önceki sürümüyle uyumsuz olan versiyon 3.0 piyasaya sürülmüştür. Berkeley
Üniversitesinden alınan istatistiklere göre 2021 yılında en çok tercih edilen
programlama dili olmuştur.
•KURULUM
•En yaygın kullanılan işletim sistemleri olan Windows, Linux ve macOS için
kurulum dosyaları python.org sitesinde ücretsiz ve açık kaynak koduyla
hizmete sunulmaktadır. Windows ve macOS'da kurulum sonrası etkileşimli
ara yüz IDLE ile program yazmak mümkün hale gelir. IDLE ile derlemeye
(compile) gerek kalmadan yorumlama (interpreter) yoluyla program kodları
hızlı bir şekilde işletilebilir. Linux ve macOS'un terminal bağlantıları ile de
Python etkileşimli ara yüzüne erişim mümkündür.
•TEMEL BİLGİLER
•IDLE etkileşimli ara yüzündeki komut satırı, gelişmiş bir hesap makinesi
olarak kullanılabilir.
•Python programlamada; metin, sayısal, dizi, sözlük, küme, boolean ve ikili
veri türleri mevcuttur.
•Söz Dizimi
•Girinti; diğer programlama dillerinin aksine Python programlamada önemli
bir söz dizimi kuralıdır. Kod bloğu girintilerle belli olur ve en az bir karakter
girinti boşluğu verilmelidir.
•Değişkenler
•Bir değer ataması ile değişken oluşturulabilir. Eşittir (=) operatörü ile
değişkene değer ataması yapılır. Sol taraf değişkenin adı, sağ taraf ise
değişkene depolanan değerdir.
•Veri Türleri
•Python 5 standart veri türüne sahiptir. Bunlar: sayı (number), metin(string),
liste (list), demet (tuple) ve sözlük (dictionary)'tür.
•Operatörler
•Operatörler işlenenlerin değerini değiştiren yapılardır. Python programlama
dilinde; aritmetik, karşılaştırma, atama, mantık, bit, üyelik ve kimlik başlıca
operatörlerdir.
•Karar verme
•Karar verme, bir programın yürütülmesi sırasında ortaya çıkan koşulların ve
o koşullara göre yapılan belirli eylemlerin öngörülmesidir.
•Döngüler
•Döngüler, programlamada bir fonksiyondaki kod bloğunun tekrar gerektiren
ifadelerinin kolay bir şekilde oluşturulmasında kullanılan yapılardır.

Atatürk Üniversitesi Açıköğretim Fakültesi 26


260
Python Programlama Diline Giriş

DEĞERLENDİRME SORULARI
1. Aşağıdakilerden hangisi Python programlama dilinin özelliklerinden
değildir?
a) Pek çok farklı işletim sistemi ve donanım üzerinde çalışabilir.
b) Derleme yerine yorumlama yoluyla çalışır.
c) Yöntemsel, nesne yönelimli ve fonksiyonel özellikleri destekler.
d) Dennis Ritchie tarafından 1989 yılında oluşturulmuştur.
e) İngilizce söz dizimine benzer yapıdadır.

I. MacOS
II. Linux
III. Microsoft Windows
IV. Android
V. OS/2
2. Python programlama dili yukarıdaki işletim sistemlerinin hangisinde
çalışabilir?
a) I, II, V
b) I, II, III, IV
c) I, III, IV, V
d) II, III, IV, V
e) I, II, III, IV, V

3. Aşağıdakilerden hangisi hatalı bir ifadedir?


a) Program yazmayı öğrenirken kopyala-yapıştır yapmaktan
sakınılmalıdır.
b) Program yazmayı öğrenirken örneklerle çalışmak zaman kaybettirir.
c) Program yazmayı öğrenirken verilen kodlar bilgisayara bizzat el ile
yazılıp tecrübe edinilmelidir.
d) Program yazarken yazım hatası yapma ve hatayı düzeltme
kavramların daha iyi anlaşılmasına sebep olur.
e) Programlamada hata ayıklamak öğrenmeyi hızlandıran bir eylemdir.

4. Aşağıdaki hangisi Python Programlama Dili’nin kurulum dosyalarının


bulunduğu resmi web sitesidir?
a) python.com
b) python.org
c) python.edu
d) python.biz
e) python.gov

Atatürk Üniversitesi Açıköğretim Fakültesi 27


261
Python Programlama Diline Giriş

5. Python programlama dilinin kurulum ile birlikte gelen etkileşimli ara yüzü
aşağıdakilerden hangisidir?
a) IDLE
b) NETBEANS
c) ECLIPSE
d) VISUAL STUDIO
e) PYCHARM

6. Aşağıdakilerden hangisi Python programlama dilinde hatalı bir söz


dizimidir?
a) print ("Merhaba Dünya!")
b) print ('Merhaba Dünya!')
c) Print ("Merhaba"+" Dünya!")
d) print (" 'Merhaba Dünya!' ")
e) print (' "Merhaba Dünya!" ')

7. Python programlama dilinin etkileşimli ara yüzü kullanılarak


(8/2-3+25/5*2)/11 matematiksel işlemi yapıldığında ekrana
aşağıdakilerden hangisi basılır?
a) 11
b) 11.0
c) 1
d) 1.0
e) 88

8. Aşağıdaki kelimelerden hangisi Python programlama dilinde reserve


edilmiş anahtar kelimelerden biri değildir?
a) loop
b) while
c) if
d) else
e) for

9. Aşağıdakilerden hangisi Python programla dilindeki standart veri


türlerinden değildir?
a) Sayı (Number)
b) Metin (String)
c) Liste (List)
d) Demet (Tuple)
e) Karakter (Char)

Atatürk Üniversitesi Açıköğretim Fakültesi 28


262
Python Programlama Diline Giriş

mtn = 'Merhaba Dünya!'


10. Aşağıdakilerden hangisi yukarıda verilen mtn değişkeni için ekrana hatalı
sonuç basmıştır?
a) >>> print (mtn [0] )
M
b) >>> print ( mtn [2:5] )
rha
c) >>> print ( mtn [2:] )
erhaba Dünya!
d) >>> print ( mtn * 2 )
Merhaba Dünya! Merhaba Dünya!
e) >>> print ( mtn + 'TEST' )
Merhaba Dünya!TEST

Cevap Anahtarı
1.d, 2.e, 3.b, 4.b, 5.a, 6.c, 7.d, 8.a, 9.e, 10.c

Atatürk Üniversitesi Açıköğretim Fakültesi 29


263
Python Programlama Diline Giriş

YARARLANILAN KAYNAKLAR
Luts M. (2011). Programming Python (4. Baskı). California: O’Reilly
Mayer, J. (2020). Python ONE-LINERS (1.Baskı), California: Starch Press
Tutorialpoints. LEARN PYTHON: simply easy learning–Python Öğrenin: basit kolay
öğrenim. 24.01.2022 tarihinde https://www.tutorialspoint.com/
python3/index.htm adresinden erişildi.
W3 Schools. PYTHON Tutorial. 20.01.2022 tarihinde
https://www.w3schools.com/python/ adresinden erişildi.

Atatürk Üniversitesi Açıköğretim Fakültesi 30


264
PYTHON İLE WEB
PROGRAMLAMA

• Python ve Web
• Python ve IIS
İÇİNDEKİLER

• Python ile İlk Web İNTERNET


Uygulaması
• Python ve Flask PROGRAMCILIĞI II
Öğr. Gör. Dr. Uğur
YILDIRIM

• Bu üniteyi çalıştıktan sonra;


• Python programla dilinin web ile
HEDEFLER

etkileşimini,
• Internet Information Services
üzerine kurulumunu,
• Python ile web uygulaması
geliştirmeyi,
• Python'ın hazır mikro
çerçeveleri ile hızlı web
uygulamaları oluşturmayı
öğreneceksiniz.

ÜNİTE

12
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Python ile Web Programlama

Flask Nedir?

PYTHON İLE WEB PROGRAMLAMA


Flask Kurulumu
Python ve Web

Temel Uygulama Yapısı


Python ve IIS

Python ile İlk Web escape() Dekoratörü


Uygulaması

route() Dekoratörü
Python ve Flask
Değişken Dönüştürme

Benzersiz URL'ler
(Werkzeug)

url_for() Dekoratörü

HTTP İletişim Metotları

Şablonlar (Templates)

Atatürk Üniversitesi Açıköğretim Fakültesi 2


266
Python ile Web Programlama

GİRİŞ
Web geliştirmek için çok farklı programlama dilleri mevcuttur ve her geçen
gün daha fazlası eklenmektedir. Bu kadar çok programlama diline sahip olmamızın
ilk ve belki de en büyük nedeni, teknolojinin sürekli gelişmesidir. Daha fazla
teknoloji ortaya çıktıkça ve geliştikçe, bu teknolojiler için yazılım üretebilecek daha
fazla araca ihtiyaç duyulmaktadır. Diğer bir sebebi, her uygulama türünün farklı
türde donanım veya işletim sistemine ihtiyaç duyabilmesidir. Örneğin; mobil
uygulama geliştiricileri, Android uygulamaları yapmak için Java ve Kotlin'i veya iOS
uygulamaları yapmak için Swift'i kullanır. Diğer bir sebep ise her geliştiricinin
kendine uygun bir dil istemesidir. Örneğin; bazı geliştiriciler, süper hızlı ve
performanslı bir programlama dili isterken bazıları da haftalar değil birkaç gün
içinde uygulamalarını oluşturabilecekleri bir programlama dilini tercih ederler. Bu
noktada önemli olan, programlamaya başlarken yapılacak olan işin hangi dile
uygun olduğuna karar verilmesidir.
Python, PHP, C++, Ruby, Java ve C#, web uygulama geliştirmede en yaygın
kullanılan yüksek seviye programla dillerinden bazılarıdır. Chrome, Firefox, Opera
ve Microsoft Edge gibi yaygın internet tarayıcıları bu programlama dillerini direk
çalıştıramaz. Örneğin, Python sunucu taraflı çalışan bir programlama dilidir.
Netscape firmasının Python ile bir web uygulaması oluşturmak için bu dilin yanı sıra HTML (Hypertext
1995 yılında JavaScript’i Markup Language, Hiper Metin İşaretleme Dili), CSS (Cascading Style Sheets,
yaratırken asıl amaçları, Basamaklı Stil Şablonları) ve JavaScript gibi bütün tarayıcıların desteklediği ve
açık kaynak kodu ile istemci tarafında çalıştırılabilir olan dilleri de bilmek gerekir. HTML ve CSS bir
web geliştiriciliğini programlama dilinden çok bir işaretleme ve stil oluşturma dili olarak
yaygınlaştırmak nitelendirilmektedir. Tarayıcılar tarafından direk desteklen tek programlanabilir
istemeleriydi. dilin JavaScript olduğu söylenebilir. Bu nedenle Python geliştiricileri kendi web
uygulamalarını oluşturmak için Python ve JavaScript’in birlikte çalıştığı hazır
sistemleri kullanırlar. Bunlardan en yaygın olanları; Flask, Django, Web2py,
Tornado ve Bottle sayılabilir.

PYTHON VE WEB
Web üzerinde çalışan bir Python uygulaması geliştirmek için bazı temel
şartların oluşmuş olması gerekir. Bu şartları şu şekilde sıralayabiliriz.

 Python programlama dilinin en son sürümünün kurulu olduğu bir


bilgisayar. Bilgisayarın sahip olması gereken minimum özellikler önceki
ünitede belirtilmişti.
 Program kodlarının yazılabileceği tümleşik yazılım geliştirme ortamı (IDE,
Integrated Development Environment). Akıllı kod navigasyonu, hızlı ve
güvenli yeniden düzenleme özelliği, hata ayıklama, test etme, profil
oluşturma, dağıtım yapabilme, uzaktan geliştirme ve veri tabanı gibi
özelliklere sahip olan bir metin editörü uygun olacaktır.
 Web servisi (Apache, Internet Information Services, vb.)

Atatürk Üniversitesi Açıköğretim Fakültesi 3


267
Python ile Web Programlama

 Web çerçevesi (framework).Profesyonel anlamda kullanımda olan bir web


çerçevesi (çatısı) seçilmesi, üretilecek programa performans ve süreklilik
açısından fayda sağlayacaktır.
Bu ünitede, bir web servisi kullanılarak Python ile basit web uygulamaları
MD (Make Directory) ve
geliştirilecektir. İlk önce geliştirme ortamı yazılımı, minimum bilgisayar gerekliliğini
CD (Change Directory)
karşılayan ve Python uygulamasının yüklü olduğu bilgisayara indirilir ve kurulum
gibi Windows komut
yapılır. Bu örnekte Internet Information Web Servisleri kullanılacaktır.
satırında çalıştırılan bazı
komutlar eski MS-DOS PYTHON VE IIS
işletim sistemi
komutlarıdır. Python programının Windows işletim sisteminin bir eklentisi olan ve web
sunucu hizmeti veren IIS (Internet Information Services) uygulamasında
çalışabilmesi için bazı ayarların yapılması gerekir. Örneğin, web sunucusuna
Python’un dosya uzantısı olan py türünü tanıtmak gerekir. Windows İşletim
Sisteminin IIS özelliğini kullanıma açmak için şu adımlar takip edilir.

 Kontrol paneli’nden uygulamalar ve özellikleri simgesi tıklanır.


 Sağ bölmede programlar ve özellikler linki tıklanır.
Bu bölümde, Python  Açılan pencerenin sol bölmesindeki windows özelliklerini aç veya kapat
programlama dilini web linki tıklanır.
sunucusu üzerinde  Gelen yeni pencerede ınternet ınformation services kutucuğu tıklanarak
çalıştırmak için işaretlenir. Bu kutucuğun altındaki world wide web hizmetleri kutucuğu ve
Microsoft Windows 10 uygulama geliştirme özelliklerinin içindeki CGI kutucuğunun işaretlenmiş
işletim sistemi üzerinde olması gerekmektedir.
çalışan Internet  Şekil 12.1’deki tamam düğmesi tıklandıktan sonra bu özelliğin yüklenmesi
Information Services beklenir. Yükleme tamamlandıktan sonra python programlama dilinin
10.0.0 sürümü tanımlanmasına geçilebilir.
kullanılmıştır.

Şekil 12.1. Windows 10 Sisteminde IIS Özelliğini Açık Hale Getirme

Diğer bir kısa yol olan %windir%\system32\OptionalFeatures.exe komutu


çalıştırılarak da aynı pencereye erişim sağlanabilir. Bu açıklamadan sonra diğer
pencerelerin açılma durumunu belirtmek için kısa yol komutları tercih edilecektir.

Atatürk Üniversitesi Açıköğretim Fakültesi 4


268
Python ile Web Programlama

IIS, ön değer olarak web sayfalarının fiziksel yolunu sistemin yüklü olduğu
sürücüdeki \intepub\wwwroot klasörü olarak tanımlar. Ancak yeni bir web sitesi
eklendiğinde sürücü üzerinde yapılandırılmış yeni veya mevcut bir klasör de
tanımlanabilir. Bu aşamada, öncelikle Windows başlat menüsünde cmd yazıp
açılan pencerede “Yönetici olarak çalıştır” seçimi yapalım ve komut satırına
geçelim. Şimdi web sitesi tanımlaması için Tablo 12.1’de gösterildiği gibi C:\
sürücüsü üzerinde Python klasörü içinde py_root adında bir klasör oluşturalım.
Tablo 12.1. Windows Komut Satırında py_root Klasörü Oluşturma

Windows Komut Satırı


C:\> MD \Python\py_root
Bu klasöre IIS’in okuyabilmesi ve çalıştırabilmesi için gerekli olan okuma ve
çalıştırma yetkisinin verilmesi gerekir. Bunu yapabilmek için Tablo 12.2’de
görüldüğü gibi, icacls.exe komutu ile önce yetkilendirme yapalım, ardından
%windir%\system32\inetsrv\iis.msc kısa yol komutu ile IIS yönetim paneli açalım.
Tablo 12.2. icacls.exe Komutu İle Yetkilendirme

Windows Komut Satırı


C:\> CD \Python
C:\ Python> icacls py_root /grant "NT AUTHORITY\IUSR:(OI)(CI)(RX)"
C:\ Python> icacls py_root /grant "Builtin\IIS_IUSRS:(OI)(CI)(RX)"
C:\ Python> %windir%\system32\inetsrv\iis.msc
Şekil 12.2’de görüldüğü gibi yönetim paneli açıldıktan sonra en başında
bilgisayarın adı olan ve İnternet Bilgi Servislerini gösteren hiyerarşik yapıda
bağlantılar gelir.

Şekil 12.2. Windows İnternet Bilgi Servisleri Paneli

Bu hiyerarşik yapı genişletildiğinde gelen “Default Web Site” simgesinin


üzerindeyken farenin sağ tuşu tıklandığında açılan menüden “Uygulama Ekle..”
seçeneğini seçelim.

Atatürk Üniversitesi Açıköğretim Fakültesi 5


269
Python ile Web Programlama

Şekil 12.3. Yeni Web Klasörü Tanımlama Ekranı

Gelen ekranda, sanal bir web klasörü oluşturmak için “Diğer Ad:” başlıklı
kutucuğa istenilen isim verilebilir, örneğin bu uygulama için py ismini verelim.
“Fiziksel Yol:” olarak da sürücü üzerinde açılmış olan yolu yazalım veya “[…]”
düğmesini tıklayarak yol seçimi yapalım. Şekil 12.3’de görüldüğü gibi bu uygulama
için “C:\Python\py_root” klasörü seçilmiştir.
Sanal web klasörü,
aslında var olmayan Şekil 12.4’de görüldüğü gibi, sanal klasör detay ekranında, yeni açılan py
fiziksel olarak başka bir klasörü tıklandığında, panelin sağ tarafında bu klasörle ilgili tanımlamaların olduğu
adresi gösteren dizindir. simgeler gelir.

Şekil 12.4. Sanal Klasör Detay Ekranı

Bu simgelerden “İşleyici Eşleşmeleri” simgesini çift tıklarsak Şekil 12.5’de


görülen “Kod Eşleşmesi” yapılacak ekrana ulaşırız.

Atatürk Üniversitesi Açıköğretim Fakültesi 6


270
Python ile Web Programlama

Şekil 12.5. İşleyici Eşleşmeleri Ekranı

İşleyici Eşleşmeleri ekranında kırmızı halka içine alınan Kod Eşleşmesi Ekle..
linkini tıklandığımızda ise Python programının exe dosyasını ve py uzantısını web
sunucusuna tanıtacağımız Şekil 12.6’ daki Kod Eşleşmesi Ekle ekranına ulaşırız.

Şekil 12.6. Kod Eşleşmesi Ekleme Ekranı

Kod Eşleşmesi Ekle ekranında, istek yolu olarak Python programlama dilinin
uzantısı olan *.py tanımı yapalım. Çalıştırılabilir kutucuğuna Python programının
Uzantı, bir bilgisayar yüklendiği klasördeki Python.exe dosyası tanımlayalım ve %s %s parametrelerini
dosyasının hangi ekleyelim. Adı kutucuğuna da Python Interpreter diye tanıtıcı bir açıklama yazalım.
programa ait olduğunu Kod Eşleşmesi bilgileri girildikten sonra Tamam düğmesi tıkladığımızda Şekil
veya türünü belirten 12.7’deki onay ekranı gelir. Bu ekran onaylandığında artık Python kodları ile web
takıdır. sayfaları hazırlamaya başlayabiliriz.

Atatürk Üniversitesi Açıköğretim Fakültesi 7


271
Python ile Web Programlama

Şekil 12.7. Kod Eşleşmesi Ekleme Onay Ekranı

Kod eşleşmesi tamamlandıktan sonra, seçilen uygulama yolunun içinde,


web sitesinin ortak konfigürasyon ayarlarının tutulduğu XML tabanlı bir dosya olan
web.config adında bir dosya oluşturulmalıdır. Bu dosya, sistemin kök dizininde
olabileceği gibi belli dizinler altında da olabilir. web.config dosyasının bir örneği
Tablo 12.3’de verilmiştir.
Tablo 12.3. web.config Dosyasının İçeriği

XML Kodları
1. <?xml version="1.0" encoding="UTF-8"?>
2. <configuration>
web.config dosyasının 3. <system.webServer>
etkin olabilmesi için 4. <handlers>
applicationHost.config
5. <remove name="Python Interpreter" />
dosyasındaki “handler”
opsiyonunun 6. <add name="Python Interpreter" path="*.py" verb="*" modules="CgiModule"
scriptProcessor="C:\Python\Python310\python.exe %s %s" resourceType="File"
“overrideModeDefault”
requireAccess="Script" />
parametresi “Allow” 7. </handlers>
olmalıdır.
8 </system.webServer>
9. </configuration>

PYTHON İLE İLK WEB UYGULAMASI


Önceki bölümde kurulan sistemin çalışıp çalışmadığını test etmek ve Python
ile ilk uygulamamızı oluşturmak için, daha önce açmış olduğumuz py_root
klasörünün içinde merhaba_dunya.py adında bir dosya oluşturalım ve içine Tablo
12.4’de verilen Python program kodlarını yazalım. Windows işletim sisteminde
karakter kodlaması olarak genellikle Windows-1254 karakter kümesi kullanılır.
Türkçe karakterlerin internet tarayıcısında doğru olarak ekrana basılabilmesi için
yeni bir dosyayı kaydederken dil kodlamasını UTF-8 seçmekte fayda olacaktır.
Ayrıca 6. satırdaki boşluk karakteri verilmediği takdirde internet tarayıcısının hata
döndüreceğini unutmayınız. Python programlama dilinde print komutu tırnak
içinde yazılan metnin ekrana basılmasını sağlar. Python sunucu taraflı çalışan bir
programlama türüdür. Bu sebeple komutları sunucu tarafında çalıştırır.
merhaba_dunya.py dosyası komut satırında derlenmiş olsaydı HTML etiketlerinin

Atatürk Üniversitesi Açıköğretim Fakültesi 8


272
Python ile Web Programlama

de dahil olduğu metin ekrana yazılacaktı. “Content-Type” parametresi olan


“text/html” değeri, İnternet tarayıcılarında HTML etiketlerinin gözükmemesi
içindir. Bu parametre tanımı ve aldığı değer, tarayıcıda içerik olarak gözükmez.
Tablo 12.4. merhaba_dunya.py Adlı Test Amaçlı Python Program Kodu

Python Komutları
1. print('Content-Type: text/html')
2. print('')
Çerçeve
Sunucu yapılar;
taraflı program; 3. print('<html>')
herhangi bir
bir web sitesinin 4. print('<body>')
programlama işletilen
sunucusundan dilinde
5. print('<h1>Merhaba Dünya!</h1>')
hızlı yazılım
koda dayanan
geliştirmeye türüdür.
imkân 6. print('</body>')
programlama
sağlayan hazır 7. print('</html>')
yapılardır.
localhost/py/merhaba_dunya.py dosyasının internet tarayıcısındaki çıktısı
Şekil 12.8’deki gibi olmalıdır.

Şekil 12.8. merhaba_dunya.py Adlı Test Amaçlı Programın Tarayıcıdaki Çıktısı

PYTHON VE FLASK
Python programlama dili ile web üzerinde uygulama yapmak için genellikle
çerçeve yapı kullanılır. Flask konusuna geçmeden önce çerçeve yapı konusuna
değinmekte fayda olacaktır. Çerçeve yapı; herhangi bir programlama dilinde
üzerine program yazabileceğiniz hazır yapılar olarak tanımlanabilir. Bu yapı
sayesinde, oluşturulacak olan programa en baştan başlamak yerine hazır olan bir
seviyeden başlamak çok daha kolay olacaktır. Örneğin sıfırdan inşa etmek yerine
temeli uzman kişilerce atılmış ve hazır beton kullanılmış olan bir evi oluşturmak
çok daha kolaydır. Yazılım geliştirirken de bu yapı benzer bir amaca hizmet eder.
Geliştireceğiniz uygulamaya başlarken yazdığınız programı, uzman yazılımcılar ve
mühendisler tarafından oluşturulan sağlam bir temel üzerine inşa edeceğinizi
bilirsiniz.
Program oluştururken çerçeve yapı kullanmak zaman kazandırır. Her şeyi
sıfırdan yazmak gerekmez, bu nedenle hata yapma riski azalır. Bunun yanı sıra bu

Atatürk Üniversitesi Açıköğretim Fakültesi 9


273
Python ile Web Programlama

yapı daha önceden uzman yazılımcılar tarafında test edildiği için güvenle
kullanılabilir. Diğer avantajları şöyle sıralayabiliriz:
 Kodlama daha güvenlidir.
 Daha basit test etme ve hata ayıklama imkânı verir.
Mikro çerçeveler; web  Tekrar eden kodlar bulunmaz.
programlamada belirli  Açık ve kolay uyarlanabilir bir yapısı vardır.
araçlar veya  Kendi uygulamanıza odaklanmanıza imkân sağlar.
kütüphaneler  İstenirse ekleme yapılıp genişletilebilir.
gerektirmeyen hazır Çerçeve yapılar, web sitesi geliştirirken kullanılır.
yapılardır.

• Web uygulamalarında kullanılan en yaygın çerçeve yapılar:


Örnek

• Flask
• Django
• AngularJS
• Rails
• Express

Çerçeve yapıların bir diğer çalışma alanı mobil uygulama geliştirmektir.

• Mobil uygulamalarda kullanılan en yaygın çerçeve yapılar:


Örnek

• Flutter
• Xamarin
• React Native
• NativeScript
• Ionic

Çerçeve yapılar; bilimsel çalışmalar ve veri bilimi gibi pek çok alanda
kullanılmaktadır.

Flask Nedir?
Flask, Python programlama dili ile yazılmış ücretsiz ve açık kaynak kodlu bir
web uygulama mikro çerçeve yapılı yazılımdır. Mikro çerçeve olarak
tanımlanmasının sebebi özel araçlara veya program kütüphanelerine ihtiyaç
duymamasındandır. Kendine has veri tabanı uygulama katmanı, doğrulama sayfası
veya ortak fonksiyon kullanımı sağlayan kütüphane dosyaları bulunmaz. Fakat pek
çok eklentiyi kendi yapısı dâhilindeymiş gibi destekleme özelliğine sahiptir.
Flask, 2004 yılında kurulan uluslararası bir Python meraklıları grubu olan
Pocoo’dan Armin Ronacher tarafından oluşturulmuştur. Flask, Ronacher’ın 2010

Atatürk Üniversitesi Açıköğretim Fakültesi 10


274
Python ile Web Programlama

yılındaki 1 Nisan şakası olarak başlamış ve günümüzde birçok uygulamada


kullanılan bir çerçeve yapısına dönüşmüştür. Flask, Werkzeug WSGI araç setini ve
Jinja2 şablon motorunu temel alır. Her ikisi de Pocco projeleridir.
WSGI, Web Sunucusu Ağ Geçidi Arayüzü (WSGI), web sunucularının Python
programlama dilinde yazılmış olan web uygulamalarına ve çerçevelerine istek
iletmesini sağlayan bir çağrı kuralıdır. WSGI, Python ile web uygulamaları
geliştirirken kullanılan bir standart olarak benimsenmiştir.
Werkzeug, istekleri, yanıt nesnelerini ve diğer yardımcı işlevleri uygulayan
bir WSGI araç takımıdır. Flask çerçevesinin temelini oluşturan yapılardan biridir.
Jinja2, Python programlama dili için oluşturulmuş bir şablon motorudur.
Dinamik web sayfaları oluşturmak için bir şablonu belirli bir veri kaynağıyla
birleştirir.
Flask, Python programının kurulu olduğu bütün ortamlarda çalışabilir. Bu
bölümde Microsoft Windows 10 işletim sistemi ortamı tercih edilmiştir. Flask,
mikro çerçeve yapısını kullanabilmek için Microsoft Windows 10 işletim sistemine
Python programının ve Python desteği olan bir web sunucusun kurulmuş olması
gerekmektedir. Önceki bölümlerde bu işlemlerin nasıl yapıldığı anlatılmıştı.
Sonraki bölümde Flask’ın Microsoft Windows 10 işletim sistemi üzerinde
kurulumu anlatılacaktır.

Flask Kurulumu
Flask, Python 3.6 ve daha yeni bir sürümünü destekler. Flask, iki farklı
şekilde kurulabilir. İlk olarak, açık kaynak kodunun bulunduğu
https://github.com/flask-api/flask-api sitesinden indirilip el ile kurulum yapılabilir.
Bu metot yeni başlayanlar için uygun değildir. İkinci olarak, Tablo 12.5’de
gösterilen şekilde, komut satırında “pip” komutu kullanılarak kurulum yapmaktır.
Tablo 12.5. pip Komutu İle flask Kurulumu

Windows Komut Satırı


C:\> CD \Python\Python310\Scripts
C:\Python\Python310\Scripts>pip install flask
Collecting flask
Using cached Flask-2.0.2-py3-none-any.whl (95 kB)
Requirement already satisfied: Werkzeug>=2.0 in c:\Python\python310\lib\site-packages (from flask) (2.0.2)
Requirement already satisfied: click>=7.1.2 in c:\Python\python310\lib\site-packages (from flask) (8.0.3)
Requirement already satisfied: Jinja2>=3.0 in c:\Python\python310\lib\site-packages (from flask) (3.0.3)
Requirement already satisfied: itsdangerous>=2.0 in c:\Python\python310\lib\site-packages (from flask) (2.0.1)
Requirement already satisfied: colorama in c:\Python\python310\lib\site-packages (from click>=7.1.2->flask) (0.4.4)
Requirement already satisfied: MarkupSafe>=2.0 in c:\Python\python310\lib\site-packages (from Jinja2>=3.0->flask)
(2.0.1)
Installing collected packages: flask
Successfully installed flask-2.0.2

C:\Python\Python310\Scripts>
Kurulum başarı ile tamamlandığında bundan sonraki adım Internet
Information Services sunucusunda gerekli tanımlamaların yapılmasıdır. IIS
kurulduğunda Siteler başlığı altında Default Web Site otomatik olarak tanımlanır.
Bütün internet tarayıcıları bir web sitesini ziyaret ederken önce 80. protokol

Atatürk Üniversitesi Açıköğretim Fakültesi 11


275
Python ile Web Programlama

kanalına (80. Port) erişmek isterler. Bu nedenle bu kanal numarası erişilmek


istenen internet adresine yazılmaz. IIS’de, ön değer olarak 80. kanaldan yayın
yapacak şekilde tanımlanır. Bu aşamada Flask çerçevesini İnternet Information
Services’e tanımlamak için karşımıza üç seçenek çıkar:
 Mevcut tanım değiştirilmeden “Default Web Site” içine bir uygulama veya
sanal dizin eklenir. Bu durumda yayın kanalı değişmez. Bu seçenek
kullanılırsa Python dizinleri oluştururken herhangi bir çakışmaya imkân
vermemek için mevcut dizin yapılarına dikkat edilmesi gerekir.
 Mevcut tanım değiştirilmeden yeni bir Web Sitesi eklenir ancak yayın
kanalı 80. kanaldan farklı ve başka protokoller tarafından kullanılmayan bir
kanal seçilir (örneğin; 81, 8081 gibi).
 Mevcut tanım silinir, yerine 80. kanaldan yeni bir Python sitesi tanımlanır.

Önceki bölümde mevcut yapının altında yeni bir uygulama açmış ve tarayıcı
ekranına “Merhaba Dünya!” yazan bir Python program kodunu çalıştırmıştık.
Şimdi bu yapı üzerinden devam edelim.
py_root klasörü içindeki web.config dosyasını herhangi bir metin editörü ile
açıp, Tablo 12.6’da verilen şekle dönüştürelim. Bu tanımlamalar, Windows
WSGI (Web Server
Internet Information Services web sunucusunun Python program komutlarını
Gateway Interface),
tanıması ve çalıştırması için yapılmaktadır.
Web Sunucusu Ağ
Geçidi Arabirimi; web Tablo 12.6. Yeni web.config Dosyasının İçeriği
sunucularının Python XML Kodları
programlama dilinde 1. <?xml version="1.0" encoding="UTF-8"?>
yazılmış web
2. <configuration>
uygulamalarına ve
3. <system.webServer>
çerçevelerine istek
iletmesini sağlayan bir 4. <handlers>
çağrı kuralıdır. 5. <add name="Python FastCGI"
6. path="*"
7. verb="*"
8. modules="FastCgiModule"
scriptProcessor="C:\Python\Python310\python.exe|C:\Python\Python310\lib\si
te-packages\wfastcgi.py"
9. resourceType="Unspecified"
10. requireAccess="Script" />
11. </handlers>
12. </system.webServer>
13. <appSettings>
14. <add key="WSGI_HANDLER" value="merhaba_dunya.app" /> <!--
{name_of_file}.{name_of_flask_app}-->
15. <add key="PYTHONPATH" value="C:\Python\py_root" />
16. <add key="WSGI_LOG" value="C:\Python\py_root\app.log" />

Atatürk Üniversitesi Açıköğretim Fakültesi 12


276
Python ile Web Programlama

17. </appSettings>
18. </configuration>

Web sunucusu ile Python arasında, WSGI ve FastCGI kullanarak köprü


vazifesi gören wfastcgi eklentisinin kurmak için Tablo 12.8’de görüldüğü gibi,
Windows komut satırında pip komutu kullanılır.
Tablo 12.8. wfastcgi Eklentisinin Kurulumu

Windows Komut Satırı


C:\Python\Python310\Scripts>pip install wfastcgi
FastCGI; web
Collecting wfastcgi
uygulamalarında Using cached wfastcgi-3.0.0.tar.gz (14 kB)
hızlanma etkisi yapan Preparing metadata (setup.py) ... done
bir web sunucusu Using legacy 'setup.py install' for wfastcgi, since package 'wheel' is not installed.
eklentisidir. Installing collected packages: wfastcgi
Running setup.py install for wfastcgi ... done
Successfully installed wfastcgi-3.0.0

C:\Python\Python310\Scripts>
Kurulum tamamlandıktan sonra Tablo 12.9’daki gibi wfastcgi-enable
komutuyla aktif hale getirilmesi gerekir.
Tablo 12.9. wfastcgi-enable Komutunun Çalıştırılması

Windows Komut Satırı


C:\Python\Python310\Scripts>wfastcgi-enable
"MACHINE/WEBROOT/APPHOST" gönderme yolundaki "MACHINE/WEBROOT/APPHOST" için
"system.webServer/fastCgi" bölümünde yapılandırma değişiklikleri uygulandı
"C:\Python\Python310\python.exe|C:\Python\Python310\lib\site-packages\wfastcgi.py" can now be used as a
FastCGI script processor

C:\Python\Python310\Scripts>
Artık web sunucusu ile Python programlama dili arasında köprü
kurulduğuna göre bundan sonra Flask ile ilk uygulamamızı oluşturabiliriz.

Temel Uygulama Yapısı


Önceki bölümde açmış olduğumuz merhaba_dunya.py dosyasını Tablo
12.7’deki gibi değiştirelim.
Tablo 12.7. merhaba_dunya.py Dosyasının İçeriği

Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'IIS üzerinden Merhabalar!'
6. @app.route('/py/Merhaba')

Atatürk Üniversitesi Açıköğretim Fakültesi 13


277
Python ile Web Programlama

7. def dunyayi_selamla ():


8. return 'Yeni Dizin Yapisindan Merhaba Dünya!'
9. if __name__ == '__main__':
10. app.run()

Şimdi de oluşturduğumuz bu dosyanın içindeki satırların ne anlama geldiğini


Tablo 12.8’i kullanarak satır bazında inceleyelim:
Tablo 12.8. merhaba_dunya.py Dosyasının Satır Açıklamaları

1.Satır from flask import Flask Flask sınıfı programa dahil


ediliyor.
2.Satır app = Flask(__name__) Flask sınıfının yeni bir örneği
oluşturuluyor ve bu sınıfa isim
vermek için __name__
değişkeni atanıyor.
3. Satır @app.route('/py') route() dekaratörü ile hangi
web adresine yönlendirileceği
bildiriliyor (bu örnekte kök
adres “/py”).
4. Satır def index(): index() adında bir fonksiyon
tanımlanıyor.
5. Satır return 'IIS üzerinden Merhabalar!' Fonksiyondan bir metin
Python dekoratörleri;
döndürülüyor. Bu değerin
Başka bir fonksiyonu tarayıcıdaki içerik tipi
parametre olarak alan HTML’dir.
ve yeni bir fonksiyon 6.Satır @app.route('/py/Merhaba') Tarayıcıya kök adresinden
döndürebilen sonra “/Merhaba” eklenirse
fonksiyonlardır. hangi fonksiyonu çalıştıracağı
tanımlanıyor
7.Satır def dunyayi_selamla(): “dunyayi_selamla ()” adında
bir fonksiyon tanımlanıyor.
8. Satır return 'Yeni Dizin Yapisindan Fonksiyondan başka bir metin
Merhaba Dünya!' döndürülüyor.
9.Satır if __name__ == '__main__': Değer “true” olarak dönerse
localhost; o anda app.run() programın kendi kendine
10.Satır
kullanılan bilgisayarı çalıştırıldığı anlamına geliyor.
veya sahip olduğu
Bir internet tarayıcısı kullanarak http://localhost/py adresine erişim
internet adresini
sağlandığımızda dosya ismi merhaba_dunya ve uzantısı py olan dosyaya yani
belirtir. 127.0.0.1 IP
merhaba_dunya.py dosyasına yönlendiriliriz (web.config dosyasında
adresi, özel amaçlı bir
WSGI_HANDLER anahtar değerini merhaba_dunya.app yaptığımız için). İnternet
IPv4 adresidir ve
adresi olarak da, localhost/py olarak tanımlandığımız için bu adrese tanımlanmış
localhost veya loopback
olan index() fonksiyonunu çalıştırmış oluruz. Şekil 12.9’da görüldüğü gibi, bu
adresi olarak da
fonksiyondaki mesaj olan 'IIS üzerinden Merhabalar!' mesajı ekrana basıldı. Bu,
adlandırılır.
artık Flask çerçevesinin kullanılabilir durumda olduğunu göstermektedir.

Atatürk Üniversitesi Açıköğretim Fakültesi 14


278
Python ile Web Programlama

Şekil 12.9. Flask Çerçevesi İle İlk Program

http://localhost/py/Merhaba adresine erişim sağladığımızda ise,


merhaba_dunya.py dosyasındaki /py/Merhaba klasörüne tanımlanan
dunyayi_selamla() fonksiyonuna yönlendiriliriz. Şekil 12.10’da görüldüğü gibi o
satırdaki 'Yeni Dizin Yapısından Merhaba Dünya!' mesajı ekrana basılır.

Şekil 12.10. Flask Çerçevesi İle İlk Yönlendirme

Flask’ın program geliştirilirken kullanılan bazı önemli özelliklerinin


açıklanmasında fayda olacaktır.

escape() Dekoratörü
escape() dekoratörü, internet üzerinden olası bir saldırıdan korunmak diğer
bir deyişle kaçmak için kullanılır. Bir HTML döndüğünde kullanıcının gönderdiği
değerlerin kontrolü otomatik olarak Jinja tarafından yapılır. Eğer kullanıcı
Jinja, Python
tarafından gönderilen veri, escape() süzgecinden geçtikten sonra
programlama dili için
<script>alert(“bad”)</script> sonucunu döndürürse, program çalıştırılmaz onun
oluşturulmuş bir
yerine gelen değer ekrana metin olarak basılır.
tasarım motorudur.
Tablo 12.9. escape() Dekoratörünün Kullanımı

Python Komutları
1. from flask import Flask
2. from markupsafe import escape
3. app = Flask(__name__)
4. @app.route("/py/<adi>")
5. def selamla(adi):

Atatürk Üniversitesi Açıköğretim Fakültesi 15


279
Python ile Web Programlama

6. return f"Selamlar, {escape(adi)}!"

• py_root klasörü içindeki merhaba_dunya.py dosyasına, Tablo


Bireysel Etkinlik 12.9'daki Python program kodunu yazın (kopyala-yapıştır
yapmayınız).
• http://localhost/py/Guido adresini ziyaret edin. Tarayıcı ekranına
ne basıldığını inceleyin.
• http://localhost/py/Gui%do adresini ziyaret edin. Tarayıcı
ekranına basılan hata mesajını inceleyin.

route() Dekoratörü
Web uygulaması geliştirilirken kullanıcılara yardımcı olmak için anlamlı web
linkleri kullanılır. Kullanıcılar hatırlayabilecekleri bir adresi genellikle daha sık
ziyaret ederler. Python, bu sebeple bir işlevi belirli bir adrese yönlendirmek için
route() dekoratörünü kullanır.
Tablo 12.10. route() Dekoratörünün Kullanımı

Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'Ana Sayfa'
6. @app.route('/py/merhaba')
7. def hello():
8. return 'Merhaba Dünya!'
Bireysel Etkinlik

• py_root klasörü içindeki merhaba_dunya.py dosyasına, Tablo


12.10'daki Python program kodunu yazın (kopyala-yapıştır
yapmayınız).
• http://localhost/py adresini ziyaret edin. Tarayıcı ekranına ne
basıldığını inceleyin.
• http://localhost/py/merhaba adresini ziyaret edin. Tarayıcı
ekranındaki değişikliği inceleyin.

Atatürk Üniversitesi Açıköğretim Fakültesi 16


280
Python ile Web Programlama

Değişken Dönüştürme
Adresin dinamik hale Bir web adresine değişken isim atanarak o adresin dinamik hale gelmesi
gelmesi; kullanıcıya sağlanabilir. Bunu yapmak için değişken isimler küçüktür (<) ve büyüktür(>)
içerik alışverişi ve karakterleri arasına yazılır. Değişken, istenilen veri türüne çevrilebilir. Python
etkileşim imkânları programlama dilindeki dönüştürülebilir veri türleri ve açıklamaları şunlardır:
sunulmasıdır.  string: Bölüm (/) işareti olmayan her metni kabul eder
 int: Pozitif tam sayıları kabul eder.
 float: Pozitif ondalık sayıları kabul eder
 path: String ile aynı fakat Bölüm (/) karakterini de kabul eder.
 uuid: UUID string türünü kabul eder.

Aşağıda, Tablo 12.11’de verilen Python programı kullanılarak bazı veri türü
dönüşümlerine örnekler verilmiştir.
Tablo 12.11. Dinamik İsim Kullanımı

Python Komutları
1. from flask import Flask
2. from markupsafe import escape
3. app = Flask(__name__)
4.
5. @app.route('/py/kullanici/<kullanici_adi>')
6. def kullanici_profili_goster(kullanici_adi):
7. # Bu kullanici için profil göster
8. return f'Kullanıcı {escape(kullanici_adi)}'
9.
10. @app.route('/py/posta/<int:posta_no>')
11. def posta_goster(posta_no):
12 # posta_no tam sayi ise posta göster
13. return f'Posta {posta_no}'
14.
15. @app.route('/py/altyol/<path:altyol>')
16. def altyol_goster(altyol):
17. # /py/yol dan sonraki altyol’u göster
18. return f'Altyol {escape(altyol)}'

Tablo 12.11'de verilen Python program kodundaki /py/kullanici/ yoluna


<kullanici_adi> yerine herhangi bir isim eklediğinizde, kullanici_profili_goster
fonksiyonu çalışır.

Atatürk Üniversitesi Açıköğretim Fakültesi 17


281
Python ile Web Programlama

Örnek
•Tablo 12.11'de verilen Python program koduna internet
tarayıcısında http://localhost/py/kullanici/Guido van Rossum
Guido van Rossum, adresinden ulaşılırsa, profil_goster fonksiyonu çalışır ve ekrana
Python programlama aşağıdaki metni basar:
dilini geliştiren
Kullanıcı Guido van Rossum
yazılımcıdır.

Tablo 12.11'de verilen Python program kodundaki /py/posta/ yoluna


<int:posta_no> yerine herhangi bir posta numarası eklediğinizde, posta_goster
fonksiyonu çalışır.

Werkzeug; Python
programlama dilinde
oluşturulan URL'lerin
•Tablo 12.11'de verilen Python program koduna internet
Örnek

benzersiz olmasını tarayıcısında http://localhost/py/posta/06500 adresinden ulaşılırsa,


sağlayan bir WSGI web posta_goster fonksiyonu çalışır ve ekrana aşağıdaki metni basar:
uygulama
kütüphanesidir. Posta 6500

Tablo 12.11'de verilen Python program kodundaki /py/yol/ yoluna


<path:subpath> yerine herhangi bir alt yol eklediğinizde, altyol_goster fonksiyonu
çalışır.

•Tablo 12.11'de verilen Python program koduna, internet


Örnek

tarayıcısında http://localhost/py/altyol/Yenimahalle/ANKARA
adresinden ulaşılırsa, altyol_goster fonksiyonu çalışır ve ekrana
aşağıdaki metni basar (Yenimahalle'den sonra, / [bölüm] işaretinin
ekrana basıldığına dikkat ediniz).

Altyol Yenimahalle/ANKARA

Benzersiz URL’ler (Werkzeug)


Werkzeug, kapsamlı bir WSGI web uygulama kütüphanesidir. Werkzeug,
Python programlama dilinde oluşturulan URL'lerin benzersiz olmasını sağlar. Tablo
12.12’deki Python programında, merhaba_flask ve merhaba_python fonksiyonları
aynıymış gibi gözükse de aslında farklıdırlar. Adres olarak “/python” veya
“/python/” kullanmak aynı çıktıyı döndürür ancak “/flask” doğru çalışırken
“/flask/” 404 – Bulunamadı hatası ile sonuçlanır.
Tablo 12.12. Benzersiz URL Kullanımı

Atatürk Üniversitesi Açıköğretim Fakültesi 18


282
Python ile Web Programlama

Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3.
4. @app.route('/py/flask')
5. def merhaba_flask():
6. return 'Merhaba Flask'
7.
8. @app.route('/py/python/')
9. def merhaba_python():
10. return 'Merhaba Python'
11. if __name__ == '__main__':
12. app.run()

url_for() Dekoratörü
url_for() dekoratörü, özel fonksiyonlar için dinamik URL oluştururken
kullanılır. url_for dekoratörünün ilk parametresine özel fonksiyonun adı atanır.
Sonraki bir veya daha fazla parametreler ise, oluşturulan URL’nin diğer özelliklerini
tanımlamak için kullanılır.
Tablo 12.13. Dinamik İsim Kullanımı

Python Komutları
1. from flask import Flask, redirect, url_for
2. app = Flask(__name__)
3.
4. @app.route('/py/amir')
5. def merhaba_amir():
6. return 'Merhaba Amirim'
7.
8. @app.route('/py/misafir/<misafir>')
9. def merhaba_misafir(misafir):
10. return 'Misafir olarak hos geldin %s' % misafir
11.
12 @app.route('/py/kullanici/<adi>')
13. def merhaba_kullanici (adi):
14. if adi == 'amir':
15. return redirect(url_for('merhaba_amir'))

Atatürk Üniversitesi Açıköğretim Fakültesi 19


283
Python ile Web Programlama

16. else:
17. return redirect(url_for('merhaba_misafir',misafir = adi))
18.
19. if __name__ == '__main__':
20. app.run(debug = True)

Tablo 12.13’deki programdaki kullanici(adi) adında fonksiyon, kullanıcı


tarafından gerilen parametreye göre bir URL oluştur. Merhaba_kullanici()
fonksiyonu önce girilen değerin amir olup olmadığını kontrol eder. Eğer eşleşirse
merhaba_amir() fonksiyonunu çalıştırır, eşleşmezse merhaba_misafir()
fonksiyonunu çalıştırır.

• py_root klasörü içindeki merhaba_dunya.py dosyasına, Tablo


Bireysel Etkinlik

12.13'deki Python program kodunu yazın (kopyala-yapıştır


yapmayınız).
• http://localhost/py/kullanici/amir adresini ziyaret edin. Tarayıcı
URL, Uniform Resource
ekranına ne basıldığını inceleyin.
Loader, internet
• http://localhost/py/kullanici/Guido adresini ziyaret edin. Tarayıcı
tarayıcınızda bulunan, ekranına ne basıldığını inceleyin.
site adresinin belirtildiği • Her bir ziyaret için tarayıcının adres kısmındaki değişikliği
çubukta yer alan gözlemleyin.
bilgidir.

HTTP İletişim Metotları


HTTP protokolü World Wide Web’de veri iletişimi için kullanılır. Açılımı
Hypertext Transfer Protokol olan HTTP, bu iletişimi sağlarken farklı metotlar
kullanır. Bu metotlar şunlardır:
 GET metodu, verileri şifrelenmemiş bir şekilde sunucuya iletir. En yaygın
kullanılan metottur.
 HEAD metodu, GET ile aynıdır, farkı GET metodunun aksine hiçbir mesaj
başlığı döndürmez.
 POST metodu, sunucuya HTML form verisi göndermek için kullanılır. POST
HTTP ile belli bir oranda yöntemiyle alınan veriler sunucu tarafından önbelleğe alınmaz.
güvenli veri aktarımı  PUT metodu, hedef kaynağın tüm mevcut temsillerini yüklenen içerikle
sağlanmaktadır. değiştirir. Genellikle hedef sunucuya dosya göndermek için kullanılır.
Güvenliği arttırmak için  DELETE metodu, bir URL tarafından verilen hedef kaynağın tüm mevcut
Sertifikalı HTTP, yani temsillerini kaldırır.
HTTPS kullanılır.
Varsayılan olarak FLASK yönlendirmesi GET isteklerine yanıt verir. Ancak
route() dekoratörüne parametre verilerek değiştirilebilir.

Atatürk Üniversitesi Açıköğretim Fakültesi 20


284
Python ile Web Programlama

URL yönlendirirken POST metodunun kullanımını kavramak için Komut


satırında C:\Python\py_root\ klasörü içerisinde login.html adında bir HTML
dosyası oluşturalım. Bu dosyanın içine Şekil 12.14’deki HTML kodlarını yazalım.
Tablo 12.14. login.html Dosyası

Python Komutları
1. <html>
2. <body>
3. <form action = "http://localhost/py/login" method = "POST">
4. <p>Kullanıcı Adı:</p>
5. <p><input type = "text" name = "adi" /></p>
6. <p><input type = "submit" value = "Gönder" /></p>
7. </form>
8. </body>
9. </html>

Şimdi de, daha önce açmış olduğumuz ve WSGI_HANDLER olarak


tanımladığımız merhaba_dunya.py dosyasını açalım ve içindeki Python program
kodunu Tablo 12.15’deki kod ile değiştirelim.
Tablo 12.15. POST ve GET Kullanımı

Python Komutları
1. from flask import Flask, redirect, url_for, request
2. app = Flask(__name__)
3.
4. @app.route('/py/basarili/post/<adi>')
5. def success_post(adi):
6. return 'Merhaba (POST) %s' % adi
7.
8. @app.route('/py/basarili/get/<adi>')
9. def success_get(adi):
10. return 'Merhaba (GET) %s' % adi
11.
12 @app.route('/py/login',methods = ['POST','GET'])
13. def login():
14. if request.method == 'POST':
15. kullanici = request.form['adi']
16. return redirect(url_for('success_post', adi = kullanici))
17. else:

Atatürk Üniversitesi Açıköğretim Fakültesi 21


285
Python ile Web Programlama

18. kullanici = request.args.get('adi')


19 return redirect(url_for('success_get', adi = kullanici))
20.
21. if __name__ == '__main__':
21. app.run(debug = True)

C:\Python\py_root\login.html dosyasını Şekil 12.11’de görüldüğü gibi


herhangi bir internet tarayıcısı ile açıp metin alanına flask yazalım. Gönder
düğmesini tıkladığımızda sonuç Şekil 12.12’deki gibi olur.

GET, belirli bir Şekil 12.11. POST ve GET Kullanımı Örneği


kaynaktan veri istemek
için, POST ise, bir
kaynağı
oluşturmak/güncelleme
k amacıyla bir sunucuya
veri göndermek için Şekil 12.12. POST ve GET Kullanımı örneği Sonuç Ekranı
kullanılır.
http://localhost/login adresi, login() fonksiyonuna yönlendirildiğinden ve
adi olarak tanımlanan form nesnesi, login.html dosyasında metot POST olarak
tanımlandığından; veriyi, kullanici = request.form[‘adi’] durumuna göre alır.

• py_root klasöründeki login.html dosyasında POST metodunu GET


Bireysel Etkinlik

yapın.
• C:\Python\py_root\login.html sayfasını herhangi bir internet
tarayıcısıyla açın.
• Kullanıcı Adı alanına flask yazın ve Gönder butonunu tıklayın.
• Gelen sonuç ekranında hangi metodun çalıştığını gözlemleyin.

Şablonlar (Templates)
Belirli bir URL'ye bağlı bir fonksiyonun çıktısını, HTML biçimine döndürmek
mümkündür. Örneğin, Şekil 12.16‘da merhaba () fonksiyonu ekrana <h1> etiketi

Atatürk Üniversitesi Açıköğretim Fakültesi 22


286
Python ile Web Programlama

formatında Merhaba Dünya yazdırır. Bununla birlikte, Python kodundan HTML


içeriği oluşturmak; özellikle değişken veriler ve koşul veya döngüler gibi Python dili
öğelerinin konulması gerektiğinde çok zahmetlidir. Bu, HTML'den sık sık kaçmayı
gerektirir. Böyle durumlarda Flask’ın temel olarak aldığı Jinja2 şablon motoru
kullanılır. Fonksiyon içerisine sabit HTML kodu yazmak yerine, render_template()
fonksiyonu ile dışarıda oluşturulmuş bir HTML dosyası kullanılabilir.
Tablo 12.16. HTML Etiketi

Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3.
4. @app.route('/py')
5. def selam_soyle():
6. return '<html><body><h1>Merhaba Dünya</h1></body></html>'
7.
8. if __name__ == '__main__':
9. app.run(debug = True)

Dışarıdaki bir HTML dosyasını kullanmak için önce C:\Python\py_root


klasörünün içinde templates klasörü oluşturalım. Sonra, boş bir HTML dosyası
açalım ve içine Şekil 12.17’deki kodu yazıp merhaba.html olarak oluşturduğumuz
templates klasörünün içine kaydedelim. render_template() fonksiyonu, varsayılan
olarak kök klasörünün içindeki templates klasörünü taradığı için dâhil edeceğimiz
HTML dosyalarının bu klasör içinde barındırılması gerekmektedir.
Flask, öndeğer olarak
Tablo 12.17. merhaba.html Şablon(Template) Dosyası
uygulama klasörü
içindeki templates adlı Python Komutları
alt dizindeki şablonları 1. <!doctype html>
arar. 2. <html>
3. <body>
4.
5. <h1>Merhaba {{ isim }}!</h1>
6.
7. </body>
8. </html>

Web Şablon Sistemi, değişken verinin dinamik olarak kullanılabileceği bir


HTML kodunun oluşturulması demektir. Web Şablon Sistemi’nde şablon motoru,
veri kaynağı ve şablon işleyici bulunur. Flask; Jinja2 şablon motorunu kullanır.

Atatürk Üniversitesi Açıköğretim Fakültesi 23


287
Python ile Web Programlama

Tablo 12.18. render_template() Fonksiyonu Kullanımı

Python Komutları
1. from flask import Flask, render_template
2. app = Flask(__name__)
3.
4. @app.route('/py/merhaba/<adi>')
5. def selam_soyle(adi):
6. return render_template('merhaba.html', isim = adi)
7.
8. if __name__ == '__main__':
9. app.run(debug = True)

http://localhost/py/merhaba/Guido adresi ziyaret edildiğinde, Python


program kodu renter_template() fonksiyonu aracılığıyla merhaba.html dosyasını
programa dâhil etti ve sayfa içindeki değişken olan {{ adi }} değerinin yerine
dinamik olarak adres de belirtilen Guido ismini atadı.

Şablonlar, statik HTML


sayfalarının yanı sıra
dinamik HTML sayfaları
için de yer tutan
dosyalardır.

Şekil 12.13. Python’da Şablon Kullanım Örneği Sonuç Ekranı

Atatürk Üniversitesi Açıköğretim Fakültesi 24


288
Python ile Web Programlama

•PYTHON İLE WEB PROGRAMLAMA


•Python sunucu taraflı çalışan bir programlama dilidir ve Python ile bir web
uygulaması oluşturmak için bu dilin yanı sıra HTML (Hypertext Markup
Language, Hiper Metin İşaretleme Dili), CSS (Cascading Style Sheets,
Basamaklı Stil Şablonları) ve JavaScript gibi bütün tarayıcıların desteklediği ve
istemci tarafında çalıştırılabilir olan dilleri de bilmek gerekir.
Özet
•PYTHON VE WEB
•Web üzerinde çalışan bir Python uygulaması geliştirmek için güncel işletim
sistemi olan ve Python programlama dilinin yüklü olduğu bir bilgisayar,
metin editörü, web servisi ve web çerçevesine ihtiyaç vardır.
•PYTHON VE IIS
•Windows işletim sisteminin bir uygulaması olan Internet Information
Services'de Python uygulamasının çalışabilmesi için bazı ayarların yapılması
gerekir. py dosya uzantısının tanıtılması, CGI desteğinin yüklenmesi, kök dizin
ve sanal uygulama oluşturulması bunlardan bazılarıdır.
•PYTHON İLE İLK UYGULAMA
•Python programlama dilinde print komutu tırnak içinde yazılan metnin
ekrana basılmasını sağlar. merhaba_dunya.py adında bir dosya oluşturup bu
dosyanın içine print("Merhaba Dünya!") yazıp bunu internet tarayıcımızda
görüntülediğimizde Python ile ilk uygulamamız yazılmış olacaktır.
•PYTHON VE FLASK
•Python programlama dili ile web üzerinde uygulama yapmak için genellikle
çerçeve yapı kullanılır. Çerçeve yapı; herhangi bir programlama dilinde
üzerine program yazabileceğiniz hazır yapılar olarak tanımlanabilir.
•Flask Nedir?
•Flask, Python programlama dili ile yazılmış ücretsiz ve açık kaynak kodlu bir
web uygulama mikro çerçeve yapılı yazılımdır. Mikro çerçeve olarak
tanımlanmasının sebebi, özel araçlara veya program kütüphanelerine ihtiyaç
duymamasındandır.
•Flask Kurulumu
•Flask, iki farklı şekilde kurulabilir. Birincisi açık kaynak kodu indirip el ile
kurulum yapmaktır. İkincisi pip komutu kullanarak kurulum yapmaktır. Web
sunucusu ile Python arasında, WSGI ve FastCGI kullanarak köprü vazifesi
gören wfastcgi eklentisinin de kurulması gerekir.
•escape() Dekoratörü
•escape() dekoratörü, internet üzerinden olası bir saldırıdan korunmak diğer
bir deyişle kaçmak için kullanılır.
•route() Dekoratörü
•Python, bir işlevi belirli bir adrese yönlendirmek için route() dekoratörünü
kullanır.
•Değişken Dönüştürme
•Python programlama dilindeki dönüştürülebilir veri türleri; string, int, float,
path ve uuid'dir.
•Benzersiz URL'ler
•Werkzeug kütüphanesi, Python programlama dilinde oluşturulan URL'lerin
benzersiz olmasını sağlar
•Şablonlar (Templates)
•Belirli bir URL'ye bağlı bir fonksiyonun çıktısını, HTML biçimine döndürmek
mümkündür.Fonksiyon içerisine sabit HTML kodu yazmak yerine,
render_template() fonksiyonu ile dışarıda oluşturulmuş bir HTML dosyası
kullanılabilir.

Atatürk Üniversitesi Açıköğretim Fakültesi 25


289
Python ile Web Programlama

DEĞERLENDİRME SORULARI
“Web programlamada belirli araçlar veya kütüphaneler gerektirmeyen
hazır yapılardır.”
1. Yukarıda tanımı yapılan kavram aşağıdakilerden hangisidir?
a) Uzantı
b) WSGI
c) Mikro çerçeve
d) Sanal web klasörü
e) FastCGI

2. Web üzerinde çalışan bir Python uygulaması geliştirmek için


aşağıdakilerden hangisi gerekli değildir?
a) Python programlama dilinin en son sürümünün kurulu olduğu bir
bilgisayar.
b) Program kodlarının yazılabileceği tümleşik yazılım geliştirme ortamı
c) Web servisi
d) Web çerçevesi
e) İnternet bağlantısı

3. Aşağıdakilerden hangisi Python programlama dili için yazılmış bir çerçeve


yapısı değildir?
a) Flask
b) Laravel
c) Django
d) Tornado
e) Bottle

4. Aşağıdaki Python komutlarından hangisi hatasız çalışır?


a) Print ("\Merhaba Dünya\")
b) print ("\Merhaba Dünya"\)
c) print ("Merhaba Dünya\")
d) print ("\Merhaba Dünya")
e) print (Merhaba Dünya)

5. Aşağıdakilerden hangisi çerçeve yapıların sağladığı avantajlardan biri


değildir?
a) Derleme süresini minimuma indirir.
b) Daha basit test etme ve hata ayıklama imkânı verir.
c) Her şeyi sıfırdan yazmak gerekmez, bu nedenle hata yapma riski
azalır.
d) Açık ve kolay uyarlanabilir bir yapısı vardır.
e) İstenirse ekleme yapılıp genişletilebilir.

Atatürk Üniversitesi Açıköğretim Fakültesi 26


290
Python ile Web Programlama

6. Flask çerçevesini kullanabilmek için aşağıdakilerden hangisi gerekli


değildir?
a) pip komutu ile kurulum yapılması.
b) Python programının bilgisayara yüklenmiş olması.
c) Python kodunun içine “from flask import Flask” satırının en başa
eklenmesi.
d) Flask eklentisinin bilgisayarın işletim sistemine tanıtılmış olması.
e) Python program yolunun işletim sisteminde tanıtılmış olması.

Tablo 12.19. 7.Soru İçin Python Program Kodu

Python Komutları
1. from flask import Flask
2. app = Flask(__name__)
3. @app.route('/py')
4. def index():
5. return 'IIS üzerinden Merhabalar!'
6. @app.route('/py/Merhaba')
7. def merhaba_dunya():
8. return 'Yeni Dizin Yapısından Merhaba Dünya!'
9. if __name__ == '__main__':
10. app.run()

7. Tablo 12.19’da verilen Python programı, yerel bir bilgisayarda çalışan


Internet Information Services web sunucusuna ait sanal py klasöründe
oluşturulmuştur. İnternet tarayıcısından http://localhost/py/ adresine
gidildiğinde ekrana aşağıdakilerden hangisi basılır?
a) 'Yeni Dizin Yapısından Merhaba Dünya!'
b) Yeni Dizin Yapısından Merhaba Dünya!
c) 'IIS üzerinden Merhabalar!'
d) IIS üzerinden Merhabalar!
e) Not Found (Dosya Bulunamadı.)

8. Aşağıdakilerden hangisi Flask çerçevesinde bulunan ve fonksiyon içerisine


sabit HTML kodu yazmak yerine dışarıda oluşturulmuş bir HTML dosyası
kullanılmasını sağlayan fonksiyondur?
a) render_template()
b) url_for()
c) route()
d) escape()
e) add_url_rule()

Atatürk Üniversitesi Açıköğretim Fakültesi 27


291
Python ile Web Programlama

9. Aşağıdakilerden hangisi HTTP (Hypertext Transfer Protocol) tarafından


veri iletişiminde kullanılan metotlardan biri değildir?
a) GET
b) PUT
c) SELECT
d) POST
e) HEAD

I. İnternet tarayıcıları Python programlama dilini direk çalıştıramaz.


II. Python sunucu taraflı çalışan bir programlama dilidir.
III. Python uygulaması geliştirmek için bir web servisi (Apache, IIS vb.)
şarttır.
10. Yukarıda Python programlama dili ile ilgili verilen bilgilerden hangisi veya
hangileri doğru ifadelerdir?
a) Yalnız I
b) I, II
c) Yalnız II
d) I,III
e) II, III

Cevap Anahtarı
1.c, 2.e, 3.b, 4.d, 5.a, 6.d, 7.e, 8.a, 9.c, 10.b

Atatürk Üniversitesi Açıköğretim Fakültesi 28


292
Python ile Web Programlama

YARARLANILAN KAYNAKLAR
Dosya Uzantısı 31.01.2022 tarihinde
https://tr.wikipedia.org/wiki/Dosya_uzant%C4%B1s%C4%B1 adresinden
erişildi.
FastCGI nedir? Avantaj ve Dezavantajları, 31.01.2022 tarihinde
https://www.sordum.net/12613/fastcgi-nedir-avantaj-ve-dezavantajlari/
adresinden erişildi.
LEARN FLASK web application framework 15.12.2021 tarihinde
https://www.tutorialspoint.com/flask/index.htm adresinden erişildi.
PYTHON 15.12.2021 tarihinde https://python.org adresinden erişildi.
Sunucu tarafı programlama nedir? 31.01.2022 tarihinde
https://www.codeturkiye.com/sunucu-tarafi-programlama-nedir/
adresinden erişildi.

Atatürk Üniversitesi Açıköğretim Fakültesi 29


293
WEB SERVİSLERİ

• Giriş
• Web Servisleri Nasıl Çalışır?
İÇİNDEKİLER

• Web Servis Türleri İNTERNET


• SOAP
• REST PROGRAMCILIĞI II
• UDDI Dr. Öğr. Üyesi Adem
TEKEREK

• Bu üniteyi çalıştıktan sonra;


• Web servislerini ve nasıl
HEDEFLER

çalıştığını anlayabilecek,
• Web servis çeşitlerini ve
avantajlarını öğrenebilecek,
• Yazılım ve XML arasında veri
iletişimini kavrayabilecek,
• SOAP, REST, UDDI protokollerini
öğrenebileceksiniz.

ÜNİTE

13
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Web Servisleri

Giriş
Web Servisleri

Web Servisleri Nasıl


Çalışır
SOAP

Web Servisi Türleri REST

UDDI

295
Atatürk Üniversitesi Açıköğretim Fakültesi 2
Web Servisleri

GİRİŞ
Web servisler, HTTP (Hypertext Transfer Protocol) kullanarak hizmet
sağlayan yapıların bütününe verilen isimdir. Web servisler, istemci bilgisayar
(client) tarafından gönderilen istekleri (request) yorumlayarak gönderilen isteğe
göre istemciye yapısından bulundurduğu bilgileri aktarmaktadır. Web servisleri,
istemci - sunucu arasındaki veya sunucu - sunucu arasındaki iletişimi sağlamak için
standart bir veri alış verişi yapısıdır ve belirli bir görevi gerçekleştirmek için
tasarlanmış bir yazılım modülüdür. Web servisi farklı sunucu sistemlerinde koşan
uygulamaların birbirleri arasında veri paylaşımı gerçekleştirmek için kullanılan
Web Servis Avantajları; teknolojidir. Özellikle bulut bilişim teknolojilerinin yaygın olarak kullanılmaya
Haberleşen cihazlar, başlanması ile web servislerin de kullanım oranları artmıştır. Web servislerin
uygulamalar kullanılabilmesini sağlayan yapıya API (Application Programming Interface) denir.
birbirlerinden bağımsız Diğer ifade ile bir A uygulamasının, belli yetki kısıtları dâhilinde, B uygulaması
olsalar da iletişim
tarafından da kullanılması için API adı verilen yapılar kullanılır. Web servislerin
halindedirler.
kullanımı için TCP (Transmission Control Protocol) ve HTTP ‘nin çalışma yapısını
Platform bağımsızdır.
UNIX sistemindeki bir bilmek gerekmektedir.
uygulama .NET ile TCP, IP internet protokollerinden biridir. Bilgisayarlar arasında veri aktarımı
geliştirilmiş bir
yapılmasını sağlamak amacıyla yazılmış bir protokoldür. TCP’nin çalışması 3
uygulama ile kolaylıkla
iletişim kurabilir. adımda özetlenebilir:
Uygulamaların • Hedef ile bir bağlantı gerçekleştir.
fonksiyonları kullanıma • Veri paketini gerçekleştirilen bağlantı üzerinden transfer et.
açılabilir.
• Verinin transferi tamamlanınca bağlantıyı sonlandır.
Güvenli, pratik ve
esnektir. TCP ile çalışan HTTP, HTTPS, SMTP ve FTP gibi birçok protokol vardır. Web
servisleri de HTTP üzerinden çalışmaktadır. HTTP internet üzerinde kullanılan en
temel iletişim protokolüdür. Web sayfalarının görüntülenmesi HTTP sayesinde
gerçekleşir. İstemciler genellikle web tarayıcılar aracılığıyla sunucuya istek
gönderirler. Sunucu aldığı isteğe web sunucu programları aracılığıyla bir cevap
verirler. İstemcinin sunucuya gönderdiği istek (request) dört başlıktan oluşur.
1. Request Method: GET, POST, HEAD, PUT, DELETE, TRACE.
2. URL: Sunucudan talep edilen web sayfası veya servisin adresi.
3. Protokol: HTTP 1.1, HTTP 1.2 gibi
4. Host bilgisi: İstekte bulunulan sunucunun IP adresi veya alan adı (domain)
İstemci sunucuya kendisiyle ilgili bilgi de göndermek isteyebilir. Bu durumda
başlık (HEADER) alanı kullanılır. Örneğin; yetki gerektiren bir sayfaya girerken
başlık alanında kullanıcı adı ve kullanıcı şifresi veya yetkilendirme bilgileri
gönderilebilir. Başlığa gönderilen veriler anahtar-değer (key-value) eşleştirmesi
şeklindedir.
Sunucunun istemciye gönderdiği cevabın (response) yapısı da aşağıdaki
gibidir.
 Protokol bilgisi (HTTP 1.1, HTTP 1.2 gibi)
 Yanıtın statüsüyle ilgili bilgi içeren bir sayı (1xx, 2xx, 3xx, 4xx…)
 Cevap içeriği ve cevaba dair diğer bilgiler gönderilebilir

296
Atatürk Üniversitesi Açıköğretim Fakültesi 3
Web Servisleri

Web servisler, istemci bilgisayar (client) tarafından gönderilen istekleri


(request) yorumlayarak gönderilen isteğe göre istemciye yapısında bulundurduğu
bilgileri aktarmaktadır. Web servis modelleri üç ana birimin etkileşimine dayanır.
 Servis Sağlayıcı (Service Provider), istemcilerin sağlayıcıda bulunan
servislere erişimini sağlar. Servis sağlayıcı kendi sitesinde bulunan web
servisleri tanımını servis kayıt birimine (service registry) kaydederek bu
servisin nasıl çağrılacağını belirtir.
 Servis İstemcisi (Service Requester) servis sağlayıcısında bulunan web
servislerini çağırarak kullanan istemci uygulamalardır. Web servisinin nasıl
çağrılacağı ve ilgili parametreleri servis kayıt biriminden arayarak bulur ve
çağırır.
 Servis Kayıt Birimi servis sağlayıcılarının yayınladıkları web servisi
tanımlarını saklar ve aranıp bulunmasını sağlar. Servis sağlayıcıları servis
kayıt birimini tarayarak istediği servislere hakkında bilgi alabilir. Servis
kayıt birimi her servisin nasıl çağırılacağı konusunda tanım bilgileri içerir.

WEB SERVİSLERİ NASIL ÇALIŞIR?


Web servislerin çalışma yöntemi Şekil 1’de gösterildiği gibi oldukça basit bir
yapıya sahiptir. İstemci, gerçek web servisini barındıracak bir sunucuya istekler
aracılığıyla bir dizi web servisi çağrısı başlatır.

Sunucunun İstemciye Cevabı

İstemci
İnternet Sunucu
İstencinin Sunucudan Web Sayfası Talebi
Şekil 13.1. Web Servilerin Çalışma Şeması
Web servisleri istekleri, Uzaktan Yordam Çağrıları (Remote Procedure Call)
olarak bilinen yöntemlerle gerçekleştirilir. Uzaktan Yordam Çağrıları, ilgili web
servisinin barındırdığı yöntemlere yapılan çağrılardır. Örnek olarak, Nüfus ve
Vatandaşlık İşleri Genel Müdürlüğü (NVİ), gerçek kişilerin kimliklerinin
doğrulanması için diğer kurum ve kuruluşlara web servis hizmeti sağlar. Bu hizmet
sayesinde insanların gerçek kimlik doğrulama işlemleri gerçekleştirilir. Web servis
güvenliğini sağlamak için bilgi güvenliği standartları olan gizlilik, bütünlük,
kullanılabilirlik, kimlik doğrulama ve girdi doğrulama özelliklerinin sağlanması
gereklidir.
Günümüzde yaygın olarak kullanılan .Net, Java veya PHP gibi programlama
dilleri ön uç veya sunum katmanı dahil olmak üzere, web servisi ile iletişim kurma

297
Atatürk Üniversitesi Açıköğretim Fakültesi 4
Web Servisleri

yeteneğine sahiptir. Bir web servis tasarımının ana bileşeni, istemci ve sunucu
arasında oluşturulan iletişimdir. Web servislerinin iletişim dili XML'dir. XML
(Genişletilebilir Biçimlendirme Dili), HTML gibi betik dildir ve birçok programlama
dilleri tarafından da okunabilmektedir. Aslında uygulamalar birbirleriyle
konuşurken XML betik dilini kullanırlar, XML dili ile iletişim kurarlar. Bu, çeşitli
programlama dillerinde geliştirilen uygulamaların birbirleriyle konuşması için ortak
bir platform sağlar.
Web servisleri, uygulamalar arasında XML verilerini göndermek için SOAP
(Simple Object Access Protocol) mimarisini kullanırlar. Veriler normal HTTP
üzerinden gönderilir. Web servisinden uygulamaya gönderilen verilere SOAP
mesajı denir. SOAP mesajı bir XML dokümanıdır. Doküman XML ile yazıldığı için
web servisini çağıran istemci uygulaması herhangi bir programlama dilinde
yazılabilir.
Web tabanlı uygulamaları geliştirmek için çeşitli programlama platformları
kullanılır. Bazı uygulamalar Java, .Net, Angular JS veya Node.js ile geliştirilebilir. Bu
heterojen uygulamaların aralarında bir tür iletişime ihtiyaç vardır. Farklı yazılım
geliştirme dilleri kullanılarak oluşturulan bu uygulamalar arasında doğru iletişimi
Web Servis sağlamak ve veri transferini gerçekleştirmek zor olabilmektedir. Web servisleri
Platformlarında
farklı platformlar arasındaki iletişimi gerçekleştirmek için, programlama dilleri
Kullanılan Diğer
Standartlar üzerine kurulmuş birden fazla uygulamanın birbirleriyle iletişim kurma yeteneğine
DISCO, sunucuda sahip olmasını sağlayan ortak bir platform sağlar.
erişilebilir olan tüm Web Servisleri, web üzerinden HTTP ile hizmet veren program parçalarıdır.
web servislerinin
Bir kullanıcının HTTP üzerinden bir web servisi kullanmasına RPC (Remote
organizasyonunu
sağlar. Procedure Call) denir. HTTP üzerinden yapılan bu çağrımlara karşı SOAP XML
UDDI, web servisi çıktıları üretir.
bilgilerini tanımlama,
Veri transferi bu XML çıktıları ile yapıldığı için platform bağımsız bir yapısı
yayınlama ve bulma
vardır. Yani web servisi kullanmak istediğiniz program parçasının hangi dilde
işlemlerini tanımlayan
bir standarttır. yazıldığının pek bir önemi yoktur. Çünkü Web servisten alınan veri tipi XML'dir.
Bundan dolayı C# ile yazılmış bir Web Servis Java tarafından Java ile yazılan bir
Web Servis .Net teknolojileri tarafından kolayca kullanılabilir. Bu yazılımların
çalıştıkları platformların da pek önemi yoktur Unix üzerinde çalışan bir
uygulamayla Windows üzerinde çalışan bir uygulama aynı Web Servisi sorunsuzca
kullanabilirler.
Bir web servisten veri okuyup, veri almak istendiğinde bilgisayarda veri
transferinin gerçekleşmesi için bir port açılır ve bu porttan veri okunup, veri
gönderilir.

298
Atatürk Üniversitesi Açıköğretim Fakültesi 5
Web Servisleri

•Web servis genellikle farklı platformlar arasında belirlenen ortak bir biçim ile

Örnek
veri alışverişi yapmak için kullanılır. Örneğin; Çok kullanıcılı olan bir firmada
X diliyle geliştirilen muhasebe, varlık yönetimi vb. uygulama, kullanıcıların
isteği üzerine Y işletim sistemli cep telefonları üzerinden de kullanılmak
istenebilir. Platformların birbirleriyle iletişim kurabilmesi için ortak bir biçimi
kullanması gerekir. Bu durumda platformlar arası ortak bir biçimi kullanan
web servis yazılarak iletişim sağlanır.

WEB SERVİS TÜRLERİ


Temel olarak üç tür web servisi vardır. Bunlar SOAP, REST ve UDDI web
servisleridir. Web servisleri bazı bileşenlere sahiptir. Web servisi geliştirmek için
kullanılan programlama dilleri bu bileşenlerden biridir. Web servis türleri aşağıda
detaylı olarak anlatılmıştır.

SOAP
SOAP, HTTP üzerinden web hizmetlerine erişerek veri alış verişi yapan, XML
tabanlı bir protokoldür. Bütün uygulamalarda kullanılabilecek özelliklere sahiptir.
Başka bir deyişle SOAP, web servislerinin birbirleriyle nasıl konuştuğunun veya
onları çağıran istemci uygulamalarıyla nasıl iletişim kurulacağının bir tanımıdır.
SOAP, çeşitli programlama dilleri üzerine kurulu uygulamaların birbirleriyle
konuşabilen bir ara dil olarak geliştirilmiştir. Java, .Net veya PHP gibi farklı
programlama dilleri ile geliştirilmiş çok sayıda uygulama bulunmaktadır.
SOAP, HTTP üzerinden Uygulamalar arasında veri iletişimi, internet ortamında çok önemlidir. Ancak bu
web hizmetlerine heterojen uygulamalar arasındaki veri iletişimi çok karmaşıktır. Bu veri alışverişini
erişerek veri alış verişi gerçekleştirmek için geliştirilen yazılımlar da karmaşıktır. Bu karmaşıklıkla
yapan, XML tabanlı bir mücadele etmek için kullanılan yöntemlerden biri, uygulamalar arasında veri
protokoldür.
alışverişi için ara dil olarak XML kullanmaktır. Her programlama dili, XML
biçimlendirme dilini anlayabilir. Bu nedenle, veri alışverişi için temel ortam olarak
XML kullanılır. Ancak, veri alışverişi için tüm programlama dillerinde XML
kullanımına ilişkin standart bir belirtim yoktur. Bu standardı oluşturmak için SOAP
kullanılmaktadır. SOAP, HTTP üzerinden XML ile çalışmak üzere tasarlanmış ve
tüm uygulamalarda kullanılabilecek bir tür tanımlamalara sahiptir. SOAP, XML
verilerinin SOAP mesajları olarak aktarılmasına dayanan bağımsız bir mesajlaşma
protokolüdür. Her mesajın XML belgesi olarak bilinen bir özelliği vardır. XML
belgesinin yapısı belirli bir yapıya sahiptir ama içeriği farklıdır. Web servisleri ve
SOAP, standart web protokolü olan HTTP aracılığıyla gönderilir.
SOAP mesajının içeriği; SOAP belgesi <Zarf> öğesi olarak bilinen bir kök
öğeye sahiptir. Bu kök öğe, XML belgesindeki ilk öğedir. <Zarf> sırayla 2 bölüme
ayrılır, birinci bölüm başlık, ikinci bölüm ise gövdedir. Başlık, temel olarak XML
belgesine hangi istemciye gönderilmesi gerektiğini belirten yönlendirme verilerini
içerir. Gövde gerçek mesajı içerir. Şekil 2’de, SOAP aracılığıyla oluşturulan
iletişimin bir örneği verilmiştir.

299
Atatürk Üniversitesi Açıköğretim Fakültesi 6
Web Servisleri

<GetTutorialInfo>
</GetTutorialInfo>

İstemci
<Tutorialınfo>
<name>Web Servis</name> Sunucu
</Tutorialınfo>
Şekil 13.2. SOAP iletişimi
Web servisini çağıran istemci, web servisinin gerçekte nerede olduğunu
bilmelidir. Çünkü bir web servisi bulunamazsa kullanılamaz. İstemci uygulamasının
doğru web servisini çağırabilmesi için web servisinin gerçekte ne yaptığının
bilinmesi gerekir. Bu, Web hizmetleri açıklama dili olarak bilinen WSDL (Web
Services Description Language) kullanılarak yapılır. WSDL dosyası, temelde istemci
SOAP web standardı uygulamasına web servisinin ne iş yaptığını belirten XML tabanlı bir dosyadır.
olan W3C WSDL belgesini kullanarak, istemci uygulaması web servisinin nerede olduğunu ve
konsorsiyumu nasıl kullanılabileceğini anlayabilir. Ayrıca XML dönüşümü için XSL (Genişletilebilir
tarafından da tavsiye Stil Dili) kullanılmaktadır. XSLT (Genişletilebilir Stil Sayfası Dil Dönüşümü), XML
edilmektedir. belgelerini diğer XML belgelerine, metin belgelerine veya HTML belgelerine
dönüştürmek için kullanılan bir dildir. Aşağıda XLST örneği verilmiştir.

•<xsl:for-each select="catalog/cd">
Örnek

<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>

SOAP tabanlı web servisler geliştirilirken, istemci uygulamaları ile konuşmak


için web servisleri için kullanılabilecek bir dile sahip olmak gereklidir. SOAP web
standardı olan W3C konsorsiyumu tarafından da tavsiye edilmektedir. SOAP,
uygulamalar arasında veri alışverişi için kullanılan oldukça basit bir protokoldür.
SOAP programlama, veri transfer dili olan XML diline dayandığı için SOAP da aynı
kategoriye giren bir protokoldür.
SOAP, platformdan ve işletim sisteminden bağımsız olacak şekilde
tasarlanmıştır. SOAP, hem Windows hem de Linux platformunda herhangi bir

300
Atatürk Üniversitesi Açıköğretim Fakültesi 7
Web Servisleri

programlama dili ile geliştirilmiş bir uygulamayı çalıştırabilir. HTTP üzerinde çalışan
SOAP, tüm web uygulamaları tarafından kullanılan varsayılan bir protokol olan
HTTP ile çalışır. Bu nedenle, WWW (World Wide Web) üzerinde çalışmak üzere
WWW üzerinde çalışan SOAP üzerine kurulu web servislerini çalıştırmak için gerekli herhangi bir
web servisler için özelleştirmeye gerek yoktur. Şekil 3’te SOAP mimari şeması verilmiştir.
herhangi bir
özelleştirmeye gerek
yoktur. SOAP ZARF
SOAP BAŞLIK
BAŞLIK BLOK

BAŞLIK BLOK

SOAP BAŞLIK
MESAJ BLOK

Şekil 13.3. SOAP Mesaj Yapısı


SOAP mesajı, aşağıdaki bileşenlere sahip bir XML belgesidir.
 XML belgesini bir SOAP mesajı olarak tanımlayan bir Zarf öğesi: SOAP
mesajını içeren kısmıdır ve SOAP mesajındaki kök öğe tüm ayrıntıları
kapsüllemek için kullanılır.
 Başlık bilgilerini içeren Başlık öğesi: Başlık öğesini, çağıran uygulama
tarafından kullanılabilecek kimlik doğrulama bilgileri gibi bilgileri ve ayrıca
SOAP mesajında kullanılabilecek karmaşık tiplerin tanımını da içerebilir.
Varsayılan olarak, SOAP mesajı, dizeler ve sayılar gibi basit türleri veya
karmaşık bir nesne türü olabilen parametreleri de içerebilir.
Karmaşık (Complex) türden bir SOAP servisi örneği aşağıda verilmiştir.
“Tutorial Name” ve “Tutorial Description” kombinasyonuna sahip yapılandırılmış
bir veri türü göndermek istenirse, karmaşık türü aşağıda gösterildiği gibi
tanımlanır.
Karmaşık tür, <xsd:complexType> öğe etiketiyle tanımlanır. Yapının gerekli
tüm öğeleri, ilgili veri türleri ile birlikte karmaşık tür koleksiyonunda tanımlanır.

301
Atatürk Üniversitesi Açıköğretim Fakültesi 8
Web Servisleri

•<xsd:complexType>

Örnek
•<xsd:sequence>
•<xsd:element name="Tutorial Name" type="string"/>
•<xsd:element name="Tutorial Description" type="string"/>
•</xsd:sequence>
•</xsd:complexType>

Çağrı ve cevap bilgilerini içeren Body öğesi, web servisi ile uygulama
arasında gönderilmesi gereken bilgileri içerir. Aşağıda, başlık bölümünde
tanımlanan karmaşık tür üzerinde çalışan SOAP web servisi örneği verilmiştir. Web
servisini çağıran uygulamaya gönderilen TutorialName ve TutorialDescription
yanıtı yer almaktadır.

•<soap:Body>
• <GetTutorialInfo>
Örnek

•<TutorialName>Web Servisleri</TutorialName>
•<TutorialDescription>Web Servis İle İlgili
Herşey</TutorialDescription>
• </GetTutorialInfo>
•</soap:Body>

Web servisleri uygulama tarafından çağırıldığı zaman SOAP mesajları


otomatik olarak oluşturulur. Bir istemci uygulaması web servisinde bir yöntemi
çağırdığında, web servisi otomatik olarak web servisinden istemci uygulamasına
gönderilecek verilerin gerekli ayrıntılarına sahip olacak bir SOAP mesajı
oluşturulur.
SOAP yazılımların bütünleştirilmesi için geliştirilmiş XML ile formatlanmış
bilgilerin iletişimini sağlayan bir protokoldür. Yazılımların bütünleştirilmesi için
middleware olarak adlandırılan daha önce birçok çözüm sunulmuştur. RPC
(Remote Procedure Call) , DCOM, IIOP (Internet-Inter-ORB Protocol) ve Java RMI
bu çözümlerden bazılarıdır. Bu middleware çözümleri internet ortamında iletişim
sağlama konusunda yetersiz kalmaktadır.
Bu nedenle XML tabanlı bir protokol olan SOAP giderek yaygınlaşmaktadır.
SOAP istemcilerin sunucularda olan nesne yöntemlerini çağırmasını ve sonuçların
alınmasını sağlayan basit istek/yanıt (request/response) protokolüdür. SOAP
mevcut internet altyapısında olan Router, Firewall ve Proxy sunucularında
herhangi bir değişiklik yapılmadan kolayca çalışabilmektedir.
SOAP mesaj yapısı XML yazım kurallarına uygun olarak şu bölümlerden
oluşur:

302
Atatürk Üniversitesi Açıköğretim Fakültesi 9
Web Servisleri

 Envelope, servis istek ve cevaplarının bilgilerini içerir. XML Root elemanı


zorunluluktur. İçeriğinde Header, Body ve Fault alanlarını barındırır.
 Header, meta-data gibi bilgiler iletmeye yarar.
 Body, istekte ve cevapta mesaj adı ve parametreleri barındırır.
 Fault, istek sonucu bir hata var ise hata mesajını / durumu içerir.
Muhtemelen SOAP mesajlarının nasıl oluşturulduğunu görmenin en iyi
yollarından biri, aslında bir web servisini çalışırken görmektir. Bir ASMX web servisi
oluşturmak için Microsoft.Net kullanılacaktır. ASMX web hizmetleri, Web Servisi
Tanımlama Dili (WSDL) belgesini otomatik olarak oluşturur. Bu WSDL belgesi,
uygulamanın web servisinin neler yapabileceğini bilmesi için çağıran istemci
uygulaması tarafından gereklidir. Örnekte, web servisini çağıran uygulamaya bir
string döndürmek için kullanılacak bir web servisi oluşturulmuştur. Bu web servisi
ASP.Net web uygulamasında barındırılacaktır. Daha sonra web servisi çağrılarak ve
web servisi tarafından döndürülen sonuç verilmiştir. Ayrıca web servisi ile çağrılan
SOAP mesajlarının nasıl uygulama arasında geçen SOAP mesajının ne olduğu verilmiştir. Aşağıdaki
oluşturulduğunu
adımlarda web servisinin ASP.NET ile Visual Studio ortamında gerçekleştirilmesi
görmenin en iyi
yollarından biri, aslında anlatılmıştır. Şekil 4’te gösterildiği gibi Visual Studio Dosya menüsünden Yeni /
bir web servisini Proje seçimi yapılarak proje oluşturma süreci başlatılır.
çalışırken görmektir.

Şekil 13.4. Dosya, Yeni Menüsünden Proje Seçimi


Proje oluşturmanın ikinci adımında Şekil 5’te gösterildiği gibi ASP.NET Web
Application (.NET Framework) öğesi seçilerek ASP.NET projesi oluşturulur. Bu
ekranda web servis projesin geliştirileceği programlama dili seçimi de
yapılmaktadır.

303
Atatürk Üniversitesi Açıköğretim Fakültesi 10
Web Servisleri

Şekil 13.5. ASP.NET Web Application(.NET Framework) Öğesi


Şekil 5’te açılan ekrandan ASP.NET Web Application (.NET Framework) öğesi
seçildikten sonra, Şekil 6’da ASMX proje adı, projenin bilgisayardaki konumu
çözüm adı ve .NET Framework sürüm seçilir. Çözüm adına şekilde olduğu gibi
SOAPWebService yazılabilir.

Şekil 13.6. Yeni ASMX Projesi Adı Oluşturma


Şekil 7’de ASP.NET projesinin Visual Studio Çözüm Gezgininde bir minimum
özelliklerle yürütülebilmesi için en sade hali verilmiştir.

Şekil 13.7. SOAP Web Servis Proje Ekranı

304
Atatürk Üniversitesi Açıköğretim Fakültesi 11
Web Servisleri

Şekil 8’de ASP.NET projesine yeni web servis öğesini eklenme işlemi
gösterilmiştir. Proje ismini sağ tıklatarak yeni bir öğe eklenir ve Ekle > Yeni Öğe'yi
seçimi yapılarak Web Hizmeti ASMX'i açılabilir.

Şekil 13.8. Projeye Bir Web Servis Dosyası Eklemek


Şekil’9’da gösterildiği gibi HelloWorld adında varsayılan web yöntemini
içeren bir ASMX web hizmeti için bir şablon oluşturulmuştur.

Şekil 13.9. ASMX Web Servisi


String bir ifade döndüren HelloWorld() isimli bir metot bulunmaktadır. Bu
haliyle uygulama çalıştırılır. Web servisi çağrıldığında oluşturulan SOAP talebi Şekil
10’da gösterilmiştir. SOAP mesajının ilk kısmı, zarf öğesidir. Bu, her SOAP
mesajında bulunan kapsülleyici unsurdur. SOAP Body sonraki öğedir ve SOAP
mesajının gerçek ayrıntılarını içerir. Bu, istemci uygulamasına, çağrılan web
servisinin dize türünde bir nesne döndürür. Bu çok kullanışlıdır, çünkü aksi
takdirde istemci uygulaması web servisinin ne döndürdüğünü bilemez.

305
Atatürk Üniversitesi Açıköğretim Fakültesi 12
Web Servisleri

Şekil 13.10. Localhost Üzerinde Çalıştırılan Web Servis

Şekil 13.11. Servisi Ön İzlemek İçin Bir Sayfa Üzerinden Hizmeti


Hizmeti çalıştırmak için HelloWorld() isimli web method üzerine tıklayıp ve
test edilebilir.

Şekil 13.12. Web Servis Çıktısı


Şekil 12’deki çıktı, Web yöntemini çağırarak, “Merhaba Dünya” dizesinin
döndürüldüğünü açıkça göstermektedir. Visual Studio ayrıca, yukarıdaki web
servisi çağrıldığında oluşturulan SOAP mesaj isteğini ve yanıtının
görüntülenmesine olanak sağlar.

306
Atatürk Üniversitesi Açıköğretim Fakültesi 13
Web Servisleri

Bireysel Etkinlik
• C# programlama dili ile A ve B değişkenlerinin değerlerinin
toplamını gerçekleştiren topla() methodunun kodunu yazarak
yine topla SOAP web servisini yazınız.
• A= 5, B= 10 değişken değerleri kullanılacaktır.

REST REST
İstemci ile sunucu
arasındaki iletişimde REST (Representational State Transfer) ağ bağlantılı uygulamalar için
talep edilen verilerin tasarlanmış bir mimari yapıdır. REST, bir REST API oluşturulduğunda izlenen bir dizi
kayıtlarını saklamayan
kural aracılığıyla API'nin özelliklerini belirler. REST, herhangi bir veriyi (Örneğin
web servisi türdür.
REST, önceden resim, video, metin vb.), istemcinin getirebileceği, düzenleyebileceği veya
tanımlanmış bir dizi silebileceği bir kaynak olarak değerlendirir. REST, bir istemcinin belirli bir URL'ye
durum bilgisi olmayan erişerek ve bir istek göndererek uygun işlemi gerçekleştirebilmesini zorunlu kılar.
GET, POST, PUT ve Sunucu daha sonra bu isteğe uygun bir yanıt gönderir.
DELETE yöntemlerini
kullanan bir API tasarım REST istemciden gelen her isteğin, sunucunun anlaması için gerekli tüm
mimarisidir. bilgilere sahip olması gerektiği anlamına gelir. REST'in amacı, web servis sağlayan
kaynağın URL'ine istek göndererek kaynaktan istemcinin talep ettiği verinin
alınması JSON API yapısında olmaktadır. REST kullanmanın bir diğer avantajı ise
farklı arama türlerini işlemek ve farklı veri biçimlerini döndürerek esneklik
sağlamasıdır.
REST web servisi veri alışverişinde HTTP kullanır. İstemci tarafında servisi
çağırmak için herhangi bir objeye ihtiyaç yoktur. CSV, XML, JSON ve metin
mesajlaşma yapabilmektedir. Bu konuda SOAP’tan çok daha esnektir.
Geliştiricilerin erişimine açık Facebook ve Twitter REST web servisleri API
bulunmaktadır.
İşlemler resource ile gerçekleştirilir ve URI (Uniform Resource Identifier)’dan
resource’a dair bilgiler iletilir. REST servisler URI ile ilgili metoda HTTP üzerinden
istekte bulunur. GET, POST, PUT, DELETE gibi HTTP metotları ile işlemler
gerçekleştirilebilmektedir. REST, SOAP da olduğu gibi bir WDSL‘e gerek duymaz.
REST servisler SOAP’a göre daha esnek ve hızlıdır.

UDDI
Universal Description, Discovery and Integration (UDDI) web servisi
tanımlamak ve yayınlamak için kullanılan XML tabanlı bir standarttır. UDDI hizmet
sağlayıcılar, hizmet uygulamaları ve hizmet meta verileri hakkındaki bilgileri
yöneten web hizmetidir. SOAP aracılığıyla iletişim kurarak web servislerine
arabirim tanımlamak için WSDL kullanır. SOAP ve WSDL ile web servislerinin üç
temel standardından biridir. Yazılımların birbirleri ile iletişim kurmaları için web
servis altyapı hizmeti sağlayan endüstri girişimidir. UDDI, web servisleri kurumların

307
Atatürk Üniversitesi Açıköğretim Fakültesi 14
Web Servisleri

kendi aralarında paylaşmalarına olanak sağlamak amacıyla tasarlanmış ortak bir


web hizmetleri API'sidir.
UDDI Beyaz Sayfa, Sarı Sayfa ve Yeşil sayfa olmak üzere üç bileşenden
oluşmaktadır. Beyaz Sayfa; adres, iletişim ve bilinen tanımlayıcıları barındırır. Sarı
Sayfa; endüstriyel işlemlerin sınıflandırmalarını barındırır. Yeşil Sayfa; teknik
bilgileri barındırır.
UDDI özellikleri aşağıda verilmiştir:

 Yazılımların UDDI kayıt defterine bilgi yayınlamak için kullandığı SOAP


API’sidir.
 Kayıt defteri veri modeli XML şemaları ve SOAP mesaj biçimindedir.
 SOAP API'lerinin WSDL tanımları ile oluşturulur.

308
Atatürk Üniversitesi Açıköğretim Fakültesi 15
Web Servisleri

•Web servisleri teknolojileri 2000 yılında kullanılmaya başlanmıştır. Web


servisler, HTTP kullanarak hizmet sağlayan yazılımların bütününe verilen
isimdir. Web servisler, istemci bilgisayarlar tarafından gönderilen istekleri
yorumlayarak gönderilen HTTP isteğine istemciye yapısından bulundurduğu
verileri iletmektedir. Web servisleri, istemci ile sunucu arasındaki veya
Özet
sunucu ile sunucu arasında veri iletişimi sağlamak kullanılan bir standartdır
ve veri transferi gerçekleştirmek için tasarlanmış bir yazılımdır. Farklı
teknolojiler kullanılarak geliştirilen özellikle web yazılımlarının birbirleriyle
veri alış verişini gerçekleştirmek için geliştirilen web servis teknolojileri XML
tabanlı yazılım uygulamalarıdır. Web servisi kullanmak istenilen yazılımın
hangi dilde yazıldığı önemli değildir. Çünkü Web servisten alınan veri yapısı
XML'dir. XML, tüm iletişimleri bir web hizmetinde kodlamak için kullanılır.
Yeni nesil web uygulamaları, web servisleri modeline dayanarak farklı
sistemlerden veri alarak tümleşik web 2.0 ve web 3.0 web teknolojilerinin
gelişmesini sağlamıştır. Web servisleri ile, kurumlar iş birliği yaptığı satıcı,
müşteri ve banka gibi diğer kurumlardaki iş süreçlerini birleştirerek daha iyi
işlevsellik ve daha az maliyet gibi bir çok avantaj sağlamışlardır. Web
servisleri modeli XML, SOAP, WSDL ve UDDI gibi açık internet standartlarına
sahiptir. Teknolojik olarak ve kullanım alanına göre farklı web servis
yöntemleri bulunmaktadır. Bunlardan en çok kullanılanları SOAP ve REST
web servis yöntemleridir. SOAP, farklı programlama dilleri üzerine kurulmuş
uygulamalar arasında veri alışverişi yapmak için kullanılan bir protokoldür.
SOAP, XML betik dili ile geliştirilen en çok kullanılan web servis yöntemidir
denebilir ve HTTP ile çalışır. HTTP ile çalışması SOAP web servis teknolojisinin
web tabanlı uygulamalar için daha çok tercih edilmesini sağlamıştır. Web
uygulamalarında sık kullanılması SOAP’ın da teknolojik olarak gelişmesini
sağlamıştır. SOAP yapısı temel olarak SOAP mesajından oluşur. Her SOAP
mesajı bir zarf öğesi, bir başlık ve bir gövde öğesinden oluşur. Zarf öğesi,
SOAP mesajındaki zorunlu unsurdur ve SOAP mesajındaki tüm verileri
kapsüllemek için kullanılır. Başlık öğesi, kimlik doğrulama bilgileri veya
karmaşık veri türlerinin tanımı gibi bilgileri içermek için kullanılabilir. Gövde
öğesi, gerekirse herhangi bir parametre bilgisi ile birlikte web yöntemlerinin
tanımını içeren ana öğedir. Mevcut yazılımların bir takım işlevselliklerini ağ
ve internet üzerinden servis edilebilmesi, diğer yazılımların servis vasıtasıyla
uygulanmasını kullanabilmesi, üstelik bütün bunların platform bağımsız
gerçekleştirilebiliyor olması büyük bir avantajdır. REST web servis de veri
alışverişinde yine HTTP kullanır. İstemci tarafında servisi çağırmak için
herhangi bir nesneye ihtiyacı yoktur. CSV, XML, JSON ve metin mesajlaşma
yapabilmektedir. REST servisler URI ile ilgili metoda HTTP üzerinden istekte
bulunur. GET, POST, PUT, DELETE gibi HTTP metotları ile işlemler
gerçekleştirilebilmektedir. REST, SOAP da olduğu gibi bir WDSL gerektirmez.
REST web servisleri SOAP’a göre daha esnek ve hızlı çalışabilmektedir.

309
Atatürk Üniversitesi Açıköğretim Fakültesi 16
Web Servisleri

DEĞERLENDİRME SORULARI
1. Sunucunun istemciye gönderdiği cevap yapısında aşağıdaki seçeneklerin
hangisi bulunmaz?
a) Protokol bilgisi (HTTP 1.1, HTTP 1.2 gibi)
b) Sunucu IP bilgisi
c) Cevap içeriği
d) URL
e) Statü bilgisi (1xx, 2xx, 3xx, 4xx…)

2. Hangisi bir web servis protokolü değildir?


a) SOAP
b) REST
c) UDDI
d) ARP
e) HTTP

3. Web servisleri ile ilgili olarak aşağıdakilerden hangisi yanlıştır?


a) Web servisleri açık standart (XML, SOAP, HTTP vb.) tabanlı Web
uygulamalarıdır.
b) Web hizmetleri, veri alışverişi amacıyla diğer web uygulamalarıyla
etkileşime girer.
c) Web Servisleri, yazılımları Web uygulamalarına dönüştürebilir.
d) Web servisleri platform bağımsız bir iletişim alt yapısı sunar.
e) Web servisleri sadece kendi programlama dili ile kodlanmış yazılımlar
ile iletişim kurabilir.

4. UDDI için aşağıdakilerden hangisi yanlıştır?


a) Web servisi bilgilerini tanımlamaya yarayan bir standarttır.
b) Web servisi bilgilerini yayınlayan bir standarttır.
c) Web servisi bilgilerini bulma işlemlerini gerçekleştiren bir standarttır.
d) Platformdan bağımsız, açık bir çerçevedir.
e) En yaygın olarak kullanılan web servis standardıdır.

5. Web Hizmeti Protokol Yığınında aşağıdaki katmanlardan hangisi, belirli bir


web hizmetine genel arabirimi tanımlamaktan sorumludur?
a) Servis Taşımacılığı
b) XML Mesajlaşma
c) Servis açıklaması
d) Servis Keşfi
e) Hizmet Kaydı

310
Atatürk Üniversitesi Açıköğretim Fakültesi 17
Web Servisleri

6. Aşağıdakilerin hangisinde XSLT doğru tanımlanmıştır?


a) Genişletilebilir Stil Sayfası Dili Çevirmenleri
b) Genişletilmiş Stil Sayfası Dil Dönüşümü
c) Genişletilebilir Stil Sayfası Dil Dönüşümü
d) Genişletilebilir Stil Dil Dönüşümü
e) XSLT, XML belgelerini dönüştürmek için bir dildir.

7. XSLT'de her biri için doğru sözdizimi nedir?


a) <xsl:for-each> kodu … </xsl:for-each>
b) <for-each> kodu … </for-each>
c) <xsl: foreach > kodu … <xsl: foreach />
d) <xsl:foreach> kodu … </xsl:foreach>
e) <xsl:each> kodu … </xsl:each>

8. SOAP mesaj yapısı bölümlerden aşağıdakilerin hangisi yoktur?


a) Envelope, servis istek ve cevaplarının bilgilerini içerir. XML Root
elemanı zorunluluktur. İçeriğinde Hader, Body ve Fault alanlarını
barındırır.
b) Header, meta-data gibi bilgiler iletmeye yarar.
c) Body, istekte ve cevapta mesaj adı ve parametreleri barındırır.
d) Fault, istek sonucu bir hata var ise hata mesajını / durumu içerir.
e) Content, istek ve cevap içeriğini oluşturur.

9. XML varlıklarının kullanımı aşağıdakilerin hangisinde yanlış verilmiştir?


a) Varlıklar, standart metin veya özel karakterler için kısa yollar
tanımlar.
b) Varlıklar, standart öğelere kısa yollar tanımlar.
c) Varlıklar, standart niteliklere kısa yollar tanımlar.
d) Varlıklar standart hata öğelerini içerir.
e) Sunucu taraflı programlama dili olarak kullanılabilir.

10. Aşağıdakilerden hangisinde REST web servisler URI ile ilgili metoda HTTP
üzerinden istekte bulunmaz?
a) GET
b) INPUT
c) POST
d) PUT
e) DELETE

Cevap Anahtarı
1.b, 2.d, 3.e, 4.e, 5.c., 6.c, 7.a, 8.e, 9.a, 10.b

311
Atatürk Üniversitesi Açıköğretim Fakültesi 18
Web Servisleri

YARARLANILAN KAYNAKLAR
“Web Servis(SOAP veREST)”, https://medium.com/@kdrcandogan/web-
servis-soap-verest-93930908a465 , 2022.
“Web servis”, https://tr.wikipedia.org/wiki/Web_servis , 2022.
“What are Web Services”,
https://www.tutorialspoint.com/webservices/what_are_web_service
s.htm, 2022.
“Adding a Web Reference”, https://docs.microsoft.com/en-
us/sharepoint/dev/general-development/step-2-adding-a-web-
reference , 2022.
“Consuming Web Service In an ASP.Net Web Application”, https://www.c-
sharpcorner.com/UploadFile/0c1bb2/consuming-web-service-in-Asp-
Net-web-application/ , 2022.
“UDDI | Online community for the Universal Description, Discovery, and
Integration” http://uddi.xml.org, 2022.

312
Atatürk Üniversitesi Açıköğretim Fakültesi 19
GÜVENLİ WEB
PROGRAMLAMA

• Özet
• Giriş
İÇİNDEKİLER

• Bilgi Güvenliği Özellikleri İNTERNET


• Gizlilik
• Bütünlük PROGRAMCILIĞI II
• Kullanılabilirlik Dr. Öğr. Üyesi Adem
• Girdi Doğrulama
• Kimlik Doğrulama
TEKEREK
• Yetkilendirme
• Enjeksiyon Saldırıları

• Bu üniteyi çalıştıktan sonra;


• Güvenlik ve yazılım güvenliği
kavramlarını öğrenebilecek,
HEDEFLER

• Güvenliğin temelleri olan


Gizlilik, Bütünlük ve
Kullanılabilirlik kavramlarını
öğrenebilecek,
• Kodlamadan kaynaklı yazılım
zafiyetlerini öğrenebilecek,
• Bilgi sistemlerine karşı olası
tehditleri öğrenebileceksiniz.
ÜNİTE

14
© Bu ünitenin tüm yayın hakları Atatürk Üniversitesi Açıköğretim Fakültesi’ne aittir. Yazılı izin alınmadan
ünitenin tümünün veya bir kısmının elektronik, mekanik ya da fotokopi yoluyla basımı, yayımı, çoğaltımı ve
dağıtımı yapılamaz.
Güvenli Web Programlama

Gizlilik

Bilgi Güvenliği
Bütünlük
GÜVENLİ WEB PROGRAMLAMA

Özellikleri

Kullanılabilirlik

Girdi Doğrualam

Kimlik Doğrulama

Doğrulama

Yetkilendirme

Enjeksiyon Saldırıları

314
Atatürk Üniversitesi Açıköğretim Fakültesi 2
Güvenli Web Programlama

GİRİŞ
Yazılım güvenliği, yazılım güvenlik risklerini belirlemek ve yönetmekle
ilgilidir. Uygun gereksinim mühendisliği, tasarım ve mimari uygulamalarının
uygulandığı varsayılacak olursa, bir yazılımın risklerini tanımlamanın ve
yönetmenin bir sonraki en etkili yolu, geliştirilen kodun tekrarlı olarak analiz
edilmesidir. Yazılım güvenliğini sağlamak için geliştirilme aşamasında güvenli
yazılım geliştirme yöntemleri kullanılarak yazılımların geliştirilmesinin sağlanması
ve yazılım güvenlik zafiyetlerinin en aza indirilmesi gereklidir. Yazılım güvenliği
yazılım geliştirme süreçlerinin her aşamasında göz önünde bulundurulmalıdır.
Keşfedilen bir yazılım güvenlik zafiyeti, sürekli tekrarlanmaya ve görünürde sonu
olmayan ciddi zararlara sebep olmaktadır. Yazılım güvenliği alanında birçok
güvenlik terminolojisi vardır. En temel birkaç terminoloji aşağıda anlatılmıştır.
Tehdit: Bir olayın meydana gelme olasılığıdır, güvenlik zafiyetinin manipüle
edilmesi.
Saldırı: Saldırganlar tarafından gerçek bir tehdit uygulaması.
Güvenlik Açığı: Saldırganın bir saldırı gerçekleştirmek ve sistemin güvenliğini
aşmak için kullanabileceği sistemdeki zafiyetler.
Kimlik Doğrulama: Bir kullanıcının kimliğinin belirlenmesi. Bir insan mı yoksa
bir robot mu olduğunu belirlemek için sisteme erişmeden önce kullanıcı kimliğinin
belirlenmesi gereklidir. Örneğin; Kullanıcı adı ve şifre, Yüz kimliği, Parmak izi.
Yetkilendirme: Belirli bir kullanıcının sistemde hangi işlemleri yapmasına izin
verildiğini belirlemek. Örneğin; Belirli bir kullanıcı bir kayıt oluşturabilir ancak
silemez.
Planlama, analiz, tasarım, geliştirme gibi yazılım geliştirme yaşam döngüsü
Bir güvenlik zafiyetini aşamalarının tamamında güvenli yazılım geliştirme ilkelerine uyulmalıdır. Yazılım
tamamen ortadan geliştirme süreçlerinde güvenlik ilkelerine uyarak daha güvenli yazılım geliştirme,
kaldırmak mümkün ön üretimde test ve dağıtım yapmak, maliyetlerin azaltılması ve uçtan uca
değildir ama güvenlik güvenliğin sağlanması gerçekleştirilebilir. Yazılım hataları, programlarda
önlemleri alınarak
beklenmedik ve tipik olarak istenmeyen davranışlardır. Bir güvenlik zafiyeti, sistem
zafiyetler kullanılarak
yapılacak saldırılar güvenlik prosedürlerinde, tasarımında, uygulanmasında veya dâhili olarak bir
sonucunda oluşabilecek kusur veya zayıflıktır. Uygulanabilecek ve güvenlik ihlali veya güvenlik politikasının
zararların etkisinin ihlali ile sonuçlanabilecek kontroller olarak de tanımlanabilir. Güvenli yazılım
azaltılması amaçlanır geliştirmede kalıcı koruma sağlamak için konumdan bağımsız koruma
gerçekleştirmek gereklidir. Yazılıma erişimin gerçekleştirildiği bütün konumlar için
güvenlik stratejileri aynı olmalıdır. Kurum içinden veya kurum dışından yapılan
erişimler için farklı politika uygulanması zafiyetlere sebep olabilir.
Yazılım geliştirilirken, güvenli yazılım geliştirme yöntemlerinin
kullanılmasının amacı yazılımların güvenlik zafiyetlerinin azaltılmasıdır. Bir
güvenlik zafiyetini tamamen ortadan kaldırmak mümkün değildir ama güvenlik
önlemleri alınarak zafiyetler kullanılarak yapılacak saldırılar sonucunda
oluşabilecek zararların etkisinin azaltılması amaçlanır. Bütün zafiyetlerin tamamen

315
Atatürk Üniversitesi Açıköğretim Fakültesi 3
Güvenli Web Programlama

ortadan kaldırılmasından ziyade karmaşık bir yazılım parçası genellikle pratik


değildir. Böylece birden fazla yani çok faktörlü savunma katmanı oluşturularak, bir
güvenlik açığını bulmak zordur ama saldırı sonucu oluşacak maliyetin veya zararın
azaltılmasını sağlayabilir. Yazılımlara karşı yapılan saldırılara karşı farklı denetim
türleri vardır. Bu denetim türlerini kara kutu, beyaz kutu ve gri kuru testi olarak
sınıflandırmak mümkündür. Kara kutu testi bilinen tehditlerin denetimi için
kullanılır. Beyaz kutu izin verirken girdilerin denetimini yapmak için kullanılır. Gri
kutu ise kara kutu ve beyaz kutu denetim türlerinin birleşimidir.
Yazılımlardaki bir güvenlik açığının manipüle edilmesi sürecine istismar
denir. Bir saldırgan bir güvenlik zafiyetini kullandığında zarar meydana gelir ve bilgi
sistemi istismar edilmiş olur.

BİLGİ GÜVENLİĞİ ÖZELLİKLERİ


Bilgi güvenliğinin Gizlilik, Bütünlük ve Kullanılabilirlik olmak üzere üç temel
özelliği vardır. Bilginin güvenliğini sağlamak için bu üç temel özelliğin sağlanması
gereklidir. Bunlar herhangi bir bilgi sisteminin güvenliğinin sağlanması için temel
beklentilerdir. Yüksek güvenlik, verilerin ifşa edilmeyeceği anlamına gelir. Verilere
ve yazılım kodlarına uygun olmayan (gizlilik) bir şekilde değiştirilmeyecek veya yok
edilmeyecek (bütünlük) ve her zaman uygun erişim sağlanmasıdır (kullanılabilirlik).

Gizlilik
Verinin yetkisiz taraflara ifşa edilmesine karşı korunması anlamına gelir.
Potansiyel olarak, korunan veriler hakkında herhangi bir ipucu sağlayan küçük bilgi
Bilgi güvenliğini sızıntıları bile bu ilkenin geçerliliğini ortadan kaldırır ve güvenlik zafiyetine sebep
sağlamak için Gizlilik, olur. Gizliliğe yönelik saldırılara örnekler aşağıdaki gibi sıralanabilir.
Bütünlük ve
Kullanılabilirlik • Gizli verilerin izinsiz okunması.
özelliklerinin • Kısıtlanmış veriler üzerinde istatistiksel analiz yapmak.
sağlanması gereklidir. • Yetkisiz iletişim mesajlarını okumak.
• İletişim trafiğinin olup olmadığını algılamak.

Bütünlük
Verinin yetkisiz kişilerce oluşturulmasına, değiştirilmesine veya yok
edilmesine karşı korunması anlamına gelir. Potansiyel olarak, verilerin tahrif
edilmiş olabileceği, makul tehdit bile veri bütünlüğünün istismarı olarak
değerlendirilebilir.
Veri bütünlüğü;

• Yeni veri dosyalarını değiştirme, yok etme veya oluşturulması.


• Hatalara, arızalara, çökmelere veya beklenmeyen davranışlara neden
olacak program kodunu değiştirme.
• Değiştirme, silme, çoğaltma, sıra değişikliği veya fazladan mesajlar
oluşturma.

316
Atatürk Üniversitesi Açıköğretim Fakültesi 4
Güvenli Web Programlama

Kullanılabilirlik
Yetkili tarafların sisteme ve kaynaklarına gerekli erişebilmelerini sağlama
anlamına gelmektedir. Kullanılabilirliğin sabote eden saldırı türü genellikle Servis
Aksatma (Denial of Service) saldırısı türleridir. Bir sistemin veya verilerinin imhası
sistemin kullanılamaz hale gelmesine sebep olur, sistemin devre dışı bırakılması
olarak kabul edilir.
Kullanılabilirlik;

• İnternete bağlı bir hizmeti, isteklerle boğmak, istemcilere hizmet veremez


hale getirmek.
• Bir sunucuyu çökerterek istemcilere hizmet vermesini engellemek.
• Donanım veya yazılım hizmetleri de dâhil olmak, üzere bir sistemin
tamamının veya bir bölümünün kaldırabileceğinden daha fazla istek ile
kullanılmaz hale getirmek.

•Gizlilik, Bütünlük ve Kullanılabilik oldukça popüler olan bir bilgi


Örnek

güvenliği modelidir. Bir kuruluşun veri güvenliğini sağlamaya yönelik


çabalarına rehberlik eder. Siber güvenlik için de eksiksiz olan üç ilke
gizlilik, bütünlük ve kullanılabilirlik, bir güvenlik altyapısının temel
taşını oluşturur. Aslında bu ilkeleri herhangi bir güvenlik programına
uygulamak idealdir.
Girdi Doğrulama yazılım
güvenliğini sağlamak
için URL ve form
alanları gibi yazılım ara
yüzleri kullanılarak, bilgi
sisteminde iş akışına
yalnızca uygun şekilde
Bireysel Etkinlik

oluşturulmuş verilerin
• Web uygulama güvenliğini sağlamak için yapılması gerekenlerin
girilmesini sağlamak
bilgi güvenliği ilkeleri olan gizlilik, bütünlük ve kullanılabilirlik
için kullanıcılar
açısından yorumlayınız?
tarafından girilen
verilerinin uygunluk
doğrulamasıdır.

GİRDİ DOĞRULAMA
Girdi Doğrulama yazılım güvenliğini sağlamak için URL ve form alanları gibi
yazılım ara yüzleri kullanılarak, kullanıcılar tarafından girdi verilerinin uygunluk
doğrulamasının gerçekleştirilme sürecidir. Bilgi sisteminde iş akışına yalnızca
uygun şekilde oluşturulmuş verilerin girilmesini sağlamak için gerçekleştirilir.
Kesme işareti (') karakteri, 1=1 dizesi veya <script> etiketi gibi karakterleri ve
kalıpları tespit etmek ve yasaklı listesi doğrulamasını kullanmak yaygın bir girdi
doğrulaması yöntemidir, ancak saldırganların bu yasaklı listelerini devre dışı

317
Atatürk Üniversitesi Açıköğretim Fakültesi 5
Güvenli Web Programlama

bırakmaları çok zor değildir. Kullanıcı tarafından sistemlere girilen verilerin sistemi
manipüle etmek için oluşturulmuş veriler mi yoksa normal veriler mi olup olmadığı
güvenli kod geliştirme yöntemleri kullanılarak yazılım tarafında kontrol edilmelidir.
Tarih, kimlik numarası, sosyal güvenlik numarası, posta kodu, e-posta adresi gibi
yapılandırılmış veriler için yazılımcı, çok güçlü bir girdi doğrulama modeli
tanımlayabilir. Veri alanları veya formlar açılır liste veya radyo düğmeleri gibi sabit
bir seçenek grubundan oluşuyorsa, veri girişinin ilk etapta kullanıcıya sunulan
değerlerden biriyle tam olarak eşleşmesi gerekir. Kullanıcının esnek veri girişi
yapabileceği metin alanlarının ise içerik doğrulama işlemlerinin yapılması
gereklidir. Ancak kullanıcıların form ve yorum alanlarına veya metin alanlarına
kesme işareti (') veya küçüktür işareti (<) veya büyüktür (>) yazmak isteyebilir ve
bu durumun tamamen masum nedenleri olabilir. Ama bunun gibi meta karakterler
saldırganlar tarafında da kullanılabileceği için güvenli yazılım geliştirme yöntemleri
kullanılarak girdi doğrulama süreçleri işletilmelidir. İstemcide gerçekleştirilen
herhangi bir JavaScript giriş doğrulamasının JavaScript'i devre dışı bırakan veya bir
Web Proxy'si kullanan saldırgan tarafından atlatılabilir. İstemcide JavaScript
kullanılarak gerçekleştirilen herhangi bir girdi doğrulamasının sunucu tarafında da
yazılımın geliştirildiği web programlama dili kullanılarak da girdi doğrulama
işlemlerinin gerçekleştirilmesi gereklidir.
Doğrulanan tüm kullanıcı girdileri ve kötü amaçlı verilerin siteler arası betik
yazma (XSS) veya SQL enjeksiyonu saldırılarının yürütülmesini önlemek için HTML
sayfasına döndürüldüğünde kodlanmalıdır. Örneğin, (<script>, &lt;script&gt;)
kodlama türü, kullanıcı tarafından kontrol edilen verilerin eklendiği sayfanın
bağlamına özeldir.
Kodlama hataları, yazılım güvenlik açıklarının tek kaynağı değildir. İş
kuralları ve uygunluk gereksinimlerine dikkat edilmemesi de yazılımlarda güvenlik
açıklıklarına ve zafiyetlerine sebep olabilir. Yazılım ara yüzünden yüklenen dosya
yükleme işlemi gerçekleştirilirken, dosya adının beklenen bir uzantısı veya dosya
türü kullandığından emin olmak için girdi doğrulaması yapılmalıdır. Yüklenen
dosyanın maksimum dosya boyutunun sistemin kabul edeceği dosya boyutundan
büyük olmaması kontrol edilmelidir. Web sitesi ZIP veya RAR gibi sıkıştırılmış
dosyaların yüklenmesini destekliyorsa, dosyayı açmadan önce doğrulama kontrolü
yapılmalıdır.
Web sunucuya yüklenen dosyaları sunucu işletim sisteminde depolamak için
yeni bir dosya adı formatı kullanılmalıdır. Dosya adı veya geçici dosya adı için
kullanıcı tarafından oluşturulan herhangi bir metin kullanmamalıdır. Dosya
sunucuya yüklendiğinde, dosyanın depolama alanında yeniden adlandırılması
önerilir. Örneğin, yüklenen dosya adı test.jpg, rastgele bir dosya adıyla
(AI63454sfyertf.jpg gibi) yeniden adlandırılabilir. Bunu yapmanın amacı, test.jpg,
test.asp veya /../../../test.jpg gibi filtreyi değerlendirmek için doğrudan dosya
erişimi ve belirsiz dosya adından kaynaklanacak riskleri önlemektir. Yüklenen
dosyalar kötü amaçlı içerik (kötü amaçlı yazılımdan koruma, statik kaynak analiz
vb.) için analiz edilmelidir. Dosya yolu istemci tarafından belirlenmemelidir.
Sunucu tarafında dosya yoluna karar verilmelidir. Yükleme özelliği, yalnızca belirli

318
Atatürk Üniversitesi Açıköğretim Fakültesi 6
Güvenli Web Programlama

dosya türlerine ve uzantılarına izin vermek için bir izin verilenler listesi yaklaşımı
kullanılmalıdır. XML uzantılı dosyalar sistemler arasında veri alış verişlerinde
kullanılan yapılardır. Ancak izin verilenler listesinde olsa bile Flash, Java ve
Silverlight uygulamalarında veri yüklemesine izin veren ve güvenlik zafiyetlerine
sebep olabilecek crossdomain.xml ve clientaccesspolicy.xml dosya türlerine izin
verilmemelidir.
Kimlik doğrulaması olan uygulamalarda yüklenen dosya türlerine izin
verilirse, etki alanları arası veri hırsızlığına ve CSRF saldırılarına sebep olabilir. Bu
nedenle "crossdomain.xml" veya "clientaccesspolicy.xml" adlı dosyaları
yasaklamak gereklidir. Güvenlik için kullanılacak .htaccess ve .htpasswd dosyaları
sunucu yapılandırma seçenekleri sağlar ve buna izin verilmemelidir.
Htaccess dosyaları aspx, asp, css, swf, xhtml, rhtml, shtml, jsp, js, pl, php, cgi. gibi
web ortamında yürütülebilir komut dosyalarına izin verilmemesi önerilir.
E-posta adreslerini doğrulamanın en iyi yolu, bazı temel doğrulamaları
gerçekleştirmek ve ardından adresi posta sunucusuna iletmek ve reddederse
istisnalar göz önünde bulundurulmalıdır. Bu, herhangi bir uygulamanın, posta
sunucusunun kabul ettiği herhangi bir adrese e-posta gönderebileceğinden emin
olabileceği anlamına gelir. İlk doğrulama aşağıdaki örnekteki gibi olabilir.

•E-posta adresi, @ simgesiyle ayrılmış iki bölümden oluşur.


Örnek

•E-posta adresi tehlikeli karakterler içermiyor (geri dönüşler, tek veya


çift tırnaklar veya boş baytlar gibi).
•Tam olarak hangi karakterlerin tehlikeli olduğu, adresin nasıl
kullanılacağına bağlıdır (sayfada yankılanır, veri tabanına eklenir, vb.).
•Etki alanı bölümü yalnızca harf, sayı, kısa çizgi (-) ve nokta (.) içerir.
•E-posta adresi makul bir uzunlukta olmalıdır.
•Yerel kısım (@ işaretinden önce) 63 karakterden fazla olmamalıdır.
•Toplam uzunluk 254 karakterden fazla olmamalıdır.

Anlamsal doğrulama, kullanıcı girdilerinin gerçek bir kişiye ait olup


olmadığının doğrulanması sürecidir. Örneğin e-posta adresinin doğru ve meşru
olup olmadığını belirlemek için kullanıcını sağladığı e-posta adresine doğrulama e-
postası gönderilir ve e-postadaki bir bağlantıyı tıklamasını veya kendisine
gönderilen bir kodu girmesini istemektir. Buna ek olarak aşağıda verilen adımlar
da anlamsal doğrulama için kullanılan yöntemlerdir.
• Uygulama başarıyla e-posta gönderebilir.
• Kullanıcının posta kutusuna erişimi vardır.
• Sahipliği kanıtlamak için kullanıcılara gönderilen bağlantılar, aşağıdaki
özelliklere sahip bir belirteç içermelidir:

319
Atatürk Üniversitesi Açıköğretim Fakültesi 7
Güvenli Web Programlama

• En az 32 karakter uzunluğunda olmalıdır.


• Güvenli bir rastgelelik kaynağı kullanılarak oluşturulmuştur.
• Tek kullanımlık olmalıdır.
• Zaman sınırlı olmalıdır (örneğin, sekiz saat sonra sona eriyor).
E-posta adresinin sahipliğini doğruladıktan sonra, kullanıcının olağan
mekanizma aracılığıyla uygulamada kimlik doğrulaması yapması istenmelidir.
Web uygulamalarının kötüye kullanımı sadece kötü amaçlı kullanıcılar veya
saldırganlar tarafında gerçekleştirilmemektedir. Web uygulamalarını tehdit eden
önemli araçlardan biri de robot yazılımlar kullanılarak kaba kuvvet saldırılarının
gerçekleştirilmesidir. Kaba kuvvet saldırıları ile masum kullanıcıların şifreleri
tahmin edilebilmektedir. Yazılımların bir kullanıcının gerçek kişi olduğunu anlaması
için CAPTCHA modülleri kullanılmaktadır. CAPTCHA, kötü amaçlı kullanıcıların web
uygulamalarını kötüye kullanım amaçlı faaliyetlerde bulunmasını önlemek, kaba
kuvvet saldırılarını engellemek ve gerçek kullanıcıların kimlik doğrulamasını
yapmak için kullanılır. Böylece Web uygulamalarında robot benzeri araçlar
kullanılarak otomatize edilmiş taleplerin oluşturulması engellenebilir.

•CAPTCHA web uygulamalarında özellikle kaba kuvvet saldırılarının


engellenmesi için kullanılan girdi doğrulama aracıdır. Web
uygulamalarında farklı türde CAPTCHA kullanımları vardır. Bunlardan
Örnek

bazılarının kullanım örnekleri aşağıda verilmiştir.


•Metin CAPTCHA : Rastgele ve karmaşık olarak verilen bir metnin
kullanıcı tarafından metin kutusuna doğru girilmesini isteyen
yöntemdir.
•Resim CAPTCHA : Verilen çoklu görüntülerde, ortak olanların seçimini
isteyen yöntemdir. Ör. Bisiklet resimlerinin seçimi gibi.
•Matematiksel CAPTCHA : Toplama ve Çıkarma mantığına dayalı,
kullanıcını verilen matematik işleminin cevabını metin kutusuna
yazmasını isteyen yöntemdir.

KİMLİK DOĞRULAMA
Kimlik doğrulama, bir kişinin, varlığın veya uygulamanın iddia ettiği kişi
olduğunu doğrulama sürecidir. Web uygulamaları bağlamında kimlik doğrulama,
genellikle bir kullanıcı adı veya kimlik ve yalnızca belirli bir kullanıcının bilmesi
gereken bir veya daha fazla özel bilgi öğesi gönderilerek gerçekleştirilir. Oturum
Yönetimi, bir sunucunun kendisiyle etkileşime giren bir varlığın durumunu
koruduğu bir süreçtir. Bu, bir sunucunun bir işlem boyunca sonraki isteklere nasıl
tepki vereceğini hatırlaması için gereklidir. Oturumlar, istekleri iletirken ve alırken
istemci ve sunucu arasında ileri ve geri iletilebilen bir oturum tanımlayıcısı
tarafından sunucuda tutulur. Oturumlar, kullanıcı başına benzersizdir ve
hesaplama açısından tahmin edilmesi çok zordur.
Kullanıcı isimleri ile ilgili olarak şunlara dikkat edilmelidir:

320
Atatürk Üniversitesi Açıköğretim Fakültesi 8
Güvenli Web Programlama

• Kullanıcı adları veya kullanıcı kimlikleri büyük veya küçük harfe duyarlı
olmamalıdır. Örneğin 'admin' ve 'Admin' aynı kullanıcı olmalıdır.
• Kullanıcı adları benzersiz olmalıdır.
• Yüksek güvenlikli uygulamalar için, kullanıcı tanımlı genel veriler yerine
gizli kullanıcı adları atanabilir.
• Kimlik doğrulama sürecinde kullanıcı adı olarak E-posta adresi
kullanılabilir.
Kimlik Doğrulama işlemlerinde; uygulama kullanıcı arayüzünde, ara katmanı
ve veri tabanı katmanı dâhil olmak üzere oturum açmaya izin verilmemelidir.
Güvenli olmayan erişim (örn. genel erişim/DMZ) için dahili olarak kullanılan kimlik
doğrulama çözümünü (örn. IDP / AD) kullanılmamalıdır.
Kimlik doğrulama için parola kullanırken önemli bir endişe parolanın güçlü
olmasıdır. Güçlü bir parola politikası, bir kişinin parolayı manuel veya otomatik
yollarla tahmin etmesini zorlaştırır ve hatta imkânsız hale getirir. Güçlü bir parola
politikası için şifrelerin minimum uzunluğu uygulama tarafından zorunlu
kılınmalıdır. 8 karakterden kısa şifreler zayıf olarak kabul edilir. Kullanıcıların şifre
oluşturmasını engelleyeceğinden, maksimum şifre uzunluğu çok düşük
ayarlanmamalıdır. Belirli karma algoritmalardaki sınırlamalar nedeniyle ortak bir
maksimum uzunluk 64 karakterdir. Uzun parola Hizmet Reddi saldırılarını önlemek
için bir maksimum parola uzunluğu belirlemek önemlidir. Parolalarda Unicode ve
boşluk dahil tüm karakterlerin kullanımına izin verilmelidir. İzin verilen karakter
türlerini sınırlayan parola oluşturma kuralları olmamalıdır. Bir parola sızdığında
veya güvenlik ihlali tanımlaması sırasında kimlik bilgilerinin döndürülmesi
önlenmelidir.
Kullanıcıların karmaşık bir parola oluşturmasına ve yaygın ve önceden ihlal
edilmiş parolaları engellemesine yardımcı olmak için parola gücü ölçeri
kullanılmalıdır.
Bir uygulamanın, kullanıcının parolasını unutması durumunda hesabına
erişmesi için bir araç sağlayan mekanizmaya sahip olması yaygın bir durumdur. Bu
özellikle ilgili ayrıntılar için Şifremi Unuttum özelliği kullanılabilir.
Bir uygulamanın doğru şifreleme tekniğini kullanarak parola oluşturması çok
önemlidir.
PWNED Passwords,
parolaların daha önce Kullanıcılarca oluşturulan parolalar programlama dillerinde bulunan
ihlal edilmiş parolalara password_verify() işlevi gibi, dil veya frameworkler tarafından sağlanan güvenli bir
karşı kontrol edilebildiği parola doğrulama işlevi kullanılarak parola karması ile oluşturulmalıdır. Parola
bir hizmettir. PWNED
değişikliğini yapan kullanıcının gerçek kullanıcı olduğundan emin olmak
API kullanılarak
parolaların daha önce için, kötüye kullanım durumu, gerçek bir kullanıcı oturum açmak için ortak
ihlal edilip edilmediği bilgisayarı kullanılır. Kullanıcı oturum kapatmayı unutabilirler. Başka bir kullanıcı
tespit edilebilir. aynı bilgisayarı kullanarak, şifre doğrulanma işlemini gerçekleştirmeden, şifreyi
değiştirebilir.
Bazı uygulamalar, bir kullanıcının hassas işlemler gerçekleştirip
gerçekleştiremeyeceğini kontrol etmek için ikinci faktör kimlik doğrulama

321
Atatürk Üniversitesi Açıköğretim Fakültesi 9
Güvenli Web Programlama

kullanmalıdır. İki yönlü kimlik doğrulaması olarak da bilinen TLS (Transport Layer
Security) İstemci Kimlik Doğrulaması, işlemi sırasında ilgili TLS sertifikalarını
gönderen tarayıcı ve sunucudan oluşur. Sertifikayı kullanarak ve bir Sertifika
Yetkilisine (CA) sertifikanın geçerli olup olmadığını sorarak bir sunucunun
gerçekliği doğrulanabilir, sunucu da istemciden bir sertifika alarak ve üçüncü taraf
bir sertifikaya karşı doğrulayarak kullanıcının kimliğini doğrulayabilir. Bunu
yapmak için sunucu, kullanıcıya özellikle kendisi için oluşturulmuş bir sertifika
sağlar, böylece sertifikanın hangi kullanıcıyı doğrulaması gerektiğini belirlemek için
kullanılır.
Kimlik doğrulama işlevi durumunda yanlış uygulanan hata mesajları,
kullanıcı kimliği ve parola numaralandırma amacıyla kullanılabilir. Bir uygulama,
kimlik doğrulama mekanizmalarından herhangi birini (oturum açma, parola
sıfırlama veya parola kurtarma) kullanarak, aşağıdakilerden bağımsız olarak genel
Daha çok sistem
yönetiminde kullanılan bir hata mesajıyla yanıt verir:
En Az Yetki ilkesi, • Kullanıcı kimliği veya parolası yanlış hatası.
kullanıcılara yalnızca
• Böyle bir hesap yok.
işlerini tamamlamak
için gereken minimum • Hesap kilitli veya devre dışı.
yetki atama ilkesini Amaç, bir saldırganın uygulamaya karşı bir kullanıcı numaralandırma eylemi
ifade eder.
başlatmasına izin vererek bir tutarsızlık faktörünün oluşturulmasını önlemektir.

YETKİLENDİRME
Yetkilendirme, bir eylem veya hizmet için onaylanmış doğrulama süreci
olarak tanımlanabilir. Yetkilendirme, bir varlığın kimliğini doğrulama süreci olan
kimlik doğrulamadan farklıdır. Kimliği doğrulanmış bir kullanıcının bütün
kaynaklara erişme ve eylem gerçekleştirme yetkisi yoktur. Örneğin, bir web
uygulamasının normal kullanıcıları ve yöneticileri olabilir ve yöneticiler, normal
kullanıcının sahip olmadığı eylemleri gerçekleştirebilir ancak yöneticilerin
gerçekleştirdiği eylemleri gerçekleştiremez. Ayrıca, kaynaklara erişim için kimlik
doğrulama her zaman gerekli değildir; kimliği doğrulanmamış bir kullanıcı, bir
resim veya oturum açma sayfası gibi belirli genel kaynaklara veya hatta bir web
uygulamasının tamamına erişme yetkisine sahip olabilir.
Yetkilendirme mantığıyla ilgili zafiyetler, web uygulamaları için önemli bir
bilgi güvenliği sorunudur. Yetkilendirme problemlerinin kullanılmasından
kaynaklanan etki, hem biçim hem de önem açısından oldukça değişkendir.
Saldırganlar, korunması gereken kaynaklara erişebilirler, içerik oluşturabilir,
içerikleri değiştirebilir veya silebilir. Böylece bilgi güvenliği kriterlerinden gizlilik,
bütünlük ve kullanılabilirlik ilkeleri ihlal edilmiş olur. Ancak, bu tür eylemlerin
gerçek etkisi, tehlikeye atılan kaynakların kritikliği ve hassasiyeti ile
bağlantılıdır. Bu nedenle, başarıyla yararlanılan bir yetkilendirme kusurunun
işletme maliyeti çok yüksek olabilir.
Hem kimliği doğrulanmamış ziyaretçiler hem de kimliği doğrulanmış (ancak
zorunlu olarak yetkilendirilmemiş) kullanıcılar, yetkilendirme zayıflıklarından

322
Atatürk Üniversitesi Açıköğretim Fakültesi 10
Güvenli Web Programlama

yararlanabilir. Kötü niyetli olmayan varlıkların hataları veya dikkatsizliği,


yetkilendirme atlamalarını mümkün kılabilse de erişim kontrolü tehditlerinin tam
olarak gerçekleştirilmesi için genellikle kötü niyetli olmaları gerekir. Yatay ayrıcalık
yükselmesi (yani başka bir kullanıcının kaynaklarına erişebilmek), kimliği
doğrulanmış bir kullanıcının yararlanabileceği özellikle yaygın bir
zayıflıktır. Yetkilendirme denetimiyle ilgili hatalar, hem içeriden hem de dışarıdan
kötü niyetli kişilerin her türden hassas kaynakları (veri tabanı kayıtları, statik
dosyalar vb.) görüntülemesine, değiştirmesine veya silmesine veya yeni bir hesap
oluşturma veya maliyetli bir hesap başlatma gibi eylemler gerçekleştirmesine izin
verebilir ama bu işlemlerin gerçekleştirilmesine izin verilmemelidir. Ayrıca, erişim
kontrolü ile ilgili günlük kaydı düzgün kurulmazsa, bu tür yetki ihlalleri tespit
edilemeyebilir veya en azından belirli bir kişi veya gruba atfedilemez.
En Az Yetki güvenlik kavramı, kullanıcılara yalnızca işlerini tamamlamak için
gereken minimum yetki atama ilkesini ifade eder. Daha çok sistem yönetiminde
uygulansa da bu ilke yazılım geliştiriciyi de ilgilendirmektedir. En Az Yetki hem
yatay hem de dikey olarak uygulanmalıdır. Örneğin, bir organizasyonun
hiyerarşisinde hem muhasebeci hem de satış temsilcisi yetki olarak aynı seviyede
yer alsa da her ikisi de işlerini gerçekleştirmek için farklı kaynaklara erişmeleri
gerekir. Muhasebeciye bir müşteri verisine erişim izni verilmemelidir ve satış
temsilcisi bordro verilerine erişememelidir. Benzer şekilde, satış birimi başkanının
astlarından daha fazla ayrıcalıklı yetkiye erişime ihtiyacı olması muhtemeldir.
Bir uygulamada en düşük yetkileri uygulanmaması, hassas kaynakların
gizliliğini tehlikeye atabilir. Yetki stratejileri öncelikle yazılım mimari ve tasarım
aşamasında uygulanır.
Yazılım tasarım aşamasında, güven sınırlarını tanımlanmalıdır. Sisteme
erişecek kullanıcı türlerini, açığa çıkan kaynakları ve bu kaynaklar üzerinde
gerçekleştirilebilecek işlemler (okuma, yazma, güncelleme vb.) belirlenmelidir. Her
kullanıcı türü ve kaynağı kombinasyonu için varsa, kullanıcının rol veya diğer
niteliklere dayalı olarak ve bu kaynaklar üzerinde hangi işlemleri gerçekleştirmesi
gerektiğini belirlenmelidir. Örneğin, bir satış temsilcisinin mesai saatleri içinde
dahili ağdan bir müşteri veri tabanına erişmesi gerekebilir. Ancak mesai saati
dışından veya ev gibi başka konumdan erişmesine izin verilmemelidir.
Bu ve benzeri ihlalleri önlemek için şunlara dikkat edilmelidir;
• Tasarım aşamasında eşlenen izinlerin doğru bir şekilde uygulandığını
doğrulayan testler yapılmalı.
• Sistemdeki izinler ve yetkiler için düzenli aralıklarla kontrol edilmeli; yani,
mevcut ortamdaki kullanıcıların yetkilerinin tasarım aşamasında
tanımlananları aşmamasını sağlanmalı.
• Ek izinler tanımlanmalı. Kullanıcıların daha önceden sahip olduğu yetkileri
almaktansa ek izinler vermek daha kolaydır.
Uygulamanın hem ilk geliştirme sırasında hem de uygulama tarafından yeni
işlevler veya kaynaklar ortaya çıktığında "varsayılan olarak reddet" anlayışı
benimsenmelidir. Erişimin varsayılan konum olduğunu varsaymak yerine, belirli bir

323
Atatürk Üniversitesi Açıköğretim Fakültesi 11
Güvenli Web Programlama

kullanıcıya veya gruba belirli bir iznin neden verildiğini açıkça


gerekçelendirebilmelidir. Bazı çerçeve veya kütüphaneler varsayılan olarak reddet
stratejisini benimseyebilse de çerçeve veya kütüphane varsayılanlarına güvenmek
yerine açık yapılandırma tercih edilmelidir.
Yazılım geliştiriciler, uygulamalarına minimum çabayla sağlam, karmaşık
mantığı dâhil etmelerine olanak tanıyan çok sayıda kütüphaneye, platforma ve
çerçeveye erişebilir. Ancak, bu çerçeveler ve kütüphaneler, tüm geliştirme
sorunları için çözüm olarak görülmemelidir. Uygun erişim kontrolü ile ilgili olarak
çerçeve ve kütüphane seçimi ile ilgili iki genel endişe, geliştirici tarafında yanlış
yapılandırma eksikliği ve bileşenlerin kendi içindeki güvenlik açıklarıdır.
Güvenli bir şekilde geliştirilmiş bir yazılımda bile, üçüncü taraf bileşenlerdeki
güvenlik açıkları, bir saldırganın normal yetkilendirme denetimlerini atlamasına izin
verebilir. Bu tür endişelerin kanıtlanmamış veya bakımı kötü olan projelerle
sınırlandırılması gerekmez. En sağlam ve popüler kütüphaneleri ve çerçeveleri bile
etkiler. Hem karmaşık, hem de güvenli bir yazılım geliştirme zordur. Yüksek
güvenlikli kütüphaneler ve çerçeveler üzerinde çalışan en yetkin geliştiriciler bile
hata yapabilirler. Bir uygulamaya dâhil edilen herhangi bir üçüncü taraf
bileşeninin bir yetkilendirme güvenlik açığına maruz kalabileceği
değerlendirilmelidir.
Bununla birlikte, uygulamalarda statik kaynakların güvenliği genellikle göz
ardı edilir. Veri tabanlarının ve benzer kritik veri depolarının güvenliği daha önemli
olsa da statik kaynakların da uygun şekilde güvenliklerinin sağlanması
gerekir. Statik kaynakları güvenliğini sağlamak için aşağıdaki nitelikler göz önünde
bulundurulmalıdır. Statik kaynaklar erişim denetimi ilkelerine dâhil edilmelidir.
Statik kaynakları depolamak için kullanılan tüm bulut tabanlı hizmetlerin,
tedarikçi tarafından sağlanan yapılandırma seçenekleri ve araçları kullanılarak
güvence altına alınmalıdır. Diğer uygulama kaynaklarını ve işlevlerini güvence
altına almak için kullanılan erişim denetimi mantığını ve mekanizmalarını
kullanarak statik kaynakların da kritik alt yapılar gibi güvenliği sağlanmalıdır.
Yukarıda bahsedilen önemleler genellikle istemci taraflı erişim
kontrolleridir. Ancak sadece istemci taraflı erişim kontrollerine
güvenilmemelidir. Bir kaynağa erişim verilmesinde veya reddedilmesinde sadece
istemci taraflı kontrol belirleyici olmamalıdır. Tek başına yapılan istemci taraflı
kontrolün atlanması genellikle kolaydır. Erişim kontrolleri, sunucu tarafında, ağ
geçidinde veya sunucusuz işlev kullanılarak gerçekleştirilmelidir.
Erişim kontrolleri ile birlikte diğer önemli husus Günlük kayıtlarıdır
(loglama). Günlük kayıtları, uygulama güvenliğindeki en önemli kontrollerden
biridir. Yetersiz günlük kaydı ve izleme, en kritik güvenlik riskleri arasında kabul
edilmektedir. Uygun günlük kayıtları yalnızca kötü amaçlı etkinliği tespit etmekle
kalmaz, aynı zamanda olay sonrası incelemelerde başvurulan önemli kaynaklardır.
Erişim denetimi ve diğer güvenlikle ilgili sorunları gidermek için ve güvenlik
denetiminde kullanılır. İlk tasarım ve gereksinimler aşamasında gözden kaçırılması
kolay olsa da, günlük kaydı bütünsel uygulama güvenliğinin önemli bir bileşenidir.

324
Atatürk Üniversitesi Açıköğretim Fakültesi 12
Güvenli Web Programlama

Güvenli web programlama gerçekleştirmek için günlük kayıtlarının içeriği


kadar, web uygulamalarının birim ve entegrasyon testleri de önemlidir. Birim ve
entegrasyon testleri, bir uygulamanın beklendiği gibi ve değişiklikler arasında
tutarlı bir şekilde çalıştığını doğrulamak için gereklidir. Erişim denetimi
mantığındaki kusurlar, özellikle gereksinimler karmaşık olduğunda, göze
çarpmayabilir. Ancak erişim denetimindeki küçük bir mantıksal veya yapılandırma
hatası ciddi sonuçlara yol açabilir. Özel bir güvenlik testi veya sızma testinin yerine
geçmese de erişim kontrolü mantığının otomatikleştirilmiş birim ve entegrasyon
testi, güvenlik açıklarının sayısını azaltmaya üretime geçirmek yardımcı olabilir.
Sızma testleri, uygulamalarda bulunan güvenlik açıklarından yararlanır ve güvenlik
açığı değerlendirmesi yaparak, güvenlik açıklarını tespit eder.
Bireysel Etkinlik

• Web uygulamalarının daha güvenli olması için girdi doğrulama,


kimlik doğrulama ve yetkilendirme özelliklerinde sırayla hangi
işlemlerin yapılması gerekliğini yazınız.

ENJEKSİYON SALDIRILARI
Bir sistemin hangi arayüz kullanımı ve hangi bölümünün saldırıya uğradığına
bağlı olarak birkaç enjeksiyon saldırı türü olabilir. Ancak, bütün enjeksiyon
saldırıları ortak bir model takip ederler. Komutları metin biçiminde kabul eden
programın bazı bileşenleri bir komut kabuğu, SQL yorumlayıcısı, XML ayrıştırıcısı ve
hatta Python veya JavaScript gibi bir dilin yorumlayıcıları olabilir.
Güvenli yazılım geliştirme yöntemleri kullanılmadan geliştirilen
yazılımlardaki zafiyetler, enjeksiyon saldırılarına sebep olabilir. Bu tür zafiyetler,
yazılımın karıştırmak ve istemediği komutların yürütülmesine izin vermek için
kullanıcı girdisine dayanır. Tipik olarak, bu tür karışıklıklar, meta karakterlerin
(noktalama) uygun olmayan şekilde kullanılmasına veya uygunsuz alıntılardan
kaynaklanır.
Aşağıda Şekil 1’de, kullanıcı girdisinin birkaç farklı senaryoda nasıl
kullanılabileceğine dair basit örnekler verilmiştir. Kullanıcı girdisinin yazılıma
ulaşabileceği yerler saldırı yüzeyi olarak adlandırılır. Yazılımda kullanıcı girdisinin
programın davranışını etkileyebileceği yerlere saldırı yüzeyi denir. Kullanıcı
girdilerinin veri tabanı sunucusunda SQL enjeksiyonuna, işletim sisteminde komut
mesajına ve network seviyesinde ise bir network paketinde manipülasyonlara
sebep olabileceği gösterilmiştir.

325
Atatürk Üniversitesi Açıköğretim Fakültesi 13
Güvenli Web Programlama

Veritabanı Sunucusu
Kullanıcı girdileri
Select * form T where u=$input
Web Form
User : universite
Komut Kabuk (Command Shell)
% mail $input < message
Network Paket
xxxxx universite xxxxx Yorumlayıcı (Interpretter)
Prog = begin + input + end eval prog

Şekil 14.1. Kullanıcı Girdi Senaryosu


Her durumda, kullanıcıdan gelen girdinin, farklı türde bir komut
yorumlayıcısına bir komut dizisi oluşturmak için kullanıldığı unutulmamalıdır.
Yazılımda, kullanıcı girişi gibi verilerden bir dizi sentezlendiğinde ve bu dizi daha
sonra bir komut olarak ayrıştırılıp yorumlandığında, enjeksiyon saldırılarına sebep
olabilecek yapılar aşağıdaki gibi sıralanmıştır.
SQL ifadeleri,

• Komut kabuğundaki gibi komut satırı ifadeleri,


• JavaScript, Python, Perl veya Ruby gibi yorumlanmış dillerde kod
yerleştirme,
• Ağdan iletilen XML verilerine depolanan işleme sırasında XML
enjeksiyonları,
• HTML'de siteler arası komut dosyası oluşturma,
Enjeksiyon saldırılarının gerçekleştirilmesini sağlayan yazılım güvenlik
zafiyetleri, güvenilmeyen veriler söz konusu olduğunda, komutların
oluşturulmasında kullanıcı verilerinin işlenmesini içerir. Pratikte bu, saldırganların
bir web sayfası formu veya bir URL parametresi aracılığıyla istedikleri dizeleri
girebilecekleri bir saldırı yüzeyinden veri kabul etmek ve bundan sonra daha
ayrıcalıklı sunucu kodunun veri tabanına karşı yürüttüğü bir SQL sorgusu
oluşturmak anlamına gelir.
En yaygın enjeksiyon hatası, alıntı karakterlerini rastgele bir dizeden önce ve
sonra koymanın mutlaka tek bir alıntılanmış dize oluşturduğuna inanmaktır.
Alternatif olarak, beklenmeyen meta karakterler, kullanıcı tarafından sağlanan
verilerin amaçlanan kullanımından çıkmasına ve bir komutun parçası olmasına izin
verebilir. Web uygulamaları SQL Enjeksiyonu, Hizmet Reddi, XML Enjeksiyonu ve
XSS Enjeksiyonu gibi saldırılar ile manipüle edilebilmektedir. Programcı
enjeksiyonu öngördüğünde ve kullanıcı dizesini gömülü alıntılar gibi zor işlemler
için kontrol ettiğinde bile, saldırıları etkisiz hale getirmek için tasarlanan kod tüm
olası kötü niyetli biçimleri öngörmediği sürece, bazı belirsiz saldırıların enjeksiyonu
gerçekleştirmesine sebep olur.

326
Atatürk Üniversitesi Açıköğretim Fakültesi 14
Güvenli Web Programlama

•SQL enjeksiyonu, kullanıcı girdilerine göre SQL cümleleri oluşturan


web uygulamalarında, kullanıcı girdilerinin doğrulanmaması veya

Örnek
yetersiz doğrulanmasından kaynaklanan zafiyetler kullanılarak, SQL
cümlelerinin kötüye kullanılmasına sebep olan saldırı türleridir.

sql = "SELECT * FROM kullanici WHERE ad =' " + kullaniciAdi + " ';"

Yukarıdaki SQL sorgusu kullancı adı bilgisine ait tüm verileri, kullanıcı
tablosundan çekecek şekilde yazılmıştır. Kullanıcı adı kısmına
saldırgan tarafından yazılıma zarar verecek ' or '1'='1' -- ifade
yazılabilir. SQL cümlesi aşağıdaki gibi olur.

sql = "SELECT * FROM kullanici WHERE ad =' " + kullaniciAdi ' or '1' =
'1 --';"

kullaniciAdi değişken değeri ne olursa olsun '1'='1' koşulu


sağlanacağı için ve işlemin OR olmasından dolayı sorgu sonucu her
zaman olumlu olacaktır. (--) Yorum satırı karakterlerinden sonra
gelen tüm ifadelerin bir önemi kalmayacaktır.
Bireysel Etkinlik

•Aşağıda örnek bir sunucu kodu verilmiştir. Kodda, SELECT deyimine


(UId) değişkeni eklenmiştir.

UId = getRequestString("UserId");
txtSql = "SELECT * FROM Users WHERE userId = " + UId;

•Kodda bulunan güvenlik açıklarını yorumlayınız.


•SQL enjensiyonu saldırısını engellenmek için kodda hangi
değişikliklerin yapılması gerekmektedir.

327
Atatürk Üniversitesi Açıköğretim Fakültesi 15
Güvenli Web Programlama

•Yazılım güvenliği çözülmemiş bir sorun olmaya devam etmektedir; iyi


bilinen yazılım güvenlik zafiyetleri bile hala tehdit olmaya devam
etmektedir. Güvenlik terminolojisi önemli anlamlar ifade ederken bu
terimlerin doğru kullanılması önemlidir. Bilgi güvenliğinin temel
özellikleri gizlilik, bütünlük ve kullanılabilirliktir. Saldırganlar,
yazılımlardan yararlanmak için koddaki güvenlik açıklarından
yararlanırlar ve bu güvenlik açıklarını istismar ederler. Bütün yazılım
Özet
sistemleri (ve tüm varlıklar) birçok tehditle karşı karşıyadır. Yazılım
güvenliğinin zafiyetlerinden kaynaklanacak, yetersiz güvenlik yüksek
maliyetlere sebep olabilir. Çünkü bir web uygulamasının saldırıya
uğraması özellikle kurumların mahrem bilgilerinin ifşa edilmesine
sebep olabilir. Saldırı için kullanılan komutlar, güvenilmeyen girdiler
dinamik olarak sentezlendiğinde, enjeksiyon saldırıları her zaman
gerçekleşebilir. Noktalama işaretleri, (',*, <,>, vb) işaretleri ve meta
karakterler tipik olarak saldırı aracı olarak kullanılabilecekleri için girdi
doğrulamak veya potansiyel olarak tehlikeli dize girişlerini güvenli
olanlara dönüştürmek amacıyla geçici kod yazmak hem çok
zahmetlidir hem de tam olarak doğru olma ihtimali düşüktür. SQL
enjeksiyonları, komut enjeksiyonları, kod enjeksiyonları veya XML
enjeksiyonları en yaygın saldırı türlerindendir. Günümüzde yazılımları
en çok istismar eden saldırı türleri arasında SQL enjeksiyon, XSS
enjeksiyonu, XML enjeksiyonu, kaba kuvvet saldırıları bulunmaktadır.
SQL enjeksiyonu veri tabanına sahip yazılımlarda bulunan SQL
cümleleri kullanılarak gerçekleştirilmektedir. Yazılımın veri
tabanındaki verilerin ele geçirilmesi, silinmesi veya değiştirilmesi gibi
işlemlerin gerçekleştirilmesi için yapılır. XSS enjeksiyonu ise javascript
veya ajax gibi betik diller ile kullanıcıların çerez bilgilerinin ele
geçirilmesi ve yazılımlara yetkisiz erişimlerin gerçekleştirilmesine
sebep olur. Kaba kuvvet saldırıları, kullanıcı adı ve şifre girişi için
kullanılan web formlarına karşı yapılır. Web form alanlarında kullanıcı
adı ve şifre bilgilerini tahmin etmek için sürekli deneme yapılır. Eğer
şifreler kolay tahmin edilebilir olursa, kaba kuvvet saldırıları da
başarılı olur. Kaba kuvvet saldırıları robot yazılımlar kullanılarak
gerçekleştirilir. Kaba kuvvet saldırılarını engellemek için CAPTCHA
doğrulama özellikleri kullanılır. Web uygulamalarındaki bir diğer
zafiyet türü ise kabuk (shell) komutlarında, XML'de oluşturulmuş,
özelleştirilmiş komut dosyalarında ortaya çıkabilir.
•Güvenli yazılım geliştirme yöntemleri kullanılarak bu tür saldırılar
engellenebilir. Web yazılımları geliştirilirken dikkat edilmesi gereken
en önemli güvenlik ilkeleri girdi doğrulama, kimlik doğrulama,
yetkilendirme, parola yönetimi ve log yönetimi işlemleridir. Yazılım
geliştirilirken bu ilkelere dikkat edilirse, geliştirilen yazılımlar daha
güvenli olabilir. Web yazılımlarında bulunan zafiyetler yazılım
geliştirme sürecinde, yazılım tasarımından veya yazılım geliştirme
uzmanından kaynaklanabilir. Güvenli yazılım geliştirilirken, yazılım
geliştirme yaşam döngüsü aşamalarının tamamında güvenlik
ilkelerine uyulmalıdır. Yazılım geliştirme uzmanlarının da güvenli
yazılım geliştirme bilgisine sahip olması gereklidir ve bilgi güvenliği
farkındalığına sahip olmalıdırlar. Böylece yazılımlarda istenmeyen
kötücül komutların yürütülmesine izin vermeyen, meta karakterlerin
(noktalama işaretleri) uygun olmayan şekilde kullanılmasını
engelleyen, kullanıcı girdilerinin doğrulanarak işlendiği güvenli
yazılımlar geliştirilir.

328
Atatürk Üniversitesi Açıköğretim Fakültesi 16
Güvenli Web Programlama

DEĞERLENDİRME SORULARI
1. Yazılım geliştirme süreçlerinde güvenlik ilkelerine uymanın avantajları
arasında aşağıdakilerden sayılamaz?
a) Güvenli yazılım geliştirme ilkelerini benimseyerek güvenlik riskini
azaltmak.
b) Yazılım tasarım aşamasından itibaren güvenlik ilkelerine uyma
c) Geliştirme maliyetlerinin azaltılması.
d) Güvenlik metodolojisi kullanarak tamamlama süresini planlama.
e) Yazılımın müşteriye teslimi aşamasında güvenlik önemlerini almak.

2. Statik kaynak analiz araçları için aşağıdakilerden hangisi doğrudur?


a) Uygun bir yazılım için testçi ve geliştiriciler değil denetçiler de
olmalıdır.
b) Doğrudan erişim ile kaynak kod üzerinde gerçekleştirilir.
c) Beyaz kutu olarak adlandırılır.
d) Yerine kullanılabilirlik için tasarım, mimari ve dağıtım süreçlerinden
oluşur.
e) Kullanıcılara En Az Yetki verilmesi ilkesidir.

3. CAPTCHA kullanımının amacı aşağıdakilerden hangisinde doğru


verilmiştir?
a) Girdilerin robot yazılımlardan geldiğini doğrulamak.
b) Girdilerin robot yazılımlardan değil, gerçek kişi tarafından girildiğini
doğrulamak.
c) Gerçek kişi veya robot tarafından hiçbir veri girilmediği doğrulamak.
d) Girdilerin bir insandan ve bir robottan girildiğinden emin olmak.
e) Girdilerin noktalama işareti veya meta karakter doğrulamasını
yapmak.

4. "Kara kutu" testinin amacı aşağıdaki seçeneklerden hangisinde doğru


verilmiştir?
a) Üretim uygulamalarındaki zafiyetleri belirler.
b) Yararlanma potansiyelini ölçmek için zafiyetleri belirler.
c) Kodlama hataları için kaynak kodunu denetler.
d) Bilinen bütün tehditleri belirler.
e) Kötüye kullanımı ifade eder.

329
Atatürk Üniversitesi Açıköğretim Fakültesi 17
Güvenli Web Programlama

5. Yazılım güvenliğini en iyi ne zaman değerlendirmek gerekir?


a) Test sırasında.
b) Geliştirme sırasında.
c) Tasarım sırasında.
d) Bakım sırasında.
e) Uygulama geliştirmenin tüm aşamalarında

6. Aşağıdaki seçeneklerin hangisinde beyaz kutu testi ile kara kutu testi
arasındaki fark en doğru şekilde açıklanmıştır?
a) Beyaz kutu testi, bağımsız bir programcı ekibi tarafından
gerçekleştirilir.
b) Kara kutu testi aşağıdan yukarıya yaklaşımı kullanır.
c) Kara kutu testi, iş birimlerini içerir.
d) Beyaz kutu testi, yazılımın dâhili mantıksal yapılarını inceler.
e) Kara kutu testi belli olmayan yöntemlere karşı yapılır.

Tanım: Yazılımlarda kişisel gizliliğin ve özel bilgilerin korunmasına yönelik


araçlar da dâhil olmak üzere, bilgi erişimi ve ifşasına ilişkin kısıtlamaların
oluşturulmasıdır.
7. Yukarıdaki tanım, aşağıdaki seçeneklerin hangisine aittir?
a) Kullanılabilirlik.
b) Bütünlük.
c) Gizlilik.
d) Kimlik Doğrulama.
e) Girdi Doğrulama.

8. Ağ güvenlik zafiyeti değerlendirmesi ile sızma testi arasındaki fark


aşağıdaki seçeneklerin hangisinde doğru verilmiştir?
a) Sızma testi, kaynakları sıralar ve güvenlik açığı değerlendirmesi,
güvenlik açıklarını sıralar.
b) Ağ güvenlik zafiyet değerlendirmesi ve sızma testi aynıdır.
c) Sızma testi, çalışan hizmetleri tanımlar ve güvenlik açığı
değerlendirmeleri, güvenlik açıklarının daha derinlemesine
anlaşılmasını sağlar.
d) Sızma testi, güvenlik açıklarından yararlanır ve güvenlik açığı
değerlendirmesi, güvenlik açıklarını bulur.
e) Sızma testleri yazılım uygulamaları için, ağ güvenlik testi
değerlendirmeleri ise ağ alt yapıları için yapılır.

330
Atatürk Üniversitesi Açıköğretim Fakültesi 18
Güvenli Web Programlama

9. Aşağıdakilerden hangisi güvenli yazılım geliştirme yöntemlerine dikkat


edilmeden geliştirilen Web uygulamalarını hedef alacak bir saldırı türü
değildir?
a) SQL Enjeksiyonu
b) Kaba Kuvvet Saldırıları
c) XML Enjeksiyonu
d) XSS Enjeksiyonu
e) Hizmet Aksatma (DOS, DDOS)

10. Yönetici kimlik doğrulaması gereksinimleri aşağıdakilerden hangisinde


doğru tanımlanmıştır?
a) Normal kullanıcılar için eşdeğer seviyede olmalıdır
b) Tüm yöneticiler daha güvenilir olduğu için normal kullanıcılardan
daha az doğrulama katmanına sahip olabilirler.
c) Yöneticiler için kimlik doğrulama yapılmasına gerek kalmayabilir.
d) Normal kullanıcılardan daha fazla yetki ile doğrulama yapılmalıdır.
e) Doğrulama işlemlerinde bütün kullanıcılar gibi aynı seviyede
doğrulama yapılmalıdır.

Cevap Anahtarı
1.e, 2.d, 3.b, 4.d, 5.e., 6.d, 7.c, 8.d, 9.e, 10.d

331
Atatürk Üniversitesi Açıköğretim Fakültesi 19
Güvenli Web Programlama

YARARLANILAN KAYNAKLAR
Eduardo Fernandez-Buglioni (2013), Security Patterns in Practice: Designing
Secure Architectures Using Software Patterns, John Wiley & Sons
Barnat, J., Brim, L., Ročkai, P. (2007). Scalable Multi-core LTL Model-
Checking. Model Checking Software, Vol. 4595, Lecture Notes in
Computer Science
Mark S. Merkow, Lakshmikanth Raghavan (2010), Secure and Resilient
Software Development, Auerbach Publications
Long, F., Mohindra, D., Seacord, R. C., Sutherland, D. F., & Svoboda, D.
(2013). Java coding guidelines: 75 recommendations for reliable and
secure programs. Addison-Wesley
OWASP ASVS 3.0.1, Application Security Verification Standard ASVS
https://www.owasp.org/index.php/Category:OWASP_Application_Se
curity_Verification_Standard_Project, Erişim tarihi: 20121
Jerome H. Saltzer and Michael D. Shroeder, “The Protection of Information
in Computer systems,” Proc. IEEE Vol. 63, Issue 9, September 1975,
pp.
SEI CERT Coding Standards, https://www.securecoding.cert.org/ . Erişim
tarihi: 2021
Secure Coding in C and C++, 2nd edition Pearson Education
Woodcock, J., Larsen, P.G., Bicarregui, J. & Fitzgerald, J., “Formal Methods:
Practice and Experience,” ACM Computing Surveys, Vol. 41, Issue 4,
Ekim 2009, pp.
Farid, D. M., Harbi, N., Bahri, E., Rahman, M. Z., and Rahman, C.M., (2010).
Attacks Classification in Adaptive Intrusion Detection using Decision
Tree, World Academy of Science, Engineering and Technology.

332
Atatürk Üniversitesi Açıköğretim Fakültesi 20

You might also like