Professional Documents
Culture Documents
DERS NOTLARI
Bir Web Tasarımcısı/Programcısı Neleri Bilmelidir?
XML, AJAX …
Temel Bilgiler
İnternet?
Ağlar Arası Ağ
Dünya genelindeki bilgisayarların oluşturduğu büyük ağ
İnternet e bağlı her bilgisayar IP olarak adlandırılan bir adrese sahiptir. (194.27.72.1)
1
URL (Universal Resource Locator) ?
protokol://sunucu.ağ.adresi:port_numarası/alt_klasörler/.../istenen kaynak
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 ...)
web servisinde bilgisayarlar haberleşmek için HTTP (Hyper Text Transfer Protocol)
standardını kullanırlar.
2
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?
İ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?
6
Web Sayfası Tasarlarken Dikkat Edilmesi Gerekenler
Kullanıcılara anlatılmak istenen bilgi özellikle sayfanın başlarında çok net olarak
verilmelidir.
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.
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ı
Standardlar sayesinde;
Netscape-> JavaScript
Microsoft-> JScript.
8
HTML (Hyper Text Markup Language)
SGML HTML
HTML 4
XML XHTML
SVG
MathML
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.
<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>
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>.
<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.
<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.
<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.
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.
<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.
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.
<SAMP></SAMP> : Örnek çıktı (program, script vs) için kullanılır. Genelde blok içerisindeki
ifadeler Teletype olarak gösterilir.
<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">
14
Tablolar : Tablolar, HTML içerisinde en çok kullanılan tag’ lerdendir.
<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>
<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:
Şifreniz:
Mesleğiniz:
Düşünceleriniz:
Gönder Temizle
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.
18
Uygulama No 1
Uygulama Adı Bir Metin Parçasının Biçimlendirilmesi
Amaç Properties menü çubuğunun kullanımını öğrenme
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
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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.
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.
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) :
37
Bir Veritabanı Sisteminin yapması gereken şeyler ise şunlardı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 ç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.
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.
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:
3.3.2.1. CREATE:
Veritabanı ve tabloların oluşturulmasında kullanılır.
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.
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.
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.
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.
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.
İç 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.
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
Ogrenciler Tablosu
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!
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;
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ı!");
}
?>
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
}
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.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.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.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";
?>
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.
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.
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