February 18, 2017 | Author: ikutluay | Category: N/A
Download HTML Css Php SQL Mysql Rehberi...
HTML-CSS-PHP MYSQL-SQL
İbrahim Halil Kutluay Nisan 2013
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Ġçindekiler Ġçindekiler ............................................................... 2 GĠRĠġ .................................................................... 21 Kullanım Kuralları ................................................... 23 HTML DĠLĠ ............................................................. 24 Bir Web Sitesi Bilinmesi Gereken Temel Bilgiler ........ 26 Bir web sitesi için .................................................... 26 Domain Uzantı Adları ............................................ 28 TCP / IP .............................................................. 29 PORT .................................................................. 30 Web Server ......................................................... 30 Apache ............................................................ 32 IIS .................................................................. 32 Bir Web Server yazılım paketi seçerken dikkat edilmesi gereken bir kaç ilkeyi sıralayalım: ........... 32 Web‘de Gezme ĠĢlemine Genel Bir BakıĢ ................. 35 HTML‘in baĢlıca özelliklerini Ģöyle sıralayabiliriz: .......... 36 Web Tarayıcıları ...................................................... 39 Microsoft Internet Explorer ................................. 39 Netscape Navigator ........................................... 40 Firefox ............................................................. 40 Opera .............................................................. 40 Google Chrome ................................................. 40 Yandex Browser ................................................ 40 Tarayıcılar Ġçin Yardımcı Programlar ve Ek Birimler .. 40 HTML Editörleri ....................................................... 42 Expression Web ................................................... 42 Dreamweaver ...................................................... 42 Word .................................................................. 42 NVU ................................................................... 43 HTML‘in Temel BileĢenleri ........................................ 44 2
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Etiketler (Tag) ..................................................... 44 HTML Yazım Kuralları ............................................ 45 HTML Dosyasının Bölümleri.................................... 45 Türkçe bilgi içeren bir sayfa örneği ise; ...................... 46 ... ............................................... 47 ... .............................................. 47 ... ................................................. 47 ... .............................................. 47 Meta Etiketleri Arama Motorları Ġçin Sitemize Eklememiz Gereken Bilgiler ................................ 48 Meta Tağlarının GeliĢmiĢ Kullanımı ......................... 50 Sayfanın Süre AĢımını Belirtmek .......................... 50 Bir Sayfanın Belirli Bir süre Ekranda Kalıp Otomatikman BaĢka Bir Adrese Yönlenmesini Sağlamak ......................................................... 50 Türkçe Karakterleri Görüntülemek-Kod Sayfası ........ 51 Etiketinin Parametreleri ........................... 52 TrueType Fontlar-Harf GeniĢliği Serif ve Sans Serif Harfler ............................................................. 52 H1,H2,H3,H4,H5,H6 BaĢlık Etiketleri .................... 53 etiketi...................................................... 54 … etiketi ............................................. 55 Genel Biçimlendirme Etiketleri .................................. 57 Metni Koyu, veya Ġtalik Yazdırma ........................ 58 HTML Dilinde Renk Kodlaması ............................. 59 Güvenilir 216 Renk ............................................ 62 Sıralı Listeler..................................................... 65 Sırasız Listeler .................................................. 67 Etiketi ile Çizgi OluĢturma ......................... 68 Resim ve Multimedya Dosyalarını Kullanmak ........... 69 Marquee ile Resim Ve Metin Kaydırma .................... 71 Resimleri Kullanırken Dikkat Edilecekler; .............. 73 3
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Video ve Ses Dosyalarının Kullanımı ....................... 74 Tablolar ................................................................. 75 BaĢlık, Satır ve Veri Etiketleri................................. 75 Sütun ve Satır BirleĢtirme – Colspan- Rowspan ........ 78 Zemin - Bgcolor ................................................ 78 Tablonun geniĢliği- Width ................................... 78 Tablonun Çerçevesi - Border ............................... 79 Hücre içindeki boĢluk miktarı CELLPADDING ......... 79 Hücreler arası boĢluk miktarı CELLSPACING .......... 80 Sembol ĠĢaretlerinin HTML Dilindeki KarĢılıkları ........ 80 Genel Sayfa Kullanım ġekilleri .................................. 82 Çerçeveler -Frames ................................................. 86 Avantajları ........................................................... 86 Dezavantajları...................................................... 86 Frame Parametreleri ............................................. 88 Frame Satırları ve Sütunları ................................ 89 Yatay Dikey KarıĢık Frame OluĢturmak ................. 91 HTML‘de Bağlantı‘ya (LINK) GiriĢ.............................. 93 HTML‘de Bağlantı Türleri .......................................... 97 HTTP bağlantıları: .............................................. 97 FTP bağlantıları: ................................................ 97 Haber Grupları: ................................................. 97 Elektronik Posta Bağlantısı: ................................ 98 Dosya Bağlantıları: ............................................ 98 Diğer bağlantılar: .............................................. 98 Resimleri Link BaĢlığı Vermek Ġçin Kullanmak .......... 99 Resim Haritası (Image Map) ile Link Kullanımı ....... 100 Link Verirken Relative (göreceli) ve Absolute (mutlak) Adreslemelerin Farkları ....................................... 101 KULLANICI ĠLE ETKĠLEġĠM VE FORMLAR .................. 103 Form Etiketinin Alt Seçenekleri ............................ 106 Form Elemanları Çizelgesi ................................... 107 4
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
INPUT ............................................................... 110 Kullanıcının klavyeden metin girmesi için: ............. 113 Parola GiriĢi için: ............................................. 113 Onay Kutusu için (Check iĢareti): ...................... 113 Tekil Seçme Kutusu için (Radyo düğmesi): ......... 114 Listeleme Kutusundan SeĢmek Ġçin (SELECT)...... 114 Uzun Metin GiriĢi Ġçin (TEXTAREA) ..................... 115 Gönder ve Sil düğmeleri (Submit ve Reset) ........ 115 Tabindex ........................................................ 116 URL Kodları .................................................... 118 CSS ile Biçimlendirme Teknikleri, Dinamik HTML ....... 120 CSS Stillerine Neden Ġhtiyaç Duyulur .................... 120 Cascading Style Sheets -CSS ve Kullanım ġekilleri . 121 Yerel Stil ġablonu ........................................... 122 Sayfa Ġçi Global Stil ġablonu ............................ 122 Site Ġçi Global Stil ġablonu ............................... 124 Birden fazla stil Ģablonu verilirse Tarayıcı ne yapar? 125 HTML içinde bölüm oluĢturma (DIV) ........................ 126 CSS ve Seçici(Selector) Kavramı ve Seçici Tipleri ... 127 ĠsimlendirilmiĢ Seçiciler .................................... 127 Sınıf Seçiciler .................................................. 128 Karma Seçiciler (Pseude Classes) ...................... 129 ġartlı Seçiciler (Contextual Selectors ) ............... 131 Bir Alana Tanımlı Stillerin DıĢında Stil Uygulamak .. 133 CSS Blokları ve Denetlenebilir Özellikler ................... 133 CSS Biçimlendirme Tablosu ................................. 133 Font Özellikleri Ġçin CSS Kullanımı: .......................... 139 FONT-FAMILY (Yazıtipi ailesi): .............................. 139 FONT-STYLE(YazılıĢ ġekli): .................................. 140 FONT-VARIANT (Yazıtipi türü):............................. 140 FONT-WEIGHT (Yazıtipi Koyuluğu): ...................... 140 FONT-SIZE (Yazıtipi boyutu): .............................. 141 5
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Renk ve Zemin Özellikleri:................................... 142 Metin Özellikleri: ............................................. 143 Konum (Pozisyon) Özellikleri ............................... 145 Konum ―POSITION:‖ Değerleri ......................... 146 CSS ve Katman (Layer) Kavramı .......................... 147 Katman Ġndeksi – (Z-index): ............................ 149 BoĢluk bırakma, Margin : .................................... 150 Xhtml BELGE TÜRÜ ............................................ 151 Sonuç .................................................................. 152 Altın Öğütler......................................................... 153 Hosting Hizmeti Alırken ...................................... 153 Web Sitesi Yaparken ........................................... 153 Site Tasarımı Adımları ......................................... 154 Bir Site Tasarlarken ............................................... 156 Bir Web Sitesinin Tutulmasını Sağlayan Etkenler ....... 158 Tanıtım ............................................................. 159 Kullanıcı Dostu Tasarım....................................... 160 EriĢilebilirlik ....................................................... 160 Kaliteli Ġçerik ..................................................... 161 Geri Besleme ..................................................... 161 Php Programlama Dili ............................................ 162 Php Programlama Dili ............................................ 162 Php Dilinin GeçmiĢi ............................................. 162 Neden PHP ........................................................ 164 Interaktif Web Sayfaları Hazırlamak Ġçin Yöntemler 165 PHP ve ASP KarĢılaĢtırması .................................. 167 PHP ve Cold Fusion KarĢılaĢtırması ....................... 169 PHP Dilinin Kapasitesi ......................................... 169 PHP Nasıl ÇalıĢır ................................................. 170 PHP Dili ve Veritabanı Programları ile ĠliĢkisi ............. 172 PHP Dilinin GeniĢletilebilirliği .................................. 175 Bazı PHP Kütüphaneleri ve iĢlevleri ....................... 175 6
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
PEAR (PHP Extension and Application Repository) .. 179 PHP - Web Sunucusu – PHP Kurulumu ..................... 179 XAMPP .............................................................. 180 APPSERV ........................................................... 180 Uniform Server .................................................. 181 EasyPHP ........................................................... 181 Php Öğrenmek Zormu ........................................... 182 Ġlk PHP Programımız – Merhaba Dünya .................... 182 PHP KOD YAZIM KURALLARI ................................... 182 Açıklama (Yorum) Satırları ..................................... 187 PHP ile Ekrana Çıktı Verme ..................................... 189 echo() fonksiyonu-(Ekrana yazdırma) ................... 189 print() fonksiyonu – (Ekrana Veri Yazma) .............. 190 Escape Kodlar .................................................... 191 DeğiĢken Nedir ? ................................................ 192 DeğiĢken Türleri ................................................. 195 Alfanümerik DeğiĢkenlerin Ġçeriğine Dizi Olarak EriĢme ....................................................................... 196 Diziler (Array) .................................................... 197 Çok Boyutlu Diziler ............................................. 198 Dizi Tanımlama Kuralları ..................................... 199 Nesneler (Objects) ............................................. 200 Sabit Değerler - Constants .................................. 201 define ("SABIT_ADI", değeri); ............................. 202 Operatörler .......................................................... 204 Aritmetik Operatörler: ........................................ 205 BirleĢik Atama Operatörleri.................................. 207 Bir Arttırmak veya Azaltmak için .......................... 208 Kontrol Blokları ve KarĢılatırma Operatörleri ............. 208 KarĢılaĢtırma Operatörleri ...................................... 208 ĠĢlem Önceliği Sıralaması .................................... 211 if komutu ............................................................. 212 7
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
if-endif Kullanımı ve PHP ile HTML Kodunu Ayırma .. 215 Endif .............................................................. 217 switch komutu ...................................................... 217 Tek KoĢula Göre Ġki Sonuç - Üçlü Operatör (Ternary Operatör)............................................................. 220 Döngü Kavramı ..................................................... 220 For Döngüsü ...................................................... 221 While Do Döngüsü .............................................. 223 Do While Döngüsü .............................................. 223 For .. Each Döngüsü ........................................... 225 Döngüyü Kırmak için Break Komutu ..................... 226 Döngüyü Devam Ettirme : Continue ..................... 227 Döngü Ġçinde Döngü Kullanımı ................................ 228 Döngü ve Kontrol Bloklarında PHP ve HTML Ġç içe Kullanım .............................................................. 229 BaĢka Bir Dosyayı Ġthal Etme ................................. 230 include() fonsiyonu............................................. 231 require() fonksiyonu ........................................... 231 include_Once ve require_Once ............................. 231 include() ve türevlerindeki güvenlik açığı .............. 233 include() ile Kodun Yeniden Kullanımı ................... 234 HEREDOC Nedir ................................................. 235 Fonksiyon Kavramı ve Kategorilere Göre PHP Fonksiyonları ........................................................ 236 DeğiĢkenlerle ĠĢlem Yapan Fonksiyonlar ................ 237 isset() fonksiyonu (değiĢkene değer atanmıĢ mı kontrol etmek) ................................................ 237 unset() fonksiyonu (değiĢkeni hafızadan atmak-yok etmek) ........................................................... 238 empty() (DeğiĢken boĢmu) ............................... 238 is_string(), is_integer(), is_double() fonksiyonları ile tip tespiti........................................................ 239 8
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
print_r () fonksiyonu........................................ 240 DeğiĢken Tiplerini DönüĢtürme ve DeğiĢken Tipini Öğrenme ........................................................ 241 gettype() fonksiyonu (DeğiĢken tipini alma)....... 242 settype() fonksiyonu (değiĢekene bir tip atama) . 243 Dizilerle ĠĢlem Yapan Fonksiyonlar ..................... 245 array_merge() fonksiyonu- (Dizileri birleĢtirme) .. 246 array_push() fonksiyonu–(Dizilere değiĢken ekleme) ..................................................................... 246 array_shift() fonksiyonu–(Dizinin ilk elemanını silme) ..................................................................... 247 array_slice() fonksiyonu – (Diziden kopyalama) .. 247 sort() ve rsort() fonksiyonları-(Dizileri sıralama).. 248 asort() ve ksort() fonksiyonları-(ĠliĢkili dizileri sıralama) ....................................................... 248 Program Durdurma Fonksiyonları ............................ 249 exit() fonksiyonu (kodun çalıĢmasını durdurmak) ... 249 die() fonksiyonu (kodun çalıĢmasını durdurmak) .... 249 eval() fonksiyonu (kodun çalıĢmasını durdurmak) .. 249 Tarih ve Zamanla ĠĢlem Yapma............................... 250 Avantajları ........................................................ 250 Dezavantajı ....................................................... 251 time() fonksiyonu (Ģu anki zaman bilgisini alma) . 251 microtime() fonksiyonu (Ģu anki zaman bilgisini hassas birimle alma) ........................................ 251 strtotime() fonksiyonu (Metni zaman bilgisine çevirme) ........................................................ 252 date () fonksiyonu (tarih zaman bilgisini metne çevirme) ........................................................ 252 mktime() fonksiyonu (sayılardan tarihi oluĢturma) ..................................................................... 256 checkdate() fonksiyonu-Tarih geçerli mi ............. 257 9
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
setlocale() fonksiyonu (bölgesel ayarlar) ............ 257 Tarih Bilgilerini Türkçe Yazdırmak ...................... 258 getdate() fonksiyonu (tarih zaman bilgisini alma) 259 Matematiksel ĠĢlemlerde Kullanılan Fonksiyonlar Ve ĠĢlevleri .......................................................... 260 ceil() fonksiyonu (yukarı yuvarlama).................. 260 floor() fonksiyonu (aĢağı yuvarlama) ................. 260 round () fonksiyonu (matematiksel yuvarlama) ... 260 rand() fonksiyonu (rastgele sayı üretme) ........... 261 mt_rand() fonksiyonu (rastgele sayı üretme) ...... 261 srand() ve mt_srand() fonksiyonları (ilk sayıyı vererek rastgele sayı üretmek) ......................... 262 getrandmax() ve mt_getrandmax() fonksiyonları (Üretilebilecek en yüksek sayı) .......................... 263 abs() fonksiyonu (mutlak değer) ....................... 263 sqrt() fonksiyonu (karekök alma) ...................... 263 pow() fonksiyonu (üs alma) .............................. 263 hypot() fonksiyonu (hipotenüs hesaplama) ......... 264 log() fonksiyonu (logaritma) ............................. 264 log10() fonksiyonu (logaritma).......................... 264 base_convert() fonksyionu (sayının tabanını değiĢtirme) ..................................................... 264 bindec() fonksiyonu (desimal düzene çevirme) .... 265 decbin() fonksiyonu (Onluk düzenden ikilik düzene çevirme) ........................................................ 265 dechex() fonksiyonu (16 lık düzene çevirme) ...... 265 decoct() fonksiyonu (8 lik düzene çevirme)......... 265 hexdec() fonksiyonu (Hex düzeninden ikilik düzene çevirme) ........................................................ 265 octdec() fonksiyonu (8‘lik düzenden 2‘lik düzene çevirme) ........................................................ 266 max() fonksiyonu (en büyük değeri bulma) ........ 266 10
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
min() fonksiyonu (en küçük değeri bulma) ......... 266 Trigonometrik fonksiyonlar ..................................... 266 sin() fonksiyonu (sinüs) ................................... 266 cos() fonksiyonu (kosinüs) ............................... 266 tan() fonksiyonu (tanjant) ................................ 266 asin() fonksiyonu (arcsinüs) ............................. 266 cos() fonksiyonu (arckosinüs) ........................... 267 atan() fonksiyonu (arctanjant) .......................... 267 deg2rad() fonksiyonu (açıyı radyana dönüĢtürme) ..................................................................... 267 rad2deg() fonksiyonu (açıyı radyana dönüĢtürme) ..................................................................... 267 Metin ĠĢleme Fonksiyonları ............................... 268 substr() fonksiyonu (Metnin bir parçasını alma) ... 268 chr() fonksiyonu (ASCII kodun karakter karĢılığı) 270 ord() fonksiyonu (Karakterin ASCII kodunu bulma) ..................................................................... 270 strlen() fonksiyonu (Metnin uzunluğunu bulma) .. 270 count_chars() fonksiyonu (Metin içinde karakterlerin tekrar etme sayısını bulma) .............................. 271 str_word_count() fonksiyonu (Metin içindeki kelime sayısını bulma)................................................ 271 strpos() ve stripos() fonksiyonları (Metnin bulunduğu pozisyon) ....................................................... 272 strstr () ve stristr () fonksiyonları (Metnin ilk bulunduğu yer) ............................................... 273 wordwrap() fonksiyonu (Metni satırlara ayırma) .. 274 explode() fonksiyonu (Metni bölümlere ayırma) ... 274 implode()fonksiyonu (Metni bölümlere ayırma) ... 275 strtoupper() fonksiyonu (büyük harfe çevirme) .. 275 strtolower () fonksiyonu (küçük harfe çevirme) .. 275 11
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
ucfirst () fonksiyonu (ilk harfi büyük harfe çevirme) ..................................................................... 275 ucwords () fonksiyonu (kelimelerin ilk harfini büyük harfe çevirme) ................................................ 276 number_format() fonksiyonu (Rakamları ekrana biçimlendirerek yazdırmak)............................... 276 strcmp () fonksiyonu (iki metni karĢılaĢtırma) ..... 277 strcasecmp () fonksiyonu (iki metni karĢılaĢtırma) ..................................................................... 278 str_pad () fonksiyonu (metnin etrafını boĢlukla (yada karakterle) destekleme) ................................... 278 printf() ve sprintf() fonksiyonu (biçimlendirerek çıktı verme)........................................................... 279 parse_str() fonksiyonu (get ile alınan değiĢkenleri parçalayarak bir diziye atma) ............................ 283 Veri ġifreleme Fonksiyonları ................................... 284 cyript() fonksiyonu (Metni verilen bir anahtara göre Ģifreleme)....................................................... 284 sha1() fonksiyonu (Metni hash algoritması ile Ģifreleme)....................................................... 285 md5() fonksiyonu (Metni MD5 algoritması ile Ģifrelem) ........................................................ 286 Düzenli Ġfadeler (REGEXPS).................................... 287 Temel Seviye Regexpler ...................................... 288 BaĢlangıç Düzeyi Regexpler ................................. 289 Üst Düzey Regexp Ġfadeleri ................................. 290 En Üst Seviye (Guru ) Düzeyi Regexp Ġfadeleri....... 292 preg_match() fonksiyonu (metinler eĢitmi) ......... 294 preg_match_all() fonksiyonu ............................ 295 ereg() fonksiyonu (dizilim arama) ..................... 295 eregi() fonksiyonu (dizilim arama) ..................... 296 12
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
ereg_replace() fonksiyonu (dizilim arama ve değiĢtirme) ..................................................... 296 split() fonksiyonu (metni parçalara ayırma) ........ 297 sql _regcase() fonksiyonu (düzenli ifade üretme) 298 Kullanıcı Tanımlı Fonksiyonlar GeliĢtirmek ................ 299 Basit Bir Fonksiyon Yazalım - myecho ................... 299 GLOBAL ve STATĠK DEĞĠġKENLER .......................... 302 Dizi Fonksiyonları .................................................. 305 array() fonksiyonu (değerleri diziye çevirme) ...... 305 count() fonksiyonu (dizinin eleman sayısını bulma) ..................................................................... 305 print_r () fonksiyonu (değiĢken içeriğini yazdırma) ..................................................................... 305 var_dump () fonksiyonu (değiĢken içeriğini yazdırma)....................................................... 305 Dizileri Sıra ile ĠĢlemek .......................................... 307 list() fonksiyonu .............................................. 307 each() fonksiyonu ........................................... 307 For.. Each ile dizileri iĢlemek .................................. 307 For ile dizileri iĢlemek ............................................ 308 PHP ve Formlar ..................................................... 309 Süper Globaller (Superglobals) ............................ 309 Form Dizaynında Altın Kurallar ................................ 312 Formlardan Bilgi Alma ........................................... 313 Form Verilerini ĠĢleme (Ġki dosya ile) ....................... 313 Form Verilerini ĠĢleme POST Metodu ........................ 316 Form Verilerini ĠĢleme (Tek dosya ile) ..................... 317 Form Verilerini ĠĢleme POST Metodu ........................ 320 Hesap Makinesi Programı ....................................... 322 Basit Bir ġifreli GiriĢ Sayfası ................................... 324 Birden Fazla Sayfaya Yayılan Formlar ...................... 325 PHP ile Posta Gönderme......................................... 325 13
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
mail() fonksiyonu – PHP ile eposta göndermek ....... 326 Web Sayfasından Bir Siteye Dosya Yükleme (Upload) 333 PHP SERVER DEĞĠġKENLERĠ .................................. 336 Kullanıcının Girdiği Değerlerin Doğruluğunu Kontrol Etme ................................................................ 338 Windows ve Unix Dosya EriĢim Yetkilendirmesi ...... 339 PHP Klasör Fonksiyonları ........................................ 341 mkdir() fonksiyonu (Klasör oluĢurmak) .............. 341 rmdir() fonksiyonu (Klasör silmek) .................... 341 chdir() fonksiyonu (Klasör değiĢtirmek) .............. 341 is_dir() fonksiyonu (Dizin mi)............................ 341 opendir() fonksiyonu (Klasörü açmak) ............... 342 readdir() fonksiyonu (Klasörü okumak-listelemek) ..................................................................... 342 closedir() fonksiyonu (Klasörü kapatmak) ........... 342 PHP Dosya Fonksiyonları ........................................ 345 file_exits() fonksiyonu (Dosya var mı?) .............. 345 filesize() fonksiyonu (Dosya boyutunu bulma) ..... 346 is_file() fonsiyonu (Dosya mı ) ......................... 347 is_readable() fonksiyonu (Dosya okunabilir mi?) . 347 is_writable() fonksiyonu (Dosya yazılabilir mi? ) .. 348 is_executable() fonksiyonu (Dosya çalıĢtırılabilir mi? ) ................................................................... 348 touch() fonksiyonu (dosya oluĢturma) ................ 349 unlink() fonksiyonu (dosya silme) ...................... 350 copy() fonksiyonu (dosya kopyalama) ................ 350 readfile() fonksiyonu (Dosyayı satır satır okumak ve ekrana yazmak) .............................................. 350 fopen () fonksiyonu (dosya açma) ..................... 351 fgets () fonksiyonu (dosyadan satır satır okuma) . 352 fseek () fonksiyonu (dosya içinde bir yere konumlanma) ................................................. 352 14
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
fread () fonksiyonu (dosyadan belirli sayıda karakter okuma) .......................................................... 353 fgetc () fonksiyonu (dosyadan birer birer okuma) 353 feof () fonksiyonu (dosya sonuna gelindi mi) ...... 353 fclose () fonksiyonu (dosyayı kapat) .................. 353 fputs() ve fwrite() fonksiyonu (dosyaya yazmadosyaya ekleme) ............................................. 356 flock() fonksiyonu (Kullanımdaki dosyayı kilitleme) ..................................................................... 357 fileadate() fonksiyonu (Dosyaya son eriĢim tarihi- file access date ) .................................................. 359 filemdate() fonksiyonu (Dosyanın son değiĢtirilme tarihi- file modification date) ............................. 359 filecdate() fonksiyonu (Dosyanın oluĢturulduğu tarih - file creation date) .......................................... 359 CSV Dosya Fonksiyonları........................................ 359 fgetcsv() fonksiyonu (CSV dosyasını satır satır okuma) .......................................................... 360 fputcsv() fonksiyonu (Değerleri CSV formatında yazma) .......................................................... 361 KullanıĢlı Bir Örnek Kayıt Arama ............................. 362 Öğrenci Notlarını Webde Yayınlama ...................... 362 Basit Telefon Rehberi ............................................ 365 Basit Sözlük ......................................................... 369 Basit Ziyaretçi Defteri ............................................ 372 PHP Çerez - Cookie Fonksiyonları ............................ 377 setcookie() fonksiyonu – (Çerez bırakma) .......... 379 Aynı sayfada birden fazla çerez bırakmak .............. 383 PHP Dilinde Oturum – Kullanımı .............................. 384 PHP ve MYSQL Kullanımı ........................................ 385 MySQL Nedir ? ...................................................... 386 Veritabanı ve Tablo Nedir ....................................... 387 15
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Mysql Tablo Tipleri ................................................ 387 Mysql Veri Tipleri ............................................... 387 Metin tipleri .......................................................... 388 CHAR ve VARCHAR Farkı ........................................ 388 BLOB ve TEXT Alanlar ...................................... 389 Sayısal Veri Tipleri ................................................ 389 Tarih / Zaman Tipleri ............................................. 390 Küme Tipi ............................................................ 391 Tablo Tasarlama, Key Ve Ġndex Kullanımı ................. 392 MYSQL ‗i Komut Satırından Yönetmek ................... 395 Mysql‘i BaĢlatmak .............................................. 395 Komut Satırından Veritabanı OluĢturmak .............. 395 Komut Satırından Tablo OluĢturmak ..................... 395 Komut Satırından Veri GiriĢi ................................ 396 Komut Satırından Veri Sorgulama ........................ 396 Komut satırından Bilgi DeğiĢikliği Yapmak ................ 397 Komut Satırından Kayıt Silmek ............................... 398 SQL Dilinin Tarihçesi.............................................. 399 ĠliĢkisel Bir VTYS Ġçin 12 kural ................................ 400 SQL Dilinin Bölümleri ............................................. 403 A. DDL (DATA DEFINITION LANGUAGE) KOMUTLARI ....................................................................... 404 B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI ....................................................... 404 Veritabanı içindeki seçmek, değiĢtirmek, güncellemek ve silmekle ilgili SQL deyimleridir. ............................... 404 C. DCL (DATA CONTROL LANGUAGE) KOMUTLARI .. 404 SQL Komutları ve Örnekler ..................................... 405 A. DDL KOMUTLARI ............................................ 406 CREATE Komutu .............................................. 406
16
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
CREATE komutu tablo ve view gibi bir veritabanı nesnesi yaratmayı sağlar. (Create ayrıca yeni veritabanıda oluĢturabilir.) ....................................................... 406 Mysql‘de sütun adlarını sınırlamak için ― ` ‖ karakteri kullanılır. Normalde bu verilmedende iĢlem yapılır. normal SQL nostasyonlarında bu karaktere gerek yoktur. .......................................................................... 406 Kullanım Yapısı: ................................................. 406 ALTER DEYĠMĠ................................................. 407 Daha önce yaratılmıĢ nesnenin değiĢtirilmesini sağlar. Örneği bir tablonun tasarımını değiĢtirmek gibi. ........ 407 ALTER TABLE ders01a ADD msn VARCHAR( 40 ) NOT NULL ; ................................................................. 407 DROP DEYĠMĠ ................................................. 407 Bir nesnesin silinmesini sağlar. ............................... 407 DROP TABLE ders01a ............................................ 408 B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI ....................................................... 408 SELECT DEYĠMĠ ............................................... 408 Temel Kullanımı: ................................................... 408 Parametrelerin Anlamları: ................................. 409 AS Deyimi ile Alias Tanımlama ................................ 411 Where Deyimi....................................................... 412 And ve Or ile Birden Fazla KoĢulun Kontrol Edilmesi 414 In ve Not In Deyimleri ........................................ 414 Like ve Not Like Deyimleri: .................................... 415 Group By Deyimi .................................................. 416 Order By Deyimi: .................................................. 416 SELECT Ġçinde Aritmetik ĠĢlemler ............................ 417 Aritmetik ĠĢlem Operatörleri ................................... 418 Aggregerate fonksiyonları ...................................... 419 sum() fonksiyonu – Bir sütunun toplamı ................ 419 17
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Bir sütuna göre bir select ifadesinin toplamını alır. .... 419 avg() fonksiyonu – Bir sütunun ortalaması ......... 420 min() fonksiyonu – Bir sütundaki en küçük değer 420 max() fonksiyonu – Bir sütundaki en büyük değer ..................................................................... 421 count() fonksiyonu – Bir sorguya göre dönen kayıt sayısı ................................................................ 422 JOIN ĠġLEMĠ ......................................................... 422 INNER JOIN ....................................................... 423 LEFT JOIN ......................................................... 424 RIGHT JOIN ...................................................... 424 TABLOYU KENDĠSĠ ĠLE ĠLĠġKĠLENDĠRME (SELF JOIN) ....................................................................... 424 ĠÇĠÇE SELECT NESTED SELECTS .......................... 425 UNION KULLANIMI ................................................ 425 EXISTS KULLANIMI ............................................ 426 C. DCL (DATA CONTROL LANGUAGE) DEYĠMLERĠ ...... 426 GRANT DEYİMİ .................................................. 426 GRANT CREATE DATABASE, CREATE TABLE .............. 426 TO ayĢe ............................................................... 426 SQL FONKSĠYONLARI ............................................ 427 Metinlerle ĠĢlem Yapan SQL Fonksiyonları .............. 427 ascii() fonksiyonu ................................................. 427 char() fonksiyonu ............................................ 427 concat() fonksiyonu ......................................... 428 length() fonksiyonu ......................................... 428 DönüĢtürme Fonksiyonları ...................................... 428 conv() fonksiyonu ........................................... 428 bin() fonksiyonu .............................................. 428 oct() fonksiyonu .............................................. 428 hex() fonksiyonu ............................................. 428 Tarihlerle ĠĢlem Yapan SQL Fonksiyonları .............. 429 18
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
TABLOLARDA DEĞĠġĠKLĠK YAPMAK: ........................ 431 INSERT Komutu .................................................... 431 UPDATE Komutu: .................................................. 431 DELETE DEYĠMĠ .................................................... 432 Kullanım biçimi: .................................................... 432 DELETE FROM tablo ............................................. 432 PHPMYADMIN ....................................................... 434 PhpMyAdmin Kurulumu ....................................... 435 PhpMyAdmin'i ÇalıĢtırma ve Tanıma ..................... 436 PhpMyAdmin ile Database OluĢturma .................... 438 PhpMyAdmin ile Tablo OluĢturma ......................... 438 Bir Veritabanının Modelini Çıkarmak ..................... 440 MySQL ve PHP ...................................................... 442 PHP Dili Mysql Fonksiyonları Tablosu ..................... 443 mysql_connect() deyimi(Database bağlantısı) ..... 446 mysql_select_db() deyimi................................. 447 mysql_query() fonksiyonu- Mysql‘e sorgu göndermek ..................................................................... 448 mysql_numrows() fonksiyonu-Sorgudan Dönen Kayıt Sayısını Bulmak............................................... 448 mysql_result()-Sorgudan Dönen Kayıtları ĠĢlemek449 Kayıtları Ekrana Listelemek ............................... 449 DeğiĢkenleri Sorguların Ġçinde Kullanmak ........... 450 mysql_fetch_assoc() fonksiyonu- sorgu sonucundan bir satır almak ................................................ 452 mysql_error() fonksiyonu- MySQL hatalarını konrol etmek ............................................................ 452 PHP ile Veritabanı OluĢturma Listeleme ve Silme . 453 PHP ile Tablo OluĢturma, Listeleme, Güncelleme ve Silme ................................................................ 455 PHP ile Tablolara Veri GiriĢi, Listeleme, Güncelleme ve Silme ................................................................ 457 19
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Örnek Uygulama: PHP ile ġifreli GiriĢ Sayfası Yapılması .......................................................................... 460 PHP ve GÜVENLĠK ................................................. 473 addslashes() fonksiyonu (metindeki zararlı olabilecek karakterleri etkisiz yapmak) ............................. 476 stripslashes () fonksiyonu (etkisizleĢtirilmiĢ kodları ilk haline döndürmek) ............................................. 476 strip_tags () fonksiyonu (HTML etiketlerini metinden çıkarmak) ......................................................... 477 PHP ile Header Kullanımı ........................................ 478 header() fonksiyonu-(BaĢlık bilgilerini kullanmak) .. 478 Bir Nesne OluĢturalım ............................................ 483 PRATĠK BĠLGĠLER .................................................. 487 Resim Albümü: .................................................. 487 GiriĢ sayfası yapmak .......................................... 490 Sayfada Tarih Yazdırma ......................................... 491 CMS Sistemleri ..................................................... 495 DĠĞER SÜRÜME DAĠR NOTLAR ................................ 498
20
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
GĠRĠġ Son yıllarda internet denen olgu hayatımızın içine öyle bir girdi ki artık çıkması mümkün olmayacak noktayı bile çoktan geçti. Önceleri fantazi yada prestij olsun diye web sitesi yaptıran Ģirketler artık bunu zorunluluk olarak görmeye baĢladılar. Bir çok firma teklif mektuplarını elden yada kağıda baskılı gönderen Ģirketleri doğrudan elemeye baĢladı. Internet denen Ģeyle 1992 de tanıĢtım. Daha doğrusu internet denen sanal dünya ilk tanıĢmamızda sanal olarak gerçekleĢti. ArkadaĢlarla bazı üniversitelerin yurt dıĢına doğrudan bağlanabildiğini konuĢmuĢtuk yani hepsi bu. 1995 yılında Çukurova Üniversitesinin internet kursuna katıldım. Ftp, ls, sz gibi komutları öğrenmiĢ ne de çok sevinmiĢtim. Ardından sürekli takip ettiğim dergilerde, her Ģey internet, web tarayıcı, Netscape, Frontpage, Outlook, ICQ, IRC gibi baĢlıklara çıkmaya baĢladı. 1998 yılında ilk resmi iĢime baĢladıktan bir süre sonra Ģirketin ilk internet sitesi için benimde HTML öğrenmem gerekmiĢti. Bende Joe Barta‘nın yazdığı ücretsiz HTML öğrenme setinden faydalanarak bugünkü Ģartlarda yüzüne bile bakmayacağım ilk sitemi yapmıĢtım. Derken Hakkı Öcal üstadın kitapçıkları çıkmaya baĢladı. HTML, Javascript, PHP… Hatta kendisi ile yazıĢan Daphne rumuzlu arkadaĢım sayesinde birkaç kez e-mail gönderip yazıĢmıĢlığımızda oldu. Bu vesile ile bugünlerde çok sık kullanılan ―web sitesi olmayana kız vermiyorlar” 21
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
lafını ilk kez ben bir –emailimde yazdım Hakkı Hocama. Patenti bana ait olsa gerektir ama kimse takmaz sanırım. Etrafta yığınla Ġngilizce kaynak varken neden Türkçe bir kaynak sorusu beni hep üzmüĢtü. Hakkı Öcal üstadın kitapçıkları bir açığı doldurmuĢtu evet ama onlarda yüzeyseldi sonuçta. ĠĢin asıl kötü tarafı kaynak yerinde sayarken PHP çok yol katetmiĢti. Ġsim zikretmek istemiyorum ancak para verip aldığım orijinal kitaplarda son derece yüzeysel konular, son derece yetersiz bir anlatımla verilmiĢti. Yabancılara baktığımda kendimize kızmaya baĢlıyordum. Mesela Paul Hudson‘un online kitabı bizde yazılmıĢ bütün kitaplardan kat be kat iyiyken, web sitesinde bedava yayınlanmaktaydı. Bruce Perens‘in kitapları da ilk yılda parayla satıldıktan sonra PDF halinde bedava veriliyordu. Bense para verip aldığım Türkçe kitaplarda merak ettiğim basit Ģeyleri bile bulamıyordum. Sonuçta iĢ baĢa düĢtü ve 2007 yılında yazmaya baĢladığım notlar, 2008 yılında bu kitabın ilk taslağına dönüĢtü. Ancak uzun bir süre ilgilenme Ģansım olmadı. Artık daha fazla öyle kalmasına gönlüm razı olmadı ve sıkı bir çalıĢma ile yayınlamaya karar verdim. ÇeĢitli kaynaklardan esinlenmeler olduğunu ilk baĢta yazmıĢtım. BaĢta dediğim gibi bu materyaller için maddi beklenti içinde değilim, ancak kullanımı konusunda çeĢitli sınırlar da getirmek zorundayım. Çünkü onca emek harcadıktan sonra bazılarının bunları kaynak bile göstermeden kendilerinmiĢ gibi sahiplenmesi ayıp ötesi bir durum olurdu. 22
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Kullanım Kuralları 1. Bu çalıĢmanın tamamı veya bir kısmını kaynak belirtmeden yayınlamanız, çalıĢmamımı sahiplenerek kendinizinmiĢ gibi sunmanız yasaktır. Kaynak belirterek yaptığınız alıntıları bir e-mail ile bildirirseniz sevinirim. 2. ÇalıĢmamızdaki yazı ve örnek kodları ticari amaçla satılan bir kitap için kullanamazsınız. Ticari olmayan çalıĢmalarınızda ise alıntı yapma kurallarına uymanız gereklidir. 3. Bu çalıĢmayı tamamen öğrenciler ve öğrenmek isteyenler bir Ģeyleri araĢtırmak istediklerinde bir kaynak bulabilsinler diye, maddi bir beklenti olmadan hazırladım. Beni teĢvik edecek bir mail, bir teĢekkür, siteme verilmiĢ bir link bu konudaki Ģevkimi artıracaktır. 4. Bu çalıĢma için harcağım emek hakkı için; Ģunu da hatırlatırım ki: Koyduğum kurallar haricinde davranıp emek hırsızlığı yapanlardan hakkımı, öbür dünyadaki hesaplaĢmada talep edeceğim. 5. Emek hırsızlarına karĢı yasal haklarım saklıdır. Bu yasal müeyyideler konusunda sizi önceden uyarmak gibi bir zorunluluğum yada lüksüm yoktur. Umarım yararlı bir Ģeyler ortaya çıkarmıĢımdır.
23
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
HTML DĠLĠ Atası olan ARPA-NET ve daha sonra adeta çağı değiĢtiren Internet çağımızın en büyük kütüphanesidir. Bu bilgiler değiĢ tokuĢ edilirken herkesin ortak bir dilden konuĢması gerektiğinden buna bir çare arayan uzmanlar, 1986‘da, Standart GenelleĢtirilmiĢ ĠĢaretleme Dili (Standart Generalized Markup Language, SGML) adıyla bir protokol –dili- ortaya çıkardılar. Daha sonra ise günümüzde hala geliĢtirilen HTML protokolu üzeri bir standart oldu. Burada dil derken bir ayrıma dikkat etmek gerekir. HTML bir dildir ancak bu dil makineye komut veren değil sadece bilgiyi görüntüleyecek olan bilgisayar programına ―yazının şurasını kalın yap, burada tablo yapılacak, kenarlıklı olacak, bu kısım bir pragraf” gibi komutlar veren bir dildir. Bu bakımdan HTML‘nin bir betik dili olduğu hatırlanmalıdır. HTML, önceleri Macintosh, ardından IBM uyumlu bilgisayarların yardım dosyalarının oluĢturulmasında kullanıldı. Ancak, HTML kısaltmasının açık Ģekli olan Hypertext Markup Language‘de geçen Hypertext terimi, 1950 yılında Ted Nelson adlı bir bilgisayar uzmanı tarafından içinde “hot” yani baĢka bir metinle veya resimle ilintilendirilmiĢ noktalar bulunan metin anlamına kullanılmıĢtı. Apple bunu bir metne yada simgeye tıklayınca baĢka bir yere gitme yöntemi olarak kullandı. Böylece metinler hareketli gibi davranmıĢ oluyordu. Asıl aĢama ise 1989 yılında yaĢandı. CERN uzmanlarından Tim Berners-Lee, laboratuvar yönetimini ortak bir yazı biçimlendirme sistemine ikna edebilmek 24
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
için, “Enformasyon Yönetimi: Bir Öneri” baĢlıklı bir rapor hazırlayarak bilgisay Ģebekeleri arasında bilgi alıĢveriĢi için Hypertextin ortak bir dil olmasını önerdi. Doğrusu imza attığı devrimi kendisi bile hayal edememiĢ olsa gerek. Bugünkü Internet‘i Internet yapan iki ana baĢlık vardır. Birincisi bilgisayar arası iletiĢimi gerçek zamanlı olmaktan çıkartan ve iletiĢimi daha sağlam hale getiren HTTP bağlantı protokolünün geliĢtirilmesi; diğeri ise HTML dilinin çok yalın ancak resim, ses, video gibiher materyali taĢımaya yetecek kadar güçlü olmasıdır. Ağ teknoloji 1980‘lerin baĢlarında bağlantının gerçek zamanlı olmasını gerektiriyordu. Internet‘in adı da ağlararası ağ anlamına gelen Ġngilizce ―Inter-networksnetwork: Inter-net kısaltmasından doğmuĢtur. Bir bilgisayar diğerine bağlandığında iletiĢim gerçek zamanlı ve birebir olma durumundaydı. Gönderilen ile alınan bilginin aynı olup olmadığını kontrol etmek ancak böyle mümkündü. HTTP (Hypertext Transmission Protocol-Hyper Metin İletim Kuralları) bunu ortada kaldırdı. HTTP protokolünü bir otobanın ve yanında uzayıp giden bir otoyol çifti gibi düĢünülebilir. Otoban bakımda ise otoyoldan iĢinize devam edebilirsiniz. HTTP‘nin , 1990 yılında kurulan World Wide Web Konsorsiyomu‘nun (W3C) tarafından resmi standartları kabul edildi. Bu yüzden 1990 bugünkü Internet‘in de doğum tarihi olarak kabul edilebilir. W3C sürekli olarak http ve HTML içinde bulunan eksiklikler için ortak standartlar belirlemekte ve bunları duyurmaktadır.
25
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Web ortamında çalıĢan dinamik dillerin, HTML‘in pabucunu dama attığı söylense de bu doğru değildir. Çünkü dinamik diller kullanıcının tarafında değil sunucu tarafında çalıĢmaktadır. Yani dinamik dilin ASP veya PHP yahut JSP olması fark etmez çünkü kullanıcı hep HTML verisi almaktadır.
Bir Web Sitesi Bilinmesi Gereken Temel Bilgiler Bir web sitesi için Her web adresi aslında bir numara bloku tarafından temsil edilir. Bu o sitenin IP numarasıdır. Örneğin 212.175.12.43 gibi. IP numarası hatırlamak kolay olmadığından her site için bir isim tanımlanmasının hatırlamayı kolay kılacağı düĢünülmüĢtür. Bu isimlere alan adı (domain name) denir. Hangi ismin hangi IP tarafından karĢılanacağını tutmak içinse NS (name server) dediğimiz rehber bilgisayarlar kurulmuĢtur. (9 ana NS bilgisayar vardır ve tamamı ABD ‗dedir). Name server üzeride kayıt sorgulamak içine DNS denilen servisten yararlanılır. Örneğin IP adresi olarak 194.27.128.101 gibi numaraları akılda tutmak zor olduğundan 1983‘te Wisconsin Üniversitesi DNS‘yi geliĢtirmiĢtir. DNS isimleri rakamlara çevirir ve bu da daha kolay kullanım sağlar. Bazen Ttnet DNS sunucuları hata verdiğinden ―internet çalıĢmıyor‖ diyenler olur. Oysa adres çubuğuna IP no yazılırsa siteye eriĢim sağlanması mümkündür. 26
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Ġsimleri tahsis etmek ve çakıĢmaları önlemek üzere Domain Register iĢi yapan Ģirketler kurulmuĢtur. Bunların iĢi uygun bir alan adını belirli bir ücret karĢılığı kullanıcılara kiralamaktır. Kiralama iĢlemi ile birlikte bu alan adının internette hangi IP no üzerinde olduğuda burada kayıt altına alınır. Bir sitenin eriĢilebilir olması için DNS bilgisayarında IP ile ağa bağlı bir bilgisayar olması gerekir. Bu kendi bilgisayarımızda olabilir ancak bu sistemlerin gerçek sunucu olması iĢlemlerin aksamasını engelleyeceğinden ve bu sunucularda bizim için hayli masraflı olacağından yeni bir iĢkolu doğmuĢtur. HOSTING dediğimiz bu iĢ kolunun ana amacı kullanıcıların web sitelerini kendi sistemlerinde yayınlamak ve bunun karĢılığında ücret almaktır. Hosting Ģirketleri sunucu bilgisayarlarına Web server adı verilen bir program kurarlar. Bu program ise 80 nolu portu dinleyere kendisine bağlanan kiĢilere istedikleri dosyaları iletir. Web server ile kullanıcı TCP/IP iletiĢim protokolü üzerinden konuĢurlar. Kullanıcı Web Server programına kendisine kurulu olan ve Browser (Web tarayıcı, Gezgin) adı verilen programlar ile 80 nolu http portundan bağlanır. Kullanıcıları ile Web server arasında köprü olarak ise internete çıkarmak üzere Internet Servis Sağlayıcı (ISS- Ingilizcesi ISP – Internet Service Provider) yer almaktadır. Zaten gerçek zamanlı iletiĢimi gereksiz kılanda bu iĢlemdir bir nevi. 27
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Kullanıcı örneğin www.tcmb.gov.tr yazdığında browser bu talebi ISS‘ te bağlandığı bilgisayara iletmekte, o da gerekli arama iĢleminden sonra bilgiyi talep etmektedir. ĠĢte bu aĢamada kullanıcı bağlantıyı kesse bile web server bunu bilmemektedir. Zaten bilmesine de gerek yoktur. Web sunucu HTML metni ( içerik ve o içeriğin ekranda nasıl gösterileceğine dair biçimlendirme bilgileri) gönderir ancak metni biçimlendirme iĢlemi kullanıcı tarafından yer alan browser tarafından yerine getirilir. Browserlar iĢte bu yüzden HTML yorumlama motoru denilen engine barındırırılar. Her yorumlayıcı farklı mantıkla ve ayrı firmalar tarafından yazıldığından bazı metinlerin ekranda görüntüleme iĢleminde farklılıklar oluĢabilir. Ayrıca bazen Ģirketler sadece kendi tarayıcısına yönelik etiketleri üstelik W3C tarafından onaylanmadan motoruna ekleyebilir. Örneğin BLINK etiketi NETSCAPE O yüzden site tasarımında ne çok bu konuya dikkat edilmelidir. Dolayısı ile BLINK kullanılan bir sayfa Netscape ile normal görünürken, Safari ile farklı görünecektir. En büyük Ģansımız ise tarayıcılar hatalı bir etikete rastlayınca bunu göz ardı ederek geri kalanları çalıĢtırmaya devam etmesidir.
Domain Uzantı Adları Günümüzde alan adları yaĢanan sıkıntıların ardından çeĢitlendirilmiĢ ve alternatifler artmıĢtır. Ancak biz temel standartlar üzerinden anlamlarını belirtelim. 28
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
.com -Ticari Ģirketlere ait alan adını belirtir .edu -Eğitim kurumlarına ait alan adını belirtir .gov -Hükümet ve devlete ait alan adını belirtir .mil -Askeri alan adını belirtir .net -Ağ servis sağlayıcılarına ait alan adını belirtir .org -Dernek, spor kulübü gibi organizasyonlara ait alan adını belitir
TCP / IP Transmission Control Protocol / Internet Protocol Kelimelerinin baĢ harflerinden oluĢan Paul Baran tarafından düĢünülmüĢ bir sistemdir. Paul Baran‘dan talep edilen Ģey Ģuydu. ―A,B,C Ģehirlerinde bilgisayarlarımız var, A,B,C birbirleriyle konuĢabilsin, bilgi gönderebilsin, ama A devre dıĢı kalsa bile B ve C konuĢmaya devam edebilsin, bu diğerleride içinde geçerli olsun‖. Paul Baran bu iĢ için paket anahtarlamalı ağ iletiĢimi tekniğini düĢündü. Çünkü istenen Ģey verinin iletilmesiydi. Her koşul ve şart altında bile verinin iletilmesi birinci öncelikti. (İlk öncelik güvenlik olmadığı içinde bu gün güvenlik anlamında bir sürü ekstra yatırıma vs gerek duyulmakta). Veriler paketlere bölünecek ve hedef yerde bu paketler birleĢince verinin kendisi oluĢmuĢ olacaktı. Paul Baran daha sonra A,B,C lokasyonlarının nükleer füze merkezleri olduğunu öğrendiğinde aslında geliştirdiği şeyin ne olduğunu anlamıştı anlamasına da bilmeden de olsa internetin ilk öncüsü de olmuştu. Kısaca TCP / IP protokolü de 29
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Ģüphesiz ilk olarak askeri amaçlı geliĢtirilen bir protokoldü ve temel amacı ―bir nükleer savaĢ anında tüm telefon Ģebekesi yok olsa bile biz iletiĢimi devam edip karĢı tarafa nükleer saldırı ile cevap verebilelim.― 1983 yılında TCP / IP ye temel hali verildi. TCP / IP protokolü Unix iĢletim sistemine eklenmiĢ ve 1984 yılında DNS kavramı oluĢturulmuĢtur. Günümüzde internet hayatın içine öyle girmiĢtir ki, TCP / IP sadece internetin değil tüm ağ protokollerinin arasından en çok kullanılan durumuna yükselmiĢtir. PORT TCP / IP de her bilgi bilgisayarlar arasında portlar üzerinden iletilir. Ġletim için geçilen yol aynı olsada bilgilerin doğru adrese gitmesi için portların kullanımı Ģarttır. Bir gazete datıcısını düĢünün. Dağıtım kanalı hep aynıdır. Sokaklar. Ancak gazetelere doğru yerlere ulaĢtırmasının tek yolu adreslerdir. Yani kapı numaraları. HTTP iĢlemleri için 80 nolu port kullanılır. Mail alıp gönderme için 25 ve 110 nolu portlar kullanılır. MSN, ICQ, IRC, FTP vs vsvs tüm yazılımların ayrı bir port kullanımı vardır. TCP /IP veriyi iletirken baĢına port‘u da kaydettiğinden, o paketin hangi yazılım için olduğu bilgisi de otomatikman iletilmiĢ sayılabilir. Böylece bilgisayarda aynı anda bir çok yazılım ile internet kullanılabilmektedir.
Web Server Internette tanımlı bir alan adına karĢılık gelen bir numara (IP numarası) vardır demiĢtik. Bu IP nolu bilgisayar sayfa 30
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
gelen kiĢilere istedikleri bilgileri gönderebilmek için hep açık olmak zorundadır. Ayrıca bu bilgisayarda gelen talepleri toplayıp onlara cevap verecek bir de program yüklü olmalıdır. Web server aslında hem bu iĢlere yarayan programlara hemde bu programların kurulduğu bilgisayarlara verilen bir isimdir. Kafa karıĢtırıcı olabilir ama ama iki tanımda doğrudur. En çok bilinen Web Server programları Apache, MS Internet Information Server (IIS), Xitami gibi yaygın sunuculardır. Bu programların, bilgi alıp-vermenin yanı sıra, elektronik posta alıp verme ve yönlendirme, veritabanlarına eriĢme ve içinden seçme yapma (Query, SQL, vb. gibi), kendi sabit diskinde duran bir dosyayı alıp karĢı tarafa aktarma (FTP, Gopher, WAIS) veya karĢı tarafın vereceği dosyayı alıp kendi sabit diskine kaydetme yeteneği olur. Ġlk Web Server programı, yukarıda, HTML dilinin geliĢtirilmesindeki öncü konumu nedeniyle sözünü ettiğimiz, Ġsviçre‘deki CERN kurumu tarafından geliĢtirildi; ama kısa zamanda UNIX platformunda, anonim bir tarzda ve ücret ödemeden kullanılabilen bir Ģekil aldı. KiĢisel bilgisayarların UNIX gerektiren bilgisayarlara oranla daha ucuz olması, Microsoft‘un NT, IBM‘in OS/2 iĢletme sistemlerinin UNIX‘e ciddî rakip haline gelmiĢ bulunmaları nedeniyle, bu sistemlere dayalı Web Server programları da hızla artmaktadır. Apache Web Server ise bir çok iĢletim sisteminde çalıĢabilmesi ve ücretsiz olması nedeniyle Linux ile birlikte iyi bir ikili olmuĢ ve Internette en çok kullanılan 31
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Web Server tutmaktadır.
olma
özelliğini
açık
ara
ile
elinde
Apache
Açık kaynak kodludur
Bir çok iĢletim sisteminde çalıĢabilir (hatta bir çok sistemde zaten kurulu halde gelir)
Tamamen ücretsizdir
Kaynak kodu kapalıdır.
Windows iĢletim sisteminde çalıĢır.
Ücretsiz değildir.
IIS
Linux ve FreeBSD adlı, ücretsiz dağıtılan UNIX iĢletme sistemleri de, ticarî olanları aratmayacak niteliklere sahiptir. Ayrıca bu tür ücretsiz programlar, Apache Web Server‘ın ücretsiz sürümünü de içerdiklerinden sıfır maliyet ve kurulum ile web server edinmek mümkündür.
Bir Web Server yazılım paketi seçerken dikkat edilmesi gereken bir kaç ilkeyi sıralayalım: 1. Yazılım paketi yeterli güvenliği sağlayacak özelliklere sahip olmalıdır. Binalarda bir odadaki yangının yandaki odaya sıçramasını önleyen ateĢe dayanıklı duvarlardan (Firewall) esinlenerek adlandırılan bir dizi program, Web Server yazılımının bulunduğu bilgisayarın, kötü niyetli kiĢiler tarafından bozulmasına engel olmaktadır. Ancak Web Server‘ın kendi içinde mevcut güvenlik 32
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
önlemlerinin neler olduğunu dikkatle araĢtırmanız gerekir. Bunuda tarafsız bir gözle yapmak gerekir örneğin çoğu kiĢi için Unix çok güvenli, Windows ise berbattır yada bunun tersi düĢünülebilir. Oysa bu bir takım tutma olayı değild,r ve önyargılı olmak yanlıĢtır. Asıl güvensiz olan sistem değil sistemin baĢında oturan sistem yöneticisidir. Yönetici ne kadar dikkat ederse sistemde o kadar güvende demektir. Burada önemli olan, Internet‘e açılmanın, iyi niyetli-kötü niyetli herkese açılmak olduğunu unutmamaktır. Özellikle form denilen, HTML‘in ziyaretçi bilgisayarın evsahibi bilgisayara talepten baĢka Ģeyler göndermesine imkan veren etiketlerini ve ona bağlı CGI (Common Gateway Interface-Ortak Geçit Arabirimi) adı verilen ziyaretçinin ev sahibi bilgisayardaki programları harekete geçirebildiği buluĢma noktasında yer alacak programları tasarlarken, daima kötüniyetli kiĢileri dikkate alarak hareket etmek gerekir. Internet‘te güvenliğin ne kadar kolay sarsılabildiğine ve ne kadar kolay önlem alınabileceğini bir örnek verelim. Sayfanızda, ziyaretçinin doldurması gereken ―Elektronik Posta Adresiniz:‖ diye bir metin kutusu bulunduğunu düĢünün. Bu kutuya bütün ziyaretçilerin elektronik posta adreslerini yazacaklarını düĢünüyor ve bu bilgiyi iĢleyecek CGI programında, ziyaretçinin bu kutuya yazacağı bilgiyi, alıp doğruca Web Server‘ın ―Mail‖ programına veriyorsunuz. Peki, ya kullanıcı adres yerine;
33
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
“
[email protected]; mail
[email protected] BaĢlık Metni 45
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Body Metni İlk Sayfam Sayfama Hoş geldiniz Türkçe bilgi içeren bir sayfa örneği ise; 46
content
=
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Merhaba. Web Tasarım Rehberi‘ne HoĢ Geldiniz!
... Örneklerde görüldüğü gibi bu etiket bloku tarayıcıya HTML dosyasının baĢladığını ve bittiğini belirtir. Tüm diğer kodlar bu iki etiket arasına yazılır. ... Etiketleri arasında ise sayfa hakkında bilgiler verilir. title gibi etiketler, anahtar kelimeler, sayfanın dili vs burada yer alır. Bu alandaki bilgiler ekranda görünmezler. Sadece title tarayıcı baĢlığı olarak kullanılır. ... Title etiketi tarayıcı penceresinin üstüne yazılacak olan baĢlığı belirtir. Yazılan metin penceresinin üstünde tarayıcı adı ile birlikte yazılır. ... Bu etiketler ise sayfanın ekranda görüntülenecek olan kısmını yazdığımız bloktur. Parametreleri ile birlite sayfanın zemin rengini, linklerin rengini, arkaplan resmini ayarlamak mümkündür.
47
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Meta Etiketleri Arama Motorları Ġçin Sitemize Eklememiz Gereken Bilgiler Normal olarak oluĢturulan her sayfanın HEAD kısmına sayfanın açıklamasının yapıldığı, sayfa hakkında anahtar kelimelerin belirtildiği meta etiketler konabilir ve konulmalıdırda. Anahtar kelimeler arama motorlarının sayfayı tanımasını ve tespit etmesini sağlar. Yeni nesil arama motorları (Örn : Google gibi) meta etiketlerinin yanısıra belgenin Gövde kısmındaki içeriği de dikkate alır. Eskiden sırf ziyaretçi çekmek için popüler metinlere meta etiketlerinde alakasız yer verilir bir nevi kullanıcı aldatılırdı. Google BODY kısmınıda dikkate alarak bu iĢe bir önlem almıĢ olmaktadır.
NAME: Sayfanın yazarı, sayfanın yayın tarihi, vb., bilgiler içerir. Ģeklinde yazılır.
"keywords" sayfa hakkında bazı anahtar kelimeler içerir. Böylece arama motorları için index oluĢturmaya yardımcı olur. (Dikkat: bu kısma ilgisiz alakasız Ģeyler yazarak arama motorları aldatıldığından artık sadece bu alan değil komple içerik indekslenmektedir. Kısaca kendinizi kandırmayın)
="description"
"description" etiketi site hakkında tanımlanma bilgisini içerir. Bu etiketi tanımayan arama motorları ise 48
CONTENT
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
sayfanın ilk bir kaç kelimesini tanımlama aracı olarak kullanır. Örnek: 89
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Bu kodun içindeki .. koduna dikkat ettiyseniz içindeki etiketleride ne diyebilirsiniz. BaĢtada dediğimiz gibi eski tip tarayıcı kullananlar yada frame özelliğini kapatmıĢ kullanıcılar sayfanın sadece blokunu göreceklerdir. Setleri oluĢturacak sayfalara örnek ise Çerçeve 1 90
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Çerçeve: 1 Bu sayfayı, örnekten anlaĢılabileceği gibi ―cer01.htm‖ adıyla kaydedilmeli. Zemin rengi metinler değiĢtirmek üzere, cer02 ve cer03 adıyla iki kopyası daha gerekli olacaktır. Ayrıca tüm dosyaların aynı klasörde durması gerektiğinide unutmamak gerekir. Ana set dosyasındaki frameset içinde bulunan cols ifadesini rows yaptığımız anda dikey olan frame kolonları bu sefer yatay olarak yerleĢecektir.
Yatay Dikey KarıĢık Frame OluĢturmak Frameler teknik olarak birbirleriyle birleĢtirilemez ancak aynı görüntüyü elde etmek mümkündür. Sadece kodlama Ģekli biraz farklı olacaktır. Frame kullanımında ne kadar frame isteniyorsa belirtilir demiĢtik. Bu belirtilen frameler için ile kaynak belirtilmediği anda tarayıcı o alanda bir sütun oluĢturur. Buraya diğer frameler yeleĢtirilebilir. EĢit olmayan sayıda sütun ve sıra içeren frame iĢlevi için bu olay kullanılır. Birinci sütun tek sıralı, ikinci sütun iki sıralı bir çerçeve sayfası için kodumuz Ģöyle olmalıdır:
NORESIZE
91
NORESIZE
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
92
NORESIZE
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
HTML’de Bağlantı’ya (LINK) GiriĢ Buraya kadar gördüklerimiz metini biçimlendiren ve gösterimi ile ilgili etiketlerdi. Oysa web ile biraz ilgili birisi bile linkler olmadan web ortamından hiçbir Ģey yapılamayacağını bilir. Çünkü linkler yardımı ile kullanıcılar bir web adresinden diğerine özgürce gezebilirler. Ancak tabiî ki verilen bağlantının hedefindeki resim, ses, vide yada web adresi doğru olmalıdır. Aksi taktirde ―kırık link‖ (dead link, broken link) dediğimiz adeta çıkmaz sokak sayılacak bir kopukluk oluĢur. Örneğin link verirken ―c:\belgelerim\cv.doc‖ linkini verdiniz ve amacınız kullanıcıların cv dosyanıza eriĢebilmesi. Peki sizin sabit diskinizde kendi halinde duran bir dosyaya, sabit diskiniz Internet‘e açık değilse, kullanıcı nasıl eriĢecek.. Tabii bu traj komik örnekte asıl sorun Ģu, hardiskinizi internete açtınız diyelim, bu sefer özel bilgilerinizi nasıl koruyacaksınız? .. etiketi HTML‘e hareket kazandıran ve link vermeyi sağlayan etikettir. HTML etiketleri arasında Anchor (A) etiketinin yanı sıra, ve etiketleri de, bir noktadan bir diğerine gitmemizi sağlar. : Önceden düzenlenmiĢ (preformatted) metin blokları için kullanılır. Normalde, HTML birden çok whitespace'i 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ülenebili .. etiketine özellik kazandıran parametreler Ģunlardır: ACCESSKEY=‖metin‖: Bu parametre ile, bağlantının fare ile tıklamak yerine, klavyede bir veya birden fazla tuĢa 93
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
basarak yapılmasını sağlayabilirsiniz. ―Metin‖ kelimesinin yerine yazacağınız karakterler, klavye kestirmesi olur. CHARSET=‖metin‖: Bağlantı sağlanan Web kaynağının, tarayıcıda hangi dil kodlamasıyla gösterileceğini belirler. Verilmediği takdirde, kullanıcının tarayıcı programı ISO8859-1 olan ASCII kodunu seçer. COORDS=‖X1, Y1, X2, Y2... Xn, Yn‖: Bu parametre, bağlantının metinde değil, bir grafik üzerinde oluĢturulması halinde, resmin hangi koordinatları arası tıklanırsa, bağlantının sağlanacağını gösterir. Bu etiket, SHAPE ile birlikte kullanılır. (Bu sayede bir resmin çeĢitli kısımlarına basıldığından farklı adreslere gidilmesi mümkün olur. Buna image map denilir) HREF=‖url‖: URL, (Uniform Recourse Locator) Internet‘te bulunan bir adres demektir.Bu adres, HTTP, FTP veya elektronik posta yoluyla ulaĢılabilecek bir Web alanı ve o alanın içindeki bir dosya olabilir. UlaĢılacak dosya, HTML dosyası olabileceği gibi bir Word , Excel dosyasıda olabilir, grafik, ses, video ya da sıkıĢtırılmıĢ ZIP dosyası da olabilir. Tarayıcılar genellikle, bir bağlantı ile kendisine gelen dosyayı ne yapacağını bilemezse (örneğin bir zip dosyası), kullanıcıya bu dosyayı yerel sabit diske kaydetmeyi önerirler. NAME=‖metin‖: Anchor‘a isim vererek, daha sonra bu noktaya atıfta bulunma imkanı kazandırır. Bunu, bir sayfanın kendi içinde, link vermek için kullanabilirsiniz. Çok uzun bir sayfanın baĢtarafına Ģeklinde bir ―isimlendirilmiĢ Anchor‖ noktası koyarsanız ve aĢağıda baĢtarafa dönüĢü kolaylaĢtırmak için Ģöyle bir 94
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
bağlantı yapabilirsiniz: e-mail gönder
Dosya Bağlantıları: Sabit bir dosyaya link vermek için kullanılır. En çok intranet ortamlarında kullanılır. Örnek olarak, Kullanım rehberi gibi
Diğer bağlantılar: Internet‘in ilk günlerinde daha sık kullanılmıĢ olsalarda Gopher, ve çok geniĢ bir alana yayılmıĢ ağlarda veri tabanı araĢtırması yapmaya imkan veren WAIS, çok yaygın olmamakla birlikte, HREF ifadesi olarak kullanılabilir. Linkler hakkında detaylı bilgi için http://www.w3.org/addressing/schemes.html adresine bakabilirsiniz. Neden “\” değilde “/” kullanılıyor? HREF ile kullanılan düz bölü ―/‖ iĢareti dikkatinizi çekmiĢ olmalı. ĠĢin aslı Ģu Unix türevi sistemlerde klasör hiyerarĢisi ―/‖ ile ifade edilirken Windows içinde bu iĢem ―\‖ ile ifade edilemektedir. Aslında ―\‖ iĢareti ile ―‖/‖ arasında hiçbir fark yok ve iĢlevleri de aynı. Yani 98
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Windows altında link verirken ―\‖ ilede link verirseniz link çalıĢır ancak unutmayın ki sayfa bir de hosting bilgisayarına yüklenecektir. Peki web server iĢletim sistemi Windows değilse ne olacak. Tabiî ki link kırılılacak. Windows altında ―\‖ yazılsada web server programı bunu normal karĢılığna çevirerek iĢlem yapar. Ancak Linux server içinse bu sorundur. ―\dosyalar\sayfa.html‖ yazdığınızda Linux sizin dosyalr klasörü içinde bulunan sayfam dosyasını kastettiğinizi bilemez.
Resimleri Link BaĢlığı Vermek Ġçin Kullanmak Link verirken yazdığımız bir kodu ele alalım. Link metni Burada ―Link metni‖ yazısı link olduğunu belirtmek üzere altı çizili yazılacaktır ve buraya tıklandığı andada hedef linke gidilecektir. Burada link metni yerine bir resim dosyası kullanılırsa, resim linkin simgesi olacak ve resme tıklandığında link açılacaktır. Örneğin gibi. Tabii istenirse yazmakta mümkündür.
metninden
önce
metin
Link metni gibi 99
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Resim Haritası (Image Map) ile Link Kullanımı Resimlerin farklı kısımlarından farklı yerlere link vermek isterseniz resim haritalarından faydalabilirsiniz. Örneğin ilk anda aklınıza gelebileceği gibi Türkiye haritası üzerinde tıklanacak ile göre ilgili ilin sayfasına geçiĢ yaptırılabilir. Resim haritası bir resim üzerindeki tanımlanmıĢ etkin noktaları (hotspots) link olarak belirler. Etkin noktalar dikdörtgen veya yuvarlak olabileceği gibi düzensiz Ģekiller de olabilir. Bunlar için uygun koordinatlar belirtilmelidir. Dikdörtgen etkin noktanın konumu iki noktayla tanımlanır: sol üst ve sağ alt köĢeler. Her nokta resmin sol-üst köĢesinden yatay ve dikey uzaklığını piksel cinsinden belirten bir sayı çiftiyle tanımlanır. AĢağıdaki örnekte 0,0 etkin noktanın sol üst köĢesinin 50,50 de sağ alt köĢesinin resmin sol üst köĢesine olan uzaklığıdır. Yuvarlak etkin noktanın konumunu tanımlamak için üç adet koordinat kullanılır: ikisi (yatay ve dikey değerler) dairenin merkezini tanımlamak için, üçüncüsü dairenin yarı çapı içindir.
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Çok köĢeli etkin noktanın konumunu tanımlamak için Ģeklin tüm köĢelerinin koordinatları kullanılır. Çok köĢeli etkin noktalar tanımlanan noktaları birleĢtiren düz çizgilerden oluĢur. AĢağıda beĢ köĢeli bir etkin nokta için gereken kod verilmiĢtir: AĢağıdaki resimde 4 adet geometrik Ģekle de link verilmiĢtir. etiketine usemap="#haritaismi" eklendiğinde haritaismi adlı resim haritasına göre resim içerisinde linkler belirir.
Link Verirken Relative (göreceli) ve Absolute (mutlak) Adreslemelerin Farkları www.abc.com sitesinin www.abc.com/yazilar adresinde yayınlanacağını varsayalım.
ise
tasarlandığını, makaleler
“yazi1.html” dosyasına link verirken “yazilar/yazi1.html” adresi kullanılabilir. Ancak istenirse “http://www.abc.com/yazilar/yazi1.html” adreside kullanılabilir. Bunların birincisi göreceli ikincisi ise mutlak adreslemedir. Her ikisinin de hem avantajı hem de dezavantajları vardır:
Relative adreslenerek oluĢturulan sayfaların bir makineden diğerine taĢınması kolaydır 101
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Relative linkler bir üst seviyedeki sayfa taĢındığı zaman kırılırlar. (Örneğimizde ―yazilar‖ kladörü kalkarsa tüm linkler bu ısımdaki tüm linkler kırılacaktır)
Relative linkleri local serverlarda çalıĢtırıp denemek daha kolaydır.
Absolute adreslemede yazılan linkler daha uzundur ve bakımı daha zordur
Bazı dosyaların mutlaka sunucudan yüklenmesini istiyorsanız (bir kullanıcının sayfanın bir kopyasını kendi makinesine indirmesi durumunda) kesin sonuç verir.
Bu iki adresleme arasındaki farkları bilerek hazırlanan bir sitede normalde göreceli ve mutlak adresleme beraber kullanılır, ve göreceli adreslerin sayısı genelde daha çok olur. Ġyi bir sitede yapılabilecek bir düzenleme, bütünlüğünün bozulmaması gereken sayfalarda, göreceli adresleme kullanmak, ve her yüklendiğinde değiĢen sayfalara da mutlak link vermektir, örneğin saatbaĢı değiĢen istatistikler gibi.
102
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
KULLANICI ĠLE ETKĠLEġĠM VE FORMLAR HTML içinde ne sunarsak sunalım kullanıcılar bir noktadan sonra gezdikleri sayfada kendilerinden bir Ģeyler görmek isteyecektir. Örneğin milli takım açılan siteyi gezen bir taraftar olsanız ve site imkan verse, takıma baĢarı dileklerinizi sunmak yada maç için taktik vermek istemezmiydiniz ? Yada imkan olsa oyuncularlar web sitesi üzerinden bilgi alıĢveriĢinde bulunmak istemezmiydiniz. ĠĢte web de bu iĢlemler için FORM denilen bilgi giriĢ sistemi kullanılır. Formların beĢ ana parçası vardır;
Bilgi giriĢ kutuları
Action ile gösterilen tasarlanan hedef
Submit tıklandığından ne iĢlem yapılacağını gösteren hedef dosya ve bilgilerin iletilmesini istediğimiz yöntem (POST yada GET).
Bilgileri bu hedefe gönderecek SUBMIT düğmesi
Formu ilk haline getirecek olan RESET düğmesi
ve
bilgileri
iĢlemesi
için
Form etiketinin kodlanması FORM ACTION="url" METHOD=POST veya GET> Ģeklinde olur. Adınız Soyadınız:
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Formun name parametresi ile forma bir isim verilebilir. etiketi, içeriğinde kullanılan ACTION parametresi ile kullanıcı SUBMIT butonuna tıkladığında forma girilmiĢ olan bilgilerin hangi adresteki hangi programa teslim edileceğinin belirtilmesine imkan verir. Ġsterseniz formu bir sayfada kodlayıp baĢka bir sayfada bu değerleri iĢleyebilirsiniz. Öte yandan parametrik yöntemle bir sayfadan hem formu gönderip, action içinde aynı sayfayı tanımlayıp, kayıtları aynı sayfa içindede iĢleyebilirsiniz. Formun method parametresi ise verilerin, onu iĢleyecek olan yere nasıl iletileceğini belirtir. Form verileri HTML içinde iki Ģekilde iletilirler.
GET
POST
Get metodu ile iletilen bilgiler diğer programa tarayıcının adres satırından iletilirler. Örneğin içeriğinde ―ALĠ‖ bilgisi olan ―isim‖ ve içeriği ―ATMACA‖ olan soyisim değerini ―isle.php‖ dosyasına GET ile teslim edecek olursak tarayıcının adres satırı www.alanadi.com/isle.php?isim=ALĠ&soyisim=ATMACA Ģeklinde olacaktır. Get yönteminde bilgiler Web Server‘da ―query_string" denen değiĢkenin içine yazılıp diğer programa iletilirken, Post yönteminde bu bilgiler ―stdin" değiĢkenine yerleĢtirilir ve Ģifrelenerek iletilir. Buradaki handikap (ve tabiî ki avantaj) adres satırının herkes tarafından görüntülenebilmesi ve formun hiç çağrılmadan adres çubuğundan bilgilerin verilerek hedef dosyaya iĢlem yaptırılabilecek oluĢudur. Örneğin isle.php 104
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
dosyası bu bilgileri MYSQL veritabanına kayıt ediyor olsaydı ve bizde adres çubuğundan www.alanadi.com/isle.php?isim=MEHMET&soyisim=ATM ACA bilgisini göndersek bu bilgilerde veritabanına kayıt edilmiĢ olacaktı. Haliyle bu iĢlem parola vs iĢlemlerde tercih edilmez. GET yöntemi benim kiĢisel tecrübelerime göre ekranda listeleme sırasında sayfalama yaparken, resim galerisinde resim adı gönderilirken, dosya adı gönderilirken yada doğrudan adres satırından bilgi göndermek için uygun bir yöntemdir. Parola vs ekranları içinse uygun değildir. GET yönteminin handikapı dediğimiz olayda bir de avantaj gizlidir. POST yöntemi için form dizayn etmek gerekir ancak GET yöntemi için form dizayn etmeden doğrudan diğer programa bilgi geçiĢi yapılabilmesidir. www.alanadi.com/dildegis.php?dil=ENGLISH bilgisi hedef dosyaya yeni dil için bir parametre değieri iletmektedir. Diğer program ortada bir form olmamasına rağmen bunu GET ile gönderilmiĢ gibi kullanabilir. Oysa bu iĢlem POST ile yapılamaz. Ayrıca GET için kullanılan ―query string‖ uzunluğu belli bir değeri geçemez. POST yönteminde böyle bir sıkıntı yoktur. Özetle POST
YavaĢ
Güvenli
http header‘ı kullanır. 105
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Sınırsız bilgi gönderir
GET
Hızlı
Güvenlik daha zayıf
Taracının adres satırı kullanır.
Max 2048 karakter gönderebilir.
Form olmadan gönderilebilir
adres
satırı
ile
Veri
alınıp
Formda ayrıca giriĢ kutuları vardır ve bunların her birinin de name parametresi vardır. Bu name parametreleri son derece önemlidir. Bir INPUT etiketinin name değeri formu iĢleyecek olan dilin (PHP, JSP veya baĢka bir dil) o kutunun içindeki değere eriĢmek için kullanacağı değiĢken adıdır. Kısaca Input etiketlerinin name özelliklerini verirken değiĢken tanımlama kurallarına uygun davranılmalıdır. Örneğin ―adsoyad‖ uygun bir isimdir ama ―ad soyad‖ uygun bir isim değildir. Bu iĢlemde uygun olmayan isimlerin kulanılması HTML tarafını enterese etmez. Ancak bu değerleri iĢleyecek olan program bunlarn değerlerine eriĢemez. Formun Submit seçeneği onu hedefe gönderecek butonu, RESET parametresi ise formu ilk anki değerlerine geri dönderecek butonu temsil eder.
Form Etiketinin Alt Seçenekleri Yukardaki örneklerden kolayla anlaĢılabilir ama yinede formun alt etiketlerini detaylıca yeniden görelim. 106
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
ACTION=url Formun gönderildiğinde hangi program tarafından değerlendirileceğini belirtir.
METHOD=get-post Bilgilerin sunucuya hangi yolla gönderileceğini belirtir. GET değeri verildiğinde kontrollere girilen içerik o anda bulunulan adrese eklenip değerlendiriciye gönderilir. POST değeri ise form içeriğini direkt olarak derleyici programa yönlendirir.
TARGET=window Netscape tarafından getirilen bu tag form değerlendirici tarafından kullanıcıya geri gönderilen yanıtın hangi pencerede belireceğini gösterir. Pencere isimleri FRAME konumuzu iĢlerken gösterdiğimiz " _blank" , " _top" gibi değerlerden biri olabilir.
Submit ve Reset Düğmeleri Bu düğmeler formun hedefe iletilmesini içeriğinin temilenmesini salayan ögelerdir.
yada
Form Elemanları Çizelgesi Kontrol TextBo x
Passwo
ġekli
YazılıĢı
Açıklama
Kullanıcının tek satırdan oluĢan metin girmesi için kullanılır.
yapılır. Bununla birlikte yazılan karakterler yerine * karakteri gösterilir.
Formla birlikte taĢınan bu alandaki bilgi kullanıcıdan gizlenir.
Forma kullanıcının bir dosyasının ismini girmesine izin verir.
Kullanıcının doğru/yanlıĢ (true/false) Ģeklinde mantıksal değer girmesinde kullanılır.
Özel bir seçenek listesinden seçim yapma imkanı verir. Radibuttonların name özelliğine aynı değerler verilerek
File
CheckB ox
RadioB utton
108
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
sınıflandırılabilir.
Submit
Reset
FORM etiketinin ACTION özelliğinde belirtilen URL ye form bilgilerini göndermede kullanılır.
Bütün form kontrollerini sıfırlamada kullanılır. Formun sayfa ilk yüklendiğindeki eski halini almasını sağlar.
Tıklandığında Mouse imlecinin X ve Y koordinatlarını göndererek grafiksel onay buttonu yapmada kullanılır.
Ġstemci-tarafı (Client-Side) scriptlerinden JavaScript ya da VBScript i tetikleyebilecek
Submit
Reset
Image
Button
109
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
komut düğmesi oluĢturur
Çok satırlı metinlerin girilmesine imkan sağlayan bir kontroldür.
Kullanıcıya açılan bir listeden hazır seçenekler sunar.
TextAre a
Combo Box
ListBox
Kullanıcıya liste Ģeklinde hazır seçenekler sunar. Buradaki "n" ListBox ın kaç satırlı olacağını belitir.
INPUT INPUT etiketi ile ziyaretçiye, forma klavyeden yazarak bilgi girme imkanı verilir. Bu etiketi kullanmanın genel kodlanıĢı Ģöyledir:
ALIGN=tip TYPE değeri bir resim olarak atandığında bir sonraki satırın resme göre nasıl yerleĢtirileceğini 110
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
belirtir. TOP, MIDDLE veya BOTTOM değerlerinden birini alabilir.
CHECKED Kontrol olarak bir iĢaretleme veya seçim kutusu kullanıldığında CHECKED değeri bu kutuların iĢaretlenmiĢ olarak karĢımıza gelmesini sağlar.
MAXLENGTH=uzunluk Metin kutusuna kullanıcının karakter girebileceğini belirler.
maksimum
kaç
NAME=isim Kontrole bir isim verir
SIZE=boyut Kontrolün boyutlarını karakter cinsinden belirlemenizi sağlar. TEXTAREA kontrolü kullanıldığında en,boy' gibi bir ifade kullanılarak kontrolün hem eni hem de yüksekliği belirtilebilir.
SRC=adres Kontrol olarak resim seçildiğinde resmin bulunduğu adresi taĢır.
TYPE=tip Kontrolün cinsini belirler ve Ģu değerlerden biri olabilir. Checkbox, Hidden, Image, Password, Radio, Reset, Submit o CHECKBOX: Bir onay kutusu görüntüler ve sadece doğru veya yanlıĢ değerlerini alabilir. o HIDDEN: Web tarayıcısının penceresinde görünmez fakat içerdiği değer gönderilen form ile web sunucusuna ulaĢır. 111
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
o IMAGE Bir resmi ifade eder ve üzerine tıklandığında form değerlerini sunucuya yollar. Genellikle bu amaçla kullanılsa da istenilirse kullanıcının resmin hangi x ve y noktalarına dokunduğu öğrenilebilir. Bu tag SRC ile birlikte kullanılır ve SRC komutu resmin bulunduğu URL'yi göstermelidir. o PASSWORD TEXT kontrolü ile aynı özellikleri taĢır fakat kullanıcının girdiği karakterler bu kontrolde yıldız olarak görülür. ġifre giriĢi için uygundur. o RADIO Kullanıcının bir çok seçenek içerisinden bir tanesini seçebilmesine olanak tanır. Grup içindeki RADIO kontrolleri her zaman aynı ismi taĢımalı kontrollerin değerleri VALUE değerine atanmalıdır. o RESET Tıklandığında form içeriğini temizler. Kullanıcının form'u tekrar doldurmasını sağlar. o SUBMIT Form içeriğini sunucuya yollar. VALUE değeri kullanılarak üzerindeki yazı değiĢtirilebilir. o TEXT Kullanıcıdan tek satırlık veri alınmasına olanak tanır. SIZE ve MAXLENGTH takıları, bu kontrolle birlikte kullanılabilir ġimdi Input etiketinin kullanım ilkelerini kullanıcının yapabileceği iĢlere göre ayırarak detaylıca inceleyelim
112
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Kullanıcının klavyeden metin girmesi için: TYPE=TEXT NAME="..." VALUE="..." SIZE="..." MAXLENGTH="..." TABINDEX="X" ―Size" bu kutunun kullanıcının ekranında gösterileceği geniĢliği karakter olarak belirler; ―Maxlength" ise kullanıcının girebileceği metnin uzunluğunu karakter olarak belirler. Bu değer verilmez ise varsayılan değer olan 21 hane sınırı kullanılır. Form ekrana geldiğinde bir kutunun varsayılan olarak bir değerle gelmesini istiyorsanız bu değer VALUE parametre ile verilmelidir. Forma bilgi giriĢi yapılırken tab tuĢuna basılacak olursa kutular arasında hareket etmek için kullanılacak sıranın girilmesini sağlar. Örneğin tabindex değeri 1 olan kutuda tab tuĢuna basılır ise tabindex değeri 2 olan kutuya geçiĢ yapılır.
Parola GiriĢi için: TYPE=PASSWORD NAME="..." VALUE="..." SIZE="..." MAXLENGTH="..." Metin girme kutusu ile aynı özelliklere sahiptir; fakat bu kutunun içine kullanıcının gireceği bilgiler ekranda gösterilmez yerine yıldız simgesi gösterilir. Bankalardaki Ģifre giriĢ ekranı gibidir.
Onay Kutusu için (Check iĢareti): TYPE=CHECKBOX NAME="..." VALUE="..." [CHECKED] Bu kutucuğa harf vs girilemez. Sadece fare ile tıklanabilir yada boĢluk tuĢu ile içine check iĢareti konulur. Gene aynı Ģekilde bu iĢaret kaldırılabilir. Bu kutuda iĢaret 113
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
varsa, tarayıcı ―Value=" hanesine yazacağınız bilgiler ve kutunun adını bir çift olarak Server‘a gönderir. Kutuda iĢaret yoksa kutunun adı ve değeri Server‘a gönderilmez. Böylece içinin boĢ olduğu varsayılır. Kutunun ekrana iĢaretlenmiĢ olarak gelmesi için, CHECKED parametrei kullanılır.
Tekil Seçme Kutusu için (Radyo düğmesi): TYPE=RADIO NAME="..." VALUE="..." [CHECKED] Bu eleman formda çoklu seçeneklerden birisinin (ama sadece birisinin) seçilebilmesine imkan verir.
Listeleme Kutusundan SeĢmek Ġçin (SELECT) Bu etiketi ile, formda bir kutu ve yanında bir aĢağı ok oluĢturabilirsiniz; kullanıcı aĢağı oku tıklayarak kutudaki elemanları açıp birisini seçebilir. Seçilen kutu içerğine yazılır. Ġstenirse bunlardan birisi otomatik olarak seçilmiĢ olarak da gösterilebilir. Bu etiketin kullanım Ģekli Ģöyledir: ..... Size hanesine 1, 2, veya 3 vs.. yazarak, ekrandaki kutunun kaç seçenek göstereceğini belirleyebilirsiniz. Bu hane konulmazsa, otomatik 1 seçenek varsayılır. Bu kutuda gösterilecek seçenekler, .. etiketlerinin arasına etiketiyle yazılır. ( etiketi kapatılmaz.) Herhangi bir seçeneğin otomatik olarak 114
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
seçilmesi için önündeki SELECTED kelimesi konulur. Örnek:
etiketinin
içine
cinsiyetiniz Erkek Bayan
Uzun Metin GiriĢi Ġçin (TEXTAREA) Metin kutusu, ziyaretçiye, Web Server‘a uzun metin gönderme imkanı sağlar. Otomatik yazılması istenen metin buraya yazılır ―Name=...." parametresi ile ile metin kutusuna Server‘a gelecek metnin iĢlenmesi ve kullanılması için gerekli değiĢken adı verilebilir. ―rows=" ve ―cols=" parametreleri ile ise bilgi giriĢi kutunsun satır sayısı ve karç harf geniĢliğinde olacağı bildirilir. Bu iki parametrenin girilecek metnin uzunluğu ile ilgisi yoktur.
Gönder ve Sil düğmeleri (Submit ve Reset) Doldurulan bir formun girlilen bilgileri iĢleyecek programa gönderilmesi için formlarda GÖNDEr (Submit), ve forma girilen değerlerin yeniden ilk baĢtaki değerlerine dönderilmesi için SĠL(Reset) düğmesi kullanılır. Bunun için INPUT etiketi Ģöyle kullanılır: 115
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
NAME=Gonder
Tarayıcının otomatik düğme Ģekli yerine kendi düğme grafiklerimizi kullanabileceğimiz gibi sayfaya birden fazla ve değiĢik maksatlarla düğme koymakta mümkündür. Ancak her düğmenin ayrı ismi ve ayrı değeri olması gerekir (aksi takdirde gönderilen bilgilerin ilenmesinde karıĢıklık çıkar). Bu kodu Ģöyle yazabiliriz: Not: Formlarda HTML içindeyken çok önemli olmasa da işin içine PHP ASP vs diller girdikçe önem kazananan bir konu vardır. O da form elemanlarına NAME ile isim verirken kullanılan değerlerdir. NAME bu bilgilerin gönderildiği adreste temsil edilecek olan ismidir. Bilgiyi işleyecek olan program bilgilerin bu isimlerle erişecektir. Kısaca NAME ile isimlerde değişken tanımlama kurallarına uygun olacaktır. Aksi taktirde PHP ile içeriğini okuyamayız. (Aynı durum ASP diller içinde geçerlidir)
içeriğine verilecek uyulması bunların ve diğer
Tabindex Forma bilgi giriĢi yapılırken tab tuĢuna basılacak olursa kutular arasında hareket etmek için kullanılacak sıranın 116
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
girilmesini sağlar. Örneğin tabindex değeri 1 olan kutuda tab tuĢuna basılır ise tabindex değeri 2 olan kutuya geçiĢ yapılır. Burada formlar konusunda çok detaylı durmaya gerek yoktur. Çünkü standart HTML formdan gelen verileri iĢleme yeteneğine sahip değildir. Bu iĢlem için CGI, PERL, JSP, ASP yada PHP gibi dinamik diller kullanılır. Form içeren basit bir sayfa kodu ise: Üye Kayıt Formu Üye Kayıt Formu Adı : Soyadı :
117
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Dikkat ettiyseniz kodu yazmak için table vs kullanmadık. Bilgi giriĢ kutularının uzunluklarının farklı olacağınıda varsayarsak, buna TEXTAREA giriĢleride eklenirse düzgün ve güzel görünen bir giriĢ ekranı yapmanın imkansız olduğunu görürüz. Bu yüzden en uygun seçenek form elemanlarını tablo içine yerleĢtirmektir. Sol taraftaki hücreler tanıtıcı metinler ―adı giriniz‖ gibi yazılır, bunların karĢılarındaki hücreye ise giriĢin yapıalacağı form elemanı konulur. Haliyle bu tasarım daha düzgün bir görüntü üretecektir.
URL Kodları Bazen adres satırında % iĢaretlerine boğulmuĢ anlamsız gibi görünen bilgiler yer alır. Bunlar URL Ģemasındaki karĢılığına göre kodlanmıĢ bilgilerdir. Amaçları bilgileri kakter seti sorunu olmadan aktabilmektir. HTTP protokolüne göre, ASCII karakter seti içinde yer almayan karakterler(sadece Türkçe'de yada sadece bazı diğer alfabelerde bulunan harfler), bir Form'da yer aldığı taktirde, tarayıcı tarafından karĢılıklarına göre kodlanarak gönderilir. Gerçi bir çok HTTP sunucu programı bu karakterlere tanıyabilir ve bir dosyaya yazarken doğru Ģekilde yazabilirler; ama bu çevirme iĢleminin bazen program yardımıyla yapılması gerekebilir. Önemli olanların listesi aĢağıda verilmiĢtir. ü = %FC Ü = %DC ö = %F6 Ö = %D6 118
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
ı = %FD Ġ = %DD ğ = %F0 Ğ = %D0 Ģ = %FE ġ = %DE ç = %E7 Ç = %C7 % = %25 & = %26 [ = +%5B ] = %5D { = %7B } = %7D ? = %3F =
= %3D
119
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
CSS ile Biçimlendirme Teknikleri, Dinamik HTML CSS Stillerine Neden Ġhtiyaç Duyulur Etiketleri incelerken gördüğümüz üzere biçimlendirme ile metin iç içe girmekteydi. Böylece hem metnin etiketlerden ayrılması hemde GOOGLE gibi arama motorlarının sayfamızı indexlemesi zorlaĢmaktadır. Biçimlendirme etiketleri kullanarak diyelimki belgenizdeki tablo baĢlıklarını hep aynı stilde yazmak istiyorsunuz. O zaman çaresiz her tablo baĢlığını tek tek biçimlendirmek zorundasınız. Oysa CSS teknolojisi Word içinde tanımlı hazır biçimlendirmeler gibi biçimlendirme blokları kullanmaya izin verir. Tablo baĢlığı örneğine geri dönersek, bu baĢlığı bir stil olarak tanımlar –örneğin 14 punto, Tahoma, Kalın ve ortalanmıĢ, mavi zemin renginde- bu stili kaydettiğimiz dosyayı HTML içinde kullanarak sitemizin (sitenin geneli sadece sayfa değil) genelinde sadece stilin adını vererek ilgili biçimlendirmeyi uygulayabiliriz. Dahada güzeli, stiller tek bir dosyadan geldiği için stil dosyasındaki bir değiĢiklik anında tüm sitemizde uygulanacaktır. Tablo baĢlığı örneğindeki gibi örneği forntu değiĢtirsek yada zemin rengini değiĢtirsek tüm sitemizde ne kadar tablo varsa bu stil hepsi için değiĢtirilmiĢ olacaktır. CSS bu açıdan büyük kolaylıktır. Ancak unutmayalım ki tarayıcılar içerik gibi CSS etiketlerini de kendilerine göre yorumlamaktadırlar. ġüphesiz tek fayda bu değildir. Biçimleri sayfa kodlarında sürekli tekrarlamak aynı zamanda gereksiz kod 120
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
yığınlarına yol açacak sayafaların kod uzunlukları gereksiz yere artmıĢ olacaktır. Bu yüzden sayfalarımız azda olsa daha geç açılacaktır. Bu ―az da olsa‖ görecelidir. Örneğin tabloda çok fazla satır sütun varsa ve bunlar biçimlendirme içeriyorsa sayfanın açılması normalden çok daha uzun sürecektir. Bunun alternatifi olarak CSS stilleri genel olarak tek bir dosyadan çağrılırlar ve kullanım için hafızaya yığılır, adı geçtikçe çağrılarak kullanılır. CSS web sayfasını biçimlendirmede HTML den daha geniĢ imkânlar sunar. Örneğin div etiketiyle bir katman oluĢturabiliriz ama hizalama dıĢında baĢka bir özelliğini değiĢtiremeyiz. Ancak CSS ile katmanın sayfa içindeki konumu, arka plan rengi, kenarlık tipi, yazı rengi, kanlınlığı vb. pek çok özelliğini belirleyebiliriz. CSS sadece biçimlendime iĢlemi için değil sayfanın iskeletini tanımlamaktada kullanılır. Bunun için için ekranın ayrılan her bir parçası ayrı bir katman gibi ele alınır ve bu sayede tablo kullanmadan üstelik framesetler lede uğraĢmadan sayfanın çatısını oluĢturabiliriz.
Cascading Style Sheets -CSS ve Kullanım ġekilleri Web sayfalarını biçimlendirme konusunu ilk ele aldığımızda yerel biçimlendirme yoluna gitmiĢ ve neyi biçimlendireceksek o etikete ait kodları hemen orada yazmıĢtık. CSS etiketleri ise hafızaya yığırlır demiĢtik. CSS sayfa içinde üç Ģekilde kullanılabilir. 1. Yerel (Inline) 2. Sayfa içi global (Embedded) 121
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
3. Site içi global (Linked)
Yerel Stil ġablonu Yerel Stil ġablonlar, uygulanacak etiketi sadece bir kez bulunduğu yerde etkiler. Örnek: Css CSS Kullanımı CSS
Görüldüğü gibi bu Ģekilde sadece o an kullanılan etikete etki edilmiĢtir. Dezavantajı : Bu kullanımı font taglarının kullanımı arasında pek bir fark yoktur. Anlık çözümdür ve CSS in genel mantığına aykırıdır.
Sayfa Ġçi Global Stil ġablonu Global Stil Ģablonları bir önceki örnekte yaptığımız gibi h2 etiketinin (yada diğer bir etiketin) tüm sayfada aynı özellikte olması istendiğinde kullanılır. Bunu için Stil Ģablon özellikleri sayfanın baĢlangıcında ( etiketleri arasında) tanımlanır. 122
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Örnek: Css Web Teknikleri Yukarıdaki örnekte sayfa içerisinde kullanacağımız tüm h2 etiketlerinin özellikleri sabitlenmiĢtir. Yani sayfa içerisinde nerede kullanırsanız kullanın h2 etiketinin stil özellikleri hep aynı kullanılacaktır. Stil Ģablon tanımlamaları etiketleri arasında ile baĢlayıp ile bitmelidir. Dezavantajı : Tanımlanan stiller her sayfada tekrarlanmıĢ olur. Diyelim ki stillerinin toplamda 5 kb yer tutuyor olsun 500 de sayfanız olsun. Stiller 2500 KB yer tutuyor demektir. Ayrıca her sayfa için CSS stilleri de tarayıcıya yeniden gönderilecek ve gereksiz trafik oluĢacaktır. Hepsinden beteri ise bir stilde değiĢiklik 123
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
yaparsanız diğer sayfaları da değiĢtirmeniz gerekir. 3-5 sayfa için bu kolaydır belki ama binlerce sayfadan oluĢan bir portal düĢünürseniz bu iĢin ne derece zahmetli olacağı açıktır. Ayrıca bir sayfada farklı diğerinde farklı biçimlere yer verilmiĢ olabilir. Buda sitenin tutarlılığını düĢürür.
Site Ġçi Global Stil ġablonu Global stil Ģablonunu, sitemiz içerisindeki tüm sayfalarda kullanmak istediğimizde uygulanabilecek bir tekniktir. En çok kullanılan biçimde budur. Uygularken, stillerimizi yukarıda örneklerini verdiğimiz Ģekilde hazırlarız. Fakat bu stil listesini html dosyamızın içerisinde değil de boĢ bir sayfaya yazarız ve css uzantılı bir Ģekilde kaydederiz. Ardından da html dosyamızın içerisine yine etiketleri arasına Ģeklinde ekleriz. Örnek h1 {font-size:13pt; color:green} h2 {font:20pt; color:blue} h3 {font-size:15pt; color:red} Yukarıda verilen örnekteki dosyayı stil.css olarak kaydedip, html dosyamıza geçelim. Html dosyamızın kodları: Örnek: 124
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Css Web Teknikleri Web Teknikleri Web Teknikleri HTML dosyasının kodları arasında geçen kodu stil.css dosyasındaki stil özelliklerini kullanmamızı sağlar. Avantajları : 1. CSS dosyası hafızada durduğundan CSS seferinde web serverdan yeniden istenmez.
her
2. CSS dosyası bir tane olduğundan sayfalar küçülür. Böylece bu iki madde siteyi daha hızlı hale getirir ve gereksiz trafiği önler. 3. CSS dosyasında yapılacak bir değiĢiklik anında tüm siteye yansıyacaktır. 4. Sitenin tamamı biçimlendirme açısından tutarlı hale gelir.
Birden fazla stil Ģablonu verilirse Tarayıcı ne yapar? ġimdi bir Cd rafı düĢünelim. Elimize geçen tüm CD kutularını buna üst üste yığıyoruz ve kural olarak CD 125
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
aramamız gerektiğinden hep rafın üstünden altına doğru aramaya baĢlayacağımızı varsayıyoruz. Peki aynı stil Ģablonu iki yada daha fazla sayıda tanımlanırsa ne olacak ? Bu durumda olacak olan Ģudur. Rafın üstünden altına doğru arama yapılır bulunan ilk eĢitlikte iĢe arama biter. Kısaca öncelik hep en son tanımalanan stilin olur. Özetle 1. Bir HTML sayfaya iki LINK komutu ile ardarda iki ayrı CSS dosyası bağlarsanız, ikisinde de aynı ada stil Ģablonu içeriyorsa, ikincisindeki, yani Cd rafının en üstündeki komutlar geçerli olur. 2. Bir HTML‘e biri LINK, diğeri EMBED iki ayrı stil bilgisi verilirse ve ikisinde de aynı ada sahip stil Ģablonu var ise, ikincisi, yani HTML‘in içinde EMBED olanı geçerli olur; çünkü HTML önce dıĢ dosyayı okuyacak, onun üstüne kendi içindeki stilleri koyacaktır. 3. Son olarak, bir sayfada hem LINK, hem EMBED stil bağlantısı olsa ve diyelim ki bir HTML etiketinin önünde onu biçimlendiren bir yerel stil komutu (INLINE stil) bulunsa, en son okunan yerel stil komutu olacağı için, tarayıcı ilk iki stili bir kenara bırakıp, INLINE stili uygulayacaktır.
HTML içinde bölüm oluĢturma (DIV) DHTML‘i bir teknikler demeti olarak ele alırsak, ilk tekniğimiz, sayfamıza ne metin, ne grafik, ne tablo ve ne de çerçeve sayılmayan, ama içinde bunların tümüne de yer verebileceğiniz bölüm kavramına dayanan .. etiketidir.
126
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
.. etiketleri arasında yer alan her Ģey, yani yazılar, resimler, grafikler, tablolar, video vs içerikler, bu etikete vereceğiniz yerleĢtirme ve değiĢme özelliklerine uygun hareket ederler. etiketi ile belgede bölümler oluĢturulabilir. etiketi için herhangi bir stil özelliği belirlendiğinde .. arasına yazılan tüm etiketler bu stilden etkilenir. AĢağıda oluĢturulan bölümde etiketine style="color:#FFCC66;" stili uygulandığında içindeki paragraf ve baĢlık da ilgili renkte (turuncuya yakın bir renk) görüntülenecektir. Bölüm içinde bir baĢlık Bölüm içinde herhangi bir paragraf
CSS ve Seçici(Selector) Kavramı ve Seçici Tipleri XHTML ve CSS kullanımında Selector kavramı önemli bir yer tutar. Seçici (selector) demek ―stili belirlenebilen etiket‖ demektir. 4 tipi vardır, isimlendirilmiĢ, sınıf, karma ve Ģartlı.
ĠsimlendirilmiĢ Seçiciler Bu tip seçicilerin kullanımında html içinde etiketten sonra ID=‖xxx‖ kodlaması yapılır. Bu tip seçici kodlaması # ile baĢlar. #mavi { COLOR: blue } #icerden { text-indent: 2cm } 127
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
isimlendirilmiĢ seçicilerdir. BaĢlarındaki ―#‖ iĢareti onların diğerlerinden farkını göstermektedir. (Bu iĢaretten sonraki isim bölümü mutlaka harfle baĢlamalıdır; ama içinde rakam ve kesme çizgisi kullanılabilir.) Bu seçicilerden HTML‘de yararlanmak için, adlarıyla çağrılması gerekir. Böylece tanımlı olan isimleri ile kodlanmıĢ olan biçimlerin uygulanmasını sağlarlar. Bu paragraf diğerlerine oranla 2 sm içerden baĢlar Bu paragraf mavi olarak gösterilir Bu seçiciyi kullanırken, aynı etikete iki ayrı kimlik verilemeyeceğine dikkat edilmelidir. Bunun bize ne getirip götüreceği konu sonunda detaylıca anlatılacaktır.
Sınıf Seçiciler Bunların kodlaması ise . ile baĢlar ve istenildiği takdirde bir sınıf tanımlanıp bu sınıfın biçimlendirme özelliklerinin birleĢtirildiği standart html etiketine de uygulanabilmesini sağlar. Ġstenildiği kadar Sınıf Seçici oluĢturmak mümkündür. Örneğin ―kırmızı‖ diye bir sınıf oluĢturup, bu sınıfın font rengini kırmızı yapıp, dikkat çekmesi gereken kelimeyi, cümleyi veya paragrafın etiketini bu sınıfa bağlamak mümkündür. Bu stilin komutu Ģöyle yazılır: .kirmizi { COLOR: red } 128
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
―Kirmizi‖ kelimesinin baĢındaki nokta iĢaretine dikkat edilmelidir. Bu iĢaret su sınıfı isimlendirilmiĢ seçicilerden ayırmaktadır. HTML sayfasında diyelim ki bir baĢlığı kırmızı yapmak gerekmekte olsun: Bu baĢlık kırmızı olacak Ya da bir paragrafın tümünü kırmızı renkte olacak denirse: Bu paragrafın tümü gösterilerek, dikkati hemen çekecektir.
kırmızı
Yukardaki kullanım sınıf seçici türünün bağımsız kullanımına bir örnektir. Diğer bir kullanımıda bir etikete bağlı olarak kodlandığı aĢağıdaki kullanım Ģeklidir. h1.kirmizi { COLOR: red } Yukardaki Ģekilde tanımlanmıĢ bir sınıf seçici görüldüğü üzere sınırlı kullanıma sahiptir. Bu durumda ―kırmızı‖ sınıfını sadece H1 etiketi ile kullanmak mümkündür. Sınıf seçiciler HTML içinde bir etiket için birden fazla olmak üzere kullanılabilirler.
Karma Seçiciler (Pseude Classes) Bunlara karma denmesinin sebebi: kendi baĢlarına sınıf gibi göründükleri halde ancak bir etiketin belirli durumlarına uygulanabilmeleridir. HTML dilinde buna uygun Ģimdilik iki etiket vardır. ve etiketleri. A etikeninin üç durumu olabilir seçicilere bağlamak mümkündür.
ve
bunları
Link (henüz ziyaret edilmemiĢ olan adres)
Visited (daha önce ziyaret edilmiĢ adres) ve 129
karma
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Active (üzeri tıklandığı anda). ġimdi bu durumlara uygun üç CSS etiketi yazalım:
A:link { COLOR: Black } A:active { COLOR: red } A:visited { COLOR: Gray } Bu durumda ziyaretçinin ekranında A etiketleri siyah olarak gösterilecek, kullanıcı herhangi bir bağlantıyı tıkladığında link metni kırmızı rengini alacak; daha sonra ilgili sayfaya bir daha gelirse bu kelimeler gri olarak gösterilecektir. a:link { font-family:arial; font-size:11pt; color:blue; text-decoration:none; } a:hover{
Sayfamdaki linklerin Yazıtipi arial, boyutu 11 punto, rengi mavi olsun ve altı çizili olmasın.
Üzerine gelindiğinde linklerin
font-family:arial; Yazıtipi arial,boyutu 11 punto, font-size:11pt; rengi kırmızı olsun ve Altı çizili color:red; olmasın. text-decoration:none; } a:visited{ font-family: font-size:11pt; color:grey;
Ziyaret edilen linklerin ise arial; Yazıtipi arial, boyutu 11 punto, rengi gri olsun ayrıca altı çizili olsun. 130
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
textdecoration:underline; }
Karma etiketin kullanılabileceği bir diğer durum ise baĢlık veya metin gibi bir etiketin ilk satırı veya ilk kelimesinin özelliklerini kontrol eden seçicidir. Örneğin: P:first-line { font-variant: small-caps; font-weight: bold } P:first-letter { font-size: 300%; float: left } Bu seçicilerle oluĢturulan etiketlere HTML‘in içinde Ģöyle gönderme yapılır: BBir ağaçta ne kadar çok yaprak varsa o kadar az meyve olur Arap atasözü.....
ġartlı Seçiciler (Contextual Selectors ) Bir HTML etiketinin her zaman değil de belirli bir koĢulda belirli stiller almasını istediğimizde kullandığımız Contextual Selectors (ġartlı Seçiciler) grubudur. B (Bold) etiketi, uygulandığı baĢlık veya paragraf gibi bir etiketi kalın yaparak belirginleĢtirir. Fakat diyelim ki bu etiketi paragraf etiketi ile birlikte kullandığımızda iĢaretlenen yerin siyah, baĢlık etiketiyle kullandığımızda gri yapmasını istiyoruz. Bunun için CSS bölümünde bu etiketi P ve H1 bloklarında tanımlarız: 131
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
P { COLOR: black; FONT-FAMILY: 12pt; TEXT-INDENT: 1cm} P B { COLOR: black} H1 { COLOR: #008080; FONT-FAMILY: 26 pt serif} H1 B { COLOR: pink } Yukardaki tanımlamalara göre HTML kodlanırken H1 etiketi içinde B etiketi kullanılırsa iĢaretlenen kelimeler pembe, paragraf etiketi içinde B etiketi kullanılır ise iĢaretlenen kelimeler siyah olacaktır. Not: CSS kullanımında isimlendirilmiĢ seçiciler daha çok yada gibi yapılar için, sınıf seçiciler ise biçimlendirmeler için kullanılırlar. ĠsimlendirilmiĢ seçicileri etiket baĢına biden fazla kullanmak mümkün olmadığından bunlarla biçimlendirme yapmak sadece ekstra iĢ demektir. Bunu basit bir örnekle izah etmeden farkı anlamak zordur. Biçimlendirme için koyu, italik ve altı çizili biçimlerine ihtiyacımız olsun. Ancak yazı hem italik hemde altı çizili olursa diye düĢününerek çok daha fazla sınıf tanımlamak gerekecektir. Önce bunu isimlendirilmiĢ seçiciler için düĢünelim. 1. koyu 2. italik 3. altıçizili 4. koyu italik 5. koyu altı çizili 6. italik alt çizili 132
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
7. koyu italik altı çizili 7 seçici olmadan bu iĢi yapmak zor görünüyor çünkü her etiket için sadece bir isimlendirilmiĢ seçici kullanımına izin verilmekte. ġimdi ĢimĢekler çaktı sanırım. Örneği sınıf seçicilerle yapmak için ilk üçü yeterlidir. Çünkü sınıf seçicileri bir arada kullanmak mümkündür.
Bir Alana Tanımlı Stillerin DıĢında Stil Uygulamak Herhangi bir bölümünde veya paragrafta diğerlerinden ayrı stile sahip olması istenen herĢey ... etiketleri içerisine yazılabilir. Bu etiket Basit HTML dersinde kullanılması artık desteklenmeyen etiketi yerine kullanılabilir. Rastgele bir baĢlık Bir satır.Ancak rengi div için tanımlanandan farklı
CSS Blokları ve Denetlenebilir Özellikler CSS Biçimlendirme Tablosu
fontfamily
Tahoma, Arial
Yazı tipini belirler.(Arial Verdana gibi.)
133
,
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
font-style Normal italic oblique
Yazının normal veya sağa eğik olmasını sağlar.
fontvariant
Normal small-caps
Yazının, yazıldığı gibi veya tümünün büyük harflerden oluĢmuĢ gibi görünmesini sağlar. Ġkinci durumda metnin ilk harfi de boyut olarak büyük gözükür.
fontweight
Normal bold bolder lighter 100 – 900
Yazının belirler.
font-size
Absolute-size (xx- Yazının büyüklüğünü small | x-small | small | medium | large | x-large
kalınlık-inceliğini
| xx-large) relative-size (larger | smaller) px , pt, % METĠN Word Spacing
normal | Sözcük aralığı
134
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Letter Spacing
normal | Harf aralığı
Text None | underline | Metin süsleme Decoratio overline | linen through | blink Vertical Alignmen t
baseline | sub | Dikey hizalama super | top | texttop | middle | bottom | textbottom | Yüzde:200% vb.
Text Transfor mation
none | capitalize | Metin dönüĢtürme uppercase | lowercase
Text Alignmen t
Left | right center | justify
| Metin hizalama
Text Indentati on
Boyut | Yüzde
Metin girintisi
Line Height
Normal | | Satır yüksekliği |
RENK VE ARKAPLA 135
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
N Color
Renk adı veya Renk RGB değeri (red veya #FF0000 gibi)
Backgrou nd Color
Renk adı | RGB Arka plan rengi değeri (red veya #FF0000 gibi) | transparent
Backgrou url(images/resima nd Image di.gif) Backgrou nd Repeat
repeat | repeat-x | Arka plan repeat-y | no- yönde repeat belirler.
Backgrou scroll | fixed nd Attachme nt Backgrou nd Position
Arka plana yerleĢtirilecek resmin adresi resminin hangi tekrarlanacağını
Sayfa kaydırma çubuğuyla hareket ettirildiğinde zeminin de hareket edip etmeyeceğini belirler.
yüzde | boyut | Zemindeki resmin sayfa top | center | üzerinde istenilen yere bottom| left | yerleĢtirilmesini sağlar. center | right
KUTU ÖZELLĠK 136
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
LERĠ Magrin
Sayısal değer.
Nesnenin dıĢındaki nesnelere olan aralığını belirler.
Padding
Sayısal değer.
Doldurma
Border Width
Sayısal değer.
Kenarlık geniĢliği (kalınlığı)
Border Color
Renk adı | RGB Kenarlık rengi değeri
Border Style
none | dotted | Kenarlık stili dashed | solid | double | groove | ridge | inset | outset
Border
border-width border-style border-color
| Kenarlık | rengi.
Width
boyut | yüzde | GeniĢlik auto
Height
boyut | auto
Yükseklik
LĠSTE ÖZELLĠK LERĠ 137
kalınlık,
style
ve
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
List Style disc | circle Type square | decimal lower-roman upper-roman lower-alpha upper-alpha none
| Listenin harflerden mi yoksa | sayılardan mı oluĢacağını | belirler. | | |
List Style adres | none (list- Liste simgesi olarak resim Image style-image: kullanılmasını sağlar. url(images/maddei mi.gif) gibi.) List Style inside | outside Position List Style
Listenin ilk satırının diğer satırlar aynı hizada olup olmayacağını belirler.
list-style-type | list-style-position| adres (list-style: lower-roman inside gibi.)
disc (Liste biçiminin disk (içi dolu daire) Ģeklinde olmasını sağlar.)
square (Liste biçiminin kare olmasını sağlar.)
decimal (Liste biçiminin rakamlardan oluĢmasını sağlar.)
lower-roman (Liste biçiminin i,ii,iii gibi küçük
138
circle (Liste biçiminin çember Ģeklinde olmasını sağlar.)
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
roma rakamlarından oluĢmasını sağlar.)
upper-roman (Liste biçiminin I,II,II gibi büyük roma rakamlarından oluĢmasını sağlar.)
lower-alpha biçiminin a,b,c küçük harf sağlar.)
upper-alpha (Liste biçiminin A,B,C Ģeklinde büyük harf olmasını sağlar.)
none (Listenin simgesiz olmasını sağlar.)
(Liste Ģeklinde olmasını
Font Özellikleri Ġçin CSS Kullanımı: FONT-FAMILY (Yazıtipi ailesi): Ģeklinde kullanılan bu etiketle, uyguladığınız stilin font ailesini seçebilirsiniz. Ġfadenin karĢısına font ailesinin adını yazabileceğiniz gibi, ―serif‖ (ör. Times), ―sans-serif‖ (ör. Arial), ―cursive‖ (ör. Zapf-Chancery), ―fantasy‖ (ör. Western), ―monospace‖ (ör. Courier) de yazabilirsiniz. Bu satırda birden fazla font adı aralarına virgül koyarak yazılabilir. Ġyi bir uygulama, önce tercih ettiğiniz belirli bir fontun, ardından bu font ailesinin adını ve nihayet 139
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
türü yazmaktır. Çünkü seçtiğiniz bilgisayarında mevcut olmayabilir.
font
kullanıcının
Örnek: P { FONT-FAMILY: "New Century School Book", Times, serif } P { FONT-FAMILY: "Arial Black", Helvetica, sans-serif } FONT-STYLE(Yazılış Şekli): Bu etiketle harfin normal, italik veya yatık olmasını sağlayabilirsiniz. (Ġtalik harflerin mutlaka öne yatık olması gerekmez! Ama çoğu italik harf, öne yatıktır.) Örnek: H1 { FONT-STYLE: normal } H2 { FONT-STYLE: italic } H3 { FONT-STYLE: oblique } FONT-VARIANT (Yazıtipi türü): Bu etiketle harfin normal veya küçük harf boyunda ama büyük harf biçiminde olması sağlanabilir: H1 { FONT-VARIANT: normal } H2 { FONT-VARIANT: small-caps } FONT-WEIGHT (Yazıtipi Koyuluğu): Bu etiketle, fontun normal, siyah, koyu, daha koyu, daha açık olması sağlanabilir. Verilebilecek değerler, ―normal,‖ ―bold,‖ ―bolder,‖ ―lighter‖ olabileceği gibi, 100, 200, 300, 400, 500, 600, 700, 800 veya 900 olabilir. Burada 100140
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
300 ince çizgili harf, 400-500 kalın çizgili harf, 600-900 çok kalın çizgili harf sayılır. Örnek: H1 { FONT-WEIGHT: normal } H2 { FONT-WEIGHT: bold } FONT-SIZE (Yazıtipi boyutu): Bu etiketle, fontun büyüklüğünü belirleyebilirsiniz. Bu, mutlak veya göreli olabilir. Mutlak büyüklük ya punto, santimetre veya inç cinsinden belirli bir rakam (ör. 12 pt, 1cm) veya en küçükten en büyüğe doğru olmak üzere, ―xx-small,‖ ―x-small,‖ ―small,‖ ―medium,‖ ―large,‖ ―x-large,‖ ―xx-large‖ olabilir. Göreli büyüklükler ise bir önceki fonta göre daha büyük anlamına ―larger‖ veya daha küçük anlamına ―smaller‖ olabileceği gibi, bir önceki harf büyüklüğünün yüzdesi olarak verilebilir. Tarayıcı farklarını düĢünecek olursak en uygun seçenek punto kullanmaktır Örnek: H1 { FONT-SIZE: 12pt } H2 { FONT-SIZE: 90% } (Yüzde iĢaretinin rakamın olduğuna dikkat ediniz.)
önünde
değil,
arkasında
Yazıtipi : “FONT:” Ģeklindeki bu parametre ile bir çok font özelliği birden verilebilir. Bu ifadenin karĢısına harf stili, türü, ağırlığı, ölçüsü ve ailesi ile bu harfin kullanıldığı satırın satır yüksekliği toplu olarak belirtilebilir. Örnek: P { FONT: italic bold 12pt/14pt Times, serif } 141
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Renk ve Zemin Özellikleri: Renk: “COLOR:” Ģeklindeki bu parametre ile herhangi bir içeriğin renk özelliğini belirleyebilirsiniz. Renk adları veya kodlarını daha önce ele almıĢtık. Örnek: H1 { COLOR: blue } H2 { COLOR: #000080 } Zemin Rengi: “BACKGROUND-COLOR:” Ģeklindeki bu parametre ile herhangi bir içeriğin arkasındaki zemin rengini belirleyebilirsiniz. Etiketin rengi ile zemin renginin farkını görebilmek için daima COLOR yükleminden sonra kullanılması iyi bir 180 152 24 80 uygulama olur. Örnek: H1 { BACKGROUND-COLOR: blue } Zemin grafiği: “BACKGROUND-IMAGE:” Ģeklindeki bu parametre ile herhangi bir içeriğin arkasındaki zemine koymak istediğiniz görüntüyü belirleyebilirsiniz. Ġçeriğin kendi zemin rengi ile zemine konacak görüntünün birbirini örtmemesi (Perde gibi) için ardarda kullanılması doğru olur. Zemin görüntüsünün yerini belirtmek için ―url...‖ ifadesi kullanılır. AĢadaki örneklere bakalım: H1 { BACKGROUND-IMAGE: url(/images/zemin1.gif } P { BACKGROUND-IMAGE: url(http://www.abc.com/zemin1.gif } BODY { BACKGROUND: white url(/images/zemin1.gif }
142
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
P { BACKGROUND: black url(/images/zemin1.gif norepeat bottom right} Pozisyon değerleri, üstte solda (left top), üstte ortada (top center), üstte sağda (top right) olabileceği gibi, ortada ortalanmıĢ (center center), ortada sağda (center right) veya ortada solda (center left), ya da altta solda (bottom left), altta ortada (bottom center) ve altta sağda (bottom right) olabilir.
Metin Özellikleri: Kelime aralıkları: “WORD-SPACING:” parametresi ile kelimelerinin arasına konulmasını istediğiniz ilave boĢlukları belirtebilirsiniz. Burada kullanılan ölçü kullanılan fontun en geniĢ harfi olan ―m‖ harfinin ondalık bölümüdür. Örnek: P { WORD-SPACING: normal } H1 { WORD-SPACING: 0.2em } H2 { WORD-SPACING: -0.4em } Harf aralıkları: “LETTER-SPACING:” parametresi ile harflerin arasına konulmasını istediğiniz ilave boĢlukları belirtebilirsiniz. Burada kullanılan ölçü de ―m‖ harfinin ondalık bölümüdür. Örnek: P { LETTER-SPACING: normal } H1 { LETTER-SPACING: 0.2em } H2 { LETTER-SPACING: -0.3EM } 143
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Metin süsleme: “TEXT-DECORATION” parametresi ile bir metnin altını çizdirebilir (underline), üstünü çizdirebilir (overline), veya ortasına çizgi koydurabilirsiniz (line-through), veya bir görünüp, bir kaybolmasını sağlayabilirsiniz (blink). Bunu, altı normal olarak çizilen A (Anchor) etiketiyle verdiğiniz bağlantı kelimelerinin altının çizilmemesi için de kullanabilirsiniz. Örnek: H3 { TEXT-DECORATION: blink } A:link, A:visited, A:active { TEXT-DECORATION: none } Metnin bloklanması: TEXT-ALIGN parametresi ile ile bir metni sağa (right), sola (left) veya ortaya (center) bloklayabilirsiniz. Örnek: H3 { TEXT-ALIGN: left } H1 { TEXT-ALIGN: center } Birinci satırın içerden başlaması: “TEXT-INDENT” parametresi ile ile bir metnin birinci satırını vereceğiniz ölçüde içerden baĢlatabilirsiniz. Örnek: H3 { TEXT-INDENT: 1cm } Satır Yüksekliği: “LINE-HEIGHT” parametresi ile bir metnin satırları arasına konacak boĢluğu vereceğiniz yüzde ölçüsü ile normal satır yüksekliğine göre belirleyebilirsiniz. Örnek: H3 { LINE-HEIGHT: 200% } H1 { LINE-HEIGHT: 350% } 144
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
(Bu ölçü yüzde 100‘ün altına düĢerse, satırlar birbirinin üzerine bineceği için okunamaz hale gelir.) İlk Harf Büyütme : “First-Letter” Gazete ve dergi yazılarında bazı paragrafların ilk harfi, diğer harflerden çok büyük ve aĢağı doğru iki, hatta üç satır yüksekliğinde olur. Gazetecilik dilinde buna Gömme Harf denir. Yazılı basının favori masaüstü yayıncılık programı QuarkExpress'te bile bunu otomatik yapmak için programın beĢinci sürümü beklenmiĢtir. Ġlk HTML sürümlerinde bu olay olmadığından bu iĢlem hep etiketleri ile yapılırdı. ġimdi ise bu parametre ile yapmak mümkündür. P.first-letter {font-size: 200%;} Büyüte oranı tamamen kodlayan kiĢiye bağlıdır. Ġlk harfi yüzde 200 yerine yüzde 400 de büyütmek mümkündür. Bunu kod içinde kullanırken ise Bu paragraf deneme paragrafıdır. Bu paragraf deneme paragrafıdır. Bu paragraf deneme paragrafıdır. Bu paragraf deneme paragrafıdır. Bu paragraf deneme paragrafıdır. Bu paragraf deneme paragrafıdır.
Konum (Pozisyon) Özellikleri CSS kurallarının içinde yer almakla birlikte HTML içeriklerinin tarayıcının ekranında, yerleĢtirileceği pozisyonu ve ilk konumun daha sonraki değiĢme tarzını 145
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
belirleyen parametreler, son zamanlarda CSS-P (Cascading Style Sheets-Positioning) Ģeklinde anılmaya baĢladı. Gerçekten pozisyon iĢlemi CSS içinde önemli bir yere sahiptir ve dikkatlice incelenmelidir. Konum “POSITION:” Değerleri Position parametresi ile belirlenen konum,
sabit (static)
mutlak (absolute)
göreli (relative)
değerlerini alabilir. Mutlak (absolute) konum verilmiĢ bir içerik (paragraf, resim, tablo), HTML‘in diğer içeriği nedeniyle asla yer değiĢtirmez; kendisine verilen üst (top) ve sol (left) değerlere göre mutlak bir yerde kalır. Buradaki ölçü pixel cinsindendin ve tarayıcının HTML sayfasını gösterdiği alanın sol üst köĢesi 0-0 kabul edilerek verilir. Örneğin ―top: 20 px; left: 20px‖ Ģeklindeki bir ölçü, bu içeriğin tarayıcının penceresinde sol üst köĢesinden 20 pixel aĢağı ve sol kenarından 20 pixel sağa doğru yerleĢmesini sağlar. Sabit (Static) konum, yeri belirlenmek istenen içeriğin, HTML‘in diğer içeriğine göre, nereye geliyorsa, oraya yerleĢmesini sağlar. Bir anlamda bu içeriğin durumu diğer içeriğe bağlıdır. Göreli (Relative) konum ise verilecek ölçülere göre belirlenecek yer, bir önceki içeriğin konumunun bittiği yerden itibaren hesaplanır. Örnek: 146
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Siyah. Konum: sabit Gri. Konumu: mutlak[Absolute], sol kenarı 40 Pixel santim içerden. Görünürlük: “Visibility” ―VISIBILITY:‖ parametresi ile, biçimlendirilen içeriğin ekranda görünmesi yada gizlenmesi sağlanabilir. Ġçerik gizlenmiĢ (hidden), veya görünür (visible) olabilir. Eğer istenirse (inherit) parametresi ile görünürlük değeri içinde bulunduğu nesneden miras yolu ile alınmasıda sağlanabilir. Yani ata olan içerik görünüyorsa içinde yer alan bu kısımda da görünür, aksi takdirde görünmez. Örnek Bu içerik Mutlak konuma sahiptir, zemini siyahtır. Div adı kanal01 olan bu alan her koĢuldagrünür CSS ve Katman (Layer) Kavramı Photoshop ve Gimp tarzı programları kullananlar bu kavrama yabancı değildirler ancak burada katmanın ne olduğunu izah etmek gerekecek. Katman kavramını anlamak için aĢağıdaki Ģekle bakalım:
147
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
ġekilde görüleceği gibi 4. katman en üstteki kavram ve tamamı görünmekte. Onun altındaki katman 3. katman çünkü bu katman 2 nolu katmanın bir kısmını gizlemekte. Yani her Ģart altında 3 nolu katman 2. katmanın üstündedir. Buna göre tabiî ki 2. katman da 1. katmanın üzerindedir. Normal Ģartlarda web sayfalarında içerik yan yana gelecektir. Dolayısıyla katmana ihtiyaç yoktur diye düĢünülebilir. Ama CSS ve DIV etiketleri için durum bundan ibaret değildir. DIV ile tanımlanan alanlara boyut vermek mümkün olduğundan bu alanların üst üste gelmesi de pekala mümkündür. Bunu Ģözmek içinse CSS içinde katman indeksi denilen z-index paraetresi kullanılır.
148
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Katman Ġndeksi – (Z-index): ―Z-INDEX:‖ parametresi, bir içeriğin tarayıcı tarafından hangi katmanda gösterileceğinin belirtilebilmesini sağlar. Bir sayfada, DIV veya SPAN etiketi ile oluĢturulmuĢ nesne varsa, onların katman endeksine bakarak, hepsini belirli bir kata koyar. Yanyana gelen nesnelerin kaçıncı katta olduğu önemli olmayabilir; ancak nesneler üst üste geliyorlarsa, hangisinin hangi altta, hangisinin ortada, hangisinin üstte duracağı önem taĢıyabilir. Verilecek değer 1, 2, 3 Ģeklinde bir sıra numarasıdır. 1, en alttaki katmandır; diğerleri sırayla onun üzerindeki katları gösterir. Örnek Gri çerçeveli yazi.. Siyah Renkli yazi Konum belirleyen parametreler arasında eni boyu belirlenmiĢ bir nesneye koyduğunuz metnin taĢması halinde taĢan yazının gösterilip gösterilmeyeceği, veya bir nesnenin içine konulan içeriğin hangi bölümlerinin gösterilip, hangi bölümlerinin kesileceğini belirleyen diğer iki kontrol parametresi daha vardır. Bunların tarayıcı yorumları sürümden sürüme değiĢmektedir. Position: Katmanın yerinin neye göre belirleneceğini (absolute, relative) pencere esas alınarak belirlensin 149
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Top: Pencereye göre kaç piksel aĢağıda olacağını, Left: Pencereye göre kaç piksel solda olacağını, Width: Katmanın geniĢliğini, Height: Katmanın yüksekliğini, Background-color: Arkaplan rengini, Overflow: TaĢan metnin durumunun (hidden, gizli kalsın, gösterilmesin),
ne
Z-index: Üstüste geldiğinde hangi yerleĢtirileceğini (1. katmana 1 değeri dolayısıyla en altta o gösterilecektir),
olacağını sıra ile verilmiĢtir,
Padding: Katmanın kenar çizgileri ile içindeki nesneler arasında bırakılacak boĢluğu, Border: Kenar çizgilerinin kalınlık, kenarlık türü ve rengini belirtmektedir. Boşluk bırakma, Margin : Ġ.eriğin dört bir yanında bırakılacak boĢluk miktarları toplu olarak yada üstünde (MARGIN-TOP), sağında (MARGIN-RIGHT), solunda (MARGIN-LEFT) ve altında (MARGIN-BOTTOM) olacak Ģekilde ayrı ayrı belirtilebilir. Tanım tek bir defada yapılacak ise parametrelerin iĢleniĢ sırası üst, sağ, sol, ve alt olarak okunacaktır. Örnek: P { MARGIN-TOP: 10px } P { MARGIN-RIGHT: 20px } P { MARGIN-LEFT: 20px } P { MARGIN-BOTTOM: 10px } 150
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
P { MARGIN: 10px 20px 20px 10px} Bir etiketin içinde yer alabilecek ―‖ Ģeklindeki etiketler HTML dilinin yorum etiketleridir; bu etiketlerin arasındaki Ģeyler, tarayıcılar tarafından dikkate alınmaz.
Xhtml BELGE TÜRÜ XHTML aslında bir HTML kodlama standardıdır. etiketinden önce belge tipi, DOCTYPE ifadesi ile belirlenebilir. XHTML'de üç tip belge türü seçeneği vardır. Bunlar Transitional (GeçiĢli), Strict (Katı), Frameset (Çerçeve Kümeleri) 'dir.
Transitional (Geçişli): Bu belge türü standart HTML üzerine kurulmuĢ olup artık geçerli olmayan HTML etiketleri ile de uyumludur. Genelde kullanılan belge türüdür. Belgeye etiketinden önce aĢağıdaki kod eklenir.
Strict (Katı) : Uygunluğu kabul edilmemiĢ etiketleri kabul etmeyen bir belge türüdür. Belgeye etiketinden önce aĢağıdaki kod eklenir. 151
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Frameset (Çerçeve Kümeleri) : Bu belge tipi sayfada çerçeve kullanımına izin verir. Çerçeveler fazla kullanıĢlı olmadıkları için tavsiye edilmezler. Belgeye etiketinden önce aĢağıdaki kod eklenir.
Bir editör kullanırken editörün kodu renkledirme yapabilmesinin yanında XHTM etiketini gördüğü anda renklendirme Ģemasınıda buna uygun değiĢtirebilmesine dikkat etmek gerekir.
Sonuç ġu ana kadar genel olarak statik HTML yapımı ile etiketleri görmüĢ olduk. Her ne kadar burada adı geçmeyen bazı etiketler olsada en genel olanlar burada ele alınmıĢtır. Üstelik hiç etiket bilmeden Frontpage ile sayfa yapan birisi ele alındığında siz en azından iĢin geri planı hakkında fikir sahibi oldunuz ve bir avantaj elde ettiniz. Üstelik bir çok iĢyerinde iĢe alırken aday kiĢilerden sadece notepad kullanarak tasarım yapmaları beklendiği bilinmektedir. Etiketleri biliyor olmasaysınızz bunu nasıl yapacaktınız ? ġu anda belki size az gelebilir ama rahatlıkla normal görünümlü bir sitesi tasarlayabilecek kadar bilgi edinmiĢ durumdasınız…
152
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Altın Öğütler Hosting Hizmeti Alırken 1. ġirket ne kadar güvenilir. Referansları ne durumda kontrol edilmelidir. 2. Host referans sitelerinden Ģirket hakkındaki olumlu-yada olumsuz bilgiler kontrol edilmelidir. 3. ġirketin UP-time vaadi kontrol edilmelidir. %100 up time oranını kimse sağlayamaz ama ne kadar yüksekse o kadar iyidir. 4. Ġhtiyacınız olan hizmete iyi karar vermeliniz. Örneğin sadece Ģiirlerini yaınlayacağınız bir site için IIS üzerinde hizmet veren bir paket daha pahalı olacaktır. Oysa Linux+Apache ikili ile çok daha ucuz bir çözüm bulabilirsiniz. 5. ġirketlerin hizmet paketlerini detaylıca karĢılaĢtırın. Paketlerde kaç Mb alan verileceği, ne kadar Bant GeniĢliği tanındığını, Veritabanı dahil olup olmadığını, ilave mail hesabı verip verilmediğini kontrol etmelisiniz. 6. Kontrol panelinin ne olduğu da önemlidir. Genel itibari hepsi kolay kullanımlıdır ama bazı paneller site sahipleri için hayatı inanılmaz derecede kolaylaĢtırırlar.
Web Sitesi Yaparken 1. Öncelik içeriktir. ġekil sonra gelir. Ġçerik olduktan sonra Ģekil nasıl olsa çözülür. 153
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
2. Sade olun. Abartıdan kaçının. Bir arap Ģairin dediği gibi bir ağaçta ne kadar çok yaprak varsa o kadar az meyve olur. 3. Gereksiz resim, hareketli gif, animasyon ve film dosyalarından kaçının. Kullanıcılar anlamsız bir resim için sayfanızın geciken yüklemesini beklemek zorunda değildirler. 4. Kullanıcılar sayfaya ne için geldilerse onu en kısa yoldan bulsunlar. Kimseyi oradan oraya linklerle süründürmeyin. 5. Sayfanızda meta tag kullanımına özen gösterin ki arama motorlarındaki aramalarda müstakbel ziyaretçilerin sizden haberi olsun. 6. Renk uyumuna dikkat edin. Erkek Giyim mağazasına Pembe, Genç kızlar için Fan sitesine Gece mavisi renk uymaz. Renk kontratsıda önemli bir konudur. 7. Siteniz genel bir Ģablonu takip etsin biçimlendirmeler genel itibarı ile aynı olsun.
ve
Site Tasarımı Adımları 1. Siteyi oluĢturmaya önce kağıt üzerinde baĢlayın. Tasarım olmadan iĢleme baĢlarsanız o kadar çok baĢa dönersiniz ki siz bile ĢaĢarsınız. 2. Sitenin nasıl görüneceğini anahat olarak belirledikten sonra kullanacağınız teknikleri belirleyin. Site grafik ağırlıklı mı olacak yoksa FLASH mı kullanılacak, içerik yönetim sistemi kullanılacak mı. 154
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
3. Bu iĢ için uygun donanım ve yazılıma sahip olup olmadığınızı kontrol edin 4. Yapacağız site tasarımlarını test etmek için sisteminize birkaç ayrı web tarayıcısı kurun. Benim kiĢisel tercihim Internet Explorer, Firefox ve Opera ilk anda yeterlidir. (IE için 5.5,6 ve 7 sürümleri arasında dağlar kadar fark olduğunu unutmamakta fayda var) 5. ĠĢ için gerekeceğini düĢündüğünüz Javascript dosyalarını elinizin altında bulundurun eğer yoksa bulmak için Open source arĢivlerden tarama yapın. 6. Sitenin ana teması tablo yada CSS olarak kodlayın 7. Sitede kullanılacak belirleyin
resimleri
ve
yazı
stillerini
8. Site kodlarınızı oluĢturun. 9. Sitenizi test edin.
Diğer tarayıcılarda nasıl görünüyor
Stillerde düzeltilmesi gereken yerler varmı
DeğiĢik ekran çözünürlüklerinde nasıl görünüyor
Baskı önizleme yaptığınızda kağıt üstündeki hali normalmi
Dikkatten kaçan bir nokta varmı
Yazım hataları varmı
155
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Bir Site Tasarlarken Çok kolay gibi görünür ancak web tasarımı çok zor bir konudur. KarĢınızdaki insanın ne istediğini anlamadan ona istediğinizi kabul ettirebileceğiniz bir dönemde de değiliz. O yüzden öncelikle site sahibinin ne istediğini dinlemek, sitede yer verilecek konuyu anlamak gerekir. Bu aĢamada site sahibinin zevklerini, site Ģirket içinse kurumsal renklerini, iĢ ile ilgili birkaç bilgiyi edinmek, aynı iĢi yapan Ģirketlere ait siteleri inceleyip bilgi sahibi olmak karĢı tarafta iĢinin ehliyle çalıĢıyor olduğu izlenimi uyandırır. Daha sonra kağıt üzerinde sitenin genel görümü çizilmeli ve site sahibinin bu konudaki fikri alınmalıdır. Bu, birinci sayfadan sonuncuya kadar, sitenizdeki tüm sayfaların ekran görüntüsünü kağıt üzerinde resmetmek demektir. (Bu her zaman gerekmez. Çünkü müĢteri genel görünüme karar verip bilgilerin bu temaya uygun yerleĢtirilmesi yeterlidir diyebilir) Sitede kullanılacak tekniklerin belirlenmesi de önemlidir. Flash animasyon olacak mı olmayacak mı gibi. Ayrıca bazı durumlarda bazı hazır içerik yönetim sitemlerinin kullanımıda düĢünülebilir. Sitede dinamik bir dil kullanılacaksa hangi dilin kullanılacağı veri duyarlı olacaksa hangi veritabanının kullanılacağının bilinmesi önemlidir. Sitenin oluĢturulması için gerekli grafik programları, HTML editörü, site yönetim programı, kelime-iĢlem programı, geliĢtirme sürecinde kullanılacak lokal bir web sunucu tasarımcının kullandığı bilgisayarda yüklü 156
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
olmalıdır. Tabii birde tasarımcı bunları çalıĢtıracak uygun bir bilgisayara sahip olmalıdır. Tabii burada Ģu da unutulmamalıdır. Web sitesi yapmak için illa 1000 $ verip Photoshop, 500 $ verip Dreamweaver almaya gerek yoktur. Bunların daha ucuz alternatifleri olduğu gibi Open source programlarda mevcuttur. Önerim Gimp, Nvu, Open Lazslo, Notepad++, Pogrammers Editor gibi programların indirilip denenmesidir. Ben Ģu ana kadar Gimp kullandım ve tıkandığını hatırlamıyorum. Normal bir web kullanıcısı için bir tarayıcı yeterlidir ama tasarımcı için değil. Çünkü tasarımcı, yaptığı tasarımın en azından en popüler tarayıcılarda düzgün göründüğünden emin olmalıdır. Site tasarımı yapan bir kiĢi internette gezerken gördüğü güzel tasarım stillerini, menü stillerini, javascriptleri ve geliĢmiĢ teknikleri bir köĢede tasnifleyerek tutmak gibi bir özlliğe sahip olmalıdır. Bunu söylerken kesinlikle baĢkalarına ait bir Ģeyin aynen alıp kullanılması değil, nasıl yapıldığının öğrenilmesi kastedilmiĢtir. Tabii bazı kodlar open source olduğundan aynen kullanmakta bir beis yoktur. Kağıda çizilen temayı tablo yada CSS olarak oluĢturmakla iĢleme baĢlanır. Ġlgili linkler, grafikler vs yerleĢtirilir ve site sahibinin genel düĢünceleri alınır. Gerekli ise değiĢiklikler yapılır ve daha sonra diğer sayfaların kodlanmasına geçilir. Daha sonra test aĢamasına geçilmeli ve yukarda anılan tüm hatalar kontrol edilip gerekli düzenleler yapılmalıdır. Özellikle tarayıcı testi çok önemlidir. Çünkü müĢteri siteyi 157
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
tasarımcının bilgisayarında ayrı, kendi bilgisayarında ayrı Ģekillerde görürse, iĢin kalitesinden Ģüphe eder. Ufak tefek farklar izah edilebilir ancak birbirine giren katmanlar, ekranda adeta zıplayan menü CSS menüleri (benim baĢıma geldi site 7 sürümünde normaldi ancak IE 6 kullanan biri tam o anda denk gelip sitenin karizmasını bozmuĢtu) izah edilemez. Sitede kullanılan dosyaların isimlerini, klasörleri vs kontrol edip hepsini aynı notasona getirmekte fayda vardır. Genel olarak tüm web sitelerinde tüm dosya isimleri küçük harf kullanılırlar. Çünkü hosting iĢleminin olacağı sistemde Windows mu Linux mu kurulu olmasına göre bu isimlerin durumu önem kazanır. Bu aĢamada hosting için uygun yer belirlenir ve gerekli FTP ayarları yapılıp site web üzerine kopyalanır. Site son bir kez kontrol edilip, telim edilir.
Bir Web Etkenler
Sitesinin
Tutulmasını
Sağlayan
Internette tek tıklama uzağımızda miyonlarca ve hatta milyarlarca site varken neden sadece bazıları çok büyük hit sayılarına ulaĢırken bazıları unutulup gider diye düĢündünüzmü ? Örneğin bir zamanların gözde arama motoru www.excite.com nerdeyse adı bile unutulmuĢ durumda, ilk arama motoru www.yahoo.com aĢırı kan kaybına devam edip durmakta. Yine aynı Ģekilde nerdeyse unutulan Altavista motorunun araĢtırma ekibi lideri, Google‘ın yerinde bir olabilrdik derken, bir gerçeği ifade etmektedir. Ġfadesine göre arama motoruna gömülü reklam fikri çok daha 158
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
öncesinde onların gündemine zaten gelmiĢ ancak, ―kullanıcılar bundan hoĢlanmaz‖ diye Ģanslarını denemedikleri için Ģans kapıyı iki kere çalmamıĢ ve altavista eski teknolojili bir arama motoru olarak kalmaya devam etmiĢ. Bu gün itibariyle söyledikleri ise ―en iyi teknolojiye ahip olmak yetmez, bunu uygun giriĢimlerlede desteklemelisiniz.‖ Bunlar olurken nasıl olupta birkaç yıllık www.google.com inanılmaz karlara, eriĢim rekorlarına sahip olmaktadır. Öyle ki ABD baĢkan yardımcı ―dünyanın yuvarlar olduğuna artık inandım‖ dedikten sonra kendisine yöneltilen ―nasıl‖ sorusuna ―Google sayesinde‖ demekte. Internette arama anlamına gelen ―Googling‖ kelimesi nerdeyse sözlüklere girmek üzere. Peki bunlar nasıl oluyor… Bu olayı 5 ana baĢlıkta incelemek mümkün 1. Tanıtım 2. Kullanıcı dostu tasarım 3. EriĢilebilirlik 4. Kaliteli içerik 5. Geri Besleme Bu baĢlıkları biraz açarak inceleyelim
Tanıtım Günümüzde web ortamına hergün milyonlarca sayfa, binlerce site katılmaktadır. Durum bu iken insanların sitenizi ziyaret etmesi için haliyle iyi bir sebepleri olmalıdır. Sebep olsa bile en basitinden insanların 159
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
bundan haberi olması için Google robotlarının sayfanıza uğraması gerekmektedir. Bunu çabuklaĢtırmal ve sürekli kılmak için bütçeniz uygun ise web sitelerine ve arama motorlarına reklam verebilrsiniz. Google reklam veren siteleri aramalarda en üst sıralarda göstermektedir. Ayrıca kardeĢ site dediğimiz siteler edinmeli, onlara link vermeli ve onlarında size link vermelerini sağlamalısınız. Örneğin Google indekslerini oluĢtururken diğer sitelerden sizin sitenize belirli bir sayıda bağlantı erilmemiĢse sizin sitenizi ciddi anlamda bir referans olarak kabul etmemektedir. Tanıtım bu yüzden önemli bir adımdır.
Kullanıcı Dostu Tasarım Bir sitede içerikten sonra en önemli Ģey görünümdür. Görünüm kötü ise içerik iyi bile olsa kullanıcı sitenize bir daha zor gelecektir. Sitede gerektiği kadar resim vs kullanılmalı, siteniz hızlı yüklenmelidir. Ġçeriği kolay anlaĢılır Ģekilde dizayn etmelisiniz. Bir sayfadan diğerine geçerken sitenizin tüm sayfa yapısı değiĢiyorsa kullanıcı takipte zorlanmaya baĢlar.
EriĢilebilirlik Google yada baĢka bir arama motorunun altında ―bu site en iyi x tarayıcı ile çalıĢır‖ diye bir ifade gören birisi olmuĢmudur acaba. Ben göremedim ve göreceğimide hiç sanmıyorum. O halde site içeriği ve görünümü nasıl olursa olsun her Ģekilde siteniz ortalama bir görüntü kalitesi yakalamalıdır. Ziyaretçiler sitenize hangi tarayıcı ile bakarsa baksın içeriğinizi doğru Ģekilde görüntüleyebilmelidir. Site tasarlanırken sadece tek bir tarayıcıda çalıĢan etiketlerden kaçınılmalıdır. 160
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Kaliteli Ġçerik Örneğin tarih konulu bir siteniz var ve Ankara SavaĢı hakkında araĢtırma yapan birisi sitenize girdiğinde sadece ―Ankara SavaĢı sonucu Fetret devrine girildi‖ bilgisini buluyorsa içerikle ilgili sorununuz var demektir. Kullanıcılar en çok arama sitelerini kullanırlar ve buradan sitelere bakmaya baĢlarlar. Kalite içeriğiniz yok ise kimse sitenize link vermez. Yeterince link alamazsanız, google ve diğer arama motorları sizi alt sıralara atarlar. Kullanıcıyı mümkün mertebe sitenizde tutmanız gerekir. Örneğin bu sayfanın yanında ―KurtuluĢ SavaĢı, Preveze Deniz SavaĢı‖ gibi linkler olur ise ziyaretçiniz belki bu linklerede tıklayacaktır.
Geri Besleme Sitenizin tasarımı ve içeriği size tamamen doyurucu gelebilir ancak kullanıcıların hataları, isteklerini ve önerilerini size bildirebilmeleri için geri besleme olanağı sunmalısınız. Örneğin Tuncay ġanlı için bir fan sitesi hazırlıyorsunuz. Ġçerik sizce gayet yeterli ama bir kullanısınız, bir maç sonrası ilgili Ģahsın UEFA‘da haftanın golcüsü seçildiğini ama bunun sizin içerikte olmadığını fark etti. Kullanıcı bunu size bildirebilmeli ve sizde bunu en kısa sürede düzeltebilmelisiniz. Böylece hem içerik güzelleĢir, çoğalır, hemde kullanıcı kendisi ile site arasında bir bağ kurar. Çünkü site sahibi ona değer vermiĢ ve önerisini hemen yerine getirmiĢtir.
161
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Php Programlama Dili Php Dilinin GeçmiĢi Rasmus Lerdorf, adlı genç bir mezun iĢ aradığını belirtmek üzere sitesinde özgeçmiĢini yayınlıyordu. Bu amaçla site yapmak üzere bir program geliĢtirdi. Yazdığı program çoğunlukla PERL dilinden alınmıĢ yordamları kapsıyordu. Buna PHP (Personal Home Page Tool) adını verdi. PHP adlı bu programın (KiĢisel Ana Sayfa) çok tutulması üzerine Rasmus, bu programa, form yoluyla ziyaretçiden gelen bilgileri iĢlemeyi sağlayan komut setlerinide ekledi ve programın adı PHP/FI (Form Interpreter/Form Yorumlayıcı) oldu. Kimileri programın bu sürümüne PHP2 dedi; ve bu ad, programın çok değiĢmesine ve geliĢmesine rağmen uzun süre değiĢmeden kaldı. Rasmus Lerdorf, 1995 ortalarında, Zeev Suraski, Stig Bakken, Shane Caraveo ve Jim Winstead ‗inde katıldığı bir grup ile PHP dilini yeniden tasarlayarak, Perl'den ödünç alma rutinlerle iĢ yapan bir paket yerine, NesneYönelimli (Object-Oriented Programming) bir programlama dili haline getirdi. PHP dili 3 sürümüne geldiğinde bu defa geniĢletibilir yani extensible bir dil oldu. Ayrıca sınırlı da olsa nesneye yönelik proglamlama desteği kazanmıĢtı. Eklenti ve nesneye yönelik destek sayesinde de önü daha da açıldı. Öyleki 18 ay önce sadece 250.000 civarında web sunucuya yüklü olan PHP, bu süre içinde bu sayıyı 2.500.000 web sunucuya çıkarmıĢtı. 162
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
PHP 4 sürümüne geldiğinde ise çeĢitli geliĢtirmeler resmen bariyerleri yerle bir etmiĢtir. Bunlar
Zend Engine
Sunucudan bağımsız çalıĢma
Önce derle sonra çalıĢtır mantığı ile hız kazanma
Nesneye yönelik programlama
Multithreading
Zeev ve Andi ZEND adlı Ģirketi kurup PHP dilini kurumsal ölçeğe taĢıdılar. GeliĢtilen Zend Engine ile PHP artık referans sayma, hafıza yönetimi ve sunucudan bağımsız çalıĢma yeteneği de kazanmıĢtı. Tabi veritabanı bağlantılarının, dosyaların, hafıza boĢluklarının bu engine ile kontrol edilebilir hale gelmeside cabası. Sunucudan bağımsız çalıĢma derken PHP dilinin neredeyse bilinen bütün web sunucularla ortak çalıĢabilir hale gelmesi kastedilmektedir. Ayrıca derleyici önceki sürümlerdeki ―bir satır oku, yorumla, çalıĢtır, diğer satıra geç‖ mantığını bırakmıĢ, önce tüm kodu okuyup, ardından derleme ve çalıĢtırma yeteneğine kavuĢmuĢtur. Buda tabiî ki çeĢitli hızlandırma mekanizmalarınıda beraberinde getirmiĢtir. Tabiî ki bu çabalar sonuçsuz kalmamıĢ PHP bu sürümde kurulu olduğu sunucu sayısını 9.500.000 ‗a taĢımıĢtır. En çok kullanılan Apache sunucu modülü olma özelliği uzun zamandır PHP‘dedir. PHP 5 sürümünde artık dilin olgunlaĢma aĢamasına gelinmiĢtir. Çünkü önceki PHP sürümleri büyük çaplı projeler için biraz basit kalmakta idi. PHP 5, ile gelen yenilikler ise 163
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
try/catch
XML
Mysql Improved
Sqlite
Yeni bir SOAP eklentisi
olmuĢtur. PHP, Linux gibi, Açık Sistem (Open source) kurallarına tabidir; isteyen programda istediği değiĢikliği yapabilir; ancak bu değiĢiklikten para kazanamaz ve yaptığı değiĢiklikleri isteyen herkese açıklamak zorundadır. Dilin resmî adı "PHP: Hypertext Preprocessor" (Hiper-metin ön-iĢleyici) olarak değiĢtirildi, ve çeĢitli Web Server'ların PHP dili anlaması için gerekli eklentiler yeniden üretildi. PHP arkasında ASP yada JSP gibi kurumsal bir destek olmamasına rağmen gerek performans gerek destek açısından diğer Web yazılım geliĢtirme dilleri ile kolayca yarıĢabilecek kapasitedir. Hemen her türlü iĢletim sistemiyle çalıĢabilir olması ve yine açık kaynak geliĢtirilen MYSQL ile birlikte gösterdikleri ikili performans onları bir anda yazılım dünyasının gözdeleri arasına sokmuĢtur.
Neden PHP PHP dilinin web ortamında çok tercih ediliyor olmasının sebepleri Ģunlardır.
Platform ÇeĢitliliği (PHP nerdeyse bütün web server ve iĢletim sistemleri ile çalıĢbilir)
164
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Yüksek Performans (PHP + Apache bir çok ortamda oldukça hızlı çalıĢmaktadır)
Veritabanı Uygulamaları Ġçin Ġdeal ve Birçok VTYS ile ÇalıĢabilme Yeteneği
Internet Standartlarına Uyum
GeniĢletilmeye Müsait Yapı (PHP komut setine eklenti yapabilme)
GeliĢmiĢ Özellikler (Oturum yönetimi, kullanımı, PaylaĢımlı hafıza yönetimi
Ekonomik (Bedavadan daha ucuz bir Ģey varsa bilemeyiz)
çerez
Interaktif Web Sayfaları Hazırlamak Ġçin Yöntemler Web sayfalarına dinanizm kazandırmanın iki yolu vardır. Sunucu tarafındaki interaktif uygulamalar ve Kullanıcı tarafındaki interaktif uygulamalar. Kullanıcı tarafındaki uygulamalara örnek olarak Javascript veya VBscript ile yapılan veri doğrulama iĢlemleri ve Java dilinde yazılmıĢ appletleri sayabiliriz. Bunun avantajları;
Sunucu tarafına yük bindirmez ve veri doğrulama gibi kullanıcı tarafında halledilebilecek iĢlemler için sunucuyu yormamıĢ olur
Bant geniĢliğini etkin kullanma Ģöyleki sayfa bu doğrulama iĢlemleri için sunucuya gidip geri dönerken aynı zamanda internet bağlantısınıda kullanmıĢ olmaktadır.
165
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Sunucu tarafında çalıĢan uygulamalarında kendine göre avantajları vardır…
tabiî
ki
Web tarayıcılarında % 100 bir standart olmadığından scritplerin her tarayıcıda çalıĢacağı garanti değildir. Örneğin Vbscript sadece Internet Explorer ile çalıĢır.
Kullanıcı güvenlik gerekçesiyle script çalıĢtırmayı tamamen iptal etmiĢ olabilir.
Kullanıcıda yüklü JRE sürümü alt sürüm ise bazı appletleri çalıĢtıramayabilir.
Bazı iĢlemler mutlaka sunucu tabanlı olmak zorundadır. Örneğin iĢletim sistemine ait bir komut karĢıda çalıĢtırılmak zorundadır. Yine aynı Ģekilde veritabanı iĢlemleride sunucuda mantıken çalıĢmak zorundadır.
Sunucuda çalıĢan daha kolaydır.
Sunucuda çalıĢmakta bazen bant geniĢliğine faydalıdır. Örneğin siz sunucuya sadece bir sorgu gönderirsiniz. Sonucu size buna uygun kayıtları gönderir. Tüm kayıtları gönderip, kullanıcı tarafındaki bir uygulama bu süzme iĢlemini yapacak olursa çok daha fazla bant geniĢliği kullanılır.
bir
uygulamayı
güncellemek
Günümüzde yazılım geliĢtiren kiĢilerin rotası genel olarak istemci-sunucu modeline doğru gitmektedir. Böylece Ģirketler veri bütünlüğünü kontrol etme konusunda gücü ellerinde tutmaktalar. 166
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
PHP ve ASP KarĢılaĢtırması ASP hakkındaki en yanlıĢ kanı ASP ‗yi bir programlama dili sanmaktır. ASP dil değil (Active Server Pages) Aktif sunucu Sayfaları adında bir platformdur. Bu platformda destekleyen her dille ASP platformuna yönelik kod yazılabilir. En çok kullanılanılan Vbsciript ve günümüzde ise C# dilidir. ASP maalesef sadece Windows ile çalıĢır (bazı ticari uygulamalar ASP kodlarını baĢka sistemlerdede çalıĢtırmaktadır). IIS web sunucusu doğal ASP desteği ile gelmektedir. Visual Basic bilen kiĢilerde kısa sürede ASP kodu yazabilirler. Peki neden ASP ye karĢı PHP derseniz; 1. ASP COM-based architecture ile yapılmıĢtır. ASP programcıları VBScript kullandıkları zaman aslında bir COM nesnesi çalıĢtırılır. Daha sonra tarayıcı tarafında bir COM nesnesinin write methodu daha aktif edilir. VTYS ile iletiĢim için ayrı bir COM nesnesi daha çalıĢtırılır. Tüm COM nesneleri üst üste biner bu da sistemin cevabını geciktirir. PHP modullerinde ise herĢey PHP için ayrılan hafıza bölgesinde çalıĢtırılır. Farklı COM nesnelerinin açılması ve COM nesnelerinin arasındaki dönüĢümler engellenmiĢ olur. Tek Process üzerinden tüm iĢlemler yürütülür. Böylece PHP nin çalıĢma hızı ASP ‗den daha yüksek olur. 2. ASP de kitlenen bir uygulama web server üzerinde negatif etki yapar (ASP son sürümde bu hatayı gidermiĢtir). PHP nin böyle bir derdi yoktur. Her site kendi uzay alanında çalıĢır.
167
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
3. ASP açık olan her dosya için hafızada yer ayırır. Gerçi ASP 5 bu sörünü çözmüĢtür ama ASP 5‘te NT 4 ile çalıĢmadığından sorunlu olan bir çok sunucu vardır denebilir. PHP ise sadece gereken dosyaları hafızaya yükler. 4. ASP ile gelen componentler sınırlı ve yetersiz olduğundan 3. parti component desteğine ihtiyaç vardır. ĠĢ bununla bitmez bu componente göre kod geliĢtirdiğinizde bunun sayfayı yayınladığınız web sunucuya da kurulması gerekir. 5. ASP için için gerekli yazılımlar lisans maliyeti getirdiğinden, PHP sitelerini yayınlamak daha ucuza gelmektedir. 6. PHP dilinde daha az komutla daha çok iĢ yapılabilmektedir. Örneğin aĢağıdaki kodlara bir bakalım. Her ikiside bir cümledeki kelimeleri alt alta satırlara yazmak için iĢlem yapacaktır. ġimdi bu programın PHP dilindeki karĢılığına bakalım.
PHP ve Cold Fusion KarĢılaĢtırması Cold fusion çok üst seviye bir dil olup gerçekten iĢinin ehlidir. Programcı olmayanlar bile Cold Fusion ile yazılım geliĢtirebilirler. Ancak yinede web de sınırlı sayıda yer bulabilmiĢtir. Çünkü Cold Fusion sunucu ve yayınlama anlamında bırakın PHP dilini ASP sitelerden bile çok çok daha masraflıdır.
PHP Dilinin Kapasitesi 1. PHP Nesneye yönelik programlamayı destekler buna sınıf ve kalıtım özellikleride dahildir. 2. PHP çoklu kalıtımı desteklemez. Bu konuda izlediği yol java dili gibidir. 169
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
3. GeliĢmiĢ kontrol blokları ve hata yönetimi desteği vardır. 4. Operatör ve fonksiyonlar arasında (overloading) iĢlemine destek vermez.
Ezme
5. GeliĢmiĢ bir eklenti sistemi vardır. Eğer C diline yeterince aĢna iseniz rahatlıkla sizde eklenti yazabilirsiniz. Bunlar genel olarak PHP 5 ‗ten itibaren gelen özelliklerdir ve bazıların PHP 4 için geçeri değildir.
PHP Nasıl ÇalıĢır PHP iki Ģekilde çalıĢtırabilir. Ya bir web sunucu üzerinde yada komut satırından komut verilerek. Birinci yöntem çok popüler olmasına rağmen ikinci yöntem gittikçe yayılmaktadır. Çünkü bu sayede kullanıcıya özel kod yazılması mükün olmaktadır. Web sunucuda çalıĢma konusuna gelince, PHP, bir Script dilidir; yani kodları düz yazı dosyaları halinde kaydedilir ve PHP kodlarının çalıĢtırılması gerektiğinde ise PHP kodlarını yürütme yeteneğine sahip bir program ile iĢlenerek elde edilen sonuç geri gönderilir. PHP kodlarını çalıĢtırmak için web sunuculara PHP modülü kurulur. Bu modül varsa, Web server bir php kodu istendiğinde bu PHP modulüne baĢvurur ve PHP modülü ilgili kodu çalıĢtırıp sonucu tekrar web sunucuya geri gönderir. Web sunucu iĢlenmiĢ olan bu HTML Ģeklindeki kaynağı ise talep etmiĢ olan tarayıcıya gönderir. Bu Ģartlar altında kullanıcı hiçbir zaman PHP dosyasının gerçekte ne içeriğe sahip olduğu göremez. Sadece çalıĢma sonucu oluĢan HTML çıktısını görür. 170
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Buradan bir sonuç daha çıkıyor ki; PHP kodlarını çalıĢtırmak için bir web tarayıcımızın olması yeterli değildir. Çünkü Web tarayıcısı sadece HTML için gerekli olan yürütme yeteneğini barındırmaktadır. O yüzden bir web server kurulu olması ve bu web server üzerine PHP modülünün yüklenip gerekli ayarların yapılmıĢ olması gerekir. Modül yoksa ne olur derseniz; yazdığınız kodun orjinalini halka açmıĢ olursunuz hepsi bu. 2 HTML 3 Sunucu
4 HTML
1
Tarayıcı
2 PHP 3 Sunucu 5 HTML
6 HTML 4 PHP
1 Tarayıcı
3 Sunucu Yukarda gördüğünüz Ģekildende anlaĢılabileceği gibi PHP sonuç olarak hep sunucu tarafında çalıĢmaktadır. Dolayısı ile ile PHP ile tarih göstermek isterseniz eğer gördüğünüz tarih sizin bilgisayarın değil web sitenizin bulunduğu sunucunun tarih bilgisidir. PHP bu anlamda JSP, ASP gibi dillerle aynı iĢleve sahiptir! 171
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
HTML için sadece verilerin ekranda nasıl görüntüleneceğini gösteren biçiçlendirme dilidir demiĢtik. Dolaysıyla HTML ile web sunucusunda bir iĢlem yaptıramayız örneğin web sunucusu'ndaki bir veritabanı dosyasını açıp, içindeki kayıtları okuyamayız, yada web serverda bir metin dosyası oluĢturup ziyatretçilerin notlarını vs buraya kayıt edemeyiz. HTML ile Web ziyaretçimizden bilgi toplayabilirz, bunu sunucuya gönderebiliriz ama hepsi bu. Sonuçta bu verileri iĢlemek için bize mutlaka bu yeteneğe sahip bir program gerekir. PHP Dili ve Veritabanı
Programları ile ĠliĢkisi
Günümüzde neredeyse tüm programlama dilleri ile en çok veritabanına yönelik programlar yazılmaktadır. Kısaca programların çoğu hep bir Ģeyleri kayıt altına almak üzere yazılmaktadır. Zaman içinde bu kayıt altına alınan bilgilerin yönetilmesi ve hızlı iĢlenmesi bir sorun olarak ortaya çıktı ve bu defada ortaya bu verilerin iĢlenmesi konusunda teknikler içeren DBMS olarak kısaltılmıĢ haliyle Data Base Management System programları çıktı. Türkçe olarak VTYS yani Veri Tabanı Yönetim Sistemi ifadesi kullanılmaktadır. Veritabanı programları kendisine gönderilen verileri istenen ortamlarda tutar, talep edilmiĢ ise bunları aramada kolaylık sağkayacak indeks dosyalarını güncelleĢtirir, gelen talebe göre aranan Ģartlara uygun kayıtları bulur ve telp eden programa gönderir. VTYS geliĢtiren Ģirketler ise kendi sistemlerinin kullanımını artırmak için kendi sistemlerinin kullanımında yardımcı olmak üzere çeĢitli sürücüleri geliĢtirip bunları yazılım dünyasına sunmaktadır. Bu bakımdan günümüzde VTYS ile iliĢki kurmak isteyen diller sadece bu VTYS ile iletiĢim kuran 172
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
bir sürücü dosyası kullanmak durumundadır. PHP geliĢtiricileri ise neredeyse bilinen bütün VTYS sistemleri için bu sürücülere eriĢimde kullanmak üzere bağlantı dosyaları hazırlamıĢlardır. Örneğin MYSQL için gerekli olan LIBMYSQL.DLL dosyası (Mysql tarafından geliĢtirilmiĢtir.) PHP ile hazır gelmektedir. PHP ise bu LIBMYSQL.DLL dosyasını kendisi için geliĢtirilmiĢ bir bağlantı kütüphanesi ile yönetir. PHP geliĢtiricileri aĢağı yukarı bütün VTYS sistemleri için sürücüler geliĢtirmiĢtir (Adabas, dBase, FilePro, Informix, InterBase, mSQL, Oracle, Solid, Sybase, Sqlite, Firebird ve bir çok Unix veritabanı). PHP ayrıca, ODBC sürücüleri ile de çalıĢabilir; ve ODBC'nin okuduğu bütün veritabanlarından veri çekebilir. (ODBC'nin Unix-Linux sürümü de vardır.) PHP dilinin detaylarından önce PHP ile kullanılabilen veritabanlarından üçünden bahsedelim. PHP'nin varolma sebeplerinin baĢında, ticarî Unix veya Microsoft Windows iĢletim sistemlerinden ayrı, kar kaygısı olmayan, her türlü platformda çalıĢabilen Script dili ile bu dille kullanılabilecek yine Açık Sistem ürünü bir VTYS aracına sahip olmak gelir. Perl, PHP'den çok önce de bu platformda mevcuttu ama PERL VTYS yönetmekten çok sadece metin dosyalarını okuyup ve sonucu biçimlendirerek rapor haline getirmek amacıyla tasarlanmıĢtı. Bu bakımdan PERL veritabanına dayalı iĢlemlerde programcıya çok güçlük çıkartıyordu. GeliĢtirilmeside sıkıntılı bir süreçti. PERL açılım olarak ―Practical Extraction and Report Language‖ kelimelerinden oluĢyor dendiği zaman zaten PERL dinin amacı ve yapmak üzere tasarlandığı Ģey kendiliğinden ortaya çıkmıĢ olmaktadır. ASP ise sadece Windows üzerinde çalıĢabilir olması sebebiyle hosting konusunda 173
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
masraflı bir dildi. Üstelik Open source felsefesine uygun değildi. 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 veriyönlendirmeli (Data-Driven) Web uygulaması alanında önemli bir araç olarak belirdi. PHP ile, Web Server'a sayfanızı Internet ziyaretçisine göndermeden önce bir takım komutları yürütmesini, bir takım veri dosyalarını açıp içindeki kayıtları okuyup örneğin bir tablo içine yerleĢtirmesini söyleyebiliriz. MySQL, PostgreSQL ve SQLite ise, açık Kaynak Ģeklinde geliĢtirilen Veri Tabanı Yönetim Sistemi – VTYS (Data Base Management System –DBMS) dediğimiz türden programlardır. En çok bilinen VTYS programları ticari olarak Oracle, MSSQL, Informix, DB2 ve açık kaynak tarafında ise MYSQL, PostgreSQL, Firebird ve Sqlite‘dır. MySQL, çok-kanallı (multi-threaded), çok kullanılıcılı çalıĢabilen (multi-user), hızlı ve sağlam (robust) bir veritabanı yönetim sistemidir. Mysql veri tablolarını iki formatta tutabilmekteydi. InnoDB ve MYisam. Veritabanları arasında kızıĢan rekabet sonucu pabucu pahalı gören Oracle, Innobase Ģirketini satın alarak bir anlamda MYsql ‗in elini kolunu bağladı. Çünkü dilediği anda Innobase‘i lisanslı hale geçirip MySql ürünlerini tartıĢmalı duruma getirebilecekti. MYsql ‗in buna cevabı ise farklı oldu. Onlarda InnoDb yerine yıllar önce Interbase‘i geliĢtiren Jim Starkey‘ i iĢe alarak, kendi tablo formatlarını entegre etme yoluna gittiler. PHP geliĢtiricileri ise 5. sürümden itibaren doğal MYSQL desteği yerine, SQLite veritabanını öne çıkarmaya baĢladılar. SQLlite, basit veritabanı iĢlemleri için olduça 174
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
yeterli bir veritabanı programıdır. Gerçi network ortamında çoklu kullanım için uygun değildir ama internet programlarının çoğunun buna ihtiyacı yoktur.
PHP Dilinin GeniĢletilebilirliği PHP dilindeki fonksiyonlar gerekli geniĢletme kütüphanelerinden aranır. Örneğin siz kodunuzda bir fonksiyon kullandığınızda bunu içeren PHP kütüphanesi, geniĢletme dosyalarının tutulduğu klasörde bulunamazsa hata mesajı verilir. PHP dili için geliĢtirilen eklentiler PECL adı verilen "PHP Extension Code Library" kelimelerinden oluĢturulmuĢ bir kütüphanede dağıtılmaktadır.
Bazı PHP Kütüphaneleri ve iĢlevleri php_bz2.dll
Bzip2 dosyaları ile çalıĢma. SıkıĢtırma ve açma iĢlemi
php_zip.dll
Zip dosyaları ile çalıĢmaç sıkıĢtırma ve açma iĢlemi
php_curl.dll
DeğiĢik tipte protokol kullanan istemci ve sunucular (ftp,http,https,gopher vs) ile bağlantı kurabilmek için
php_exif.dll
Exif bilgileri ile çalıĢma (resim meta verileri)
175
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
php_fdf.dll
Form Data Format eklentisi. PDF dosyalarında formlarla çalıĢma
php_gd2.dll
Grafik oluĢturma ve çizme
php_gettext.dll
DeğiĢik dillerde yazılımlar için
çalıĢabilecek
php_imap.dll
IMAP protokolü kurmak için
ile
php_ldap.dll
LDAP (Lightweight Directory Access Protocol) protokolü ile iletiĢim kurmak için gerekli fonksiyonlar
php_mbstring.dll
MultiByte fonksiyonları
php_mcrypt.dll
DES, TripleDES, Blowfish (varsayılan), 3-WAY, SAFERSK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB, ECB cipher, RC6 ve IDEA algoritmaları ile Ģifreleme yapmak için gerekli kütüphane (son iki free algoritma değildir)
php_mhash.dll
HASH Ģifreleme fonksiyonları
php_gmp.dll
176
String
iletiĢim
iĢleme
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
php_mime_magic.dll
Dosya içeriğine bakıp dosya türü hakkında tahminde bulunan kütüphane dosyası. (Bu eklenti yerine artık Fileinfo eklentisi geçmektedir. Bu eklenti geri dönük uyumluluk için korunmaktadır)
php_ming.dll
Flash animasyon dosyaları üretmek için gerekli fonksiyonlar
php_openssl.dll
SSL protolü için
php_snmp.dll
SNMP protokolü (Simple Network Managemet Protocol)
php_soap.dll
Web servisleri için
php_sockets.dll
Soket bağlantılar için
php_xmlrpc.dll
XML ve RPC kütüphanesi. XMLRPC sunucu ve istemcileri geliĢtirmek için gerekli fonksiyonlar
php_xsl.dll
XML dosyalarına çıkıĢ tanımlamak için fonksiyonlar
php_dbase.dll
Dbase VTYS bağlantısı
php_interbase.dll
Interbase VTYS bağlantısı 177
formatı gerekli
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
php_msql.dll
Msql VTYS bağlantısı
php_mssql.dll
Mssql VTYS bağlantısı
php_mysql.dll
Mysql VTYS bağlantısı
php_mysqli.dll
Mysql VTYS eriĢimlidir)
php_oci8.dll
Oracle VTYS bağlantısı (Oracle Call Interface 8)
php_pgsql.dll
Postgresql VTYS bağlantısı
php_sqlite.dll
Sqlite VTYS bağlantısı
php_sybase_ct.dll
Sybase VTYS bağlantısı
php_pdo.dll
PHP Data Object bağlantılarının kullanımı için (Database Abstraction Layer kütüphanesi)
php_pdo_firebird.dll
Firebird PDO bağlantısı
php_pdo_mssql.dll
Mssql PDO bağlantısı
php_pdo_mysql.dll
Mysql PDO bağlantısı
php_pdo_oci.dll
Oracle PDO bağlantısı
php_pdo_oci8.dll
Oracle PDO bağlantısı
php_pdo_odbc.dll
ODBC PDO bağlantısı 178
bağlantısı
(Nesne
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
php_pdo_pgsql.dll
Postgres PDO bağlantısı
php_pdo_sqlite.dll
Sqlite PDO bağlantısı
PEAR (PHP Extension and Application Repository) PEAR aslında çeĢitli iĢler için yazılmıĢ kodların bir araya getirilerek diğer programcılar tarafındanda kullanılmasını sağlayan hazır kodlar kütüphanesidir. En çok bilinen PEAR paketi ise PEAR::DB paketidir. PEAR ile programlama konusu çok derin bir konu olup bu kitapta çoğunlukla PEAR barındırmayan kodlar kullanılacaktır. Bunun sebebi PEAR‗ın zor veya kötü bir Ģey olması değildir. Burada ilk amaç PHP öğrenmek olduğu için belirli bir aĢamaya gelinceye kadar klasik kodlama teknikleri ile devam edilecektir.
PHP - Web Sunucusu – PHP Kurulumu Web master açısından PHP sunucu tarafından çalıĢan bir programdır. Dolayısı ile sunucu ile uyumlu olmalıdır 5. sürümü itibariyle, PHP bütün Unix-türevi sistemler (örneğin Linux, Mac Os, BSD, Solaris) 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. Internet ortamında ortamında web sunuculara PHP iĢleme yeteneğinin eklenmesi haliyle bizim sorunumuz değildir, (iĢimiz hosting ise o zaman baĢka tabii). Bizim için Hosting firmasının PHP desteği verip vermediğini bilmek yeter. Fakat çalıĢmalarımızın doğruluğunu, 179
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
hataların kontrolünü yapabilmek için (hatta site tasarımını gerçek ortamdaki gibi müĢteri test edebilsin diye) kendi bilgisayarımıza bir kiĢisel Web Server kurmak ve bu programı PHP-uyumlu hale getirmek gerekir. Normal Ģartlar altında Apache, PHP, MYSQL kurulumu detaylı bir iĢlemdir. Merak edenler için kitabın sonlarında yinede yer verilecektir. Ama benim önerim bu yöntemi takip etmeyip, hazır WAMP paketlerinden birini kullanmanız olacaktır. WAMP Windows+Apache+Mysql+PHP kelimelerinin kısaltılmıĢıdır. WAMP paketleri tüm bu programların sisteminize otomatik kurulumunu sağlarlar. Böylece ayarlarla uğraĢmadan doğrudan iĢinize bakabilirsiniz. Linux için tasarlanan bu paketler ise LAMP olarak bilinirler.
XAMPP En çok tutulan WAMP paketlerinden birisi www.apachefriends.org adresinden bulabileceğiniz XAMMP paketidir. Linus sürümüde vardır. PHP varsayılan olarak desteklenmiĢtir. Ayrıca istenirse JSP çalıĢtırmak için TOMCAT eklentiside vardır. Paket bir çok ögeyi barındırdığı için biraz büyük, download edilmesi daha uzun ve dosya sayısı çok fazlaolduğu için kopyala yapıĢtır vs iĢlemlerde belirgin bir yavaĢlık sözkonusu olmakta.
APPSERV Yine aynı Ģekilde APPSERV paketide iyi bir pakettir. Kendine özgü bir kullanıcı kitlesi olup Flash disk üzerinde çalıĢmasını sağlayan betikleride vardır. 180
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Uniform Server Benim kiĢisel olarak tercih ettiğim WAMP paketi budur. www.uniformserver.com adresinde yayınlanan bu paket, küçük ve sadece amaca yönelik bir paket. Üstelik bir flash disk üzerinde tüm tasarımları (MYSQL verileri ve veri ayarları ilede birlikte) taĢıabilme avantajı vermekte. Bu iĢlemi XAMMP ilede yapmak mümkün ama Uniform açık halde iken sadece 40 mb civarı yer tutarken XAMPP 250 mb civarında yer kaplıyor. Fakat Uniform Server içinede PEAR ve diğer bir çok eklentinin elle kurulması gerekebiliyor. Uniform varsayılan olarak sadece MYSQL eklentisi hazır halde geliyor ve PEAR kütüphaneleride dahil değil.
EasyPHP EasyPHP oldukça tutulan bir www.easyphp.org adresinde ki sürümleri bulunmaktadır.
WAMP paketidir. sitesinde güncel
Bunlar dıĢında Saint WAMP, Php Triad, LWS, WD Studio vs uzayıp giden bir liste Ģeklinde bir sürü WAMP paketi var. Benim seçim yapma kritelerim ise 1. TaĢınabilir olmalı 2. Admin Paneli basit olmalı 3. Sık sık güncellenmeli 4. Fazla yer kaplamamalı 5. Ayarları mümkün olduğunca hazır gelmeli ve ilave ayarlar için yormamalı. 181
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Php Öğrenmek Zormu Dilin üreticilerinden Zeev Suraski, bu yılın baĢında Ġsrail'de yapılan ilk uluslararası PHP Konferansı'nda "PHP öğrenmek zor mu?" diye soran bir bilgisayar meraklısına Ģu cevabı vermiĢtir: "Bir haftadan fazla zaman ayırmanız gerekiyorsa, sizin için zor demektir!"
Ġlk PHP Programımız – Merhaba Dünya Dünyada neredeyse her programlama dili örnelirken ilk yazılan kod genelde ekrana ―merhaba‖ dünya kelimelerinin yazdırılmasıdır. Yukarda gördüğünüz gibi kod oldukça anlaĢılır sadece ve notasyonu öğrenilmeye müsait.
PHP KOD YAZIM KURALLARI PHP kodları, oluĢturacağımız HTML sayfalarında HTML etiketlerinin arasında kendi özel ayracı içinde yazılır: 182
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Php kodlama sintaksı bir çok dilden gelenler için çeĢitli kolaylıklar içermektedir. Kodlamada akılda bulundurulması gerekenler 1. Php kodları veya arasında yazılırlar. 2. Her komut satırından sonra ―;‖ noktalı birgül ile komut sonlandırılır. Ancak istisna durumlar vardır. 3. Php‘de açıklama satırı eklemek için /* ------ */, # veya // tagları kullanılır. Bunlar bulundukları yere göre kodun belli bir kısmını PHP tarafından gözardı edilmesini sağlarlar. 4. PHP değiĢkenleri $iĢareti ifade edilirler. $adi gibi. 5. DeğiĢken isimlerin boĢluk kullanılamaz. Örneğin $adi doğru bir değiĢkendir ama ―$adı soyadı― Ģeklinde bir değiĢken kullanılamaz. 6. PHP dilinde diğer dillerden farklı olarak Türkçe harfler kullanılabilir. Örneğin $adı="ali";echo $adı; ġeklinde yazılan bir komut çalıĢır. Ancak bir çok diller çlaıĢan birisi olarak bunu tavsiye etmiyorum. 7. DeğiĢken isimleri rakamla baĢlayamaz mutlaka harfle baĢlamalıdır. 8. DeğiĢkenleri isimlendirirken uygun bir notasyonda isimler kullanılmalıdır. Ayrıca değiĢken isimleri gereksiz yere uzatılmamalı ancak ancak anlaĢılmayacak Ģekilde kısada olmamalıdır. Örneğin $sayfasonudegiskenikullanimornegi uygun bir isim degildir. Keza $a,$b değiĢkenler tüm script boyunca kullanılacaksa uygun isimler değildir. 183
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
9. PHP dilinin ayrılmıĢ kelimeleri değiĢken adı olarak kullanılamaz (örneğin Not, if, switch gibi) 10. PHP değiĢken isimlerinde harf duyarlıdır. Örneğin $adi ve $ADI değiĢkenleri aynı değildir ve iki ayrı değiĢkendir. 11. Metin değerleri ― veya ‗ arasında yazılabilir. Eğer metin içinde çift tırnak kullanılacaksa bu çift tırnaktan önce \ karakteri (ters slash) yazılmalıdır. 12. Metin değiĢkenlerin içeriğine bir karakter dizisi gibi eriĢilebilir. 13. ―‖ arasında yazılan değiĢkenlerin içeriği ekrana basılırken ‗ tırnak kullanılır ise değiĢken isimleri metin gibi ele alınır ve örneğin $adi=‖Ahmet‖; ile atama bile yapılmıĢ olsa echo ‗$adi‘ ekrana Ahmet değil değiĢkenin adını yazacaktır. 14. Çift tırnak içindeki özel karakterler iĢlenirken tek tırnak içindekiler metin olarak ele alınır. 15. Kontrol ve döngü bloklarında iĢlenecek komut sayısı birden fazla ise bu komutlar {} içine alınarak koĢul yada döngüye ait komutların belirtilmesi gerekir. (aksi durumda bir mantık hatası oluĢur) Örnek değiĢken tanımları $adi
Doğru
$1abc
YanlıĢ
$_adi
Doğru
$adi soyadi
YanlıĢ 184
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
$adi‘soyadi
YanlıĢ
PHP bir Script dilidir ve dolayısı ile ; PHP ile yazdığınız "programlar" birer düzyazı dosyasıdır. PHP komutları aĢağıdaki çiftler arasına yazılabilir demiĢtik. 1. 2. Bunlara PHP komut ayracı denir; birinci türü uzun veya standart ayraç sayılır; ikincisine ise "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 "" Ģeklinde biter. Eğer siz ile kod yazacak olursanız XML kodlarınızın PHP den ayrılması güçleĢecektir. (iĢin aslı XML kodlaması için PHP de ilk satır echo komutu ile yaptırılır) ASP ile çalıĢan Web programcılarının alıĢtığı stil olan "" ASP bloğunu kullanmalarından dolayı hata almalarını önlemek içinde bir kolaylık düĢünülmüĢtür. PHP.ini dosyasını açarak, asp_tags = Off; satırını ON yaparak ASP açılıĢ kapanıĢ etiketleriylede PHP kodlamak mümkün olur! PHP komutlarınızı kullanabilirsiniz.
185
etiketiyle
de
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
print ("Merhaba Dünya!"); Ancak bunlar çok kullanılan durumlar değildir. Daha öncede belirtildiği gibi sadece önceden baĢka dilleri kullananlar için kolaylık olsun diye eklenmiĢlerdir. NOT: PHP kodları ne Ģekilde yazılırsa yazılsın sunucuda çalıĢırlar. PHP etiketi içinde yazılsa dahi. Javascript veya VBScript gibi scriptler ise kullanıcı tarafında çalıĢırlar. Bu bakımdan 3. kullanım kafa karĢıklığına sebep olmamalıdır. PHP daima sunucuda çalıĢtırıldığından dolayı ziyaretçiye asla PHP kodları gösterilmez. PHP kodlarımız, oluĢturulmasını istediğimiz sayfanın HTML kodları ile ―kod adacık‖ oluĢturmak üzere içiçe yazılır. Örnek koda bakarsak bunu görebiliriz: PHP ile Merhaba Sayfamızın görüntüsünde hiç bir değiĢiklik olmamakla birlikte, Browser'a giden HTML kodları önemli ölçüde değiĢmiĢ olacaktır.
Açıklama (Yorum) Satırları Yazılan kodun üzerinden zaman geçtikçe helede kod blokları uzun olunca kodu bir anda kavramak ve anlamak zorlaĢır. ĠĢte bunun için kod satırlarının arasına açıklama satırları eklememiz gereklidir. NOT: En iyi yazılmıĢ kod en çabuk anlaĢılabilen ve dökumante edilmiĢ koddur. PHP ayraçları içinde iki türlü yorum bulunabilir: Çoksatırlı yorumlar ve tek satırlı yorumlar. Birinci grubu, baĢına "/*" ve sonuna "*/‖ iĢaretleri koyarak, ikinci grubu ise sadece baĢına ―//‖ veya # iĢareti koyarak belirtiriz: 188
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Diyez ile yorum haline getirdiğimiz satırların sonuna baĢka iĢaret koymaya gerek yoktur.
PHP ile Ekrana Çıktı Verme echo() fonksiyonu-(Ekrana yazdırma) PHP dilinde ekrana bir Ģey yazdırmanın bir çok yöntemi vardır. En çok kullanılan yöntem echo fonksiyonudur. ġimdi belkide dünyanın en çok yazılan kodu olan ―merhaba dünya‖ uygulamasını PHP ile yazalım. Çift tırnak ile tek tırnak kullanımı arasında fark vardır. Tek tırnak yazılırsa ekrana yazılacak metin içinde değiĢken kullanılamaz. Daha doğrusu değiĢkenlerin değeri yerine adı ekrana yazdırılır. Ekrana tek br değiĢken veya metin yazdırılacaksa sadece ―?‖ de kullanmak mümkündür.
print() fonksiyonu – (Ekrana Veri Yazma) Print fonksiyonuda ekrana echo gibi çıktı vermek amacıyla yazılmıĢ bir fonksiyondur. Genel kullanımıda aynıdır.
190
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Doğruluğunu test etme imkanı bulamadım ama echo fonksiyonun genel olarak print fonksiyonundan daha hızlı çalıĢtığını iddia eden makaleler okudum. Gerçektende echo daha çok kullanım alanına sahip. Escape Kodlar Tek veya çift tırnak içine de alsak, PHP, bir değiĢken adını gördüğü zaman onun yerine o değiĢkenin tuttuğu değeri yazar. PHP bunu, değiĢken adının baĢındaki $ görerek yaparak. $ iĢareti gibi PHP için özel anlamı olan iĢaretlerin iĢlenmesini önlemek ve bu iĢaretleri düz metin saymasını sağlamak için bu iĢaretlerin önüne ters-bölü iĢareti koyarız. Buna o karakteri kurtarma veya ESCaping denir. PHP'nin anlamlı iĢaretleri ve bunların ESCape-yazılıĢı Ģöyledir: \'
Tek tırnak
\"
Çift tırnak
\\
Ters-bölü
\$
Dolar iĢareti
\n
Yeni Satır (New Line)
\r
Satır BaĢı (Return)
\t
Sekme (Tab) karakteri
Bu iĢlemi daha iyi anlatmak için Excelden bir örnek yararlı olur. Bazen Excel‘de bir sayının metin olarak ele alınması istenir. Excel‘i buna zorlamak içinde o değerin baĢına ‗ karakteri konulur. ESCape kodlar iĢte bu iĢlemi 191
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
yaparlar. PHP bu kodları görünce değiĢkeni iĢlemek yerine metin olarak varsayar.
DeğiĢken Nedir ? DeğiĢkenler tüm programlama dillerinde karĢımıza çıkacak bir konudur. Genel olarak tüm dillerde standartlarda aynıdır. Örneğin tüm programlama dillerinde değiĢken adı rakam ile baĢlayamaz kuralı vardır. Neden değiĢken kullanırız diyecek olursanız cevap çok basittir; sadece programcının iĢini kolaylaĢtırmak için. Bilgisayarın RAM hafızasını bir Excel sayfası gibi düĢünebiliriz. Bilindiği gibi orada her satır hücrenin kesiĢmesine bir hücre denir ve A1 gibi birde hücre adresi alır. CPU larda buna benzer bir teknikle hafızayı adresleyerek kullanırlar. Örneğin siz $maas =2000; dediğinizde PHP bilgisayarın RAM hafızasında xxxx:xxxx gibi bir adresi ayırmakta kendisi için buraya sembolik olarak ―maas‖ adini vermektedir. Aslında xxxx:xxxx değeri sadece bir ifadedir. Günümüzde 64 bitlik iĢlemci ile çok daha karıĢık hale gelmiĢtir. Hele birde binary yani sadece 1 ve 0 lardan oluĢan adresleri düĢünürsek bunların adreslerini ve neyi temsil ettiğini hatılamak adeta imkansızdır. Dolayısı ile biz ―maas‖ degiskenine bakmak istediğimizde ise karĢımıza onun temsil ettiği adresteki bilgi gelmektedir. Böylece programı kiĢi adres ezberlemek yada hatırlamak zorunluluğundan kurtulmaktadır. DeğiĢkenleri adının önüne $ iĢareti koyarak tanımlarız: 192
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
$ad; $syd; $Ay1; DeğiĢkenler, harf, veya alt çizgi (_) ile baĢlayabilirler; bu karakterleri ve rakamları içerebilirler; ama içinde boĢluk veya diğer iĢaretler bulunamaz. PHP değiĢkenleri her türlü değeri tutabilirler: bir değiĢkenin adının yazılıĢ Ģekli onun tutabileceği değerin niteliğini belirlemez. Dolayısıyla, "$adi" değiĢkenin değeri "Tuncay" da olabilir, "1255" de olabilir. PHP'de genellikle değiĢkenleri değerini atayarak belirleriz: $adi = "Tuncay"; $soyadi = "ġanlı"; $a123 = 123; DeğiĢkenler, kullanıldıkları yerde, taĢıdıkları değerin kullanılmasını sağlarlar. Örneğin $adi değeri ―ALĠ‖ bilgisini içeriyor ise PHP bu değiĢkeni gördüğü yerde değiĢkenin içerdiği ―ALĠ‖ bilgisini kullanacaktır: print $adi; komutu, eğer değeri "Tuncay" ise tarayıcı penceresine "Tuncay" kelimesini yazdırır. PHP'de özel bir değiĢkene değiĢken adı olarak kullanılacak değerleri de atayabiliriz: $adi = "Tuncay"; $degisken = "adi"; print $$degisken; Burada Browser penceresine yine "Tuncay" kelimesi yazılacaktır; çünkü PHP $degisken adlı değiĢkenin "adi" 193
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
adlı değiĢkeni tuttuğunu bilecek ve iki Dolar iĢaretini görünce, $degisken'in değerini değil, onun tuttuğu değiĢkenin değerini yazacaktır. Bu, size Ģu anda karıĢık görünebilir. Daha sonra döngüleri gördüğümüzde bu tekniği bir satırlık kod ile yüzlerce değeri yazdırmakta kullanacağız. Bu teknik Ģöyle de kullanılabilir: $degisken = "adi"; $$degisken = "Tuncay"; print "$adi"; print $$degisken; print "${$degisken}"; print "${'adi'}"; Buradaki dört "print" komutu da Browser'a "Tuncay" kelimesini yazdıracaktır. PHP'de bir değiĢkenin tuttuğu değer, bir baĢka değiĢkene atanabilir. Bu ya duragan, ya da dinamik olarak yapılır. Durağan yöntemde: $birinci_degisken = "Nurcan"; $ikinci_degisken = $birinci_degisken; $birinci_degisken = "Tülay"; print $ikinci_degisken; Kimi zaman iki değiĢken arasındaki değer alıĢ-veriĢi sürekli olsun istenebilir. PHP, buna, ilk atama sırasında & iĢareti kullanırsak izin verir. Aslında bu iĢlem bir hiledir. Çünkü yapılan iĢlem iki değiĢkeninde hafızadaki aynı adresi göstermesi sağlanmaktadır: $birinci_degisken = "Nurcan"; 194
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
$ikinci_degisken = &$birinci_degisken; $birinci_degisken = "Tülay"; print $ikinci_degisken; Buradaki "print" komutu ise Browser penceresine "Tülay" kelimesini yazdıracaktır. Çünkü iki değiĢken arasındaki değer alıĢ-veriĢi birinci değiĢkenin tuttuğu değeri değiĢtirmeden önce halde, ikinci değiĢkene birinci değiĢkenin değerini dinamik olarak atamıĢ olduk. Atama iĢlemi sırasında & iĢareti kullandığımız için, birinci değiĢkenin değeri değiĢtiğinde ikinci değiĢkenin de değeri değiĢecektir.
DeğiĢken Türleri PHP, değiĢkenlere, tiplerine göre farklı miktarda hafıza alanı ayırır. O yüzden etkin bir programcı için veri tipinin doğru tespiti çok önemlidir. (bu olay Veritabanı tasarımında çok daha önemlidir). Ayrıca PHP, diğer bütün programlama dilleri gibi belirli veri türleri ile sadece belirli iĢlemleri yapabilir. Örneğin, ancak iki sayı arasında aritmetik iĢlemler yapılabilir ama iki metin 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 yedi tür değer vardır: 195
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Tamsayı (Integer): 5,124, 9834 gibi (2147483647 ile 2147483647 arası sayılar)
Çift (Double): 3,567 gibi
Alfanümerik (String): "Deniz" gibi
Mantıksal (Boolean): doğru (true)/yanlıĢ (false) gibi
Nesne (Object)
Dizi (Array)
Resources (Kaynak)
Kaynaklar aslında PHP değiĢkeni olmayan Sql sorguları, yada bir dosyadan yğklenen resim gibi kaynaklardır. DeğiĢkenlerden farklı genellikle olarak iĢleri bitince yok edilmeleri gereklidir. Böylece verimli bir hafıza kullanımı sağlanır.
= = $mystring
+
"12"; 20; $myinteger;
Alfanümerik DeğiĢkenlerin Ġçeriğine Dizi Olarak EriĢme Alfanümerik değiĢkenlerin PHP‘de özel bir kullanım Ģekli daha vardır. Bu notasyon Pascal ve C dilindede olan bir kullanım Ģeklidir. Gerçi Pascalda 0. byte uzunluk ifade eder ama önemli olan kullanım mantığıdır. Bu yöntemler bir alfanümerik değiĢkenin içeriğine harf harf eriĢmek mümkündür. 196
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
=
"Kelam, = =
Ġbrahim?"; "S"; "!"; $str1;
Yukarda gördüğünüz kullanımda öncelikle bir alfanümerik değiĢken oluĢturuluyor. Daha sonra ise bu değiĢkenin ilk harfi değiĢtiriliyor ve en sonundada metnin en son karakteri değitirilip ekrana yeni hali yazılıyor.
Diziler (Array) Diziler aynı tipte birden çok değiĢkeni zincirleme olarak barındıran değiĢkenlerdir. Buna neden ihtiyaç duyulurki derseniz, örneğin meyveleri iĢleyen değiĢkenlere ihtiyacımız olsun. Yapmamız gereken $elma, $armut gibi her meyveyi sıra ile tanımlamak. Bu iĢe kodlamada zorluk ve sıkıntı demektir. 1. Bu meyveleri ekrana yazdıralım diyecek olursak tek tek elle yazmak zorundayız. 2. Bu meyve isimlerini sıralayalım desek yapacak hiçbir Ģeyimiz yok 3. Meyve isimlerini bir sırada iĢleyelim dersek elimiz kolumuz bağlı Dizilerde ise bu konular sıkıntı olmaktan çıkmaktadır.ġimdi bir örnekle hem meyveleri içeren bir dizi tanımlayalım hemde bu diziyi ekrana yazdıralım. 197
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Yukardaki döngüde koyu harflerle yazılan kısım tüm meyveleri ekrana yazan koddur. Üstelik tek bir fonksiyonlar bu diziyi artan yada azalan Ģekilde sıralamamızda mümkün. ġimdilik döngünün nasıl çalıĢtığı konusuna girmeyeceğiz. Bu ilerde iĢleyeceğimiz bir konu. Ancak ilerde bu konuya tekrar geniĢçe yer verilecektir
Çok Boyutlu Diziler Diziler çok boyutluda olabilir. Örneğin meyvelerin renginide tutmak isteseydik 2 boyutlu bir dizi tanımlayabilirdik. 198
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Dizi Tanımlama Kuralları
Diziler tanımlanırken süslü parantez değil, normal parantez kullanılır
Herbir elemanın konulur.
Dizi çok boyutlu ise bunları tırnak içine alarak yazmak gerekir.
değerlerinin
sonunda
199
virgül
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Nesneler (Objects) NYP yani Nesneye Yönelik Progamlama programlama dünyasında çığır açan bir tekniktir. Ġngilizce OOP olarak ifade edilir ve Objet Oriented Programming kelimelerinin baĢ harflerinden oluĢur. Bu teknik ortaya çıktığında geleneksel programlamaya alıĢkın olanlar önce tereddüt etsede nesneler kısa sürede programcılar için vazgeçilmez oldular. Tanımlarsak, nesne, kendi değiĢkenleri ve çalıĢtıracağı komutlardan oluĢan fonksiyonları ile bir bütündür. Nesneyi bir kere tanımladıktan sonra istediğimiz kadar örneğini oluĢturabiliriz. Bir nesnenin yapacağı iĢten, o nesnenin metodu diye söz ederiz. Nesneler birbirinin atası olabilir. Birden fazla nesne bir araya gelerek yeni bir nesne oluĢturabilirler. Windows iĢletim sistemi tamamen NYP ile yazılmıĢtır. Pencereler birer nesnedir. Pencere nesneleri ise, baĢlık çubuğu, pencelere alanı, durum satırı, sol ve sağ üst köĢelerdeki düğmelerden oluĢmuĢtur. Gene aynı Ģekilde Windows pencelerinde gördüğünüz bilgi giriĢ kutuları düğmeler vs her Ģey bir nesnedir. Nesneler Ġleri programlama konusu olduğundan örnekler sonra iĢlenecektir. Ancak bast bir örnek vermek için ; bu programı çalıĢtırdığımızda ekrana Merhaba Değişken : rastgele bir metin değeri yazacaktır. Konu baĢında belirtildiği gibi bu basit bir örnektir. $a ile $str farklı olması sizleri ĢaĢırtmasın. Ġleriki konularda bu olay daha net ĢekillenmiĢ olacaktır.
Sabit Değerler - Constants Ġster Web, ister Web-dıĢı amaçlı olsun, bir programın bazen baĢından sonuna kadar aynı değeri taĢıması istenen bir değere ihtiyacınız olabilir. Tabiî ki bu iĢlem için bir değiĢken kullanmakta mükündür. Ama yanlıĢlıkla değiĢkene değer atarsanız ölümcül hatalar yapabilrsiniz. Örneğin liste kodu yazdığımızı düĢünelim; matbu forma baskı yaptıracağız, form 20 satırlık ve yine 20 satırdan oluĢan bir sürü baĢka formumuzda var. Programın içinde bir değiĢken tutup bu sayı 20 olunca yeni form takılmasını isteyebiliriz. Ama ilerde formlar 30 satır olursa tüm o 20 sayılarını bulup 30 yapmamız gerekir. Bu iĢlem için $satirsayisi diye bir değiĢken kullanıp, içeriğini 20 olaak kullanmayı düĢünürsek eğer ilerde sadece bu sayının 30 yapılması yetecektir. Bu daha akılcı bir iĢlemdir. Ancak buradada bir sorun var. Ya bu değiĢikliği yanlıĢlıkla kod içinde yaparsak ? Sonuçta bu 201
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
bir deiĢken ve değer atamayada açık durumda. ĠĢte bunun için satirsayisi diye bir sabit tanımlayıp buna değer atabiliriz. Böylece hem bir değiĢiklikle tüm satirsayisi değerlerini güncellemiĢ olacağız, hemde kod içinde bu değeri yanlıĢlıkla değiĢtirmenin önüne geçmiĢ olacağız. Üstelikta yanlıĢlık aynı isimde bir sabit daha oluĢturmaya kalkınca PHP iĢlemi yapmayacaktır. 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_ADI", değeri); Burada SABIT_ADI yerine, tanımlamak istediğimiz sabit değere vereceğimiz isim, değeri yerine de sabitin taĢımasını istediğimiz değeri yazarız. Örnek: Burada tanımladığımız KDV sabit-değeri, tıpkı bir değiĢken gibi kullanılabilir. Ticari bir kod içinde bu KDV değeri yüzlerce iĢlemde geçebilir. Bunun değerinin elle kodlanması yerine bu Ģekilde kullanılması bizi hatalardan koruyacaktır. Diyelimki KDV 18 den 10 ‗a düĢtü. Yapmamız gereken sadece DEFINE satırındaki 18 202
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
değerini 10 yapmak olacaktır. Kodun geri kalanı anında KDV oranını 10 olarak kullanacaktır. Sabit değer ile aynı ismi taĢıyan değiĢken oluĢturmak mümkündür; ancak aynı ismi taĢısa da PHP bir sabit ile bir değiĢkeni (birinin adının önünde $ iĢareti bulunduğu için) karıĢtırmaz. TanımlanmıĢ olan bir sabiti yeniden oluĢturamayız; ama buna teĢebbüs ettiğimizde PHP hata vermez. Bir sabit değerin oluĢturulmuĢ olup olmadığını defined() fonksiyonu ile anlayabiliriz: PHP'nin kullanılmaya hazır bir kaç sabit değeri vardır. True (doğru) değeri 1 olan, False (yanlıĢ) ise değeri sıfır sayısı veya boĢ alfanümerik olan iki sabittir. Diğer sabitler ise Ģunlardır:
__FILE__ : O anda çalıĢmakta olan PHP dosyasının adı 203
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
__LINE__ : Bu ifadenin yer aldığı satırın sayısı
PHP_VERSION: PHP'nin sürümü;
PHP_OS: PHP'nin çalıĢtığı iĢletim sistemi;
PHP_VERSION : PHP'nin sürümü (Ġki kelimenin arasında bir alt-çizgi var);
Bunlara ek olarak, E_ERROR, E_WARNING, E_NOTICE ve E_PARSE Ģeklinde hata durumunda hatanın çeĢitli özelliklerini bildiren sabit değerleri de kullanabiliriz. PHP hakkında çok daha geniĢ bilgiyi phpinfo() fonksiyonunu çağırarakk alabilirsiniz. Buradaki değiĢkenler iĢletim sistemine ve web server programına görede değiĢirler. Ġlerde bunlar detaylıca incelenecektir.
Operatörler Operatörler kullanıldıkları dile, atama, aritmetik iĢlemler ve karıĢılatırma gibi yetenekler kazandıran sembollerdir. PHP dilinde en çok kullanılan operatör ―=‖ operatörüdür. Değer atamak için kullanılır. PHP getirdiği yazım kolaylıklarından biriside hem atama hem iĢlem yapılabilmesidir. Örneğin: print ( $Fiyat = 1000 ) ; ifadesinde olduğu gibi, bir fonksiyonun içinde de hem atama iĢlemi yapılabilir; hem de iĢlem yürütülebilir. PHP'nin aritmetik, birleĢik-atama (combined assigment), birleĢtirme, karĢılaĢtırma ve mantıksal sınama operatörleri vardır.
204
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Aritmetik Operatörler: + / * %
Toplama Çıkartma Bölme Çarpma Kalan (Modulus)
6+5 6-5 6/5 6*5 6%5
= = = = =
11 1 1.2 30 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ımlarken 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" 205
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
print ($a + $b) sonuç olarak 6 çıkacaktır. Bu küçük örnekler, PHP ile program yazarken hangi değiĢkenin ne sonuç vermesi gerektiğini dikkatle düĢünmek zorunda olduğunuzu göstermiĢtir sanırım. Bir kiĢinin maaĢı ile baba adını toplamak istemezsiniz doğal olarak ama 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:
count_chars() fonksiyonu (Metin içinde karakterlerin tekrar etme sayısını bulma) count_chars() fonksiyonu metin içindeki karakterlerin kaçar defa tekrar edildiklerini verir. Ġkinci parametresi verilirse parametre 1 ise kelimeleri bir dizinin elemanları olarak, parametre 2 ise kelimeleri ve bu kelimelerin metin içindeki baĢlangıç pozisyonlarını bir dizi halinde verir.
str_word_count() fonksiyonu (Metin içindeki kelime sayısını bulma) str_word_count() fonksiyonu metin içindeki tekil kelime sayısını bulur. Ġkinci parametresi verilirse parametre 1 ise tekrar sayısı 0 dan büyükler, parametre 2 ise tekrar sayısı 0 olanlar listelenir. Sonuç çıktısı Ģöyle olacaktır. a değeri Array ( [32] => 6 [46] => 1 [72] => 3 [75] => 1 [76] => 1 [77] => 1 [80] => 3 [84] => 1 [97] => 6 [98] => 1 [101] => 1 [103] => 1 [104] => 1 [105] => 2 [108] => 4 [109] => 3 [111] => 1 [114] => 3 [116] => 1 [117] => 2 [118] => 1 [121] => 1 [221] => 1 ) b değeri Array ( [0] => Ġbrahim [1] => Halil [2] => Kutluay [3] => PHP [4] => ve [5] => HTML [6] => Programlama ) c değeri Array ( [0] => Ġbrahim [8] => Halil [14] => Kutluay [22] => PHP [26] => ve [29] => HTML [34] => Programlama ) Metinde 7 kelime var
strpos() ve stripos() fonksiyonları (Metnin bulunduğu pozisyon) Bu fonksiyonlarla bir metin içinde bir ifadenin olup olmadığını, varsa da hangi pozisyondan itibaren baĢladığını bulabiliriz. Strpos() ve stripos() arasındaki fark ise stripos() fonksiyoun nüyük küçük harf ayrımı yapmamasıdır. Bu fonksiyonlar 0 indexlidir. Yani sonuç 7 272
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
ise aranan demektir.
metin
aslında
8.
trim(), rtrim(), ltrim() fonksiyonları (Metinden belli bir karakteri çıkartma) Normal Ģartlar atında bu fonksiyonlar metin içindeki white-space dediğimiz boĢluk, sekme (tab) ve yeni satır karakterlerini çıkarır. Ancak ikinci parametresi verilirse bu parametre içindeki karakterleri metinden atar. Bu 273
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
fonkyionlar ne çok metin içindeki veya önünde-arkasında bulunan gereksiz boĢlukları traĢlamak için kullanılır.
// // // “
wordwrap() fonksiyonu (Metni satırlara ayırma) HTML kendisi zaten satırları otomatik olarak ekranda yer kalmayınca aĢağı kaydırmaktadır. Ancak bazı durumlarda bu iĢlemi kendimiz yapmak isteyebiliriz. Örneği 90 karakterlik bir adres bilgisini üç satıra bölmek isteyebiliriz… wordwrap() fonksiyonu bu iĢi yapar. Hiçbir parametre verilmez ise metni 75 er karakterlik satırlara böler. Ama ikinci 3. parametreler ile hem satırdaki karakter sayısını hemde satır sonu karakterini belirtmek mümkündür. $text = wordwrap($text, 20, "");
explode() fonksiyonu (Metni bölümlere ayırma) explode fonksiyonu bir metni verilen bir karaktere göre bölümlere ayırır.
274
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
implode()fonksiyonu (Metni bölümlere ayırma) implode fonksiyonu ise explode ile bölümlere ayrılan metni gene eski haline getirir.
strtoupper() fonksiyonu (büyük harfe çevirme) Verilen parametredeki metni tamamen büyük harfe çevirir. Ancak bu fonksiyon Türkçe karakterleri tanımaz. Örneğin Ali->ALI, alı ->ALı, aĢlama-> AĢLAMA olarak geri döner.
strtolower () fonksiyonu (küçük harfe çevirme) Verilen parametredeki metni tamamen küçük harfe çevirir. Ancak bu fonksiyon Türkçe karakterleri tanımaz.
ucfirst () fonksiyonu (ilk harfi büyük harfe çevirme) Verilen parametredeki metni ilk harfini büyük harfe çevirir. Ancak bu fonksiyon Türkçe karakterleri tanımaz.
275
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
ucwords () fonksiyonu (kelimelerin ilk harfini büyük harfe çevirme) Verilen parametredeki metni tüm kelimelerindeki ilk harfleri büyük harf yapar. Ancak bu fonksiyon Türkçe karakterleri tanımaz.
=
=
"ibrahim halil kutluay"; = strtoupper($str); = strtolower($str); = ucfirst($str); = ucwords($str); ucwords(strtolower($str));
number_format() fonksiyonu (Rakamları ekrana biçimlendirerek yazdırmak) Ekrana rakam yazdırma önemli bir konudur. Örneğin bir maaĢ listesi yazdırırken altalta gelmemiĢ küsuratları farklı sayılarda rakamlar kullanılırsa kodun ve yazılımn kalitesinden Ģüphe edilir. O yüzden özellikle ondalıklı sayılar ekrana yazdırılırken, en uygun Ģey ondalık hane sayısının fu fonksiyonla sınırlandırılmasıdır. Ayrıca uzun sayılarında üçer basamak halinde bölünerek yazdırılmasıda okunurluğunu artırır. number_format parametresiz kullanılır ise sayıyı üçerli basamaklar ve ondalık haneyi aĢağı ada yukarı yuvarlayarak keser. AĢağıdaki ilk örekte bu görünmektedir. Ġkinci paramtre olan ondalık hane sayısı verilirse sayının ondalık hanesine buna uygun hade yuvarlar. 276
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
strcmp () fonksiyonu (iki metni karĢılaĢtırma) Bu fonksiyon ile iki metni karĢılaĢtırma iĢlemine tabi tutmak mümkündür. AĢağıdaki örnekte fonksiyonun çaıĢma mantığı görülebilir. Birinci metin ikinciden ASCII olarak önce geliyorsa -1, iki metin aynı ise 0 ve ilk metin ASCII olarak büyük ise 1 değerini geri dönderir. Örneğe bakıldığında Ģüphesiz gözle bile karĢılaĢtırma yapıp bu fonksiyona ne gerek var demek mümkündür ancak bu fonksiyonun böyle açıkça yazılan metinler için değil değiĢkenlerle kullanılıdığını unutmamak gerekir. Son olarak operatörler kısmında gördüğümüz ―===‖ operatörünü hatırlarsak yukardaki örnekte switch içindeki ikinci satırında aynı iĢlemi yaptığını görebiliriz. Bir PHP efansesi derki ―===‖ operatörü bu fonksyiondan hızlıdır. Bu belki binlerce iĢlem ardı ardına yapılırsa küçük bir fark için doğru olabilir. Ama asıl sorun Ģudur; strcmp iki metin aynı ise 0 değeri dönderirken, ―===‖ mantıksal true olarak 1 değeri dönderecektir.
strcasecmp () fonksiyonu (iki metni karĢılaĢtırma) Kullanımı strcmp ile aynıdır ancak büyük küçük harf ayrımı konusunda ayrılırlar.
str_pad () fonksiyonu (metnin etrafını boĢlukla (yada karakterle) destekleme) str_pad metin iĢlerken yararlı bir fonksiyondur. En az iki parametre ile çalıĢır. Ġlk ikisi zorunlu diğerler seçimliktir. str_pad ( metin, destek uzunluğu [, destek metni [, destek tipi]]) 278
HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013
Sadece iki parametre ile kullanılırsa metnin önüne ve arkasına verilen sayıda boĢluk karakteri ekler. Ama eklenecek karakter üçüncü parametre ile verilmiĢse ekleme içleminde bu karakter kullanılır. Döndüncü parametre ile ise ekleme iĢleminin sadece sağa , sadece sola yada her iki ana yaptırılacağı belirtilir.