You are on page 1of 66

WEB TASARIM/ROGRAMLAMA

DERS NOTLARI
Bir Web Tasarımcısı/Programcısı Neleri Bilmelidir?

™ HTML 4.01 -- XHTML

™ CSS (Cascading Style Sheets)

™ Web Tabanlı Grafik Programı


™ Adobe Photoshop, Flash v.s.
™ Client Side Scripting (İstemci Tarafı)
™ Java Script (dinamik, etkileşim, olaya yanıt, formların kontrolü)
™ Server Side Scripting (Sunucu Tarafı)
™php, asp, jsp, servlet, cgi, Cold Fusion …
(daha dinamik, veritabanı sorgulama, gelişmiş güvenlik ve erişim kontrolü
v.s.)

™ SQL ile veritabanı yönetimi

™ XML, AJAX …

Temel Bilgiler
İnternet?

™ Ağlar Arası Ağ
™ Dünya genelindeki bilgisayarların oluşturduğu büyük ağ

™ İlk olarak 1960 larda Amerikada askeri amaçlı olarak kuruldu

™ İnternet e bağlı her bilgisayar IP olarak adlandırılan bir adrese sahiptir. (194.27.72.1)

™ Ve haberleşmek için IP (Internet Protocol) adresini kullanırlar.

1
URL (Universal Resource Locator) ?

™ İnternet üzerindeki kaynakları göstermek için kullanılan adresleme biçimi.

™ İnsanlar tarafından IP adresi yerine URL kullanılır.

™ URL Adres yapısı:

protokol://sunucu.ağ.adresi:port_numarası/alt_klasörler/.../istenen kaynak

™ Örnek URL adresleri:

http://gama.kou.edu.tr:80/tef/anagiris.htm
ftp://tef.kou.edu.tr/elobil/ECTS.zip
gama: bilgisayar adı
kou:ağın hangi kuruluşa ait olduğunu gösterir
edu: kuruluşun tipi
tr: ülke kodu
Not: URL ile IP adresi arasındaki dönüşüm DNS (Domain Name System) Sunucular
tarafından yapılır.

Web Nedir?

™ İnternet üzerinde çok sayıda servis vardır (www (web), ftp, telnet, mail, irc ...)

™ www= world wide web

™ web servisinde bilgisayarlar haberleşmek için HTTP (Hyper Text Transfer Protocol)
standardını kullanırlar.

2
Web Nasıl Çalışır?

™ Web bilgileri web sayfalarında saklanır.

™ Web sayfaları Web Sunucusunda (Web Server) saklanır.

™ Web sayfalarını okuyan bilgisayarlara Web İstemcisi (Web Client) denir.

™ Web istemcileri sayfaları Web Tarayıcı (Web Browser) denilen programlarla


görebilir.

Netscape Navigator, Internet Explorer, Mozilla Firefox , Opera v.s.

Web Nasıl Çalışır?

1
Tarayıcı Web
sayfası için
istekte bulunur.
3
Web Sunucu
2 sayfayı
tarayıcıya
Web Sunucu gönderir.
sayfayı bulur.

3
Web Uygulamasının Yapısı

1
Tarayıcı Web
sayfası için 5
istekte bulunur. Web Sunucu
sayfayı
tarayıcıya
2 gönderir.
Web Sunucu
sayfayı bulur ve
uygulama
sunucusuna 4
gönderir. Uygulama
sunucusu sayfayı
3 Uygulama web sunucuya
sunucusu gönderir.
komutları
yerine getirir.

4
İnternet Tarayıcı Sayfaları Nasıl Getirir?

™ Tarayıcı tarafından Web Sunucuya istekte bulunulur.

™ İstekte bulunma, web sayfasının adresi tarayıcı adres satırına yazılarak yapılır.
™ Örnek bir adres : http://www.kou.edu.tr/tef/index.html

com : Ticari
gov : kamu
Mil : askeri Ülke kodu
Org : organizasyon
Edu : eğitim
Net : servis sağlayıcılar

5
İnternet Tarayıcı Sayfaları Nasıl Gösterir?

™ Tüm sayfalar nasıl gösterileceği ile ilgili komutlar içerir.

™ İnternet tarayıcı bu komutları yerine getirerek sayfaları gösterir.


™ En sık kullanılan web sayfası komutları HTML etiketleridir.
™ <b> bu bölümü koyu yaz </b>

6
Web Sayfası Tasarlarken Dikkat Edilmesi Gerekenler

™ Kullanıcılara anlatılmak istenen bilgi özellikle sayfanın başlarında çok net olarak
verilmelidir.

™ Bölümler, sayfalar, ifadeler, paragraflar çok kısa ve öz olmalıdır. Sayfalar ve


paragraflar arasında bırakılacak boşluk fazla olmalı. Tek sayfada çok sayıda cümle
olmamalı. Aşırı dolu görünen sayfalar kullanıcıyı sıkabilir.

™ Sitenin
tüm sayfaları için standart gezinti yapısı kullanılmalıdır. Text içerisine,
mümkün olduğunca, sitedeki farklı sayfalara erişim sağlayan gezinti bağlantıları
konmamalıdır. Bağlantılar genellikle sayfanın üstünde ya da altında olmalıdır.

™ Sayfanın mümkün olduğunca hızlı yüklenebilmsi sağlanmalıdır. İstatistikler


kullanıcıları, 7 saniye içerisinde yüklenemeyen sayfaları terkettiklerini göstermiştir.
Grafikler ve bazi çoklu ortam uygulamalari sayfaları yavaşlatabilir. Tasarlanan sayfalar
öncelikle düşük hızlı bağlantılar için test edilmeli.

™Kullanıcılardan geribesleme alınarak web sayfalarının eksik, hatalı ya da kullanışlı


olmayan bölümlerinin iyileştirilmesi oldukça etkili bir yaklaşımdır.

Web Kullanıcıları

™ Her kullanıcı aynı çözünürlükte ekrana sahip değildir. 800x600 çoğunlukla kullanılan
ekran çözünürlüğüdür ve sayfaların bu çözünürlükte tasarlanmaları daha uygun olur.

™ Profesyonel bir sayfa tüm tarayıcılarda çok iyi çalışabilmelidir. Bu nedenle web
sayfasında kullanılan HTML etiketleri ya da diğer bileşenler her tarayıcıda çalışabilmelidir.

™ Sayfalarda bulunan ses, video ve çoklu ortam uygulamaları gibi bileşenler ayrı
programlar ya da plug-ins gerektirebilir. Sayfayı ziyaret edenlerin bu bileşenlere sahip
olamayacaklarına eminseniz kullanılmaması gerekir.

7
Web Standartları

™ Kullanıcılar farklı donanımlar ve farklı yazılımlar kullanarak web sayfalarında yer


alan aynı bilgiye ulaşıyorlar.

™Tüm bu donanım ve yazılımlar kendilerine özgü ihtiyaçlara sahip olurlarsa web


sayfası geliştirmek oldukça zorlaşır. Bu nedenle web için donanım ve yazılım geliştiren
tüm firmalar standartlara uymalı.

Standardlar sayesinde;

™ web tasarımcılarının aynı sonuca ulaşmak için farklı kod uyarlamalarıyla


uğraşmalarına gerek kalmaz.

™ web tasarımcılarının takım çalışması yapmasını kolaylaştırır.

™ siteye erişimi artırır


™ arama motorlarının aramalarını ve indekslemelerini kolaylaştırır.

W3C: World Wide Web Consortium, 1994

HTML, XHTML, CSS, XML, XSL, DOM

ECMA: European Computer Manufacturers Association

Netscape-> JavaScript
Microsoft-> JScript.

8
HTML (Hyper Text Markup Language)

SGML HTML

HTML 4

XML XHTML

SVG

MathML

SGML (Standard Generalized Markup Language): HTML dilini geliştirmek


için kullanılan meta dil.
XML (Extensible Markup Language): SGML den türetilmiş, XHTML gibi bir
çok dili geliştirmek için kullanılan meta dil.

9
1. HTML

HTML (Hyper Text Markup Language) internet ortamında doküman oluşturmak için geliştirilmiş bir
işaretleme (mark-up) dilidir. HTML dökümanı bir text dosyadır ve tek başına bir yazı olmaktan öteye
gidemez. Ancak her hangi bir internet tarayıcısı (internet explorer, netscape navigator gibi ) yardımıyla
çalıştırıldığında içerdiği komutlara göre ve de tarayıcı programın desteklediği özelliklere göre,
hazırlanan dökümanlar bir anlam kazanır.

Gelişen tarayıcı (browser) teknolojileri sayesinde, HTML içine yazılar dışında resim, ses, video, Java,
JavaScript, VBScript gibi dillerle yazılmış programlar, ya da diğer nesneler de gömülebilir. Bu sayede
bir HTML dökümanı düzenlenmiş bir metin dosyası olmaktan çıkıp tam anlamıyla bir multimedia
ortamı olmaya da hizmet edebilir.

HTML dili programlama mantığından biraz uzak, görsel yönü oldukça ağır basan bir dildir. HTML in
öğrenilmesi, diğer programlama dillerine göre daha kolay olup bazı temel kural ve komutların
bilinmesi yeterlidir.

1.1. HTML dokümanlarının yapısı


Bir HTML dokümanı genel olarak (istisnaları vardır) aşağıdaki şekildedir:

Tablo 1.1. HTML dokümanlarının genel yapısı.

<HTML>
<HEAD>
<!-- Head elemanlary -->
Burada genelde döküman içeriği dışında kalan karakter set tanımlamaları, başlık,
JavaScript tanımlamaları vb elemanlar bulunur...
</HEAD>
<BODY>
<!-- Body elemanları -->
Burada ise dökümanın asıl içeriği vardır, içinde metin, ses, video vb içerebilir...
<BODY>
</HTML>

1.2. Temel HTML komutları

HTML dokümanı hazırlamak için her hangi bir metin dosyası oluşturabilecek bir editör olması
yeterlidir. Bütün yapılması gereken dokümanı HTML kurallarına uygun bir şekilde yazmak ve de
dosyayı ".htm" ya da ".html" olarak kaydetmektir. Ne derleme ne de ".exe" gibi dosyalara çevirme
işlemi yoktur. Hazırlanan sayfanın çalıştırılması için tek yapılması gereken bu dosyanın bir internet
tarayıcı programı tarafından çağrılmasını sağlamaktır.

10
<HTML></HTML>, <HEAD></HEAD>, <BODY></BODY>: HTML'in en temel blok tag'leridir.
Bir HTML dökümanı genelde <HTML> ile başlar ve </HTML> ile biter. Eğer <HTML> tag’i
verilmese bile, tarayıcı dokümanı sorunsuz olarak görüntüleyebilir. Aynı şey <BODY> için de
gereklidir. Farklı olarak, doküman içerisinde HEAD bloğu varsa, <BODY>'in de verilmesi
zorunludur. Parametre olarak birçok blok elemanı gibi LANG=Dil alır. Örneğin <BODY LANG=tr>.

<TITLE></TITLE> : İlk öğrenilmesi gereken tag'lerden biridir. Kullanımı basittir ve HEAD


bloğunda kullanılır. Dokümana başlık verilmesini sağlar.

<P></P> : Paragraf açma kapama tag'leridir. Yeni bir paragraf açarken/kapatırken kullanılır. Tarayıcı
<P> tag'iyle karşılaştığı yerde yukarıdan ve aşağıdan biraz boşluk bırakır. Çoğu tarayıcı kapama
tag'inin olmasına ihtiyaç duymaz.
Yararlı bir parametre olarak ALIGN=LEFT|CENTER|RIGHT alabilir.
<P ALIGN="CENTER">Metin....<P> dediğiniz zaman aradaki bütün metin sol tarafa yaslı değil
ortalanmış görülür. RIGHT ise yazıyı sağa dayar.

<BR> : Satır sonu tag'i. Kapama tag'i yoktur. <P> gibi altta, üstte boşluk bırakmadan yeni bir satır
açar.

<HR> : Yatay çizgi tag'i. Parametre olarak ALIGN=LEFT|CENTER|RIGHT, WIDTH=xx%, SIZE=x


ve NOSHADE alabilir. WIDTH ile yüzde olarak genişliği verilebilir. SIZE'ın varsayılan değeri 2'dir.
NOSHADE 3 boyut etkisini kaldırmak için kullanılır.

<B></B> : Kalın yazı tag'i. İçeride kalan bütün metin kalın harflerle görüntülenir. Ancak yeni HTML
standartlarını hazırlayan organizasyon <B></B> yerine ileriki günlerde <STRONG></STRONG>
kullanılmasını önermektedir.

<I></I> : İtalik yazı tag'i. İçeride kalan bütün metin italik harflerle görüntülenir. Yine
<STRONG></STRONG> gibi, <I></I> yerine <EM></EM> (emphasis) kullanılması önerilmektedir.

<H1></H1>...<H6></H6> : Başlık tag'leri. dokümanı çeşitli bölümlere ayırmak ve bunları belirtmek


için kullanılır. ALIGN=LEFT|CENTER|RIGHT parametresi alabilir.

<OL></OL> ve <LI> : Numaralandırılmış liste (ordered list) tag'leri. <OL> ve </OL> listeyi açma ve
kapama için, <LI> ise yeni bir eleman tanımlamak için kullanılır. Numaralar otomatik olarak verilir.

11
<UL></UL> ve <LI> : Numaralandırılmamış liste (unordered list) tag'leri. <UL> ve </UL> listeyi
açma ve kapama için, <LI> ise yeni bir eleman tanımlamak için kullanılır. Numara yerine madde imi (
bullet ) konur.

<FONT></FONT>: Karakter tipini, puntosunu, rengini vermek için kullanılır. Çok kullanılan
tag'lerden biridir. Parametre olarak FACE=Font_İsmi (Arial, Helvetica vs gibi), SIZE=x|+/- x
(SIZE="3", SIZE="-1" vs gibi), COLOR=#RRGGBB|Renk_İsmi (COLOR="#808080" vs gibi)
alabilir. HTML 4.0'da iptal edilmiştir.

<BASEFONT> : Dokümanın genel yazı tipini belirtmek için kullanılır. Parametreleri <FONT>
tag'ininkilerle aynıdır. HTML 4.0'da iptal edilmiştir.

<A></A> : Anchor tag'i. HTML'in HTML olmasını sağlayan tag'dir. Metin içinde bir başka yere,
Internet üzerinde herhangi bir dökümana, resme ya da herhangi bir servise ulaşılabilmesini sağlar. En
gerekli parametre olarak HREF=Kaynak_İsmi alır.

Kaynak kısmında kullanılabilecek isimlere örnek olarak:

HREF=table_of_contents.html
HREF="../"
HREF=../MySubDir2/TarDosyası.tar
HREF="http://www.kou.edu.tr" /
HREF="ftp://cu:cork@efe.ulakbim.gov.tr/" (ftp client'ını açar, efe'ye bağlanır ve kullanıcı ismi olarak
cu, password olarak cork verir
HREF=telnet://efe.ulakbim.gov.tr/"
HREF=mailto:cu@ulakbim.gov.tr?subject=HTML%20hakkında+cc=cu%40reborn.com (e-mail
client'ını açar, cu@ulakbim.gov.tr adresine, subject'i HTML hakkında olan ve bir kopyası da
cu@reborn.com'a gönderilecek bir e-mail taslağı çıkartır. Dikkat edilirse, boşluk yerine %20, @ işareti
yerine %40 kullanılmıştır. %Karakter_Hex_Kodu olarak istediğiniz karakteri kullanabilirsiniz. İlk
parametreden önce ?, sonrakilerden önce de + kullanılır.)
HREF="javascript:alert('Gidebilir miyim')" (bir JavaScript kodu çalıştırır, ve ekrana üstünde Gidebilir
miyim? yazan ve OK tuşu olan bir diyalog kutusu çıkartır.)
Ayrıca bir diğer parametresi NAME=Anchor_İsmi'dir. Bu şekilde bir anchor tanımladığında döküman
içinde istenen herhangi bir yerden tam bu noktaya dallanma yapmak mümkün olur. Örneğin sayfa en
tepesine “<A NAME=docTop><A>” eklendiği zaman sayfanın en altına eklenen “<A
HREF=#docTop> Üste gitmek için tıklayınız.</A>” link'iyle dökümanın en üstüne geri dönülebilmesi
sağlanır. # işareti önemlidir ve link'in hedefinin bir anchor olduğunu gösterir.

12
<BASE> : Doküman içinde bütün URL'leri uzun olarak vermemek için bir ön-ek URL tanımlamada
kullanılır. Örneğin <BASE HREF = http://www.kou.edu.tr/> verildiği zaman <A HREF = index.html
> İçindekiler </A> link’ i bulunulan dizindeki değil, http://www.kou.edu.tr/ adresindeki index.html
adresine yönelir. Yine de bu şekilde bir kullanım pek tavsiye edilmemektedir. <BASE> <HEAD>
bloğunda kullanılmalıdır.

<IMG> : Doküman içine bir resim yerleştirmek için kullanılır. Parametre olarak SRC=Resim_URL,
WIDTH = Genişlik, HEIGHT = Yükseklik, ALT = Alternatif_Text,
LOWSRC = Düşük_Çözünürlükteki_Resim_URL alabilir. BORDER= Çerçeve_Kalınlığı,
HSPACE=x, VSPACE=x (Yatay ve dikey boşluklar ) alabilir. Çok sık olarak bir <A HREF=....></A>
bloğu içine yerleştirilir ve görsel bir link oluşturulur.

<SUP></SUP> ve <SUB></SUB>:Sırasıyla superscript (üstsimge) ve subscript (altsimge) yazı için


kullanılır. Superscript yapılan yazı yukarıda, subcript yapılan yazı aşağıda görüntülenir. Örneğin X2
(superscripted) ve M1,2 (subscripted).

<BLOCKQUOTE></BLOCKQUOTE> : Alıntı yapmak için kullanılır. Genelde ise bir bloğu toptan
içeri indent etmek için kullanılır. Bu blok içerisindeki ifadeler tarayıcı tarafından yorumlanmadan
olduğu gibi ekrana yazılır.

<TT></TT> : Teletype (monospaced, sabit genişlikte) karakter kullanmak için kullanılır. Courier
tipik bir teletype karakter tipidir.

<PRE></PRE> : Önceden düzenlenmiş (preformatted) metin blokları için kullanılır. Normalde,


HTML birden çok boşluğu tek bir boşluk karakteriyle değiştirdiği için, görüntülenmesi başka türlü
mümkün olmayan metin blokları bu tag yardımıyla görüntülenebilir ( Tablo4.2. ).

Tablo 1.2. Önceden biçimlendirilmiş metin.

M T W T F S Su
---------------------------------
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

13
<CODE></CODE> : Örnek kod (C, Pascal vs gibi) verildiği zaman kullanılır. Genelde blok
içerisindeki ifadeler Teletype olarak gösterilir.

<ADDRESS></ADDRESS> : Adres bölümleri için kullanılır. Genelde blok içerisindeki ifadeler


italik olarak gösterilir.

<SAMP></SAMP> : Örnek çıktı (program, script vs) için kullanılır. Genelde blok içerisindeki
ifadeler Teletype olarak gösterilir.

<ACRONYM></ACRONYM> : Kısaltmalar için kullanılır. Parametre olarak


TITLE=Kısaltmanın_Açık_Hali alır. Örneğin, <ACRONYM title="World Wide
Web">WWW</ACRONYM>.

<APPLET></APPLET> : Döküman içine Java applet'i gömmek için kullanılır. Parametre olarak
CODE=Java_Class_Dosyası_URL'si, CODEBASE=Class_Dosyasının_Bulunduğu_Dizin,
ARCHIVE=JAR_Dosyası_URL, ALT = Alternatif_Metin, ALIGN = LEFT |CENTER|RIGHT ,
HEIGHT=Yükseklik, WIDTH=Genişlik, MAYSCRIPT (JavaScriptlerle haberleşebileceği) ve
NAME=İsim_Bilgisi alabilir. Ayrıca appletin kullanabileceği parametreleri de, istenildiği kadar
PARAM NAME=Applet_Parametresi_İsmi VALUE=Applet_Parametresi_Değeri kullanarak
verilebilir.

<SCRIPT> : Döküman içine JavaScript, VBScript gibi dillerle yazılmış programcıklar gömmek için
kullanılır. Parametre olarak LANGUAGE=Script_Dili_İsmi alabilir. Ancak HTML 4.0'da
LANGUAGE yerine TYPE parametresi getirilmiştir.
Örneğin <SCRIPT LANGUAGE="JavaScript 1.1"> yerine <SCRIPT TYPE=text/javascript>
kullanılmalıdır.

<META> : Parametre olarak bir çok şey alabilir, ancak en çok kullanılan iki tanesi HTTP-EQUIV ve
NAME'dir. Genel olarak bir de VALUE ya da CONTENT parametresi takip eder. Örnek olarak:
<META HTTP-EQUIV="Expires" CONTENT="Tue, 10 Jun 1998 12:30:00 GMT">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-9">
<META HTTP-EQUIV="Refresh" CONTENT="5" URL="http://www.kou.edu.tr/">
<META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript">
<META NAME="Generator" CONTENT="Visual Page 1.1 for Windows">

Yukarıdan da anlaşılabileceği gibi HTTP-EQUIV, HTTP protokolü tarafından desteklenen bazı


parametreleri vermek için kullanılır. Örnek olarak, 1. satırdaki tanımlama, dökümanın geçerlilik
tarihinin 10 Haziran 1998'de dolacağını belirtir. Bu tarihten sonra kullanıcının bu dökümanı cache'den
yüklemesi engellenir ve tekrar orijinal dökümana gitmesi zorlanır.

14
Tablolar : Tablolar, HTML içerisinde en çok kullanılan tag’ lerdendir.

<TABLE BORDER="2" CELLPADDING="3" CELLSPACING="1"


HEIGHT="200" WIDTH="90%" BGCOLOR="#A0A0A0">
<TR>
<TD>1. sütun 1. satır</TD>
<TD>2. sütun 1. satır</TD>
</TR>
<TR>
<TD>1. sütun 2. satır</TD>
<TD>2. sütun 2. satır</TD>
</TR>
<TR>
<TD>1. sütun 3. satır</TD>
<TD>2. sütun 3. satır</TD>
</TR>
</TABLE>

<TABLE> tag'ini açarken BORDER="2" ile çerçevenin kalınlığının 2 pixel, CELLPADDING="3" ile
hücre içindeki yazı ile çerçevesi arasında 3 pixel, CELLSPACING="1" ile hücreler arasında 1'er pixel
olacağı, HEIGHT="200" ile yüksekliğinin 200 pixel olacağı, WIDTH="90%" ile genişliğin tarayıcı
penceresinin %90'ı olacağı ve en son olarak da BGCOLOR="000080" ile arka alan renginin kodu
verilmiş oldu. Bu parametrelerden hiçbiri verilmemiş olsaydı, tarayıcı genişlik, yükseklik ayarlarını
hücre içlerindeki dataya göre otomatik yapardı ve kalınlık ve arka alan rengini de varsayılanlardan
atardı. Burada dikkat edilmesi gereken bir şey, verilen yükseklik veya genişlik değerleri, hücre
içindeki elemanlardan küçükse, verilen değerler ihmal edilir ve hücre içindeki elemanları tam olarak
alabilecek en küçük değerler kullanılır.

Tablo tanımlamaları her zaman için satır satır yapılır. Yukarıda görüldüğü gibi <TR> (table row) ile
yeni bir satır açılır, ve altına da <TD> (table data) ile yeni bir sütun açılır. Sütunun bittiği </TD> ile ve
satırın bittiği de </TR> ile belirtilir. Tablonun bittiği </TABLE> ile belirtilir.

Bu tabloda birinci satırda 2 yerine 1 tane sütun oluşturulması istenseydi ilk satır aşağıdaki gibi
yazılırdı.

<TR>
<TD COLSPAN="2">1. satır, başlık satırı olabilir</TD>
</TR>

15
Bu tabloda birinci satırda 3 yerine 1 tane sütun oluşturulması istenseydi ilk satır aşağıdaki gibi
yazılırdı.

<TR>
<TD COLSPAN="3">1. satır, başlık satırı olabilir</TD>
</TR>

Aynı şekilde 1. sütunda 3 satır yerine tek bir satır kullanmak için:

<TR>
<TD ROWSPAN="2">1. sütun, başlık sütunu olabilir</TD>
</TR>

Aynı şekilde 2. sütunda 3 satır yerine 1 satır kullanmak için:

<TR>
<TD ROWSPAN="3">1. sütun, başlık sütunu olabilir</TD>
</TR>

Veri Giriş Formları: Veri giriş formları genelde bir sunucuya bilgi göndermek veya almak için
kullanılır. Çok yaygın olarak sunucu tarafında CGI (Common Gateway Interface) kullanılarak
gönderilen bilgi işlenir. CGI programları en çok Perl dilinde yazılmakta, ancak PHP, C, C++, Java,
Unix shell'leri, Phyton, Dos batch file'ları, ya da Windows exe'leri de olabilmektedir. Ayrıca CGI'a
alternatif olarak Servlet (Sun firmasının yazdığı Server-Side Java applet'leri), ColdFusion (Allaire
firması yazmıştır.) ASP (Microsoft firmasının yazdığı Active Server Page), JSP (Sun firmasının
yazdığı Java Server Page), LiveWire (Netscape'in tanımladığı Server-Side JavaScript) de
bulunmaktadır.

İnternet'te çok sık olarak isim, yaş, meslek v.s. gibi bilgilerin istendiği formlarla karşılaşılmaktadır.
Şekil 1.1.’de örnek bir form gösterilmiştir.

Bu formdaki ilk üç eleman TEXT-BOX' tır. Sonraki sırada çok seçenekten yalnızca birinin
seçilebilmesine olanak tanıyan RADIO-BUTTON' lar bulunmaktadır. Meslek seçimine olanak
sağlayan kontrol ise bir DROP-DOWN COMBO-BOX' tır. Düşüncelerin yazılabildiği büyük
kontrolün adı TEXT-AREA’ dır. Bir altta ise onay durumuna göre evet/hayır gibi bir anlamı olan

16
CHECK-BOX' bulunmaktadır. En altta ise formu doldurduktan sonra göndermek için kullanılan
SUBMIT ve form'u ilk haline getirmek için kullanılan RESET düğmesi vardır.

Celal

Adınız:

E-mail adresiniz cceken@kou.e

Şifreniz:

Kullanım tipi: Ticari Kişisel

Mesleğiniz:

Düşünceleriniz:

Yeni bir sürüm çıktığında e-mail adresime bilgi


gönderiniz.

Gönder Temizle

Şekil 1.1. Form örneği.

Şekil 1.1. deki formun HTML kodları

<FORM ACTION="http://www.kou.edu.tr/formaction.cfm" METHOD="post">


Adınız:
<INPUT TYPE="text" NAME="isim" SIZE="25" VALUE="">
E-mail adresiniz:
<INPUT TYPE="text" NAME="email" SIZE="25" VALUE="">
Şifreniz:
<INPUT TYPE="PASSWORD" NAME="pass" SIZE="25" VALUE="">
Kullanım tipi:
<INPUT TYPE="radio" NAME="kultip" VALUE="tica" CHECKED>Ticari
<INPUT TYPE="radio" NAME="kultip" VALUE="kisi">Kişisel

17
Mesleğiniz:
<SELECT NAME="meslek">
<OPTION SELECTED>Öğrenci</OPTION>
<OPTION>Serbest</OPTION>
<OPTION>Kamu</OPTION>
</SELECT>
Düşünceleriniz:
<TEXTAREA NAME="TextArea" ROWS="7" COLS="35"> </TEXTAREA>
<INPUT TYPE="CHECKBOX" NAME="sendmail" CHECKED>
Yeni bir sürüm çıktığında e-mail adresime bilgi gönderiniz.
<INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Gönder">
<INPUT TYPE="RESET" NAME="Reset" VALUE="Temizle">
</FORM>

2. Web Grafik

2.1. Giriş
WEB tasarımı ve grafik eğitimi kurs programında, görsel web tasarım editörleri kategorisinde "benzeri
programlar içinde kullanımı en kolay olanı" ve tasarımcıyı kodlarla uğraştırmayan Macromedia
Dreamweaver programını öğreneceğiz. Aşağıdaki resimde Macromedia Dreamweaver programının
genel görünüşü verilmektedir.

Şekil 2.1. Dreamweaver programının görünüşü.

18
Uygulama No 1
Uygulama Adı Bir Metin Parçasının Biçimlendirilmesi
Amaç Properties menü çubuğunun kullanımını öğrenme

Bu ilk deneyimizde dreamweaverda yazı işlemlerinde birkaç özellikten bahsedeceğiz. Dreamweaver


editöründe çoğu işlem, properties (özellikler) menü çubuğu kullanılarak gerçekleştirilir.

Aşağıdaki örnekte yazılan yazının, fontu, büyüklüğü, sayfadaki hizalanması, rengi, kullanılacaksa
madde numaralandırılması, link verilmesi gibi işlemler bu menü kullanılarak yapılır.

Dreamweaverda bir satırdan diğerine geçerken (enter tuşuna basılarak) yani yeni paragrafı başlatırken
iki satır arasında büyük bir boşluk vermektedir. Bunu engellemek için yani iki satır arasında para

Enter Shift+Enter
Dreamweaver Dreamweaver
Öğreniyorum
Öğreniyorum

Yazılan metin içerisinde özel karakterler varsa, bunlar Characters menüsündeki seçenekler
kullanılarak yapılır.

Line Break: Satır sonunu belirtir. Bir satırı bitirip, diğer satırın başlangıcına geçer.
Non-Breaking Space: Kelimeler arasına bir karakter boşluk bırakır. Kısa yolu Ctrl+Shift+Space
Characters çubuğundaki diğer sekmeler, özel karakterlerin tanımlarıdır.

19
Uygulama No 2
Uygulama Adı Link verme işlemleri
Amaç Aynı sayfa içerisinde bir noktaya, farklı sayfalara, bir web browsera ve bir e-mail
adresine link verebilmeyi öğrenme

Aynı sayfa içerisinde bir noktaya link verebilme


Aşağıdaki örnekte görüldüğü gibi aynı sayfa içerisinde bir noktaya gitmek için, önce gidilecek noktaya
aşağıdaki şekilde daire içine alınmış olan Common menüsünden Named Anchor yerleştirilir.
Yerleştirme sırasında bu çapa olarak adlandırılabilecek Named Anchor’a bir isim verilir. Daha sonra
bu çapanın bulunduğu yere gönderecek olan linkin tanımlanması gerekir. Yine örnekte görüldüğü
üzere sona git yazısı seçilerek, properties menüsünden link kısmına #anchorın adı yazılır.

Sayfalar arasında link verme işlemi


Sayfalar arasında link verirken, link verilen gidilmesi istenen sayfanın yeri aşağıdaki şekilde daire
içerisinde alınan browser yoluyla tanımlanır.

Link verilen sayfanın bulunulan sayfa içerisinde mi yoksa, yeni bir sayfa içerisinde mi açılacağını
Target: kısmındaki seçenek belirler. Burada,
Blank: yeni bir sayfada açılması
Self veya Parent: Bağlantının verilen sayfa ya da çerçeve içerisinde açılmasını sağlar.
Top: çerçeve yapısı kullanılıyorsa, tüm çerçeveler kapatılıp, yeni sayfa içerisinde açılır.

20
Bir web adresine link verme işlemi
Aşağıdaki örnekte Kocaeli Üniversitesi üzerine tıklandığında link satırında tanımlı olan
http://www.kou.edu.tr adresine gidilir.

Mail adresi tanımlama


Bir mail adresi tanımlamak için Common menüsünden, Email Link seçilir. Email link seçildiğinde
aşağıdaki pencere karşımıza çıkar. Burada sayfa içerisinde email verilecek linkin adı text kısmına, e-
mail adreside E-Mail kısmına yazılır. Aşağıdaki örnekte görüldüğü gibi, limep e-mail adresi
tanımlanmıştır. Şekle dikkat edilecek olursa, tanımlama sonunda sayfadaki limepin properties
çubuğunda link kısmında mail adresi tanımlanmıştır.

21
Uygulama No 3
Uygulama Adı Resim işlemleri
Amaç Resim ekleme, bir resme link verebilme ve resimler üzerinde işlemler yapabilme

Bir web sayfasını güzelleştirmenin en kolay yolu resimler eklemek ve resimler üzerinde işlemler
yapabilmektir.
Bir resim eklemek ve resme link vermek
Resim eklemek, Common menüsündeki Image seçeneği ile ya da Insert menüsünden image seçeneği
ile yapılır. Image tıklandığında browser açılır ve sizden sayfaya eklenecek resmin bulunduğu yolun
tanımlanması istenir. Resmin bulunduğu klasör, properties çubuğundaki Src kısmında görülmektedir.
Yine properties araç çubuğunda link kısmına gidilmesi istenen sayfanın adresi yazılarak resme link
verilir.

Properties çubuğundaki bazı özellikleri öğrenelim.


W (genişlik) ve H (boy): Eklediğimiz resmin boyutunu belirleyebiliriz.
V_Space ve H_Space: Resmin kenar boşluklarını ayarlarız.
Alt: Resmin üzerine gelindiğinde gözükmesini istediğimiz yazı girilir.
Align: Resmin bulunduğu yeri, sağ, sol, üst, alt şeklinde düzenlemek için kullanılır.
Target: Bağlantının nerede açılacağını belirler. Burada aşağıdaki seçeneklerden biri seçilir.
Blank: yeni bir sayfada açılması
Self veya Parent: Bağlantının verilen sayfa ya da çerçeve içerisinde açılmasını sağlar.
Top: çerçeve yapısı kullanılıyorsa, tüm çerçeveler kapatılıp, yeni sayfa içerisinde açılır.

22
Yukarıdaki şekilde Kou amblemine Kocaeli üniversitesi web sayfası için link verilmiştir. Bu resme
tıklanıldığında Kocaeli üniversitesine yönlendirilir. Ancak bazı resimlerde sadece resmin bir noktasına
gelindiğinde bağlantının çalışması istenir. Bu da yukarıdaki şekilde properties araç çubuğunun sol alt
köşesinde görülen (daire içerisine alınmış) Map başlığı altında kare, daire kullanılarak gerçekleştirilir.
Resmin hangi kısmına gelince linkin aktif olması isteniyorsa o kısım Map kısmındaki diktörtgen ya da
daire kullanılarak belirlenir.

Örneğin sadece Kocaeli üniversitesi ambleminin tam ortasına gelindiğinde bağlantının çalışması
isteniyorsa, bu işlem şu şekilde yapılır. Burada alt başlığındaki yere farklı bir isim verilebilir.

Etkileşimli resim işlemleri


Bir resmin üzerine Mouse ile gelindiğinde başka bir resim açılmasını istiyorsak tasarım alanımıza
resim eklemek için Insert>Interactive images>Rollover image kullanılır.

23
Original Image: Sayfada doğrudan görülecek resim
Rollover Image: Mouse üzerine geldiğinde gözükecek resim
Alternate Text: Resmin üzerindeki açıklama yazısı
When Clicked, Go To URL: Resme tıklandığında gidilecek link

Yukarıda Rollover image kullanarak yalnızca tek bir resmin değişmesini sağladık. Birkaç resmin yatay
ya da dikey olarak yan yana bir menü çubuğu oluşturacak şekilde bir yapı Insert>Interactive
images>Navigation Bar kullanılarak gerçekleştirilebilir.

Navigation Bar kullanılarak gerçekleştirilen menü çubuğu görülmektedir.

Resimler kullanarak daha etkileşimli örnekler oluşturmayı Behaviors başlığı altında detaylı olarak
göreceğiz.

24
Uygulama No 4
Uygulama Adı Tablo kullanımı
Amaç Tablo kullanımını ve tablo özelliklerini öğrenme
Bir web sayfasının düzenli olmasını sağlayan en önemli yapı tablolardır. Tablolar satır ve sütunlar ile
bu satır ve sütunların kesiştiği ve hücre olarak adlandırılan dörtgensel alanlardan oluşur.
Bir sayfaya tablo en kolay Common menüsündeki Table seçeneği ile eklenir. Aşağıdaki şekilde bir
tablo eklenmesi ve tablonun özellikleri gösterilmektedir.

25
Uygulama No 5
Uygulama Adı Layer kullanımı
Amaç Layer(katman) kullanımını ve katmanların özelliklerini öğrenme

Buraya kadar olan kısımda resim ekleme ve tablo oluşturmayı gördük. Bunları oluştururken,
örneğin sayfaya ya da tablonun bir hücresine resim eklediğimizde onu sadece o alan içerisinde
sağa, sola ya da ortala şeklinde hareket ettirebiliyoruz. Bu sınırlamaları ortadan kaldırmak ve
daha özgür sayfalar oluşturmak için katmanlar (layer) kullanılır. Katmanları web
sayfalarınızda istediğiniz yere konumlandırabilirsiniz. Ayrıca katmanlar içerisine bir web
sayfanıza ekleyebileceğiniz çoğu elemanı da ekleyebilirsiniz.

Bir sayfaya layer en kolay Common menüsündeki Layer seçeneği ile eklenir. Aşağıdaki şekilde bir
katman eklenmesi ve katmanın özellikleri gösterilmektedir.

Bir sayfada çok sayıda Layer ile çalışırken, bir


layerın üzerinde işlem yapmak için seçilmesi
yandaki Layer pencerisi ile kolaylıkla yapılabilir.

26
Uygulama No 6
Uygulama Adı Timelines kullanımı
Amaç Timelines kullanarak basit flash animasyonları yapabilme

Dreamweaverda Timelines araç çubuğunu kullanarak animasyonlar yapabiliriz. Timelines ile sadece
layerlara bir hareketlilik verilebilir. Öncelikle Timelines çubuğunun özelliklerini tanıyalım. Bir layerı
sürükleyerek Timelines animasyon kanalı içerisine bırakırız. Sonra Behavior kanalı üzerinde başlangıç
noktasını belirler ve sonra gitmesi istediğimiz yöne doğru hareket ettiririz.

Nesnemizin birden fazla noktada hareket yönünün değişmesi istenirse, nesne üzerinde iken sağ tuşa
basılarak Add Keyframe eklenir.
Şimdi bir basket topunun bir potadan geçmesini sağlayacak animasyonu yapalım.

27
Uygulama No 7
Uygulama Adı Flash Buton ve Text Kullanımı
Amaç Flash Buton ve flash yazı uygulamaları geliştirebilme

Dreamweaver, kütüphanesinde tanımlanmış ya da flash kullanarak gerçekleştirilmiş birçok etkileşimli


flash butonunu kullanmaya imkan tanır. Flash butonlar üstlerine Mouse geldiğinde şekil değiştirirler.
Flash buton eklemek için Insert>Interactive images>Flash Button seçeneği kullanılır.

Flash metin oluşturmak içinde Insert>Interactive images>Flash Text seçeneği kullanılır. Bunla
rengi değişen yazılar yapılabilir. Bu seçenekte aşağıdaki pencere karşımıza çıkar.

28
Uygulama No 8
Uygulama Adı Frame (Çerçeve) Yapısının Kullanımı
Amaç Frame kullanarak web sayfası oluşturmayı öğrenme

Frame ya da Türkçe çerçeve "Bir tarayıcı ekranından aynı anda birden çok web sayfasını kendilerine
ait alanlar içinde yan yana sergilenmesini sağlayan bir yöntemdir" denebilir. Bir tarayıcı alanının
birkaç parçaya bölünerek kullanılmasını sağlar. Örneğin tarayıcı penceresinin sol kısmına menü
sayfasını, üstüne başlık sayfasını, sağ kısma ise menü sayfasında tıklanan linklerin açılacağı açıklama
sayfasını yerleştirebiliriz.

Çerçeve kullanımının avantaj ve dezavantajları şunlardır. Biz bunlardan yalnızca birkaçını sayıyoruz.
Avantajları:
• Sürekli sabit duran menüler ya da bir sayfanın üstünde yazı veyahut resmin durması istenirse
kullanışlıdır.
• Çerçeve kullanarak oluşturulan sayfaların birindeki değişiklik diğerini etkilemeyeceğinden
güncellemeler daha pratik ve hızlı olacaktır.
• Çerçeveler arası bağlantı vermek çok kolaydır.
Dezavantajları:
• Çerçeve kullanılmış bir sitedeki bir alt sayfayı sık kullanılanlarınıza ekleyemezsiniz.
Doğrudan sitenin ana sayfası eklenir.
• Farklı tarayıcı ve çözünürlüklerde sayfalar bozuk gözükür.

Frame oluşturmanın en kolay yolu kısa yol çubuklarından Frames’i kullanmaktır. Aşağıdaki şekilde
görüldüğü gibi sağ, sol, üst ya da alt kısma kolaylıkla çerçeve eklenebilir.

29
Frame’ler üzerinde kenar kalınlığının belirlenmesi, scroll kullanılıp kullanılmayacağı gibi işlemler ise
Window>Others>Frames seçilerek açılacak olan pencereden yapılır. Bu pencere ve bir frame’in
özellikleri aşağıda görülmektedir.

Frame kullanımında önemli bir noktada, çerçevelerin belirlendikten sonra kaydedilmesidir. File>Save
All seçildiğinde ilk önce tüm çerçevelerin birlikte görüldüğü UntitledFrameset-1 kaydedilecektir.
Sonra sıra ile yukarıda tanımlandığı gibi sol ve üst çerçevelerin kaydedilmesi istenecektir.

Çerçeve yapısının en kullanışlı yanı çerçeveler arasında link verebilmektir. Örneğin sol çerçevemizde
bir link verip bu linki yukarıdaki ilk şekilde açıklama kısmı olarak belirttiğimiz orta isimli çerçeve
içerisinde açılmasını aşağıdaki şekilde görüldüğü gibi Target seçeneğinde orta çerçevesini seçerek
yaparız.

30
Uygulama No 9
Uygulama Adı Template (Şablon) Kullanımı
Amaç Template kullanımını öğrenme

Düşününki onlarca sayfadan oluşan bir site yaptınız ve sitenizdeki tüm sayfalarda gözükmesini
istediğiniz yeni bir link verme ya da bir resim ekleme ihtiyacınız oldu. Böyle bir durumda tüm
sayfaları tek tek düzeltmeniz gerekmektedir. Bu durumu ortadan kaldırmak ve onlarca ya da yüzlerce
sayfadaki standart bir değişikliği sadece tek bir sayfa da (şablonunuzda) yaparak tüm sitenizde etkili
olması için template (şablon) kullanmak zorundasınız. Template sayfaların müdahale edilebilen ve
müdahale edilemeyen yapısıyla bu işlemi gerçekleştirebilirsiniz.

Önce temel tasarımınızı bitirin ve sonra dökümanınızı File >> Save as template olarak kaydedin.
Template tablo kullanımını da beraberinde gerektirmektedir. Sayfanızda linkler, yönlendirmeler ve
banner, logotype gibi sabit elemanlar için, her sayfada aynı konumda olacak sabit tablolar bulanabilir.
Bu şablon içerisindeki tablo yapısında hangi hücrelere müdahale edilebilmek ve değişiklikler
yapabilmek istiyorsanız onu düzenlenebilmesi (edit edebilme) için işaretlemelisiniz. Bu işlem edit
etmek istediğiniz hücre içerisinde iken Insert>Template Objects>Editable Region ya da Optional
Editable Region seçilir.

Böylelikle template’imizi oluşturduk. Şimdi sıra geldi bu template’i kullanarak sitemizin alt
sayfalarını oluşturmaya. Bunun için File>New seçeneğinde karşımıza çıkan sayfadan Template
kısmından az önce kaydettiğimiz templatemizi seçmektir. Bu yeni sayfada sadece edit edilebilir alana
müdahale edebiliriz, diğer kısımlara işlem yapamayız.

Düzenlenebilir kısım

31
Uygulama No 10
Uygulama Adı Behaviors Kullanımı
Amaç Behaviors (hareket) özelliklerini kullanarak basit javascriptler oluşturabilmeyi öğrenme

Behaviors, örneğin sitemizdeki bir resmin ya da bir linkin üzerine gelindiğinde bir dizi işlemin
başlamasını, etkileşimli menü oluşturmak gibi işlemlerin yapılmasını sağlayan, kısaca sitelere
görsellik kazandıran bir özelliktir.

Öncelikle Window>Behaviors seçeneğinden Behaviors menüsünü açalım.

Yanda Behaviors menüsünde yapılabilecek işlemler


listelenmektedir. Şekle bakacak olursak, Deney
2’de resimler kısmında rollover image olarak
gördüğümüz swap image uygulaması, popup
(açılır) menü oluşturma, Timeline kullanımı vb. bir
çok işlemi yapabiliriz.

Behaviors Uygulamaları
1- Popup (Açılır) Menü Oluşturma
Açılır menü oluşturmak için, ilk önce sayfamıza menünün üzerine açılacağı en üst resmi
yerleştirmemiz gerekmektedir. Sonra resim seçili iken Behaviors menüsünden Show Pop-Up Menu
seçeneğini seçmeliyiz.

Yandaki Dersler üzerine gelindiğinde Güz Dönemi ve


Bahar Dönemi şeklinde açılır menü aşağıdaki şekilde
oluşturulur.

32
Burada Content kısmında menü içeriği, Appearance ve Advanced kısmında menü yazısının stil
özellikleri ve son olarak Position kısmında ise menünün açılacağı yön belirlenir.
2- Jump Menü Oluşturma
Web sayfalarında dikkatimizi çeken bir özellikte genelde sayfaların üst sol ya da sağ köşelerinde yer
alan hızlı erişim olarak adlandırdıkları atlama menülerinin kullanımıdır. Jump menü olarak
adlandırılan bu menüleri oluşturmak çok kolaydır.

Önce Insert>Form Objects>Jump Menu tıklanarak sayfamızda bir jump menü oluşturulur. Karşımıza
şöyle bir pencere çıkacaktır.

3- Swap Image Uygulaması


Öyle bir şey düşünelim ki bir resmin üzerine geldiğimizde (Mouse üzerindeyken) o resim değişsin,
aynı zamanda sayfanın başka bir yerindeki diğer bir resimde değişsin, böyle bir şeyi swap image
kullanarak rahatlıkla yapabiliriz. Web sitelerinde dikkat ederseniz, bir menünün üzerine gelindiğinde
sağda onun açıklamasını gösteren bir sayfa açılır.

33
Sayfada ilk görülen
resimler

Mouse üzerine
geldiğinde

Yukarıdaki bir swap olayını oluşturabilmek için, önce sayfamıza ilk görünecek resimleri yerleştirelim.
Sonra dersler resminin üzerine gelindiğinde hem dersler resminin değişmesi hem de hoşgeldiniz
resminin yerine Alınacak Dersler yazan resmin gözükmesi için Dersler’in üzerinde iken
Behaviors>Swap Image seçeneğini aktif edelim.

Yukarıdaki şekilde önce image “ders1” seçilerek bu resmin üzerine açılacak resim Set Source to
kısmında belirtilir. Sonra image “baslik” resmi (Hosgeldiniz) seçilerek yine bu resmin yerine açılacak
olan Alinacak Dersler resmi Set Source to kısmında belirtilir.

34
Uygulama No 11
Uygulama Adı Değerlendirme
Amaç Tüm anlatılanların uygulanmasının ölçülmesi

Buraya kadar olan kısımda anlattıklarımızı kullanarak herkes en az 5 alt sayfadan oluşan kendine özgü
bir site yapacak.

35
3. VERİTABANI

3.1. Veritabanı kavramı

Veritabanı (database) bir sorunu çözmek amacıyla bir araya getirilmiş, birbirleriyle ilişkili veriler
topluluğudur. Bu verilerin bir araya getirilmesi ve işlenerek anlaşılır bilgi haline dönüştürülmesi bilgi-
işlem açısından çok önemlidir.

Çok sayıda bilginin, güvenilir bir şekilde saklanması ve üzerlerinde çeşitli işlemlerin yapılması
gerektiğinde, bu bilgileri oluşturan verilerin anlamlı biçimde düzenlenmeleri gerekmektedir. İyi
düzenlenmiş bir veri tabanı ile birçok işlev yerine getirilebilir. Değişik kaynaklarda veritabanı şu
şekilde tanımlanır:

Veritabanı, belli bir alanda ve birbiriyle ilişkili olarak düzenlenmiş veriler topluluğudur (Çubukçu
1999).

Veritabanı birçok kullanıcı tarafından kullanılan, birbiriyle ilişkili geniş bir veri kümesinin
düzenlenmesi, depolanması ve sorgulanması için kurulan sistemdir.

Veritabanı birçok uygulamaya hizmet etmek için zararlı ve gereksiz veriler hariç ilişkili verilerin
saklandığı bir veri topluluğudur (Martin 1987).

Veritabanı bilgisayar temelli bir kayıt tutma sistemidir. Sistemin amacı verileri kayıt etmek ve
bakımını yapmaktır.

Veritabanı, bir organizasyonda verilerin merkezi kontrolünü sağlayan veri topluluğudur (Sevim 1995)

Veritabanlarının amacı büyük miktardaki kurumsal verileri işlemektir. Veriler düzenli bir biçimde
elektronik ortamda kaydedilirler. Düzenli olarak yedeklenen ve kontrol edilen bu bilgiler çok sayıda
uygulamanın ve kullanıcının hizmetine sunulur.

Veri Veri İşleme Bilgi


( Data ) Süreci

Şekil 3.1. Verinin bilgiye dönüşme süreci.

36
Büyük miktarlardaki verilerin hızlı ve güvenli bir biçimde gereksinim duyulan bilgiye dönüştürülmesi
veritabanlarının en önemli özelliklerinden biridir. Veritabanları organizasyonların bilgi gereksinimini
karşılamak amacıyla tasarlanırlar. Bu ifade, veritabanlarının kurumsal bilgi sistemleri içinde ne kadar
önemli olduğunu göstermektedir.

Bu aşamada, verilerin işlenmesi ya da erişilmesi sonucu elde edilen bilgi (information), verilerin bilgi
işlem yardımıyla anlamlı hale getirilmiş sonuçlarıdır. Bilgiler verilerin işlenmiş şeklidir. Bilgi işleme;
verileri toplama, özetleme ve üzerinde aritmetiksel ya da mantıksal işlemler yapma anlamına gelir.
Bilgi, yöneticilerin karar almasına yardımcı olan öğelerdir. Bilgiler verilerin ya da ham bilgilerin bir
işlem sonucunda yöneticiler için yararlı hale sokulmuş şekilleridir.

Kurumsal yapıda tüm çalışanlar bilgiye gereksinim duyarlar. Ancak bilgiye duyulan gereksinim
özellikle yönetim düzeyinde olur. Üst düzey yönetim planlama ve kontrol gibi yönetimsel
fonksiyonlar için bilgiye gereksinim duyarken, alt düzey yönetim özellikle operasyonel ve günlük
işlemler için bilgiye gereksinim duyar.

3.2. Veritabanı yönetim sistemleri (DBMS)

Bir veritabanının kurulması ve hizmet vermesi için gerekli bilgisayar yazılımı sistemine Veritabanı
Yönetim Sistemi (Database Management System) denir. Veritabanı Yönetim Sistemi, veritabanını
yöneten bilgisayar ve yazılım sistemidir. Veritabanı Yönetim Sisteminde standart bir dille
uygulamalara ve kullanıcılara hizmet verilir. Temelde verilerin kullanımını ve paylaşımını sağlayan iyi
bir Veritabanı Yönetim Sisteminin bileşenleri şunlardır (Çubukçu 1999) :

• Erişim (sorgulama) ve veri işleme.


• Veritabanı dili ve (genel amaçlı) bir sorgu dili.
• Genel amaçlı bir güvenlik sistemi.
• Genel amaçlı bir bütünlük sistemi.
• Yedekleme ve diğer yardımcı programlar.
• Uygulama geliştirme ortamı.
• Rapor üretici.
• Kavramsal Şema (conceptual schema) tanımlama dili: Özgün ya da genel amaçlı olarak
geliştirilmiş bir arabirim.
• Veri Sözlüğü : Veri yapısını gösterir.

37
Bir Veritabanı Sisteminin yapması gereken şeyler ise şunlardır:

• Veri saklama, erişme ve güncelleştirme: DBMS kullanıcıların verilerinin saklamasını, onlara


erişebilmesini ve güncelleştirebilmesini sağlamalıdır.
• Kullanıcının erişebileceği bir katalog olmalıdır: Veritabanı bir dosya olarak açılıp
kullanılabilmelidir.
• Bir grup işlemi yapabilme: Veritabanında bir grup işlem (transection) tam olarak
yapılabilmelidir.
• Aynı anda işlem yapabilme: Veritabanı aynı anda bir çok kullanıcı tarafından kullanılabilmelidir.
• Kurtarma hizmetleri: Bozulan veriler kurtarılabilmelidir.
• Yetkilendirme (izin) hizmetleri: Veritabanı kullanıcıları belli haklarla yetkilendirilebilmeli ve
birçok kullanıcı tarafından izinlerine göre kullanılabilmelidir.
• İletişim: Veritabanı verileri diğer programlara gönderilebilmelidir.
• Bütünlük: Veritabanındaki verilerin ilişkilerine dayanarak veriler korunmalıdır.
• Veri bağımsızlığı: Veritabanı verilerin yapısından bağımsız olarak programın kullanılmasını
sağlar.
• Yardımcı hizmetler: Veritabanı belli yardımcı hizmetlere sahip olmalıdır.

Veritabanı Yönetim Sistemi verilerin belli bir düzende kayıt edildiği ve erişim sisteminin düzenlendiği
bir yazılım sistemidir. Kayıt edilen verilere değişik şekillerde ulaşılabilir ve güncelleştirilebilir.
Veritabanı Yönetim Sistemi verileri belli bir düzende; dosyalar, tablolar, kayıtlar, alanlar olarak
içermelidir. Verilerin yerleşimi ilişkileri veritabanının yönetiminde çok önemli rol oynarlar.

Veritabanı Yönetim Sistemi mantıksal işlem gruplarının (transections) kullanılmasını sağlamalıdır.


İşlem grupları bir grup işlemin tek bir blok olarak ele alınmasını, işlemesini ve kontrolünü sağlar.
Verile üzerinde birçok işlemin ardı ardına yapılması sırasında ara bir işlemin yapılmaması (bir hata
oluşması) durumunda grup işlem tamamıyla iptal edilir. Diğer bir deyişle işlem geri alınır (roolback).
İşlemlerin tam olarak tamamlanması (commit) bir grup işlemin sorunsuz olarak tamamlanması
anlamına gelir.

Veritabanı Yönetim sistemi çok kullanıcılı olarak bir çok kullanıcıya hizmet etmelidir. Birçok
kullanıcı istediği verilere ulaşabilme ve istediği bilgileri güncelleştirebilmelidir. Bu süreç içinde
veritabanı bilgileri paylaştırma ve kilitleme mekanizmalarını çalıştırabilmelidir. Veritabanı Yönetim
Sistemi verilerin yedeğinin alınması gibi gerekli işlemleri yapmalıdır. Kullanıcılar kontrol edilebilmeli
ve bozulan bilgilerin düzeltilebilmesi sağlanmalıdır.

38
Veritabanı Yönetim Sistemi, verilerin yetkisiz kişiler tarafından kullanılmasını önlemelidir. Kişiler,
gruplar ve yönetici olarak veritabanı kullanıcıları ve bir parola ve izin sistemi içinde veritabanını
kullanmalıdırlar. Veritabanında bulunan veriler başka programlar tarafından açılmayacak biçimde
şifrelenmelidir.

Veritabanı sistemlerindeki diğer bir özellikte verilerin bütünlüğüdür (data integrity). Bu özellik farklı
tablolar içinde yer alan veriler arasında bütünlük sağlanarak etkin saklama erişme ve raporlama
olanakları sağlanır.

3.3. Yapısal Sorgulama Dili (SQL)

3.3.1. SQL’in yapısı ve gelişimi

SQL, veritabanı uygulamalarında, veri tanımlama, veri tabanının bütünlüğünün kontrolü,


veritabanlarına erişimin kontrolü ve veritabanlarının sorgulanması (çeşitli kriterlere göre bilgi dökümü
ve rapor elde edilmesi ) ve güncellenmesi amaçları için gerekli komutlara sahip olan bir alt dildir. Alt
dil denmesinin sebebi, bir bilgisayar dilinin sahip olması gereken tüm komutlara sahip
olmamasındandır.

SQL’ in sahip olmadığı komutlar, döngü komutları (While, For v.s.) ve kontrol komutlarıdır (IF-
THEN-ELSE, GO TO v.s.) . Bu nedenle SQL diğer dillerle birlikte kullanılır. Bu özellik katılımlı SQL
ya da embeded SQL olarak isimlendirilir.

SQL’in ilk başlangıcı ilişkisel veritabanı modelinin kuramını ortaya koyan, E.F.Codd’ un ‘A
Relational Model for Large Shared Data Banks’ adlı makalesine dayandırmak olasıdır (1970). Daha
sonra yine Codd gibi IBM Research Laboratory’de çalışan D.D. Chamberlain tarafından Structed
English Query Language ya da SEQUEL adlı bir dil tanımlanmıştır.

İlk SQL standardı ISO tarafından 1987’ de, ISO 9075 kodu ile yayınlanmıştır. Ayrıca ANSI versiyonu
ise, teknik olarak ISO 9075 ile aynı nitelikte olup, 1986’ da X3.135 kodu ile yayınlanmıştır.
Standartlar üzerindeki çalışmalar ve eklemeler halen sürmektedir.

3.3.2. Temel SQL komutları

Veri işleme veya kısaca, sorgulama dili de denilen SQL, temel olarak üç bölümden oluşur. DDL (Data
Definiton Language) bölümü, veritabanı ve tablo oluşturma, silme ve değiştirme gibi işlemlerde

39
kullanılan veri tanımlama komutlarını kapsar. DML (Data Manipulation Language) veri üstünde her
türlü sorgulama, silme, değiştirme ve yenileme gibi komutları, KONTROL bölümü ise kullanıcıların
değişik verilere erişebilme, işlem yapabilme ve sistemin kaynakları üstünde söz sahibi olabilmelerini
sağlayan komutları kapsar. Tablo 3.1’de Yapısal sorgulama dilinin bölümleri gösterilmektedir. Veri
tabanında, verileri saklamaktan kullanmaya kadar her alanda etkin olan bir diğer konu da, bilgileri
temsil etmek için kullanılan veri tipleridir. SQL’in kullandığı veri tipleri aşağıda gösterilmiştir:

Tablo 3.1. SQL komutlarının sınıflandırılması.


Tanımlama İşlem Denetim
(DDL) (DML) (KONTROL)

Create Select Grant


Drop Insert Revoke
Alter Update
Delete

SMALLINT Tamsayı (+ / – 32.767)


INTEGER Tamsayı (+ / – 2.147.483.467)
DECIMAL Ondalık sayı
FLOAT Üstel sayı
CHAR En fazla 254 karakterlik değişmez uzunlukta
VARCHAR En fazla 254 karakterlik değişen uzunlukta
DATE Tarih türü veriler
LOGICAL Mantıksal ( true/false ) veriler
TIME Zaman türü veriler
TIMESTAMP Tarih ve zaman türü veriler
GRAPHIC Grafik türü veriler
VARGRAPHIC Değişen uzunluklu grafik türü veriler

3.3.2.1. CREATE:
Veritabanı ve tabloların oluşturulmasında kullanılır.

CREATE DATABASE OgrenciDb;


OgrenciDb adında veritabanı oluşturur.

CREATE TABLE Ogrenciler (OgrenciID INTEGER, Adi VARCHAR (20),Soyadi VARCHAR


(20), BolumID CHAR (4), OsymKod CHAR (10));

40
3.3.2.2. SELECT :
Veritabanını sorgulamak için kullanılır.

SELECT *
FROM Ogrenciler;
Ogrenciler tablosundaki tüm kolonlardaki tüm bilgileri listeler.

SELECT OgrenciID, Adi


FROM Ogrenciler;

Ogrenciler tablosundaki OgrenciID ve Adi kolonlarındaki tüm bilgileri listeler.

3.3.2.3. ORDER BY :
Select komutuyla elde edilen verilerin sıralı bir şekilde listelenmesini sağlar.

SELECT OgrenciID,Adi
FROM Ogrenciler
ORDER BY OgrenciID ASC;

Ogrenciler tablosundaki OgrenciID ve Adi kolonlarındaki tüm bilgileri OgrenciID alanına göre artan
(ASC) sırada listeler. (DESC) kullanılırsa azalan sırada listeler.

3.3.2.4. WHERE :
Belirtilen koşula bağlı olarak listeleme yapmak için kullanılır.

SELECT OgrenciID,Adi
FROM Ogrenciler
WHERE Adi=’Mehmet’ ;
Ogrenciler tablosundaki Adı Mehmet olan tüm kayıtları listeler.

Sorgulamalar birden çok koşula bağlı olduğu zaman WHERE komutu ile birlikte NOT, AND, OR
komutları kullanılır.

SELECT OgrenciID,Adi
FROM Ogrenciler
WHERE Adi=’Mehmet’ AND Not>=50 ;

Ogrenciler tablosundaki Adı Mehmet olan ve Notu 50’ den büyük tüm kayıtları listeler.

3.3.2.5. BETWEEN :
Belirli bir aralıktaki bilgileri sorgularken kullanılır.

SELECT OgrenciID,Adi

41
FROM Ogrenciler
WHERE Not BETWEEN 50 AND 80 ;

Ogrenciler tablosundaki Adı Mehmet olan ve Notu 50 ile 80 arasındaki tüm kayıtları listeler.

3.3.2.6. Aritmetiksel Fonksiyonlar:


SELECT komutu ile, veri tabanında bulunan mevcut tablolardaki alanlar listelenebildiği gibi, tabloda
ayrı bir alan olarak yer almayan ve bir hesaplama sonucunda üretilmiş bilgilerde listelenebilir.
Tablolardaki değerler üzerinde aritmetiksel işlemler yapmak için kullanılan bir takım fonksiyonlar
vardır.

AVG Verilen kolondaki değerlerin aritmetik ortalamasını geri döndürür.


SUM Verilen kolondaki değerlerin toplamını geri döndürür.
MAX Verilen kolondaki en büyük değeri geri döndürür.
MIN Verilen kolondaki en küçük değeri geri döndürür.
COUNT İlgili sütunda kaç tane değer bulunduğunu (satır sayısı) geri döndürür.

SELECT AVG (ucret) FROM Ucretler ;

Personele ödenen ortalama ücreti gösterir.

SELECT SUM (ucret) FROM Ucretler ;


Personele ödenen toplam ücreti gösterir.

SELECT MAX(ucret) FROM Ucretler ;


En fazla ücret alan personelin aldığı maaşı geri döndürür.

SELECT SicilNo, MAX (ucret) FROM Ucretler ;


En fazla ücret alan personelin SicilNo ve ucret bilgisini gösterir.
SELECT MIN(ucret) FROM Ucretler ;
En az ücret alan personelin aldığı maaşı geri döndürür.

SELECT Ad, MIN (ucret) FROM Ucretler ;


En az ücret alan personelin Ad ve ucret bilgisini gösterir.

SELECT COUNT (*) From personel;


Personel tablosundaki kayıtların sayısını geri döndürür.

SELECT COUNT (DISTINCT ad) From personel;


Adı farklı kaç tane personel çalıştığını geri döndürür.

42
3.3.2.7. Gruplandırarak İşlem Yapma:
Bölüm 3.3.2’de gösterilen fonksiyonları, tablodaki bilgileri bazı özelliklerine göre gruplandırarak bu
gruplandırılmış veri üzerinde de uygulamak mümkündür.

SELECT Sinif, AVG (NotOrt)


FROM Ogrenciler
WHERE Ders=’ Matematik ’
GROUP BY Sinif ;
Bu örnek ile her sınıfın matematik dersi başarı oranları listelenir.

SELECT Sinif, AVG (NotOrt)


FROM Ogrenciler
WHERE Ders=’ Matematik ’
GROUP BY Sinif ;
HAVING AVG (NotOrt) >= 50 ;
Matematik dersi başarı oranları 50 ve 50 den büyük olan sınıflar ve başarı oranları listelenir.

3.3.2.8. Tabloya Kayıt Ekleme ( INSERT ) :


Mevcut olan tabloya yeni kayıt eklemek için kullanılır.

INSERT INTO Ogrenciler ( OgrenciID, Adi ,Soyadi , BolumID , OsymKod )


VALUES ( ‘990305003’,’Gülay’,’BALKAYA’,’0305’,’9496567263’ );

3.3.2.9. Tablodan Kayıt Silme ( DELETE ) :


Kayıtları koşulsuz ya da herhangi bir koşula bağlı olarak silmek için kullanılır.

DELETE FROM Ogrenciler ;

Ogrenciler tablosundaki tüm kayıtları koşulsuz olarak siler

DELETE FROM Ogrenciler


WHERE No=’940305026’;

Ogrenciler tablosundaki numarası ‘940305026’ kaydı siler.

3.3.2.10.Verileri Güncelleme ( UPDATE ) :


Tablo satırlarında güncelleme yapmak için UPDATE komutu kullanılır. Güncelleme işlemi herhangi
bir koşula bağlı ya da koşulsuz olarak gerçekleştirilebilir.

43
UPDATE Personel
SET ucret=ucret*1.15
WHERE Bolum=’Satis’;

Personel tablosundaki Satis bolumunden olanların ucretini 1.15 katı ile değiştirir.

3.3.2.11. Birden Fazla Tabloyu İlişkilendirerek Sorgulamak :


Bu bölüme kadar yapmış olduğumuz sorgulamalarda hep tek tablo kullanılmıştır. Gerçek veritabanı
uygulamalarında birden fazla tablonun birleştirilerek üzerinde sorgulamalar yapılması gerekir. Daha
sık karşılaşılan ve zor olan sorgular birden fazla tablo üzerinde yapılan sorgulamalardır.

Birleştirme ( Join ) işlemi : Aşağıda verilen tablolara göre (Tablo 3.13.) Sayısal yöntemler dersini alan
öğrencilerin listesi görülmek istendiğinde, Ogrenciler tablosuyla Dersler tablosunun birleştirilmesi
gerekir. Birleştirme işleminin gerçekleşebilmesi için her iki tabloda da ortak alanların bulunması
gerekir. Bu ortak alanlar genelde Birincil Anahtar (Primary Key), ve Yabancı Anahtarlardır (Foreign
Key). Ogrenciler Tablosunun No alanı Birincil anahtar ve Dersler tablosunun No alanı Yabancı
anahtardır. Aşağıdaki SQL ifadesi istenen işlemi gerçekleştirir.

SELECT Ogrenciler.No, AdiSoyadi , Bolumu , Cinsiyeti, DersAdi, Notu


FROM Ogrenciler , Dersler
WHERE Ogrenciler.No=Dersler.No ;

İç içe Select komutları : Bazı sorgulamalar özelliği itibarı ile iç içe SELECT komutlarının
kullanılmasını gerektirebilir. İçteki SELECT komutunun bulduğu sonuç, dıştaki SELECT komutunun
işlevini yerine getirmesi için kullanılır. Aşağıdaki SQL ifadesi Tablo 3.14. teki örnek için, ‘Sayısal
Yöntemler’ adlı dersi alan öğrencileri listeler.

Tablo 3.2. Tabloların birleştirilmesi.

Ogrenciler Tablosu

44
No AdiSoyadi Bolumu Cinsiyeti
990305002 Mehmet ÇEKEN Bilgisayar E
990305010 Dilek ACAR Bilgisayar B
990305040 Coşkun TAHMAZ Bilgisayar E

Dersler Tablosu

No DersAdi Notu
990305002 Matematik II 80
990305002 Programlama II 95
990305002 Sayısal Yöntemler 74

SELECT Ogrenciler.No, Ogrenciler.AdiSoyadi , Dersler.DersAdi, Dersler.Kredisi


FROM Ogrenciler , Dersler,
WHERE Ogrenciler.No IN ( SELECT OgrenciDers.No
FROM OgrenciDers, Dersler
WHERE OgrenciDers.DersKodu=Dersler.DersKodu
AND DersAdi=’Sayısal Yöntemler’ ) ;

Tablo 3.3. İç içe Select kullanımı.

Ogrenciler Tablosu

No AdiSoyadi Bolumu Cinsiyeti


990305002 Mehmet ÇEKEN Bilgisayar E
990305003 Yavuz Selim Bilgisayar E
990305004 Melih İNAL Bilgisayar E
990305005 Mehmet YILDIRIM Bilgisayar E
990305006 Emine BOLAT Bilgisayar K
990305006 Coşkun Ölçücü Bilgisayar E

OgrenciDers Tablosu Dersler Tablosu

No DersKodu DersKodu DersAdi Kredisi


990305002 0305001 0305001 Matematik II 6
990305002 0305002 0305002 Programlama II 4
990305002 0305003 0305003 Sayısal Yöntemler 3
990305010 0305001 0305004 Veri Tabanı 4
990305010 0305002 0305005 Veri Yapıları 3
990305010 0305003 0305006 Lojik II 5

45
4. PHP

HTML'in yapamayacağı şeylerin başında, Web Sunucusu'nda yapılacak işler vardır. Sözgelimi HTML
etiketlerini kullanarak, Web Sunucusu'ndaki bir veritabanı dosyasını açıp, içindeki verileri
okuyamayız. HTML yoluyla Web Sunucusu'nun sabit disklerindeki düz yazı dosyalarını da
okuyamayız ve bu disklere dosya yazamayız. HTML etiketleri ile Web ziyaretçimizden bilgi edinebilir
ve bunları Sunucu'ya yollayabiliriz; ama o kadar! Bu bilgileri işe yarar şekle sokmak için bize
Server'da çalışan bir program gerekir. Server'da çalışan program, EXE ve DLL veya JSP (Java Server
Pages) gibi bir "gerçek program"; veya Perl, ASP ve PHP gibi Script diliyle yazılmış bir program
olabilir. (Gerçek programları yazanlar, tabiî, sizin Script diliyle yazılmış programlara "program"
demenize çok kızarlar! Ama bu Script pogramlarının program olmasını hiç engellemez.)

Web Sunucu, ".PHP" uzatmasını görünce, bu dosyayı PHP yorumlayıcısına verir ve o da "<?PHP" ve
"?>" ayraçları içindeki kodları icra eder, demiştik. Bu icraatın sonunda ortaya çıkan ürün eğer
ziyaretçiye gönderilecekse, HTML etiketleri içinde gönderilir; yani ziyaretçi asla PHP kodlarını
göremez. Kimi zaman PHP programımızın çalışması sonucu ortaya ziyaretçiye gönderilecek bir ürün
çıkmaz; elde edilen sonuç ya başka bir programa (örneğin elektronik ileti gönderen bir Sendmail
progamına) hammadde olarak verilir, ya da Server'da sabit diske yazılır. Fakat her durumda, Web
ziyaretçimiz bizim PHP kodlarımızı göremez; bu Web sayfalarımızda PHP kodu kullanmamız halinde,
sayfalarımızın Browser tarafından tanınması veya tanınmaması gibi bir durumun ortaya çıkmaması
demektir. Ziyaretçi ne tür Browser kullanırsa kullansın, kendisine Sunucu'dan daima saf HTML kodu
geleceği için, sayfalarımızı rahatça görebilecektir. Tabiî bir nokta var: Sayfalarımızda herhangi bir
Browser'ın arızalı yorumladığı veya hiç yorumlayamadığı HTML etiketleri bulunabilir; ya da söz
gelimi ziyaretçiye giden HTML'in içinde Browser'da çalıştırılacak olan başka Script kodları
bulunabilir; ve Browser bu kodları anlamayabilir. Örneğin, HTML sayfanızda VBScript kodları
kullanmış iseniz, Netscape ile sitenize bağlanmış olan kişiler bu kodun oluşturmasını istediğiniz etkiyi
göremeyeceklerdir; çünkü Netscape VBScript anlamaz! PHP ile yazacağınız Web programlarının (eski
deyimiyle "sayfaların") oluşturacağı HTML belgesinin Browser türleri ve sürümleri ile uyarlılığını
sağlamak yine Web programcısı olarak sizin sorumluluğunuzdadır.

Özetlersek, PHP bir CGI programlama dilidir; bu dille, Web Sunucusu ile Web ziyaretçisi arasındaki
buluşma noktası olan CGI'da bilgi alışverişi yapılabilir; Sunucu'da bulunan başka programlar
çalıştırılabilir ve böylece Web sayfalarımıza HTML'in sınırlamalarının ötesinde hareket ve ziyaretçi
ile etkileşme olanağı kazandırılabilir.
Sanırım iyi bir Web programcısı olarak şu anda ekrana "Merhaba Dünya!" yazdırmak için
sabırsızlanıyorsunuz. Ama bunun için, PHP sayfanızı ya PHP-uyumlu bir Web Sunucusu'ndaki Web

46
sitenize yüklemek, ya da kişisel bilgisayarınızdaki kişişel Web Sunucusu'na PHP öğretmek
zorundasınız. Bu ikinci yöntemi kuvvetle tavsiye ederim; çünkü yazacağınız PHP programlarını
gerçek Internet Sunucusunda sınamak, bazen arzu edilmeyen durumlara yol açabilir. Oysa kişinin bu
denemeleri, evinde ve işyerinde kendi bilgisayarında yapması, çoğu zaman daha az başağrısı ve
gözyaşına yol açar! En azından, PHP hatalarınızı ve gözyaşlarınızı sizden başka gören olmaz!

4.1. PHP ve Veritabanı


Kişisel bilgisayarınızdaki kişisel Web sunucusuna PHP öğretme işlemine geçmeden önce, hemen
hemen PHP'nin ikiz kardeşi sayılan MySQL'den ve onun rakibi PostgreSQL'den kısaca söz edelim.
PHP'nin varlık sebeplerinin başında, ticarî Unix ve Microsoft Windows işletim sistemlerinden ayrı,
ticarî olmayan Açık Sistem ortamlarında çalışan bir Script dili ile bu dille kullanılabilecek yine Açık
Sistem ürünü bir veritabanı erişim ve yönetim aracına sahip olmak gelir. Perl, gerçi PHP'den çok önce
Açık Sistem ürünü olarak, isteyen Web Programcısı'nın ücretsiz edineceği bir CGI programlama dili
olarak Web'in ilk gününden beri Web Programcısının emrinde idi. Ama Perl, metin dosyalarından yazı
çekmek ve bunları biçimlendirerek rapor haline getirmek amacıyla geliştirilen bir dil olduğu için,
özellikle veritabanına dayalı işlemlerde programcıya çok güçlük çıkartıyordu. ASP ise (ASP desteği
sağlayan ve ücretsiz Web sitesi veren firmaların giderek artmasına ve veritabanı konusunda hem
kolaylık, hem de büyük bir etkinlik sağlamasına rağmen) çoğunlukla ücretli Web sitesi aldığımız ticarî
amaçlı evsahibi (Hosting) firmalarının sağladığı bir teknoloji olarak görüldü. PHP, tasarımcılarının
MySQL ve PostgreSQL teknolojilerini geliştiren kurum ve firmalarla yaptığı yakın işbirliği sonucu
ikinci sürümünden itibaren veri-yönlendirmeli Web uygulaması alanında önemli bir araç olarak
belirdi. Dolayısıyla, PHP kurulumu dendiği zaman, kendiliğinden, MySQL kurulumu da kastedilmiş
olur. Şimdi PostgreSQL da ekleyebiliriz.

4.2. PHP ve Web Sunucusu


Bizim açımızdan PHP, bir Web sunucu programıdır; kurulacağı sistemdeki Web sunucusu ile uyumlu
olması gerekir. 4'ncü sürümü itibariyle, PHP bütün Unix-türevi sistemler (örneğin Linux) ve Microsoft
Windows sistemleri ile uyumludur. Birlikte çalışabileceği Web sunucu programları arasında Apache,
IIS, FHTTP, Omni HTTPd, Xitami ve Windows 95/98 için PWS (Personal Web Server) vardır.
Gerçek Internet ortamında sunucu programlara PHP yeteneği kazandırma işlemi, Web Pnogramcısı
olarak bizi ilgilendirmez; bizim için Internet sitemize evsahipliği yapan Hosting firmasının PHP
desteği verip vermediğini bilmek yeter. Fakat tasarımlarımızı sınayabilmek için kendi bilgisayarımıza
bir kişisel Web Server kurmak ve bu programı PHP-uyumlu hale getirmek gerekir. Burada sadece iki
örnek ele alacağız: Linux için Apache sunucu programı ve MS-Windows için PWS. Bu iki
programdan hangisi sizin sisteminize uygunsa onu kendi bilgisayarınıza kuracağınızı varsayarak,
şimdi PHP ve MySQL kurulumu ile uğraşabiliriz.

47
4.3. PHP
PHP bir Script dilidir; PHP ile yazdığınız "programlar" birer düzyazı dosyasıdır. Dil ögelerini ayrıntılı
olarak ele almadan önce bir iki yazım kuralından söz edelim.
PHP yorumlayıcısı, bu "programı" çalıştırabilmek için dosyanın içinde PHP komutlarını arar. PHP
komutları birinci bölümde gördüğümüz gibi iki şekilde yazılabilir:
1. <?PHP .... ?>
2. <? .... ?>
Bunlara PHP komut ayracı denir; birinci türü uzun veya standart ayraç sayılır; ikincisine ike "kısa
ayraç" denir. PHP yorumlayıcısının kısa ayraç kullanmasını istemiyorsak, PHP.ini dosyasındaki,
short_open_tag = On: satırını short_open_tag = Off; yapmak yeter. Bununla birlikte uzun vadede, PHP
programlarınızda HTML yerine XML kullanmak istiyorsanız, şimdiden elinizi uzun ayraca
alıştırmanız yerinde olur; çünkü XML etiketleri "<?xml" şeklinde başlar ve "?>" şeklinde biter.
ASP ile çalışan Web programcıları "<?" ve ?>" yerine sık sık "<%" ve "%>" yazarlar! PHP dilini
gelişterinler., çok yaygın olan bu hatanın PHP programlarının çalışmasına engel olmasını önlemek için
bize bir kolaylık sağlıyorlar. Eğer ASP ile çalışan ve daha sonra PHP'ye geçen bir programcı iseniz,
PHP.ini dosyasını açarak, asp_tags = Off; satırını short_open_tag = On; yapabilirsiniz. Şimdi artık
rahatça ASP ayracını PHP yazmak için kullanabilirsiniz!
PHP komutlarınızı daha uzun olmakla birlikte <SCRIPT> etiketiyle de kullanabilirsiniz. Yukarıdaki
örnekte oluşturduğumuz merhaba.PHP'yi açın ve şu şekilde değiştirerek, merhaba2.PHP adıyla
kaydedin:
<HTML>
<SCRIPT LANGUAGE="PHP">
print ("Merhaba Dünya!");
</SCRIPT>
</HTML>
Web sunucusunda bu programı açarsanız, aynı sonucu aldığınızı göreceksiniz. Burada bir yanlış
anlamaya yol açmayalım. Javascript veya VBScript gibi HTML kodlarının içine gömdüğümüz ve
HTML sayfasının içinde, Web ziyaretçimizin bilgisayarına gönderilen ve orada (istemci-tarafından)
icra edilen ve yine aynı şekilde SCRIPT> etiketi içine koyduğumuz Script kodları ile burada
<SCRIPT> etiketi ile ifad eettiğimiz PHP kodlarının icra yerini karıştırmayalım. PHP, nasıl bir ayraç
ve etiket ile yazarsak yazalım, daima sunucuda çalıştırılar ve ziyaretçiye asla PHP kodları
gösterillmez. merhaba2.PHP'nin çalıştığı Browser'da kaynağı görüntülersek, istemciye gelen kodların
saf-ve-temiz HTML olduğunu göreceğiz.

4.4. Değişkenler
Programcılıkta işlemlerimizi değişkenlerle yaparız. Değişkeni bir kap gibi düşünebilirsiniz. Sözgelimi

48
"Gün," değişkenin adı ise bu değişkenin değeri Pazar, Pazartesi, Salı, vd., olabilir. Her değişken,
türüne göre, ya bir ya da daha fazla değer tutar. Adından da anlaşılacağı gibi değişkenin değeri değişir!
Bu değişikliği biz yapabiliriz; programın kendisi yapabilir.
PHP'de de, bir çok başka bilgisayar programlama dilinde olduğu gibi değişkenlerin içine bir değer
konmadan önce tanımlanması mümkündür; fakat gerekli değildir. Değişkenleri adının önüne $ işareti
koyarak tanımlarız:
$adi;
$soyadi;
$123;
$sevdigiRenk;

4.5. Veri Türleri


PHP, değişkenlere, tuttukları değere göre farklı bellek alanı tahsis eder; bu bakımdan verilerimizin
türü etkin bir programcılık açısından önem taşır. Ayrıca PHP, diğer bütün programlama dilleri gibi
belirli veri türleri ile belirli işlemleri yapar veya yapamaz. Örneğin, ancak iki sayı arasında aritmedik
toplama yapılabilir. İki metin tutan değişken aritmetik olarak toplanamaz; ancak içerdikleri değerler
ardarda eklenebilir. Ne var ki, PHP sizin aritmetik toplama mı, yoksa ardarda ekleme mi yapmak
istediğinizi bilmek durumunda değildir. (PHP'ye 'muazzam dil' dedik; içinde yapay zekâ var demedik!)
Dolayısyla değerleri 5 ile 6 olan iki değişkeni topladığınız zaman ortaya 11 yerine 56 çıkarsa, kabahati
PHP'de değil, değişkenlere veri atayan kişide (büyük bir ihtimalle kendinizde) aramalısınız.
PHP açısından dünyada altı tür değer vardır:
Tamsayı (Integer): 5,124, 9834 gibi
Çift (Double): 3,567 gibi
Alfanümerik (String): "Reşit" gibi
Mantıksal (Boolean): doğru (true)/yanlış (false) gibi
Nesne (Object)
Dizi (Array)
Bazı uzmanlara göre, gerçekte PHP'de mantıksal (boolean) değişken türü yoktur. B kanının sebebi,
PHP'nin true (doğru) ya da false (yanlış) olarak atadığımız değerleri 1 ve boş/null değerlere çevirmesi,
mantıksal olarak sorgulandığında 0 dışındaki tam ve ondalık değişkenleri TRUE, 0'ı FALSE sayması,
ve boş alfanümerik değişkenleri FALSE, dolu alfanümerik değişkenleri ise TRUE olarak
değerlendirmesidir. Ancak daha sonra gereceğimiz gibi PHP, Mantıksal/Boolean adında bir değişken
değiştirme fonksiyonuna sahiptir ve bu tür değişkenlerin türü sorulduğunda "boolean" karşılığını verir.

4.6. İşlemciler (Operatörler)


Yukarıdaki örnekleri birlikte yaptıysak, = işaretini bol bol kullandık ve böylece PHP'nin bir çok
operatöründen biriyle tanıştık. Buna PHP dilinde "atama operatörü" denir. Bu işlemci sadece yukarıda

49
kullandığımız gibi, bir değişkenin bir değere eşitliğini ilan etmek amacıyla kullanılmaz. Örneğin:
print ( $sayi = 123 ) ;
ifadesinde olduğu gibi, bir fonksiyonun içinde de hem atama işlemi yapılabilir; hem de işlem
yürütülür. PHP'nin aritmetik, birleşik-atama, birleştirme, karşılaştırma ve mantıksal sınama
operatörleri vardır.
Aritmetik işlemciler:
+ Toplama 6+5 = 11
- Çıkartma 6-5 = 1
/ Bölme 6/5 = 1.2
* Çarpma 6*5 = 30
% Kalan (Modulus) 6%5 = 1
Aritmetik işlemleri gerçek sayılarla yaptığımız gibi, tuttuğu değer sayı olan değişkenlerle de
yapabiliriz.

Daha önce, PHP'de değişken tanımlar ve bunlara değer atarken sayı olan değişkenleri tırnak işareti
kullanmadan, alfanümerik değişkenleri ise tırnak içinde yazdığımızı hatırlayacaksınız. Bu, geleneksel
hale gelmiş olan bir programcılık alışkanlığıdır. PHP, tırnak kullanmasanız da bir değişkenin sayı olup
olmadığını anlar; daha sonra bu değişkenlerle aritmetik işlem yapabilir. PHP ayrıca rakamla başlayan
alfanümerik değişkenleri sayı olarak kullanmaya kalktığınızda, bu değerin başındaki bütün rakamları
sayı olarak kabul eder. PHP açısından harf veya işaretle başlayan alfanümerik değişkenlerin sayı
olarak değeri sıfırdır. Örnek:
$a = 6;
$b = "22/A"
print ($a + $b)
sonuç olarak 28'i verecektir; veya
$a = 6;
$b = "A/22"
print ($a + $b)
sonuç olarak 6 çıkacaktır. Bu küçük deneyi yaparsanız, PHP ile program yazarken hangi değişkenin
ne sonuç vermesi gerektiğini dikkatle düşünmek zorunda olduğunuzu görürsünüz. Bir kişinin geliri ile
adresini toplamak, programcı olarak arzu ettiğiniz bir işlem olmayabilir!
Bununla birlikte elimizde bir kişinin adı ve soyadı ayrı değişkenler halinde ise, bunları birbirine
ekleyerek (concatenation) ortaya yeni bir alfanümerik değişken çıkartabiliriz:
<?php
$adi = "Reşit";
$soyadi = "Muhtar";
$adi_soyadi = $adi . " " . $soyadi;

50
print ("<br>");
print ($adi_soyadi);
print ($adi . "'nın soyadı " . $soyadi . "'dir.")
?>
Bu örnekte, sadece ekleme yoluyla yeni bir değişken oluşturmakla kalmıyoruz; fakat alfanümerik
değişkenleri, başka metinlerle de birbirine ekleyebildiğimizi görüyoruz. Bu işlemi nokta işaretiyle (.)
yapıyoruz. Bu işlemciyle sadece değişkenlerin değerlerini değil fakat metinleri de birbirine
ekleyebiliriz:
<?php
print ("İyileri iyikleri ile alkışla; " . "..." . "ve sen soluklarında daima Mesîh ol..! ")
?>

PHP'nin karşılaştırma yapması için kullandığımız işlemciler ise işlem işaretinin sağı ve solundaki
değerleri veya değişkenlerin değerlerini işaretin belirttiği karşılaştırmayı yaptıktan sonra ortaya ya
doğru (true) ya da yanlış (false) sonucunu çıkartırlar. Söz gelimi, değeri 6 olan değişkenin 5'ten büyük
olup olmadığını sınarsak, sonuç doğru; 5'ten küçük olup olmadığını sınarsak sonuç yanlış çıkacaktır.
PHP'nin karşılaştırma işlemcileri şunlardır:
İşlemci Örnek Örnek $a=6 ise:
== eşitse $a == 5 Yanlış/False
!= eşit değilse $a != 5 Doğru/True
=== aynı ise $a === 5 Yanlış/False
> büyükse $a > 5 Doğuru/True
< küçükse $a < 5 Yanlış/False
<= küçükse $a <= 5 Yanlış/False
PHP'nin karşılaştırma işlemcileri hem tam ve ondalık sayı türü değerlerle, hem de alfanümerik
değerlerle kullanılabilir.
Daha ileri aşamalarda, bazen değişkenlerimizin karşılaştırmasının bu kadar basit olamayacağını; kimi
zaman iki grup değişkenin karşılaştırılması gerektiği durumların bulunduğu göreceğiz. Diyelim ki, bir
öğrencinin başarılı sayılması için hem vize notunun, hem de yılsonu sınav notunun belirli sayılardan
büyük olması gerekiyor. Bu durumu ancak karmaşık-mantıksal sınamadan geçirmemiz gerekir. Bu
sınamayı iki ayrı sınama sonucu ile birlikte kullanırız. Örneğin:
vize notu yeterli - final notu yetersiz = kalır (yanlış/false)
vize notu yeterli - final notu yeterli = geçer (doğru/true)
PHP'de bu karşılaştırmayı iki grubun arasına koyduğumuz işaretlerle yaparız İşaretin sağ ve sol
tarafının doğruluğu veya yanlışığı işarete göre nihai sonucun doğru veya yanlış olmasını sağlar. Bu
karşılaştırmaları yaparken şu işlemcileri kullanırız:
İşlemci Adı Anlamı Örnek

51
|| veya sol veya sağ doğru doğru || yanlış = doğru
or veya sol veya sağ doğru doğru || yanlış = doğru
&& ve sol ve sağ doğru doğru || yanlış = yanlış
and ve sol ve sağ doğru doğru || yanlış = yanlış
Xor Şartlı-veya Sadece sol veya sağ doğru doğru || yanlış = doğru
! Değil sol veya sağ yanlış doğru || yanlış = doğru
"veya" ve "ve" sınamaları için iki ayrı işlem işareti bulunmasının sebebi, PHP'nin işlem sırasıyla
ilgilidir. Birazdan oraya geliyoruz. Şimdi, kavranması kolay olmayan ikili mantıksal sınamalara bir
örnek verelim; yukarıda öğrencinin durumunu PHP komutu olarak yazalım.
<?php
$vize = 45;
$final = 65;
if ($vize >= 50 && $final >= 50) {
print ("Öğrenci geçti!");
}
else {
print ("Öğrenci kaldı!");
}
?>

4.7. Sabit Değerler


İster Web, ister Web-dışı amaçlı olsun, bir programın bazen başındanh sonuna kadar değeri
değişmeyen değişkene ihtiyacı olabilir. "Değeri değişmeyen değişken" teriminin anlamsız olduğu
kanısında iseniz, bunlara sabit değerler adını da verebilirsiniz! PHP'de sabit değerler, Script boyunca
değişmeden kalır.
Sabit değerler, değişkenlerden farklı şekilde oluşturulur. Bunun için PHP'nin define() fonksiyonunu
kullanırız. Bu fonksiyonun yazım kuralı şöyledir:
define ("SABIT_DEGER", değer);

4.8. PHP'de Program Denetimi


Bilgisayar programı, belirli değerlere göre kendi izleyeceği yolu kendisi bulmalıdır. Bir Web programı
da aynı mantıkla tasarlanır. PHP, bir kısmını daha önceki bölümlerde, bir kısmını da şimdi ele
aldığımız araçları kullanarak, belirli durumlarda belirli istikametlere gidecek, yeri geldiğinde geri
dönecek, yeri geldiğinde başka bölümlere sıçrayacak bir akış planı tasarlamamıza imkan verir.
Web programlarımızda, ziyaretçilerimizin sitemizde yaptıkları veya yapmak istediklerini bildirdikleri
işe göre sayfalar, bu işlere göre sayfa içerikleri sunarız. Web programımız ziyaretçimizin hareket
tarzına ve amacına uygun olarak ilerler. Bir programın akış planını kontrol etmemizi sağlayan unsurlar

52
çoğu zaman programın kendi kendine karar vermesini sağlayan araçlardır. PHP'de program denetim
unsurları, programın gidiş yönünü değiştirmemizi veya olduğu yerde durmasını ve beklemesini veya
bir işi biteviye yapmasını sağlar. Bu bölümde bu araçları ele alacağız.

4.8.1. if Deyimi

İnsan olarak kararlarımızı hemen hemen daima "bir şey öyle ise böyle, öyle değilse şöyle davranmak"
üzere almaz mıyız? PHP programında if deyimi bunu sağlar. Kelime anlamı eğer olan if deyimi ile
programımızı karar almaya zorlarız. Ne var programımız bizim kadar akıllı olamayacağı için if
şartının doğru veya yanlış olması durumunda ne yapacağını da ona biz söyleriz. if deyimi şöyle yazılır:

if ( koşullar ) {
koşullar doğru ise yapılacak işlere ilişkin komutlar
}
elseif (diğer koşullar) {
diğer koşullar doğru ise yapılacak işlere ilişkin komutlar
}
else {
diğer her durumda yapılacak işlere ilişkin komutlar
}

4.8.2. switch deyimi


PHP'de program akışını yönlendirmekte kullandığımız bir diğer unsur, switch deyimidir. Adı anahtar
anlamına gelen switch deyimi, verilen bir değişkenin değerinin sıraladığımız koşullardan hangisine
uygun olduğunu sınar ve o koşula ilişkin komutları icra eder. PHP'nin yaptığı işi bitirdikten sonra
switch deyiminin dışına çıkmasını sağlayan, break komutu vardır:
switch ( değişken ) {
case KOŞUL-1 ;
Koşul-1 doğru ise yapılacak işlere ilişkin komutlar
break;
case KOŞUL-2 ;
Koşul-2 doğru ise yapılacak işlere ilişkin komutlar
break;
case KOŞUL-3 ;
Koşul-3 doğru ise yapılacak işlere ilişkin komutlar
break;

53
case KOŞUL-4 ;
Koşul-4 doğru ise yapılacak işlere ilişkin komutlar
break;
......................
......................
default:
diğer her durumda yapılacak işlere ilişkin komutlar
}
switch deyimini yazarken mutlaka break ifadesini kullanmamız gerekmez; switch deyiminin akışı
break ile kesilmemişse, program ilk şart yerine gelmiş olsa bile diğer şartları da sınamaya devam eder
ve en sondaki default deyimine ulaşarak (default'tan sonra noktalı virgül değil iki nokta üstüste işareti
olduğuna dikkat edin), bu bölümdeki komutları icra eder. Ne var ki programcılık mantığına aykırı
olabilir: bir değişkenin içeriği verdiğimiz şartlardan birini tutmuşsa, muhtemelen diğer şartları yerine
getirmeyecek demektir. Bu durumda diğer koşulların sınanması gereksiz e default işlerin icra edilmesi
ise hata olur.

4.9. Döngüler
Yukarıdaki iki denetim ögesi de programın ileri doğru akışını bozmayan araçlardır. Oysa bazen
programımızın bir koşul gerçekleşincele kadar yerinde sayması ve koşul gerçekleşmedikçe
ilerlememesi gerekebilir. Kimi zaman da programımıza bir işi bitirmeden ileri gitmemesini biz
bildiririz. Program akışının bu tür denetimini döngü deyimleri sağlar. PHP'de iki tür döngü vardır: bir
durum devam ettiği veya etmediği sürece yapılan ve kaç kere tekrar edeceği bilinemeyen while
döngüleri, ve tekrar sayısı belirli for döngüleri.

4.9.1. while döngüsü


Bir değişkenin içeriğinin belirli bir şartı karşılaması veya karşılamaması halinde icra edilir. Burada
dikkat edeceğimiz nokta, programın icrası sırasında değişkenin içeriğinin veya koşulun değişmesinin
sağlanmasıdır. Aksi taktirde pıgramımız sonsuz döngüye girer ve muhtemelen çöker. while döngüsü
şöyle yazılır:
while (koşul) {
Koşul doğru ise yapılacak işlere ilişkin komutlar
}

4.9.2. do..while
while döngüsü farkettiğiniz gibi, ileri sürdüğümüz şartı, iyi yapmadan önce sınar; ve bu şart ortadan
kalkmamışsa (yani henüz doğru/true ise) yapacağı işi yapar; başka bir deyişle while döngüsünün

54
yapacağı iş hiç yapılmayabilir. Fakat sınamanın iş yapıldıktan sonra yerine getirildiği bir şekli de
vardır: do..while.. Bu döngü ise şöyle yazılır:
do {
Koşul doğru ise yapılacak işlere ilişkin komutlar
}
while (koşul);

4.9.3. for döngüsü


PHP'de Web programlarımız, döngünün belirli bir sayıda olmasını ve mesela bu sayının bizim
istediğimiz basamaklarda artmasını gerektiriyorsa, döngüyü for deyimiyle kurabiliriz. Ayrıca for
deyimi sayaç gibi şartın yerine gelmesini sağlayacak arttırma veşa eksiltme işlemlerini kendisi
yapacağı için, sonsuz döngüye girme tehlikesi de hemen hemen yoktur. Bu döngü şöyle yazılır:
for ( $yeni_degisken atama ; koşul ; artış basaması ) {
Koşul doğru ise yapılacak işlere ilişkin komutlar
}
for deyiminin ilk ögesi, döngü sayacı olarak kullanılacak bir değişken oluşkturulması ve buna değer
atanmasına ilişkindir; sonra bir noktalı vrigül ile bu sayacın sınırı olan koşul belirtilir. Yine noktalı
virgül ile ayırarak, sayaç değişkeninin artış hızı verilir.

4.9.4. Döngüyü sona erdirmek için: break


Programımızın akışı, bazen döngünün durdurulmasını gerektirir. Örneğin, sayaç değişkenini
ziyaretçinin vermesi gerektiği ve vermediği durumda, döngünün başlamaması yerinde olur. Programın
gerektirdiği böyle bir sebeple döngüyü break komutuyla durduruz.

4.9.5. Döngüyü sürdürmek için: continue


break ifadesinin döngüyü tamamen durdurduğunu farkettiniz mi? Oysa programımızın akışı, kimi
zaman da döngünün sadece belirli bir durumda kendisinden beklenen işi yapmamakla birlikte böyle
tümüyle kesilmesini de gerektirmez.

4.10. Fonksiyonlar

Bir bilgisayar programının kalbi, fonksiyonlardır. Fonksiyonlar, bir kere tanımlanır ve bir çok kereler,
ihtiyaç olduğu noktada hizmete çağrılır. Fonksiyonlar genellikle bir iş veya hesaplama yaparlar ve
bunun sonucu olarak ortaya yeni bir değer çıkartırlar. Bu değere "fonksiyondan dönen değer" denir.
Fonksiyonun bir program için ne kadar önemli bir unsur olduğunu bir örnekle belirtelim. Diyelim ki
Web'de öğrencilerimizin yıl içinde aldıkları notları gösteren bir programımız var. Bu siteyi ziyaret

55
eden öğrencilerin, iskterlerse, bir düğmeyi tıklayarak, o andaki not ortalamalarını hesap ettirmelerini
sağlamak istiyoruz. Bu hesabı yapacak olan işlem, bir fonksiyondur. Web ziyaretçisi düğmeyi tıkladığı
anda, program, ortalama hesabını yapacak olan fonksiyonu, o sayfada bulunan notları bildirecek;
fonksiyon da kendisine verilen bu değerlerle yapması gereken hesabı yapacak; ve elde edeceği sonucu
kendisini göreve çağıran program satırına bildirecektir. Bildirilen bu değerle ne yapılacağı, fonksiyonu
göreve çağıran komuta veya işleme aittir. Fonksiyon kendisinden isteneni yapmakla yetinir.
PHP'nin kullanılmaya hazır bir çok fonskiyonu vardır. Şu ana kadar sürekli kullandığımız echo() ve
print() bu tür PHP fonksiyonlarıdır. PHP'nin kendi fonksiyonlarını göreve çağırmak, yine yukarıdaki
örneklerde olduğu gibi, program içinde gerektiği yere adını ve kullanacağı değeri yazmakla olur:
print ("Bu bir metindir!");

PHP bizim kendi fonksiyonlarımızı kullanmamıza da izin verir. Fakat bunun için önce fonksiyonu
tanımlamamız gerekir.

4.10.1. Fonksiyon Tanımlama ve Çağırma


PHP'de fonksiyonlar function komutu ile oluşturulur. Tanımladığımız fonksiyon, kendisini göreve
çağıracak komuittan, yapacağı işlemde kullanmak üzere değer alacaksa, bu değerlere vereceğimiz
değişken isimleri fonksiyon adının yanında parantez içinde gösterilir. Fonksiyon birden fazla değer
bekleyecekse, bunların değişken adlarının arasına virgül koyarız. Fonksiyona ulaştırılan değerlere
argüman denir. Fonksiyon, kendisine bir değer ulaştırılmasını beklemese bile içi boş parantez
koymamız gerekir. Buna göre PHP'de fonksiyon şöyle yazılır:
function fonksiyonun_adı (argüman1, argüman2, ... argümanN) {
fonksiyonun yapacağı işe ilişkin komutlar
}
Fonksiyon adları, değişken adları ile aynı kurallara tabidir. Fonksiyon içinden fonksiyon çağrılabilir;
fonksiyonların içinde PHP'nin kendi fonksiyonları kullanılabilir. Şimdi, ilk örnek fonksiyonumuzu
yazalım.
Yukarıdaki örneklerde, PHP'ye, bir Web sayfası oluştururken HTML ögesi olacak bazı satırların
başına <H1>, satır sonlarına <BR> gibi etiketler koydurduğumuza dikkat etmiş olmalısınız. Bir
programda bu işi sık sık yapacaksak, yani metinlerimiz <BR> ile bitecek, bazı başlıklarımız ise
sayfamıza HTML'in başlık etiketleri ile gönderilecekse, bu etiketleri defalarca yazmamız sadece
zorluk değil, fakat aynı zamanda yazım hatasını davet eden bir davranır olur. PHP'de kendisine
vereceğimiz metinleri başlık veya gövde yazısı olarak biçimlendirecek fonksiyonlar tanımlayarak,
programcılıkta daima tehlikeli olan insan unsurunu asgarîye indirebiliriz.

4.11. Dizi-Değişkenler
PHP'de, diğer programlama dillerinde olduğu gibi, kullandığımız bilgileri, verileri değişken adını
verdiğimiz kaplarda tuttuğumuzu biliyoruz. Bu kaplarla ne işler yapabileceğimizi de gördük. Fakat bu

56
kapların sadece bir birim bilgi tuttuğunu farketmiş olmalısınız. Oysa programlarımızda genellikle,
sözgelimi "öğrencilerin adları" dediğimiz zaman yüzlerce ismi tutabilen kaplara ihtiyacımız olur. Aksi
taktirde, öğrenci sayısı kadar değişken oluşturmamız gerekir ki, bu durumda değişken oluşturma
zahmetinden vazgeçmek daha uygun olur; öğrencilerin isimleri, değişkene koymadan da kullanabiliriz.
İşte, bu tür, bir grup bilgili topluca tutan değişkenlere dizi-değişken (array) denir; ve program boyunca
işe yarayan değişken türü de budur.

Şimdi, PHP bize öyle bir araç vermeli ki, biz bir kerede bu listenin tümünü, her bir ögesine sanki bir
değişkenin değeri imiş gibi tek-tek, veya bir kaçına birden ulaşabilmeli ve arzu ettiğimiz zaman notları
doldurabilmeliyiz. Öğrenciler de yapacağımız Web sitesine girerek, kendi notlarını görebilmeli ve
notlarını inceleyebilmeli. PHP'nin bu amaçla sağladığı araç, çok-boyutlu dizi-değişken oluşturma
aracıdır. Ve bu araçla yukarıdaki listeyi aynen şöyle yapabiliriz. Bu kodu dizi_degiskenler01.php
adıyla kaydedin:
<HTML>
<HEAD>
<TITLE>PHP'de Degiskenler</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<B>
<H2>
<?php
$ogrenciler = array (
array ( adi => "Özbay", soyadi => "Altun", sinav1 =>"", sinav2 =>"", not =>""),
array ( adi => "Muharrem", soyadi => "Taç", sinav1 =>"", sinav2 =>"", not =>""),
array ( adi => "Hasan", soyadi => "Civelek", sinav1 =>"", sinav2 =>"", not =>""),
array ( adi => "Şahika", soyadi => "Tabak", sinav1 =>"", sinav2 =>"", not =>""),
);
// Buraya başka kodlar girecek
print $ogrenciler[0][adi];
?>
</H2>
</B>
</BODY>
</HTML>
Programdaki "print()" komutunu sadece dizi değişkeni doğru yazıp yazmadığımızı sınamak amacıyla

57
yazdık; bu programı Browser'da açtığınızda yazdığınız ilk ismi Browser penceresinde görüyorsanız,
dizi-değişkeni doğru şekilde oluşturdunuz demektir. Burada, array() komutnu yazarken, süslü parantez
değil, normal parantez kullandığımıza ve herbir elemanın değerlerinin sonunda vrigül olduğuna dikkat
edir. Bir diğer önemli nokta: endeks adları bir kelimeden fazla ise bunları tırnak içine alarak
belirtmektir. Örneğin:
array ( adi => "Özbay", soyadi => "Altun", "Sinav 1 Notları" =>"", "Sinav 2 Notları" =>"", "Toplam
Not Ortalamasi" =>""),
Burada, daha öncekilere benzer bir şekilde adlandırılmış $ogrenciler değişkenin içeriğini array()
komutu ile doldurduğumuzu görüyoruz. Array() ile böyle çok boyutlu ve içerdiği değerlerin her birinin
bir "endeks adı" olan dizi-değişkene İlişkili Dizi (Associative array) de denir. Perl bilenler ise bu tür
değişkenlere "Hash" dendiğini hatırlayacaklardır. İlişkili Dizi'lerin birinci satırı 0, ikinci satırı 1,
üçüncü satırı 2.. diye numaralandırılır. Bu dizinin o satırındaki kaydın sıra endeksidir. Ayrıca burada
"adi," "soyadi," "sinav1" .. dizi değişkenin içindeki değerlerin endeks adıdır. Yani bu değerlere atıfta
bulunurken, referans yaparken veya bu değerleriekullanmak amacıyla erişirken sıra endeksi ve endeks
adıyla hitabederiz. Yukarıdaki sınama amaçlı print() komutuna bakarsanız, birinci öğrencinin ismini
"[0][adi]" olarak çağırıyor.
Çok elemanlı ilişkili dizi oluşturmanın bir diğer yolu, yeri geldiğinde böyle bir dizi için yeni bir üye
ilgili bilgileri eleman endeksi ve değerler için endeks adı belirterek şöyle bir kod yazmaktan ibarettir.
dizi_degiskenler01.php dosyasında şu değişikliği yaparak, dizi_degiskenler02.php adıyla kaydedin
<?php
$ogrenciler[0][adi] = "Özbay";
$ogrenciler[0][soyadi] = "Altun";
$ogrenciler[0][sinav1] = "";
$ogrenciler[0][sinav2] = "";
$ogrenciler[0][not] = "";
// Buraya Buraya başka kodlar girecek
print $ogrenciler[0][adi];

?>
Bir dizi değişkende kaç boyut olacaksa, o kadar içiçe array() ögesi oluşturabiliriz. Buna göre tek
boyutlu bir dizi değişken sadece bir array() komutu ile ve sadece değerler verilerek oluşturulabilir.
Diyelim ki yukarıdaki öğrenci listemiz sadece öğrencilerin isimlerinden oluşacak. Bu durumda
$ogrenciler değişkenine ilişkin satırı şöyle yazabilirdik:
$ogrenciler = array ("Özbay", "Muharrem", "Hasan", "Şahika");
PHP, böyle tek boyutlu bir dizinin örneğin birinci elemanını, "$ogrenciler[0]" adıyla bilir. Böyle bir
tek-boyutlu diziyi oluşturmak için PHP bize başka bir kolaylık da sağlar: array() komutunu
kullanmadan, doğruca dizinin ögelerine değer vermemiz mümkündür. Yukarıdaki programın sadece

58
PHP bölümünü şöyle değiştirerek, dizi_degiskenler03.php adıyla kaydedin:
<?php
$ogrenciler[] = "Özbay";
$ogrenciler[] = "Muharrem";
$ogrenciler[] = "Hasan";
$ogrenciler[] = "Şahika";
// Buraya başka kodlar girecek
print $ogrenciler[0];
?>
Böyle sırayla dizi değişken oluşturur veya oluşturulmuş bir dizi değişkene ek yaparken, değişkenin
sıra numarasını yazmazsak, PHP bunları kendisi sıralar. Yukarıdaki kodun da Browser penceresine
"Özbay" yazdırması gerekir. Mevcut tek-boyutlu bir dizi değişkene ek yaptığımızda, be yeni değerin
dizinin en altına eklenmesini istiyorsak, sıra numarası yazmamıza gerek yoktur. Mevcut değerlerden
birini değiştirmek istiyorsak, o değerin sıra numarasını yazmamız gerekir. Bunu denemek için
yukarıdaki kodu şöyle değiştirilim ve dizi_degiskenler04.php adıyla kaydedelim:
<?php
$ogrenciler[] = "Özbay";
$ogrenciler[] = "Muharrem";
$ogrenciler[] = "Hasan";
$ogrenciler[] = "Şahika";
// Buraya başka kodlar girecek
$ogrenciler[0] = "Emre";
$ogrenciler[15] = "Özbay";

print ("Dizideki 1'nci isim: $ogrenciler[0] <br>");


print ("Dizideki 2'nci isim: $ogrenciler[1] <br>");
print ("Dizideki 3'ünci isim: $ogrenciler[2] <br>");
print ("Dizideki 4'üncü isim: $ogrenciler[3] <br>");
print ("Dizideki 5'inci isim: $ogrenciler[4] <br>");
print ("Dizideki 6'ncı isim: $ogrenciler[5] <br>");
print ("..............<br>");
print ("Dizideki 15'nci isim: $ogrenciler[15] <br>");

?>
Bu programın Browser penceresine göndereceği sırada, birinci öğrenci ($ogrenci[0]) olarak bu kez
Özbay değil Emre yazdığını göreceğiz.

59
Bunun sebebi, diziyi oluşturan ilk grup deyimden sonra,
$ogrenciler[0] = "Emre";
satırı ile birinci elemanın değerini değiştirmiş olduk. 15'nci elemana atama yapmakla, PHP'nin
$ogrenciler dizisinde 6, 7, 8, 9,.. 14'e kadar boş elemanlar oluşturmasına sebep olduk.
Tek boyutlu dizileri de İlişkili Dizi olarak oluşturabilir yani değerlere endeks adı verebiliriz. Daha
önce kaydettiğimiz dosyada şu değişikliği yapalım ve dizi_degiskenler05.php adıyla kaydedelim:
<?php
$ogrenci[adi] = "Özbay";
$ogrenci[soyadi] = "Altun";
$ogrenci[sinav1] = "";
$ogrenci[sinav2] = "";
$ogrenci[not] = "";
// Buraya başka kodlar girecek
print $ogrenci[adi];
?>
PHP, $ogrenci adlı değişkenin beş ayrı değeri olduğunu ve bunların "adi," "soyadi," "sinav1"...
olduğunu biliyor. Şimdi artık istediğimiz noktada bu değişkenin istediğimiz değerine, o değerin
endeks adını yazarak, çağrıda bulunabiliriz; bu değeri yeniden verebiliriz.

60
5. PHP ile Veritabanı
PHP’yi bir veritabanından veri çekecek, bunlarla HTML etiketlerinin içeriğini oluşturacak ve
ziyaretçimizden alacağımız bilgileri bir veritabanına işleyecek işlemleri öğrenebilecek kadar biliyoruz
artık. Bu kitapçığın baş tarafındaki kurma işlemlerini birlikte yaptıysak, şu anda PHP programlarını
geliştirdiğiniz kişisel bilgisayardaki kişisel Web sunucusunda MySQL sürücüleriniz ve veritabanı
yönetim programınız çalışıyor olmalı. Bir kere daha tekrar etmek gerekirse, PHP ile veritabanına
dayanan sayfalar yapmak için mutlaka ve sadece MySQL sürücülerini kullanmak gerekmez. Bunun
yerine sözgelimi Microsoft’un ODBC sürücülerini kullanabilirsiniz. Ancak Web sitenize evsahipliği
yapan firmanın size ODBC desteği verip vermediğini öğrenmeniz gerekir. Aslında aynı şekilde,
evsahibi firmanın MySQL desteği verip vermediğini de öğrenmek zorundasınız. (PHP ile MS-ODBC
sürücülerini kullanabilmek için Andrew Stopford’un ASP Today sitesinde
http://www.asptoday.com/articles/20000202.htm adresindeki yazısında daha geniş bilgi
bulunmaktardır.)
Web sitemizde, HTML sayfalarımızı ve PHP programlarımızı neden veriya dayalı hale getirmeliyiz?
Bu sorunun cevabı, "Başka türlü elde edilemeyecek bir otomasyon, ziyaretçilerimizle gerçek
anlamıyla etkili biralışveriş sağlamak için!" diye yanıtlayabiliriz. Yukarıda, bir PHP programının
ziyaretçiden Frm ile alacağı bilgileri, yine kendisine gönderebileceğini ve bu bilgileri işleyebileceğini
gördük. PHP programımızın bu bilgileri bir veritabanına işlediğini ve ziyaretçi bir başka sayfaya
gitmek istediğinde o sayfanın içeriğinin, ziyaretçinin birkaç saniye önce yaptığı tercihlere göre
belirlendiğini düşünün. Bir başka örnek, Web sitemizdeki sayfalarda yer alan unsurların
güncelleştirilmesi için her güncelleştirmede çok sayıda programı yeniden yazmak veya sayfayı
yeniden yapmak zorunluğu varsa, bu program ve sayfaların içeriklerini bir veritabanından alıyor
olması halinde, sadece veritabanını güncelleştirmekle onlarca, belki de yüzlerce, HTLL ve PHP
belgesini yeniden yazmış gibi olabiliriz.
Bu bölümde önce bir örnek veritabanı dosyası hazırlayacağız; daha sonra bunun içindeki verileri PHP
programı ile sayfalarımıza katacağız. Bu dizinin ikinci kitabında Unix/Linux sistemlerinde veritabanı
uygulamaları üzerinde daha geniş duracağız. Burada Windıows sisteminde bir MySQL uygulamasını
ele almakla yetineceğiz.

5.1. MySQL Veritabanı


Gerçi bu kitapçığın konusu kendisi başlı başına bir dil olan SQL değil, ama burada sadece MySQL
programı ile veritabanı oluşturmakla kalmayalım, bir anlamda SQL diline de çok kısa bir giriş
yapalım. SQL çook geniş bir dildir. Burada yapabileceğimiz giriş ancak ilk alıştırmamaızı yapmamıza
yetebilir.
SQL, (Structured Query Language, Yapısal Sorgu Dili) veritabanı endüstrisinin standart dilidir. Fakat
HTML konusunda farklı firmaların sadece kendi Browserlarının tanıdığı türden etiketler geliştirmeleri
gibi, SQL alanında da farklı firmaların ekleri ve dilde yaptıkları değişiklikler vardır.

61
MySQL, teknik tabiriyle sunucuda daemon olarak çalışır ve arzu eden programa, bildireceği
(ve erişim hakkı bulunan) veritabanı dosyasından veri çekerek, sunar. Bir veritabanında farklı
sayıda tablolar olabilir. Bir veritabanı dosyasında yer alan tablolarda, sütunlar ve satırlar
vardır: bunların kesiştikleri yerlere biz verilerimizi yazarız. Bir SQL veritabanı dosyasında
her bir kutunun ne tür veri kabul edeceği önceden belirlenir; dolayısıyla türü sayı olan verinin
yazılacağı kutuya, alfanümerik değer yazılmaz. MySQL, sayısal verilerin türünü INT, belirli
bir sınıra kadar değişen sayıda karakterden oluşacak verilerin türünü VARCHAR komutuyla
belirler.

5.1.1. MySQL veri türleri


MySQL'de bir çok veri türü oluşturulabilir. Ancak Web programları açısından önemli olan bir kaçı ve
özellikleri şöyle saralanabilir:
INT Tamsayı: -2147483648'den 2147483647 kadar değişen diziye "signed" (işaretli), 0'dan
4294967295'e kadar değişenine "unsigned" (işaretsiz) denir.
VARCHAR(n) n sayısını geçmemek şartıyla değişen boyutta karakter olabilir.
CHAR(n) Kesinlikle n sayısı kadar karakter olabilir.
TEXT En fazla 65535(2^16-1) karakter alabilen metin alanı.
MEDIUMTEXT En fazla 16777215(2^24-1) karakter alabilen metin alanı.
DATE 1000-01-01'den 9999-12-31'e kadar değişebilen tarih alanı.
TIMESTAMP 1 Ocak 1970'den 18 Ocak 2038'e kadar olan ve

MySQL'de bir tablo oluşturmak için gerekli CREATE TABLE komutu şöyle kullanılır:
CREATE TABLE uyeler (adi VARCHAR(30), soyadi VARCHAR(30), üye_no INT ) ;
Bu komutla, "uyeler" isimli üç sütunlu bir tablo oluşturulur: birinci ve ikinci sütunlarda en fazla 30,
karakterlik değişen boyutta alfanümerik değerler yer alırken, üçüncü sütunda sadece tam sayı olan
değerler bulunabilir. Bu komutla oluşturulan tabloya INSERT INTO komutuyla veri girebilirsiniz:
INSERT INTO uyeler (adi, soyadi, uye_no) VALUES ('Muharrem','Taç','1234')
Bir tablonun oluşturulması ile içine veri yerleştirilmesi komutları ayrı ayrı zamanlarda, ayrı işlemler
olarak yapılabileceği gibi, toplu bir metin halinde, otomatik olarak da yapılabilir.
MySQL veritabanından bilgi edinmek için SELECT komutunu kullanırız:
SELECT * FROM uyeler ;
Bu, MySQL'e, uyeler adlı tablodaki bütün değerlerin okunmasını bildirir. Buradaki "*" işareti, "bütün
sütunlardaki bütün değerler" anlamına gelir. Diyelim ki yukardıda oluşturduğumuz tablonun sadece
"adi" ve "soyardi" sütunlarındaki bilgileri almak isteseydik, bu komutu şöyle yazacaktık:
SELECT adi soyadi FROM uyeler ;
Bir veritabanındaki bilgilerin yenileriyle değiştirilmesini, yani veritabanı dosyasının
güncelleştirilmesini UPDATE komutu sağlar. Bu komutu kullanarak veritabanımızdaki bazı

62
kutucukların içindeki bilgileri değiştirebiliriz. Veritabanı dosyalarını güncelleştirme zorunluğu
bulunması ise bize veritabanı tasarımının çok önemli olduğunu gösterir. Örneğin:
UPDATE uyeler SET adi = "Şahika" ;
Bu komut, veritabanındaki bütün satırlarda, birinci sütundaki değerleri "Şahika" olarak değiştirmekle
sonuçlanırdı. Amacımız bu ise, sorun değil; ancak çoğu kez MySQL'e hangi satırda (veritabanı
tekniğindeki terimle söylersek, hangi kayıtlarda) değişiklik yapılacağını daha ayrıntılı sölememiz
gerekir. Veritabanı dosyamızı oluştururken, her kaydın diğer kayıtlarda olmayan (unique) bir sütun
(bunu da veritabanı tekniğindeki terimle söylersek. alan) bulunmalıdır, ki MySQL'e yapılacak
değişikliğin tam yerini söyleyelim. Örneğin
UPDATE uyeler SET adi = "Şahika" WHERE uye_no = 1234;
MySQL bu komutu alınca sadece üye numarası 1234 olan kişinin (yani uye_no alanındaki değer 1234
olan kaydın) "adi" alanındaki değeri silecek ve yerine verdiğimiz yeni değeri yazacaktır. Böyle birincil
alanı bulunan, iyi düşünülmüş bir veritabanından seçim yapmak da kolay olur. Örneğin:
SELECT adi soyadi FROM uyeler WHERE uye_no >= 123;
deyimi ile tablomuzda bulunan kayıtlardan sadece üye numarası 123'den büyük olanları seçebiliriz.
Bir MySQL veritabanındaki kaydı silmek için DELETE komutunu kullanırız:
DELETE FROM uyeler WHERE uye_no = 1234;
Veritabanında sadece bir kayıtta üye numarası 1234 olacağı için bu komutla sadece bir satır
silinecektir. Bu komutu, diyelim ki üyelik kaydını yenilememiş kişilerin tümünü silmek için de
kullanabiliriz. Veritabanımızda üyelik kaydının yenilendme tarihini gösteren bir alan bulunduğunu
varsayalım:
DELETE FROM uyeler WHERE yenileme_tarihi < 2000-01-31;
Bu komutla, üyeliğini yenileme tarihi 31 Ocak 2000'den eski olan bütün üyelerimizin kaydını
veritabanından silmiş oluruz.
Bu komutların MySQL'in DOS komut işlemcisi ile komutsatırından yapılacağını belirtmemiz gerekir.
Bunu yapabilmek için MySQL Server'ın Windows'da çalıştırılması gerekir. MySQL'in paylaşım
sürümünü kullanmak için Windows sistemlerinde mysqld-shareware.exe programını çalıştırmanız
gerekir. Bunun için DOS komut istemcisi penceresinde "C:/mysql/bin" dizinine giderek, şu komutu
vermemiz yeter:
mysqld-shareware
MySQL sürücülerinizin kişisel Web sunucusunda başarıyla çalıştığına, kitapçığın baş tarafında
belirttiğimiz küçük alıştırmayı yaparak emin olduktan sonra gerçek bir veritabanı dosyası yazabiliriz.
Yukarıda gördüğümüz komutları komut istemci satırından tek tek verebileceğimiz gibi, bir düzyazı
dosyasında toplayıp, MySQL programına da otomatik olarak yaptırabiliriz. Bu dosyaya, içindeki
verileri alıp veritabanına boca edeceğimiz için, Dump dosyası denir.

63
5.1.2. PHP-MySQL İlişkisi
Böylece, MySQL ile bir veritabanı dosyası oluşturma işlemi bitmiş oldu. bir PHP programı yazarak bu
veritabanındaki kayıtları okutabiliriz. Bunu yapmadan önce yine hızlı şekilde PHP-MySQL ilişkisinini
sağlayan fonksiyonlara gözatalım.
PHP programlarımızda veritabanından yararlanabilmek için programın önce Web sunucusu
aracılığıyla veritabanı dosyası ile bağlantı kurması gerekir. Başka bir deyişle, PHP programının veri
ile arasında bir yol açması gerekir. MySQL açısından ise bu bağlantı, veri sunucusunda yeni bir
oturum açılması anlamına gelir. İki program arasındaki bu ilişkiyi PHP'nin mysql_connect()
fonksiyonu yapar. Bu fonksiyonun alabileceği üç parametre vardır:
$veri_yolu = mysql_connect ("localhost" , "root" , "parola" );
Burada "localhost" yerine MySQL programının parçası olarak çalıştığı sunucunun adı yazılır. "root"
bu MySQL sunucusunda açılacak oturumun kimin adına açılacağını belirter. "root" kelimesi,
sunucunun yönetici olarak oturum açılacağı anlamına gelir: "parola" kelimesinin yerine de MySQL'i
kurarken belirlediğimiz bir kullanıcı parolası varsa, onu yazarız. Bu komutta yer alan $veri_yolu
değişkeni, açılacak veri yolunun, PHP ile MySQL veritabanı sunucusu arasındaki bağın tanıtıcı işareti
olacaktır. Bu bağlantı kurulduktan sonra, açtığımız veri yolundan gelecek bilgiler ve veritabanına
gidecek bilgiler bu değişken aracılığıyla gerçekleşecektir. Veri sunucusu ile veri yolu bağlantısı
kurulursa, bu değişken değer tutar hale gelir; bağlantı kurulamazsa bu değişken boş kalır.
mysql_connect() fonksiyonunun başarılı olup olmadığını bu değişkenin durumunu sınayarak
anlayabiliriz. Örneğin:
$veri_yolu =mysql_connect("kara-murat", "root");
if ( ! $veri_yolu) die ("MySQL ile veri bağlantısı kurulamıyor!);
Burada veri sunucusunun bulunduğu Web sunucusunun adının "kara-murat" olduğuna, ve ooturumun
"root" yetkileriyle açıldığına dikkat edin. İkinci satırdaki if deyimi, $veri_yolu değişkeninin değer
içerip içermediğine bakıyor ve değişkende bir değer yoksa, bağlantı kurma girişini durdurarak,
ziyaretçiye hata mesajı gönderiyor.
Bağlantı başarıyla kurulduktan sonra PHP programı, bu yoldan, veritabanı sunucusuna, hangi
veritabanı dosyasından yararlanmak istediğini bildirmelidir. Buna veritabanı dosyası seçme işlemi
denir ve mysql_select_db() fonksiyonu ile yapılır:
mysql_select_db( "veritabanın_adı" , $veri_yolu ) or die ("Veritabanı açılamıyor!".mysql_error() );
Bu fonksiyonun başarıyla icra edilip edilmediği fonksiyondan dönen değerin true/doğru veya
false/yanlış olmasından anlarız. Bu değer false ise bu deyimin die() bölümü icra edilecek ve Browser
penceresine veritabanının açılamadığı mesajıyla birlikte MySQL'in hata mesajı da gönderilecektir.
PHP'nin MySQL veritabanını seçememesi çoğu zaman kullanıcı yetkilerinin Internet ziyaretçilerini
kapsayacak şekimde düzenlenmemiş olmasından kaynaklanır. Bu durum gerçek Web sunucusunda
ortaya çıkarsa, Web sunucusu yönetimine başvurmak gerekir.
Şimdi bu anlattıklarımızı biraraya getiren kolay bir PHP programıyla biraz önce oluşturduğumuz

64
"veri" adlı veritabanından bir birinci kişiye ait verileri "okutarak, HTML sayfamızda kullanalım.
Aşağıdaki programı, veri_01.php adıyla kaydedelim:
<HTML>
<TITLE>PHP ile Veri Örnegi</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<meta http-equiv="Content-type" content="text/html; charset=windows-1254">
</HEAD>
<BODY>
<?php
$veri_yolu = mysql_connect("kara-murat", "root");
if ( ! $veri_yolu ) die ("MySQL ile veri bağlantısı kurulamıyor!");
mysql_select_db("veri" , $veri_yolu)
or die ("Veritabanına ulaşılamıyor!" . mysql_error() );
$sonuc = mysql_query("SELECT * FROM calisanlar",$veri_yolu);
printf("Adı: %s<br>\n", mysql_result($sonuc,0,"adi"));
printf("Soyadı: %s<br>\n", mysql_result($sonuc,0,"soyadi"));
printf("Adresi: %s<br>\n", mysql_result($sonuc,0,"adres"));
printf("Görevi: %s<br>\n", mysql_result($sonuc,0,"pozisyon"));
?>
</BODY>
</HTML>
Burada, mysql_connect() fonksiyonu ile "kara-murat" isimli sunucuda root adına MySQL sunucu ile
bağ kurduktan sonra mysql_select_db() fonksiyonu ile bu bağı kullanarak veri isimli veritabanından
veri çekeceğimizi bildiriyoruz. Daha sonra mysql_query() fonksiyonu ile bu veritabanındaki
“calisanlar” isimli tablodan “herşeyi” seçiyoruz ve seçilenleri $sonuc dizi-değişkeninde topluyoruz.
$sonuc değişkenin değerlerini görüntülemek için PHP'nin özel bir fonksiyonu olan mysql_result()
fonksiyonu kullanıyoruz. Burada metin biçimlendirmekte yararlandığımız printf() fonksiyonunu daha
önce tanımıştık.

65

You might also like