Professional Documents
Culture Documents
indekiler
indekiler ............................................................... 2 GR .................................................................... 21 Kullanm Kurallar ................................................... 23 HTML DL ............................................................. 24 Bir Web Sitesi Bilinmesi Gereken Temel Bilgiler ........ 26 Bir web sitesi iin .................................................... 26 Domain Uzant Adlar ............................................ 28 TCP / IP .............................................................. 29 PORT .................................................................. 30 Web Server ......................................................... 30 Apache ............................................................ 32 IIS .................................................................. 32 Bir Web Server yazlm paketi seerken dikkat edilmesi gereken bir ka ilkeyi sralayalm: ........... 32 Webde Gezme lemine Genel Bir Bak ................. 35 HTMLin balca zelliklerini yle sralayabiliriz: .......... 36 Web Tarayclar ...................................................... 39 Microsoft Internet Explorer ................................. 39 Netscape Navigator ........................................... 40 Firefox ............................................................. 40 Opera .............................................................. 40 Google Chrome ................................................. 40 Yandex Browser ................................................ 40 Tarayclar in Yardmc Programlar ve Ek Birimler .. 40 HTML Editrleri ....................................................... 42 Expression Web ................................................... 42 Dreamweaver ...................................................... 42 Word .................................................................. 42 NVU ................................................................... 43 HTMLin Temel Bileenleri ........................................ 44 2
Etiketler (Tag) ..................................................... 44 HTML Yazm Kurallar ............................................ 45 HTML Dosyasnn Blmleri.................................... 45 Trke bilgi ieren bir sayfa rnei ise; ...................... 46 <html>...</html> ............................................... 47 <head>...</head> .............................................. 47 <title>...</title> ................................................. 47 <body>...</body> .............................................. 47 Meta Etiketleri Arama Motorlar in Sitemize Eklememiz Gereken Bilgiler ................................ 48 Meta Talarnn Gelimi Kullanm ......................... 50 Sayfann Sre Amn Belirtmek .......................... 50 Bir Sayfann Belirli Bir sre Ekranda Kalp Otomatikman Baka Bir Adrese Ynlenmesini Salamak ......................................................... 50 Trke Karakterleri Grntlemek-Kod Sayfas ........ 51 <BODY> Etiketinin Parametreleri ........................... 52 TrueType Fontlar-Harf Genilii Serif ve Sans Serif Harfler ............................................................. 52 H1,H2,H3,H4,H5,H6 Balk Etiketleri .................... 53 <br> etiketi...................................................... 54 <p></p> etiketi ............................................. 55 Genel Biimlendirme Etiketleri .................................. 57 Metni Koyu, veya talik Yazdrma ........................ 58 HTML Dilinde Renk Kodlamas ............................. 59 Gvenilir 216 Renk ............................................ 62 Sral Listeler..................................................... 65 Srasz Listeler .................................................. 67 <HR> Etiketi ile izgi Oluturma ......................... 68 Resim ve Multimedya Dosyalarn Kullanmak ........... 69 Marquee ile Resim Ve Metin Kaydrma .................... 71 Resimleri Kullanrken Dikkat Edilecekler; .............. 73 3
Video ve Ses Dosyalarnn Kullanm ....................... 74 Tablolar ................................................................. 75 Balk, Satr ve Veri Etiketleri................................. 75 Stun ve Satr Birletirme Colspan- Rowspan ........ 78 Zemin - Bgcolor ................................................ 78 Tablonun genilii- Width ................................... 78 Tablonun erevesi - Border ............................... 79 Hcre iindeki boluk miktar CELLPADDING ......... 79 Hcreler aras boluk miktar CELLSPACING .......... 80 Sembol aretlerinin HTML Dilindeki Karlklar ........ 80 Genel Sayfa Kullanm ekilleri .................................. 82 ereveler -Frames ................................................. 86 Avantajlar ........................................................... 86 Dezavantajlar...................................................... 86 Frame Parametreleri ............................................. 88 Frame Satrlar ve Stunlar ................................ 89 Yatay Dikey Kark Frame Oluturmak ................. 91 HTMLde Balantya (LINK) Giri.............................. 93 HTMLde Balant Trleri .......................................... 97 HTTP balantlar: .............................................. 97 FTP balantlar: ................................................ 97 Haber Gruplar: ................................................. 97 Elektronik Posta Balants: ................................ 98 Dosya Balantlar: ............................................ 98 Dier balantlar: .............................................. 98 Resimleri Link Bal Vermek in Kullanmak .......... 99 Resim Haritas (Image Map) ile Link Kullanm ....... 100 Link Verirken Relative (greceli) ve Absolute (mutlak) Adreslemelerin Farklar ....................................... 101 KULLANICI LE ETKLEM VE FORMLAR .................. 103 Form Etiketinin Alt Seenekleri ............................ 106 Form Elemanlar izelgesi ................................... 107 4
INPUT ............................................................... 110 Kullancnn klavyeden metin girmesi iin: ............. 113 Parola Girii iin: ............................................. 113 Onay Kutusu iin (Check iareti): ...................... 113 Tekil Seme Kutusu iin (Radyo dmesi): ......... 114 Listeleme Kutusundan Semek in (SELECT)...... 114 Uzun Metin Girii in (TEXTAREA) ..................... 115 Gnder ve Sil dmeleri (Submit ve Reset) ........ 115 Tabindex ........................................................ 116 URL Kodlar .................................................... 118 CSS ile Biimlendirme Teknikleri, Dinamik HTML ....... 120 CSS Stillerine Neden htiya Duyulur .................... 120 Cascading Style Sheets -CSS ve Kullanm ekilleri . 121 Yerel Stil ablonu ........................................... 122 Sayfa i Global Stil ablonu ............................ 122 Site i Global Stil ablonu ............................... 124 Birden fazla stil ablonu verilirse Tarayc ne yapar? 125 HTML iinde blm oluturma (DIV) ........................ 126 CSS ve Seici(Selector) Kavram ve Seici Tipleri ... 127 simlendirilmi Seiciler .................................... 127 Snf Seiciler .................................................. 128 Karma Seiciler (Pseude Classes) ...................... 129 artl Seiciler (Contextual Selectors ) ............... 131 Bir Alana Tanml Stillerin Dnda Stil Uygulamak .. 133 CSS Bloklar ve Denetlenebilir zellikler ................... 133 CSS Biimlendirme Tablosu ................................. 133 Font zellikleri in CSS Kullanm: .......................... 139 FONT-FAMILY (Yaztipi ailesi): .............................. 139 FONT-STYLE(Yazl ekli): .................................. 140 FONT-VARIANT (Yaztipi tr):............................. 140 FONT-WEIGHT (Yaztipi Koyuluu): ...................... 140 FONT-SIZE (Yaztipi boyutu): .............................. 141 5
Renk ve Zemin zellikleri:................................... 142 Metin zellikleri: ............................................. 143 Konum (Pozisyon) zellikleri ............................... 145 Konum POSITION: Deerleri ......................... 146 CSS ve Katman (Layer) Kavram .......................... 147 Katman ndeksi (Z-index): ............................ 149 Boluk brakma, Margin : .................................... 150 Xhtml BELGE TR ............................................ 151 Sonu .................................................................. 152 Altn tler......................................................... 153 Hosting Hizmeti Alrken ...................................... 153 Web Sitesi Yaparken ........................................... 153 Site Tasarm Admlar ......................................... 154 Bir Site Tasarlarken ............................................... 156 Bir Web Sitesinin Tutulmasn Salayan Etkenler ....... 158 Tantm ............................................................. 159 Kullanc Dostu Tasarm....................................... 160 Eriilebilirlik ....................................................... 160 Kaliteli erik ..................................................... 161 Geri Besleme ..................................................... 161 Php Programlama Dili ............................................ 162 Php Programlama Dili ............................................ 162 Php Dilinin Gemii ............................................. 162 Neden PHP ........................................................ 164 Interaktif Web Sayfalar Hazrlamak in Yntemler 165 PHP ve ASP Karlatrmas .................................. 167 PHP ve Cold Fusion Karlatrmas ....................... 169 PHP Dilinin Kapasitesi ......................................... 169 PHP Nasl alr ................................................. 170 PHP Dili ve Veritaban Programlar ile likisi ............. 172 PHP Dilinin Geniletilebilirlii .................................. 175 Baz PHP Ktphaneleri ve ilevleri ....................... 175 6
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 Programmz Merhaba Dnya .................... 182 PHP KOD YAZIM KURALLARI ................................... 182 Aklama (Yorum) Satrlar ..................................... 187 PHP ile Ekrana kt Verme ..................................... 189 echo() fonksiyonu-(Ekrana yazdrma) ................... 189 print() fonksiyonu (Ekrana Veri Yazma) .............. 190 Escape Kodlar .................................................... 191 Deiken Nedir ? ................................................ 192 Deiken Trleri ................................................. 195 Alfanmerik Deikenlerin eriine Dizi Olarak Erime ....................................................................... 196 Diziler (Array) .................................................... 197 ok Boyutlu Diziler ............................................. 198 Dizi Tanmlama Kurallar ..................................... 199 Nesneler (Objects) ............................................. 200 Sabit Deerler - Constants .................................. 201 define ("SABIT_ADI", deeri); ............................. 202 Operatrler .......................................................... 204 Aritmetik Operatrler: ........................................ 205 Birleik Atama Operatrleri.................................. 207 Bir Arttrmak veya Azaltmak iin .......................... 208 Kontrol Bloklar ve Karlatrma Operatrleri ............. 208 Karlatrma Operatrleri ...................................... 208 lem ncelii Sralamas .................................... 211 if komutu ............................................................. 212 7
if-endif Kullanm ve PHP ile HTML Kodunu Ayrma .. 215 Endif .............................................................. 217 switch komutu ...................................................... 217 Tek Koula Gre ki Sonu - l Operatr (Ternary Operatr)............................................................. 220 Dng Kavram ..................................................... 220 For Dngs ...................................................... 221 While Do Dngs .............................................. 223 Do While Dngs .............................................. 223 For .. Each Dngs ........................................... 225 Dngy Krmak iin Break Komutu ..................... 226 Dngy Devam Ettirme : Continue ..................... 227 Dng inde Dng Kullanm ................................ 228 Dng ve Kontrol Bloklarnda PHP ve HTML ie Kullanm .............................................................. 229 Baka Bir Dosyay thal Etme ................................. 230 include() fonsiyonu............................................. 231 require() fonksiyonu ........................................... 231 include_Once ve require_Once ............................. 231 include() ve trevlerindeki gvenlik a .............. 233 include() ile Kodun Yeniden Kullanm ................... 234 HEREDOC Nedir ................................................. 235 Fonksiyon Kavram ve Kategorilere Gre PHP Fonksiyonlar ........................................................ 236 Deikenlerle lem Yapan Fonksiyonlar ................ 237 isset() fonksiyonu (deikene deer atanm m kontrol etmek) ................................................ 237 unset() fonksiyonu (deikeni hafzadan atmak-yok etmek) ........................................................... 238 empty() (Deiken bomu) ............................... 238 is_string(), is_integer(), is_double() fonksiyonlar ile tip tespiti........................................................ 239 8
print_r () fonksiyonu........................................ 240 Deiken Tiplerini Dntrme ve Deiken Tipini renme ........................................................ 241 gettype() fonksiyonu (Deiken tipini alma)....... 242 settype() fonksiyonu (deiekene bir tip atama) . 243 Dizilerle lem Yapan Fonksiyonlar ..................... 245 array_merge() fonksiyonu- (Dizileri birletirme) .. 246 array_push() fonksiyonu(Dizilere deiken ekleme) ..................................................................... 246 array_shift() fonksiyonu(Dizinin ilk elemann silme) ..................................................................... 247 array_slice() fonksiyonu (Diziden kopyalama) .. 247 sort() ve rsort() fonksiyonlar-(Dizileri sralama).. 248 asort() ve ksort() fonksiyonlar-(likili dizileri sralama) ....................................................... 248 Program Durdurma Fonksiyonlar ............................ 249 exit() fonksiyonu (kodun almasn durdurmak) ... 249 die() fonksiyonu (kodun almasn durdurmak) .... 249 eval() fonksiyonu (kodun almasn 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 (saylardan tarihi oluturma) ..................................................................... 256 checkdate() fonksiyonu-Tarih geerli mi ............. 257 9
setlocale() fonksiyonu (blgesel ayarlar) ............ 257 Tarih Bilgilerini Trke Yazdrmak ...................... 258 getdate() fonksiyonu (tarih zaman bilgisini alma) 259 Matematiksel lemlerde Kullanlan Fonksiyonlar Ve levleri .......................................................... 260 ceil() fonksiyonu (yukar yuvarlama).................. 260 floor() fonksiyonu (aa 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 sayy vererek rastgele say retmek) ......................... 262 getrandmax() ve mt_getrandmax() fonksiyonlar (retilebilecek en yksek say) .......................... 263 abs() fonksiyonu (mutlak deer) ....................... 263 sqrt() fonksiyonu (karekk alma) ...................... 263 pow() fonksiyonu (s alma) .............................. 263 hypot() fonksiyonu (hipotens hesaplama) ......... 264 log() fonksiyonu (logaritma) ............................. 264 log10() fonksiyonu (logaritma).......................... 264 base_convert() fonksyionu (saynn tabann deitirme) ..................................................... 264 bindec() fonksiyonu (desimal dzene evirme) .... 265 decbin() fonksiyonu (Onluk dzenden ikilik dzene evirme) ........................................................ 265 dechex() fonksiyonu (16 lk dzene evirme) ...... 265 decoct() fonksiyonu (8 lik dzene evirme)......... 265 hexdec() fonksiyonu (Hex dzeninden ikilik dzene evirme) ........................................................ 265 octdec() fonksiyonu (8lik dzenden 2lik dzene evirme) ........................................................ 266 max() fonksiyonu (en byk deeri bulma) ........ 266 10
min() fonksiyonu (en kk deeri bulma) ......... 266 Trigonometrik fonksiyonlar ..................................... 266 sin() fonksiyonu (sins) ................................... 266 cos() fonksiyonu (kosins) ............................... 266 tan() fonksiyonu (tanjant) ................................ 266 asin() fonksiyonu (arcsins) ............................. 266 cos() fonksiyonu (arckosins) ........................... 267 atan() fonksiyonu (arctanjant) .......................... 267 deg2rad() fonksiyonu (ay radyana dntrme) ..................................................................... 267 rad2deg() fonksiyonu (ay radyana dntrme) ..................................................................... 267 Metin leme Fonksiyonlar ............................... 268 substr() fonksiyonu (Metnin bir parasn alma) ... 268 chr() fonksiyonu (ASCII kodun karakter karl) 270 ord() fonksiyonu (Karakterin ASCII kodunu bulma) ..................................................................... 270 strlen() fonksiyonu (Metnin uzunluunu bulma) .. 270 count_chars() fonksiyonu (Metin iinde karakterlerin tekrar etme saysn bulma) .............................. 271 str_word_count() fonksiyonu (Metin iindeki kelime saysn bulma)................................................ 271 strpos() ve stripos() fonksiyonlar (Metnin bulunduu pozisyon) ....................................................... 272 strstr () ve stristr () fonksiyonlar (Metnin ilk bulunduu yer) ............................................... 273 wordwrap() fonksiyonu (Metni satrlara ayrma) .. 274 explode() fonksiyonu (Metni blmlere ayrma) ... 274 implode()fonksiyonu (Metni blmlere ayrma) ... 275 strtoupper() fonksiyonu (byk harfe evirme) .. 275 strtolower () fonksiyonu (kk harfe evirme) .. 275 11
ucfirst () fonksiyonu (ilk harfi byk harfe evirme) ..................................................................... 275 ucwords () fonksiyonu (kelimelerin ilk harfini byk harfe evirme) ................................................ 276 number_format() fonksiyonu (Rakamlar ekrana biimlendirerek yazdrmak)............................... 276 strcmp () fonksiyonu (iki metni karlatrma) ..... 277 strcasecmp () fonksiyonu (iki metni karlatrma) ..................................................................... 278 str_pad () fonksiyonu (metnin etrafn bolukla (yada karakterle) destekleme) ................................... 278 printf() ve sprintf() fonksiyonu (biimlendirerek kt verme)........................................................... 279 parse_str() fonksiyonu (get ile alnan deikenleri paralayarak bir diziye atma) ............................ 283 Veri ifreleme Fonksiyonlar ................................... 284 cyript() fonksiyonu (Metni verilen bir anahtara gre ifreleme)....................................................... 284 sha1() fonksiyonu (Metni hash algoritmas ile ifreleme)....................................................... 285 md5() fonksiyonu (Metni MD5 algoritmas ile ifrelem) ........................................................ 286 Dzenli fadeler (REGEXPS).................................... 287 Temel Seviye Regexpler ...................................... 288 Balang Dzeyi Regexpler ................................. 289 st Dzey Regexp fadeleri ................................. 290 En st Seviye (Guru ) Dzeyi Regexp fadeleri....... 292 preg_match() fonksiyonu (metinler eitmi) ......... 294 preg_match_all() fonksiyonu ............................ 295 ereg() fonksiyonu (dizilim arama) ..................... 295 eregi() fonksiyonu (dizilim arama) ..................... 296 12
ereg_replace() fonksiyonu (dizilim arama ve deitirme) ..................................................... 296 split() fonksiyonu (metni paralara ayrma) ........ 297 sql _regcase() fonksiyonu (dzenli ifade retme) 298 Kullanc Tanml Fonksiyonlar Gelitirmek ................ 299 Basit Bir Fonksiyon Yazalm - myecho ................... 299 GLOBAL ve STATK DEKENLER .......................... 302 Dizi Fonksiyonlar .................................................. 305 array() fonksiyonu (deerleri diziye evirme) ...... 305 count() fonksiyonu (dizinin eleman saysn bulma) ..................................................................... 305 print_r () fonksiyonu (deiken ieriini yazdrma) ..................................................................... 305 var_dump () fonksiyonu (deiken ieriini yazdrma)....................................................... 305 Dizileri Sra ile lemek .......................................... 307 list() fonksiyonu .............................................. 307 each() fonksiyonu ........................................... 307 For.. Each ile dizileri ilemek .................................. 307 For ile dizileri ilemek ............................................ 308 PHP ve Formlar ..................................................... 309 Sper Globaller (Superglobals) ............................ 309 Form Dizaynnda Altn 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 Yaylan Formlar ...................... 325 PHP ile Posta Gnderme......................................... 325 13
mail() fonksiyonu PHP ile eposta gndermek ....... 326 Web Sayfasndan Bir Siteye Dosya Ykleme (Upload) 333 PHP SERVER DEKENLER .................................. 336 Kullancnn Girdii Deerlerin Doruluunu Kontrol Etme ................................................................ 338 Windows ve Unix Dosya Eriim Yetkilendirmesi ...... 339 PHP Klasr Fonksiyonlar ........................................ 341 mkdir() fonksiyonu (Klasr oluurmak) .............. 341 rmdir() fonksiyonu (Klasr silmek) .................... 341 chdir() fonksiyonu (Klasr deitirmek) .............. 341 is_dir() fonksiyonu (Dizin mi)............................ 341 opendir() fonksiyonu (Klasr amak) ............... 342 readdir() fonksiyonu (Klasr okumak-listelemek) ..................................................................... 342 closedir() fonksiyonu (Klasr 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 yazlabilir mi? ) .. 348 is_executable() fonksiyonu (Dosya altrlabilir mi? ) ................................................................... 348 touch() fonksiyonu (dosya oluturma) ................ 349 unlink() fonksiyonu (dosya silme) ...................... 350 copy() fonksiyonu (dosya kopyalama) ................ 350 readfile() fonksiyonu (Dosyay satr satr okumak ve ekrana yazmak) .............................................. 350 fopen () fonksiyonu (dosya ama) ..................... 351 fgets () fonksiyonu (dosyadan satr satr okuma) . 352 fseek () fonksiyonu (dosya iinde bir yere konumlanma) ................................................. 352 14
fread () fonksiyonu (dosyadan belirli sayda 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 (Kullanmdaki dosyay kilitleme) ..................................................................... 357 fileadate() fonksiyonu (Dosyaya son eriim tarihi- file access date ) .................................................. 359 filemdate() fonksiyonu (Dosyann son deitirilme tarihi- file modification date) ............................. 359 filecdate() fonksiyonu (Dosyann oluturulduu tarih - file creation date) .......................................... 359 CSV Dosya Fonksiyonlar........................................ 359 fgetcsv() fonksiyonu (CSV dosyasn satr satr okuma) .......................................................... 360 fputcsv() fonksiyonu (Deerleri CSV formatnda yazma) .......................................................... 361 Kullanl Bir rnek Kayt Arama ............................. 362 renci Notlarn Webde Yaynlama ...................... 362 Basit Telefon Rehberi ............................................ 365 Basit Szlk ......................................................... 369 Basit Ziyareti Defteri ............................................ 372 PHP erez - Cookie Fonksiyonlar ............................ 377 setcookie() fonksiyonu (erez brakma) .......... 379 Ayn sayfada birden fazla erez brakmak .............. 383 PHP Dilinde Oturum Kullanm .............................. 384 PHP ve MYSQL Kullanm ........................................ 385 MySQL Nedir ? ...................................................... 386 Veritaban ve Tablo Nedir ....................................... 387 15
Mysql Tablo Tipleri ................................................ 387 Mysql Veri Tipleri ............................................... 387 Metin tipleri .......................................................... 388 CHAR ve VARCHAR Fark ........................................ 388 BLOB ve TEXT Alanlar ...................................... 389 Saysal Veri Tipleri ................................................ 389 Tarih / Zaman Tipleri ............................................. 390 Kme Tipi ............................................................ 391 Tablo Tasarlama, Key Ve ndex Kullanm ................. 392 MYSQL i Komut Satrndan Ynetmek ................... 395 Mysqli Balatmak .............................................. 395 Komut Satrndan Veritaban Oluturmak .............. 395 Komut Satrndan Tablo Oluturmak ..................... 395 Komut Satrndan Veri Girii ................................ 396 Komut Satrndan Veri Sorgulama ........................ 396 Komut satrndan Bilgi Deiiklii Yapmak ................ 397 Komut Satrndan Kayt Silmek ............................... 398 SQL Dilinin Tarihesi.............................................. 399 likisel Bir VTYS in 12 kural ................................ 400 SQL Dilinin Blmleri ............................................. 403 A. DDL (DATA DEFINITION LANGUAGE) KOMUTLARI ....................................................................... 404 B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI ....................................................... 404 Veritaban iindeki semek, deitirmek, gncellemek 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
CREATE komutu tablo ve view gibi bir veritaban nesnesi yaratmay salar. (Create ayrca yeni veritabanda oluturabilir.) ....................................................... 406 Mysqlde stun adlarn snrlamak iin ` karakteri kullanlr. Normalde bu verilmedende ilem yaplr. normal SQL nostasyonlarnda bu karaktere gerek yoktur. .......................................................................... 406 Kullanm Yaps: ................................................. 406 ALTER DEYM................................................. 407 Daha nce yaratlm nesnenin deitirilmesini salar. rnei bir tablonun tasarmn deitirmek gibi. ........ 407 ALTER TABLE ders01a ADD msn VARCHAR( 40 ) NOT NULL ; ................................................................. 407 DROP DEYM ................................................. 407 Bir nesnesin silinmesini salar. ............................... 407 DROP TABLE ders01a ............................................ 408 B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI ....................................................... 408 SELECT DEYM ............................................... 408 Temel Kullanm: ................................................... 408 Parametrelerin Anlamlar: ................................. 409 AS Deyimi ile Alias Tanmlama ................................ 411 Where Deyimi....................................................... 412 And ve Or ile Birden Fazla Koulun 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 Operatrleri ................................... 418 Aggregerate fonksiyonlar ...................................... 419 sum() fonksiyonu Bir stunun toplam ................ 419 17
Bir stuna gre bir select ifadesinin toplamn alr. .... 419 avg() fonksiyonu Bir stunun ortalamas ......... 420 min() fonksiyonu Bir stundaki en kk deer 420 max() fonksiyonu Bir stundaki en byk deer ..................................................................... 421 count() fonksiyonu Bir sorguya gre dnen kayt says ................................................................ 422 JOIN LEM ......................................................... 422 INNER JOIN ....................................................... 423 LEFT JOIN ......................................................... 424 RIGHT JOIN ...................................................... 424 TABLOYU KENDS LE LKLENDRME (SELF JOIN) ....................................................................... 424 E SELECT NESTED SELECTS .......................... 425 UNION KULLANIMI ................................................ 425 EXISTS KULLANIMI ............................................ 426 C. DCL (DATA CONTROL LANGUAGE) DEYMLER ...... 426 GRANT DEYM .................................................. 426 GRANT CREATE DATABASE, CREATE TABLE .............. 426 TO aye ............................................................... 426 SQL FONKSYONLARI ............................................ 427 Metinlerle lem Yapan SQL Fonksiyonlar .............. 427 ascii() fonksiyonu ................................................. 427 char() fonksiyonu ............................................ 427 concat() fonksiyonu ......................................... 428 length() fonksiyonu ......................................... 428 Dntrme Fonksiyonlar ...................................... 428 conv() fonksiyonu ........................................... 428 bin() fonksiyonu .............................................. 428 oct() fonksiyonu .............................................. 428 hex() fonksiyonu ............................................. 428 Tarihlerle lem Yapan SQL Fonksiyonlar .............. 429 18
TABLOLARDA DEKLK YAPMAK: ........................ 431 INSERT Komutu .................................................... 431 UPDATE Komutu: .................................................. 431 DELETE DEYM .................................................... 432 Kullanm biimi: .................................................... 432 DELETE FROM tablo ............................................. 432 PHPMYADMIN ....................................................... 434 PhpMyAdmin Kurulumu ....................................... 435 PhpMyAdmin'i altrma ve Tanma ..................... 436 PhpMyAdmin ile Database Oluturma .................... 438 PhpMyAdmin ile Tablo Oluturma ......................... 438 Bir Veritabannn Modelini karmak ..................... 440 MySQL ve PHP ...................................................... 442 PHP Dili Mysql Fonksiyonlar Tablosu ..................... 443 mysql_connect() deyimi(Database balants) ..... 446 mysql_select_db() deyimi................................. 447 mysql_query() fonksiyonu- Mysqle sorgu gndermek ..................................................................... 448 mysql_numrows() fonksiyonu-Sorgudan Dnen Kayt Saysn Bulmak............................................... 448 mysql_result()-Sorgudan Dnen Kaytlar lemek449 Kaytlar Ekrana Listelemek ............................... 449 Deikenleri Sorgularn inde Kullanmak ........... 450 mysql_fetch_assoc() fonksiyonu- sorgu sonucundan bir satr almak ................................................ 452 mysql_error() fonksiyonu- MySQL hatalarn konrol etmek ............................................................ 452 PHP ile Veritaban Oluturma Listeleme ve Silme . 453 PHP ile Tablo Oluturma, Listeleme, Gncelleme ve Silme ................................................................ 455 PHP ile Tablolara Veri Girii, Listeleme, Gncelleme ve Silme ................................................................ 457 19
rnek Uygulama: PHP ile ifreli Giri Sayfas Yaplmas .......................................................................... 460 PHP ve GVENLK ................................................. 473 addslashes() fonksiyonu (metindeki zararl olabilecek karakterleri etkisiz yapmak) ............................. 476 stripslashes () fonksiyonu (etkisizletirilmi kodlar ilk haline dndrmek) ............................................. 476 strip_tags () fonksiyonu (HTML etiketlerini metinden karmak) ......................................................... 477 PHP ile Header Kullanm ........................................ 478 header() fonksiyonu-(Balk bilgilerini kullanmak) .. 478 Bir Nesne Oluturalm ............................................ 483 PRATK BLGLER .................................................. 487 Resim Albm: .................................................. 487 Giri sayfas yapmak .......................................... 490 Sayfada Tarih Yazdrma ......................................... 491 CMS Sistemleri ..................................................... 495 DER SRME DAR NOTLAR ................................ 498
20
GR
Son yllarda internet denen olgu hayatmzn iine yle bir girdi ki artk kmas mmkn olmayacak noktay bile oktan geti. nceleri fantazi yada prestij olsun diye web sitesi yaptran irketler artk bunu zorunluluk olarak grmeye baladlar. Bir ok firma teklif mektuplarn elden yada kada baskl gnderen irketleri dorudan elemeye balad. Internet denen eyle 1992 de tantm. Daha dorusu internet denen sanal dnya ilk tanmamzda sanal olarak gerekleti. Arkadalarla baz niversitelerin yurt dna dorudan balanabildiini konumutuk yani hepsi bu. 1995 ylnda ukurova niversitesinin internet kursuna katldm. Ftp, ls, sz gibi komutlar renmi ne de ok sevinmitim. Ardndan srekli takip ettiim dergilerde, her ey internet, web tarayc, Netscape, Frontpage , Outlook, ICQ, IRC gibi balklara kmaya balad. 1998 ylnda ilk resmi iime baladktan bir sre sonra irketin ilk internet sitesi iin benimde HTML renmem gerekmiti. Bende Joe Bartann yazd cretsiz HTML renme setinden faydalanarak bugnk artlarda yzne bile bakmayacam ilk sitemi yapmtm. Derken Hakk cal stadn kitapklar kmaya balad. HTML, Javascript, PHP Hatta kendisi ile yazan Daphne rumuzlu arkadam sayesinde birka kez e-mail gnderip yazmlmzda oldu. Bu vesile ile bugnlerde ok sk kullanlan web sitesi olmayana kz vermiyorlar 21
lafn ilk kez ben bir emailimde yazdm Hakk Hocama. Patenti bana ait olsa gerektir ama kimse takmaz sanrm. Etrafta ynla ngilizce kaynak varken neden Trke bir kaynak sorusu beni hep zmt. Hakk cal stadn kitapklar bir a doldurmutu evet ama onlarda yzeyseldi sonuta. in asl kt taraf kaynak yerinde sayarken PHP ok yol katetmiti. sim zikretmek istemiyorum ancak para verip aldm orijinal kitaplarda son derece yzeysel konular, son derece yetersiz bir anlatmla verilmiti. Yabanclara baktmda kendimize kzmaya balyordum. Mesela Paul Hudsonun online kitab bizde yazlm btn kitaplardan kat be kat iyiyken, web sitesinde bedava yaynlanmaktayd. Bruce Perensin kitaplar da ilk ylda parayla satldktan sonra PDF halinde bedava veriliyordu. Bense para verip aldm Trke kitaplarda merak ettiim basit eyleri bile bulamyordum. Sonuta i baa dt ve 2007 ylnda yazmaya baladm notlar, 2008 ylnda bu kitabn ilk taslana dnt. Ancak uzun bir sre ilgilenme ansm olmad. Artk daha fazla yle kalmasna gnlm raz olmad ve sk bir alma ile yaynlamaya karar verdim. eitli kaynaklardan esinlenmeler olduunu ilk bata yazmtm. Bata dediim gibi bu materyaller iin maddi beklenti iinde deilim, ancak kullanm konusunda eitli snrlar da getirmek zorundaym. nk onca emek harcadktan sonra bazlarnn bunlar kaynak bile gstermeden kendilerinmi gibi sahiplenmesi ayp tesi bir durum olurdu. 22
Kullanm Kurallar
1. Bu almann tamam veya bir ksmn kaynak belirtmeden yaynlamanz, almamm sahiplenerek kendinizinmi gibi sunmanz yasaktr. Kaynak belirterek yaptnz alntlar bir e-mail ile bildirirseniz sevinirim. 2. almamzdaki yaz ve rnek kodlar ticari amala satlan bir kitap iin kullanamazsnz. Ticari olmayan almalarnzda ise alnt yapma kurallarna uymanz gereklidir. 3. Bu almay tamamen renciler ve renmek isteyenler bir eyleri aratrmak istediklerinde bir kaynak bulabilsinler diye, maddi bir beklenti olmadan hazrladm. Beni tevik edecek bir mail, bir teekkr, siteme verilmi bir link bu konudaki evkimi artracaktr. 4. Bu alma iin harcam emek hakk iin; unu da hatrlatrm ki: Koyduum kurallar haricinde davranp emek hrszl yapanlardan hakkm, br dnyadaki hesaplamada talep edeceim. 5. Emek hrszlarna kar yasal haklarm sakldr. Bu yasal meyyideler konusunda sizi nceden uyarmak gibi bir zorunluluum yada lksm yoktur. Umarm yararl bir eyler ortaya karmmdr.
23
HTML DL
Atas olan ARPA-NET ve daha sonra adeta a deitiren Internet amzn en byk ktphanesidir. Bu bilgiler dei toku edilirken herkesin ortak bir dilden konumas gerektiinden buna bir are arayan uzmanlar , 1986da, Standart Genelletirilmi aretleme Dili (Standart Generalized Markup Language, SGML) adyla bir protokol dili- ortaya kardlar. Daha sonra ise gnmzde hala gelitirilen HTML protokolu zeri bir standart oldu. Burada dil derken bir ayrma dikkat etmek gerekir. HTML bir dildir ancak bu dil makineye komut veren deil sadece bilgiyi grntleyecek olan bilgisayar programna yaznn urasn kaln yap, burada tablo yaplacak, kenarlkl olacak, bu ksm bir pragraf gibi komutlar veren bir dildir. Bu bakmdan HTMLnin bir betik dili olduu hatrlanmaldr. HTML, nceleri Macintosh, ardndan IBM uyumlu bilgisayarlarn yardm dosyalarnn oluturulmasnda kullanld. Ancak, HTML ksaltmasnn ak ekli olan Hypertext Markup Languagede geen Hypertext terimi, 1950 ylnda Ted Nelson adl bir bilgisayar uzman tarafndan iinde hot yani baka bir metinle veya resimle ilintilendirilmi noktalar bulunan metin anlamna kullanlmt. Apple bunu bir metne yada simgeye tklaynca baka bir yere gitme yntemi olarak kulland. Bylece metinler hareketli gibi davranm oluyordu. Asl aama ise 1989 ylnda yaand. CERN uzmanlarndan Tim Berners-Lee, laboratuvar ynetimini ortak bir yaz biimlendirme sistemine ikna edebilmek 24
iin, Enformasyon Ynetimi: Bir neri balkl bir rapor hazrlayarak bilgisay ebekeleri arasnda bilgi alverii iin Hypertextin ortak bir dil olmasn nerdi . Dorusu imza att devrimi kendisi bile hayal edememi olsa gerek. Bugnk Interneti Internet yapan iki ana balk vardr. Birincisi bilgisayar aras iletiimi gerek zamanl olmaktan kartan ve iletiimi daha salam hale getiren HTTP balant protokolnn gelitirilmesi; dieri ise HTML dilinin ok yaln ancak resim, ses, video gibiher materyali tamaya yetecek kadar gl olmasdr. A teknoloji 1980lerin balarnda balantnn gerek zamanl olmasn gerektiriyordu. Internetin ad da alararas a anlamna gelen ngilizce Inter-networksnetwork: Inter-net ksaltmasndan domutur. Bir bilgisayar dierine balandnda iletiim gerek zamanl ve birebir olma durumundayd. Gnderilen ile alnan bilginin ayn olup olmadn kontrol etmek ancak byle mmknd. HTTP (Hypertext Transmission Protocol-Hyper Metin letim Kurallar) bunu ortada kaldrd. HTTP protokoln bir otobann ve yannda uzayp giden bir otoyol ifti gibi dnlebilir. Otoban bakmda ise otoyoldan iinize devam edebilirsiniz. HTTPnin , 1990 ylnda kurulan World Wide Web Konsorsiyomunun (W3C) tarafndan resmi standartlar kabul edildi. Bu yzden 1990 bugnk Internetin de doum tarihi olarak kabul edilebilir. W3C srekli olarak http ve HTML iinde bulunan eksiklikler iin ortak standartlar belirlemekte ve bunlar duyurmaktadr.
25
Web ortamnda alan dinamik dillerin, HTMLin pabucunu dama att sylense de bu doru deildir. nk dinamik diller kullancnn tarafnda deil sunucu tarafnda almaktadr. Yani dinamik dilin ASP veya PHP yahut JSP olmas fark etmez nk kullanc hep HTML verisi almaktadr.
simleri tahsis etmek ve akmalar nlemek zere Domain Register ii yapan irketler kurulmutur. Bunlarn ii uygun bir alan adn belirli bir cret karl kullanclara kiralamaktr. Kiralama ilemi ile birlikte bu alan adnn internette hangi IP no zerinde olduuda burada kayt altna alnr. Bir sitenin eriilebilir olmas iin DNS bilgisayarnda IP ile aa bal bir bilgisayar olmas gerekir. Bu kendi bilgisayarmzda olabilir ancak bu sistemlerin gerek sunucu olmas ilemlerin aksamasn engelleyeceinden ve bu sunucularda bizim iin hayli masrafl olacandan yeni bir ikolu domutur. HOSTING dediimiz bu i kolunun ana amac kullanclarn web sitelerini kendi sistemlerinde yaynlamak ve bunun karlnda cret almaktr. Hosting irketleri sunucu bilgisayarlarna Web server ad verilen bir program kurarlar. Bu program ise 80 nolu portu dinleyere kendisine balanan kiilere istedikleri dosyalar iletir. Web server ile kullanc TCP/IP iletiim protokol zerinden konuurlar. Kullanc Web Server programna kendisine kurulu olan ve Browser (Web tarayc, Gezgin) ad verilen programlar ile 80 nolu http portundan balanr. Kullanclar ile Web server arasnda kpr olarak ise internete karmak zere Internet Servis Salayc (ISS- Ingilizcesi ISP Internet Service Provider) yer almaktadr. Zaten gerek zamanl iletiimi gereksiz klanda bu ilemdir bir nevi. 27
Kullanc rnein www.tcmb.gov.tr yazdnda browser bu talebi ISS te baland bilgisayara iletmekte, o da gerekli arama ileminden sonra bilgiyi talep etmektedir. te bu aamada kullanc balanty kesse bile web server bunu bilmemektedir. Zaten bilmesine de gerek yoktur. Web sunucu HTML metni ( ierik ve o ieriin ekranda nasl gsterileceine dair biimlendirme bilgileri) gnderir ancak metni biimlendirme ilemi kullanc tarafndan yer alan browser tarafndan yerine getirilir. Browserlar ite bu yzden HTML yorumlama motoru denilen engine barndrrlar. Her yorumlayc farkl mantkla ve ayr firmalar tarafndan yazldndan baz metinlerin ekranda grntleme ileminde farkllklar oluabilir. Ayrca bazen irketler sadece kendi taraycsna ynelik etiketleri stelik W3C tarafndan onaylanmadan motoruna ekleyebilir. rnein BLINK etiketi NETSCAPE O yzden site tasarmnda ne ok bu konuya dikkat edilmelidir. Dolays ile BLINK kullanlan bir sayfa Netscape ile normal grnrken, Safari ile farkl grnecektir. En byk ansmz ise tarayclar hatal bir etikete rastlaynca bunu gz ard ederek geri kalanlar altrmaya devam etmesidir.
.com -Ticari irketlere ait alan adn belirtir .edu -Eitim kurumlarna ait alan adn belirtir .gov -Hkmet ve devlete ait alan adn belirtir .mil -Askeri alan adn belirtir .net -A servis salayclarna ait alan adn belirtir .org -Dernek, spor kulb gibi organizasyonlara ait alan adn belitir
TCP / IP
Transmission Control Protocol / Internet Protocol Kelimelerinin ba harflerinden oluan Paul Baran tarafndan dnlm bir sistemdir. Paul Barandan talep edilen ey uydu. A,B,C ehirlerinde bilgisayarlarmz var, A,B,C birbirleriyle konuabilsin, bilgi gnderebilsin, ama A devre d kalsa bile B ve C konumaya devam edebilsin, bu dierleride iinde geerli olsun. Paul Baran bu i iin paket anahtarlamal a iletiimi tekniini dnd. nk istenen ey verinin iletilmesiydi. Her koul ve art altnda bile verinin iletilmesi birinci ncelikti. (lk ncelik gvenlik olmad iinde bu gn gvenlik anlamnda bir sr ekstra yatrma vs gerek duyulmakta). Veriler paketlere blnecek ve hedef yerde bu paketler birleince verinin kendisi olumu olacakt. Paul Baran daha sonra A,B,C lokasyonlarnn nkleer fze merkezleri olduunu rendiinde aslnda gelitirdii eyin ne olduunu anlamt anlamasna da bilmeden de olsa internetin ilk ncs de olmutu. Ksaca TCP / IP protokol de 29
phesiz ilk olarak askeri amal gelitirilen bir protokold ve temel amac bir nkleer sava annda tm telefon ebekesi yok olsa bile biz iletiimi devam edip kar tarafa nkleer saldr ile cevap verebilelim. 1983 ylnda TCP / IP ye temel hali verildi. TCP / IP protokol Unix iletim sistemine eklenmi ve 1984 ylnda DNS kavram oluturulmutur. Gnmzde internet hayatn iine yle girmitir ki, TCP / IP sadece internetin deil tm a protokollerinin arasndan en ok kullanlan durumuna ykselmitir. PORT TCP / IP de her bilgi bilgisayarlar arasnda portlar zerinden iletilir. letim iin geilen yol ayn olsada bilgilerin doru adrese gitmesi iin portlarn kullanm arttr. Bir gazete datcsn dnn. Datm kanal hep ayndr. Sokaklar. Ancak gazetelere doru yerlere ulatrmasnn tek yolu adreslerdir. Yani kap numaralar. HTTP ilemleri iin 80 nolu port kullanlr. Mail alp gnderme iin 25 ve 110 nolu portlar kullanlr. MSN, ICQ, IRC, FTP vs vsvs tm yazlmlarn ayr bir port kullanm vardr. TCP /IP veriyi iletirken bana portu da kaydettiinden, o paketin hangi yazlm iin olduu bilgisi de otomatikman iletilmi saylabilir. Bylece bilgisayarda ayn anda bir ok yazlm ile internet kullanlabilmektedir.
Web Server
Internette tanml bir alan adna karlk gelen bir numara (IP numaras) vardr demitik. Bu IP nolu bilgisayar sayfa 30
gelen kiilere istedikleri bilgileri gnderebilmek iin hep ak olmak zorundadr. Ayrca bu bilgisayarda gelen talepleri toplayp onlara cevap verecek bir de program ykl olmaldr. Web server aslnda hem bu ilere yarayan programlara hemde bu programlarn kurulduu bilgisayarlara verilen bir isimdir. Kafa kartrc olabilir ama ama iki tanmda dorudur. En ok bilinen Web Server programlar Apache, MS Internet Information Server (IIS), Xitami gibi yaygn sunuculardr. Bu programlarn, bilgi alp-vermenin yan sra, elektronik posta alp verme ve ynlendirme, veritabanlarna erime ve iinden seme yapma (Query, SQL, vb. gibi), kendi sabit diskinde duran bir dosyay alp kar tarafa aktarma (FTP, Gopher, WAIS) veya kar tarafn verecei dosyay alp kendi sabit diskine kaydetme yetenei olur. lk Web Server program, yukarda, HTML dilinin gelitirilmesindeki nc konumu nedeniyle szn ettiimiz, sviredeki CERN kurumu tarafndan gelitirildi; ama ksa zamanda UNIX platformunda, anonim bir tarzda ve cret demeden kullanlabilen bir ekil ald. Kiisel bilgisayarlarn UNIX gerektiren bilgisayarlara oranla daha ucuz olmas, Microsoftun NT, IBMin OS/2 iletme sistemlerinin UNIXe cidd rakip haline gelmi bulunmalar nedeniyle, bu sistemlere dayal Web Server programlar da hzla artmaktadr. Apache Web Server ise bir ok iletim sisteminde alabilmesi ve cretsiz olmas nedeniyle Linux ile birlikte iyi bir ikili olmu ve Internette en ok kullanlan 31
olma
zelliini
ak
ara
ile
elinde
Apache
Ak kaynak kodludur Bir ok iletim sisteminde alabilir (hatta bir ok sistemde zaten kurulu halde gelir) Tamamen cretsizdir
IIS
Kaynak kodu kapaldr. Windows iletim sisteminde alr. cretsiz deildir.
Linux ve FreeBSD adl, cretsiz datlan UNIX iletme sistemleri de, ticar olanlar aratmayacak niteliklere sahiptir. Ayrca bu tr cretsiz programlar, Apache Web Servern cretsiz srmn de ierdiklerinden sfr maliyet ve kurulum ile web server edinmek mmkndr.
Bir Web Server yazlm paketi seerken dikkat edilmesi gereken bir ka ilkeyi sralayalm:
1. Yazlm paketi yeterli gvenlii salayacak zelliklere sahip olmaldr. Binalarda bir odadaki yangnn yandaki odaya sramasn nleyen atee dayankl duvarlardan (Firewall) esinlenerek adlandrlan bir dizi program, Web Server yazlmnn bulunduu bilgisayarn, kt niyetli kiiler tarafndan bozulmasna engel olmaktadr. Ancak Web Servern kendi iinde mevcut gvenlik 32
nlemlerinin neler olduunu dikkatle aratrmanz gerekir. Bunuda tarafsz bir gzle yapmak gerekir rnein ou kii iin Unix ok gvenli, Windows ise berbattr yada bunun tersi dnlebilir. Oysa bu bir takm tutma olay deild,r ve nyargl olmak yanltr. Asl gvensiz olan sistem deil sistemin banda oturan sistem yneticisidir. Ynetici ne kadar dikkat ederse sistemde o kadar gvende demektir. Burada nemli olan, Internete almann, iyi niyetli-kt niyetli herkese almak olduunu unutmamaktr. zellikle form denilen, HTMLin ziyareti bilgisayarn evsahibi bilgisayara talepten baka eyler gndermesine imkan veren etiketlerini ve ona bal CGI (Common Gateway Interface-Ortak Geit Arabirimi) ad verilen ziyaretinin ev sahibi bilgisayardaki programlar harekete geirebildii buluma noktasnda yer alacak programlar tasarlarken, daima ktniyetli kiileri dikkate alarak hareket etmek gerekir. Internette gvenliin ne kadar kolay sarslabildiine ve ne kadar kolay nlem alnabileceini bir rnek verelim. Sayfanzda, ziyaretinin doldurmas gereken Elektronik Posta Adresiniz: diye bir metin kutusu bulunduunu dnn. Bu kutuya btn ziyaretilerin elektronik posta adreslerini yazacaklarn dnyor ve bu bilgiyi ileyecek CGI programnda, ziyaretinin bu kutuya yazaca bilgiyi, alp doruca Web Servern Mail programna veriyorsunuz. Peki, ya kullanc adres yerine;
33
benhacker@hacklendin.com; mail hacker1@hacker.com</etc/passwd yazarsa? Bu yaptnz basit ama lmcl hata sonucu, forma girilen bu adrese, bilgisayar sisteminizdeki btn password-parola dosyalar email ile gnderilecektir. Oysa, program yazan kii, elektronik posta adresini Mail programna gnderirken unless ($mail_to = ~/^[\w.]+\@[\w-.]+$) eklinde bir satrla, girilen bilgideki karakterleri kontrol etse sorun halledilebilecektir. 2. zel Bilgilerin Korunmas ve Dorulatma: Web hizmeti sunan kii, sadece bakalarnn kendi bilgisayar sisteminde arzu edilmeyen eyler yapmalarn nlemekten deil, ayn zamanda kendisine emanet edilen bakalarna ait bilgileri de saklamak ve bakalarndan korumak zorundadr. Bu bilgiler, ziyaretinin ad, elektronik adresi, hatta kredi kart numaras olabilir. Bunlar, sizin Internette izdiiniz portreye gvenilerek size verilmi mahrem bilgilerdir. Ziyareti bu bilgileri size, ktye kullanlmayaca gvencesiyle vermektedir. Ayn balamda, Web hizmeti sunan kii olarak, sizin de bu bilgilerin kolayca ve bakalarna ak hale getirilmeden dorulatlmasna ihtiyacnz olacaktr. Web Server programnz, rnein kredi kart numarasn, yeni programlar edinmeye ihtiya kalmadan dorulatabilmelidir. 3. Web Server, siteye yaplan ziyareterin kaydn uygun ekle kayt altna almaldr? rnein sayfanza ka kii uram, sitenizin en ok hangi sayfas 34
grntlenmi, en ok hangi dosya indirilmi, han gisteden sizin sitenize en ok ziyareti gelmi bunlarn bilinmesi nemlidir. zellikle elektronik ticarete dayal veya mesajn daha ok sayda kiiye iletmek amacyla hazrlanan Web alanlarn iletenlerin, sayfalarnn varln duyurmak iin, mmkn olan her yoldan yararlanmalar gerekir. ok nemsiz gibi grnebilir ama Google ierik ile reklam birletirmeyi akl eden reklam yaps u anda alannda dnyann en by olmay baarm bir irket. rnei sitenize gelen ziyareti eer mobilya hakknda bilgi aryor ise belkide mobilya almaya niyeti vardr bu durumda ona mobilya reklam gsterilmelidir te bu forml Google irketini bir numara yapmtr. 4. Web Server programyla ilgili teknik destek ve sorun zme hizmeti alp almamak, programn seiminde belki de en nemli unsur saylabilir.
bitmemektedir. oumuz ulatmz bir alann adresini Web tarayc programnda sk sk ziyaret etmek istedii yerlerin arasna koyabilir (bookmark) ve arzu ettii zaman doruca iaretlenmi olan bu adreslere gidebilir.
zelliklerini
yle
1. Belge biimlendirme: HTML, Web tasarmcsna, belgelerini ziyaretinin ekrannda nasl olumasn istiyorsa yle ekillendirme imkan verir. 2. Bununla birlikte tarayc programlarnn HTML komutlarn yorumlaylarnda az da olsa fark vardr ve bu fark sayfalarnzn bir ziyaretinin bilgisayarnda bata, dierinin bilgisayarnda baka gsterilmesine yol aabilir. Ayrca ziyaretileriniz, tarayc programlara verdikleri komutlarla, aldklar sayfalarda genel deiiklik veya kstlamalar yapabilirler. Siz sayfanzda ne tr harf tr (font) kullanm olursanz olun, ziyaretiniz tarayc programa Sadece Times fontlar kullan demi ise, sayfanz bu ziyaretinin ekrannda sizin istediinizden farkl biimde grlecektir. Ziyareti tarayc programna Grafik unsurlar gsterme! demi ise, sayfalarnz ve tabi vermek istediiniz grsel mesaj tamamen farkl bir nitelik kazanacaktr. Bu duruma ramen, bugnk ekliyle HTML, Web tasarmcsna adeta bir gazete ya da dergi sayfas tasarlarcasna, oluturmak istedii grsel etkiyi salamasna yeterli tasarm aralar sunmaktadr. 36
3. lk ktnda web sadece duraan sayfalarn aktarld bir yer iken bugn canl yayn radyo ve tlevizyonlara varncaya kadar hayatmza grmitir. Bununla birlikte HTML, bir kelime ilem ya da masast yaynclk programnn oluturabilecei grsel zelliklere sahip sayfalar oluturamaz. Bu kstlamalara, Interneti tasarlayan uzmanlarn, platformlar (Windows 3.x, Windows 95/98, Windows NT, Unix, MacOS), donanmlar (Macintosh, PC, Sun) ve tarayc programlarn hepsi tarafndan doru ekilde anlalabilen bir platform oluturma istei sebep olmaktadr. HTML, dililinin hassas lmelere ve biimlendirmelere izin vermemesi HTML iin eksiklik deil bilinli bir tercihtir. nk bu durumda ancak belirli platformlarda alr duruma gelecekti. HTML dilinin platformdan bamsz olmas adna bu yol seilmitir. 4. HTML ile oluturulacak statik alanlarn iine dinamik sonular douracak programlar konulabilir. Bu dillerle HTML sayfalarn duraganlktan kartmak ve ziyareti ile etkileen, ziyaretinin arzu, beeni ve zelliklerine gre ieriini deitirebilen Web alanlar tasarlamak mmkndr 5. Webde bulunan aa yukar btn ierik yani metin, ses, video tr mer materyal sanat eseri kabul edilmektedir. Ksaca telif hakk ve bu hakka sahip birisi vardr. Dolays ile telif hakk size ait olmayan veya sahibi tarafndan size izin verilmeden bir sanat eserini yaynlayamazsnz. 37
Bir sanat eserini Web sayfanza koymak ve kamuoyunun ulaabilecei Internet gibi herkese ak bir ortama yerletirmek, yasalarn yayn sayd bir fiildir. zinsiz sanat eseri yaynlamak ise, Trk Ceza Yasasna gre ar hapis cezasyla cezalandrlan bir sutur. Ceza yasalar olmasada bu ahlaki bir sutur.
38
Web Tarayclar
Bir Web tarayc kullancnn yazd adresi yada tklad linki ilgili web serverdan talep eden varsa dnen bilgiyi iinde tanml motor ile yorumlayp ekran grntsn oluturup ekranda gsteren yazlmdr. Burada ok dikkat edilmesi gereken nokta udur. Her taraycnn yorumlayc motoru farkl kiiler tarafndan gelitirildii iin haliyle her komutu ayn ekilde yorumlamalar beklenemez. te bu yzden baz web sayfalar bir taraycda dierinde olduundan farkl grnebilirler. Web sitesini ziyaret edebilecek kiile re de illa u tarayc kullanlmaldr gibi bir snr konamayacandan sayfa baz kiiler tarafndan hatal olarak grlecektir. te bu yzden web sitesi yaparken mutlaka sayfann dier tarayclarda nasl grnd kontrol edilmelidir. HTMLi kullanarak, ticar amal Web tasarm yapan kii, Internet ile balantl bilgisayar kullanclarnn (Internet kullanclarnn) hepsinin ekrannda ayn ekilde gsterilecek sayfalar yapmaya mecburdur. Buna karlk bir firmann intranet ortam iin Web tasarm yapan kii, HTMLin sadece kendi firmasnn standart olarak benimsedii taraycnn anlayabilecei zelliklerinden yararlanmas mmkndr.
Netscape Navigator
Netscape Communications Corporationn (NCC) piyasaya srd NN, IEn hzl ykselii sonucu gerilemi ve sonunda yerini Open Source kardei Firefoxa brakmtr.
Firefox
Netscape taraycsnn kaynak kodu zerine gelitirilmitir. Hzla yaygnlamtr. Firefox Google tarafndan da maddi anlamda desteklenen bir projedir
Opera
Norveli bir firmann gelitirdii Opera standartlara en uyan tarayc olmas ile nldr. Sekmeli arabirimde ilk defa Operada gelmi bir yeniliktir. Gnmzde eski gnlerini aramakta olsada hala bir lekte kullanmdadr.
Google Chrome
Googlen kard tarayc olup Google ad zerinde yaygnlaarak epey bir kullanm oranna kavumutur.
Yandex Browser
Rusya meneili arama motoru Yandexin Chromeun ak kaynakl ksm zerine taraycsdr. Google kurulu
oynatabilmektedir. CODEC kullanlmas tarayclarn asl alanlarnda kalmasna izin verir. nk srekli yeni grnt ve ses formatlar kmaktadr. Haliyle her taraycnn buna ayak uydurmas mmkn deildir. PlugIn denilen ek birimler taraycya tamamen farkl bir program amak yerine, belirli bir tr dosya trn ekranda canlandrabilme yetenei kazandran eklerdir. Tarayc program bilgisayara kurulurken bu ek birimler olmakszn (ya da ok yaygn olanlar ile) yklenir.
41
HTML Editrleri
Genel olarak HTML editrleri iki grupta incelenirler, Metin editrleri ve WYSIWYG editrler. Normal metin editrlerine en bilinen rnek Windows ile birlikte gelen notepad programdr. WYSIWYG editrler ise HTML dosyasn tarayc iindeymi gibi gstererek kullancnn yazd metinlerin geri planda HTML karln kaydederler. Gnmzde editrler ylesine gelimitir ki, hata kontrol, Mouse ile izerek sayfa ats kurma, hazr temalar, hazr saya eitleri, FTP ile sayfay siteye upload etme seeneklerinin hepsini birden iinde barndran editrler ortaya kmtr.
Expression Web
Windows iletim sisteminde alr. Tema, WYSIWYG ve FTP destei verir.
Dreamweaver
Hem metin hemde WYSIWYG tasarma izin verir. Ayrca PHP, ASP, CF gibi dilerlide kullanmay salar. Srkle brak form dizayn etme, veri tabanna otomatik balant ve sorgu dizayn etme, hazr formlar, FTP ile upload ve en nemlisi Mouse ile izerek sayfa atsn CSS formatnda izebilmesidir. Word Word aslnda kelime ilemcidir ama sayfalar HTML olarak kaydetmeyede izin verir. En byk sorunu ise Word ile oluturulan bir HTML sayfas, ayn ii yapan ve 42
Notepad ile oluturulmu bir sayfadan yakalk iki kat daha byk olmasdr. Hele sayfada tablo da bulunuyorsa durum dahada vahimdir.
NVU
Bedava bir editrdr. Composer kodu zerine gelitirilmitir. WYSIWYS tasarma izin verir. Tablo kullanma yetenei kstldr. Frame vs konularda da kullancy skntya sokmaktadr.
43
Etiketler (Tag)
HTML komutlar ieren ve tarayclarn tanyabildii dosya, aslnda iinde ASCII karakterlerden baka bir ey olmayan, dz yaz dosyalardr. Taraycya, sayfay ekranda olutururken vermesini istenilen biimle ilgili komutlar bir dizi zel etiketler ile belirtilir. Bunlar ierikten ayrmak iinse <> ifti arasna almak gerekir. Sayfa tasarm yaparken rnein <b> etiketi kullanlrsa taraycya ben buraya bu etiketi koydum. Artk benden ikinci bir komut gelene kadar her eyi ekrana KOYU olarak bastr denilmi olur. Dolaysyla HTMLde ilke, nnde etiketi olmayan herhangi metne yer vermemektir. nnde etiketi olmayan herhangi bir metin paras, tarayc tarafndan temel paragraf olarak nitelenir. HTML, iinde kontrol kodu olmayan metin dosyasdr. Yani Wordde bir dosya yazdnzda iinde HTML etiketleri kullanm ble olsanz bu dosya metin dosyas olmadndan HTML dosyas deildir. Byle bir dosyann adndaki uzanty silerek, yerine .html uzantsn verilirse ekrana gelecek olan dosyadaki metin deil, ine yada Japonca dilini artran karakterler yn olacaktr. HTML dz yaz olduuna gre, bir HTML dosyas oluturmak iin, herhangi bir kelime-ilem yazlm kullanlabilir. 44
</HEAD> <BODY> Body Metni </BODY> </HTML> <html> <head> <title> lk Sayfam </title> </head> <body> Sayfama Ho geldiniz </body> </html> Trke bilgi ieren bir sayfa rnei ise; <HTML> <HEAD> <meta http-equiv = "Content-Type" "text/html; charset = windows-1254"> </HEAD> <BODY> 46 content =
<html>...</html> rneklerde grld gibi bu etiket bloku taraycya HTML dosyasnn baladn ve bittiini belirtir. Tm dier kodlar bu iki etiket arasna yazlr. <head>...</head> Etiketleri arasnda ise sayfa hakknda bilgiler verilir. title gibi etiketler, anahtar kelimeler, sayfann dili vs burada yer alr. Bu alandaki bilgiler ekranda grnmezler. Sadece title tarayc bal olarak kullanlr. <title>...</title> Title etiketi tarayc penceresinin stne yazlacak olan bal belirtir. Yazlan metin penceresinin stnde tarayc ad ile birlikte yazlr. <body>...</body> Bu etiketler ise sayfann ekranda grntlenecek olan ksmn yazdmz bloktur. Parametreleri ile birlite sayfann zemin rengini, linklerin rengini, arkaplan resmini ayarlamak mmkndr.
47
"description" etiketi site hakknda tanmlanma bilgisini ierir. Bu etiketi tanmayan arama motorlar ise 48
sayfann ilk bir ka kelimesini tanmlama arac olarak kullanr. rnek: <META NAME="description" CONTENT ="Kiisel PHP sitem."> <META NAME="author" Soyad"> CONTENT ="Ad
Arama yapanlara siteler gsterilirken baz arama motorlar site yazarn bu etiketi tarayarak bulur. rnek:<META NAME="author" CONTENT="Trkiye" HTTP-EQUIV: inde yer ald sayfann, Web Server tarafndan ziyaretiye gnderilmesinde oluturulacak Response Header (Karlk Bal) blmnde yer alacak bilgiler ierir. <META HTTP-EQUIV="bilginin tr" CONTENT="bilgi"> eklinde yazlr.
Aada, meta etiketlerinin content blmnde aklama yaplm ve parantez iinde bu sayfa iin uygun rnekler verilmitir. <meta name="author" content="Sayfay dzenleyenin ad"> <meta name = "Description" content = "Sayfann aklamas"> <meta name="keywords" content="Arama motorlarna yardmc olmak iin sayfa hakknda anahtar kelimeler (bu sayfa iin HTML,ders,web sayfas,web sitesi, PHP vs) "> <META name="copyright" tanmlar" > content="Telif hakk ve
49
Eer sayfa ierii ngilizceden farkl ise hazrlanan sayfada herhangi bir karakter grntleme sorunu sorunu yaamamak iin <head> blmnde sayfasnn kod sayfasn belirten meta etiketleride eklenmelidir. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=win-1254"> Bugnlerde arama motorlar iin yaplabilecek ilemler SEO Uzmanl adyla ayr bir meslek haline dnmtr. Bu konuda baz materyalleri ilerleyen konularda bulacaksnz.
Yukardaki rnekte sayfann 4 Nisan 2008 gn Greenwich saatiyle gece yarsndan itibaren arama motorlarndan ve ziyaretilerin bilgisayarlarnda geici Internet dosyalar klasrnden silinmesini salar. Bir Sayfann Belirli Bir sre Ekranda Kalp Otomatikman Baka Bir Adrese Ynlenmesini Salamak Bu ilem iin refresh etiketi kullanlr. Bylece tanml sre sonunda hedef URL otomatik alr.
50
<meta http-equiv = "refresh" content ="5; url=http://abc.com/dnm.html"> Bu sayfann 5 saniye ekranda kalacan ve daha sonra URL ile belirtilen adresteki sayfann yklenmesini salar.
Trke bilgilerin grntlenebilmesi iin <meta http-equiv="Content-Type" content = "text/html; charset=windows-1254"> <meta http-equiv="Content-Type" content = "text/html; charset=iso-8859-9"> Seenekleri kullanlabilinirse de en dorusu UTF-8 kod sayfasnn kullanmdr. UTF evrensel karakter seti olmak iddiasndadr. Bu konuda da hayli yol katetmitir. Bu 51
nedenle artk UTF kodlamasnn kullnalmas kesinlikle nerilir. <meta http-equiv="Content-Type" content = "text/html; charset=utf-8">
Background : Sayfann zemini iin bir resim kullanlmasn salar. Text : Sayfadaki yazlarn rengini belirtir. Bu renk belirtilmi ise sayfa iinde renk belirten etiket grlmedii srece tm ierik bu renkte baslr.
rnein <body bgcolor=aqua text="red" background=1.jpg"> Normalde resimler iin en boy belirtilebilir ancak <body> etiketinde bu durum sz konusu deildir. Seilen resim tarayc tarafndan tm sayfay kaplayacak ekilde sayfaya yerletirilir.
olmadndan i veya k veya hepsinden geni olan m harfi de ayn genilikte bir alana yazlrd. Zamanla teknoloji sayesinde bu sorun ald. Harfleri byklklerine gre greli genilikte olan fontlarla btn harfleri ayn genilikte olan fontlarn fark buradan kaynaklanr. Gnmzde, teknik gerekelerle eski tip fontlar hala vardr. Harflerin genel karakteristiine gre ayrmda ise fontlar serif, sans serif ve dekoratif olarak e ayrlr. Serif harfler kuyruklu yazlm, sans serif harfler ise dz olan biimdir. Web de grsel etki, ztlklardan yararlanarak salanr. Bir sayfada yer alacak bir metnin serif dierinin sans serif harflerle yazlmas iyi bir ztlk oluturup okunulabilirlii artracaktr Ekranda okuma kolayl asndan sans serif harfler tercih edilmelidir. zellikle kk puntolu serif harflerin okunmas ok zor olabilir. Sans serif harfler ieren en bilinen fontlar Arial Verdana ve Tahoma fontlardr. Serif iin en bilinen rnek ise times New Roman fontudur.
<title>Balklar</title> </head> <body> <p><font face="Arial"> <h1>H1: balk 1<h1> <h2>H2: balk 2 <h2> <h3>H3: balk 3 <h3> <h4>H4: balk 4 <h4> <h5>H5: balk 5 <h5> <h6>H6: balk 6 <h6> Normal Metin </font> </p> </body> Paragraf etiketi gibi, balk etiketinin de arkasna koyabileceiniz tek zellik ALIGNdr ve bununla baln sola, saa, ortaya hizalanmasn veya sa sol marjlarn ayn anda hizalanmasn salayabilirsiniz.
<br> etiketi
Bu etiket metni iki satra blmek iin kullanlr. Enter tuunun ilevini tar. HTML metni biimlendirirken MSWORD gibi davranr. Yani alt satra ge yada yeni paragrafa bala iaretini grmedike metni saa doru yazmaya ve pencere sonuna gelince alta doru kaydrmaya devam eder. Metni blmek iin HTML kodunda iken enter tuuna basm olmanz tarayc iin 54
bir anlam ifade etmez. Tarayc <br> etiketini grnce bir alt satra geer. <HTML> <BODY> Bu satr ok ok ok ama ok uzun bir satr. Ancak HTML iin iin bunun iin bir nemi yok. nk ne yazarsanz yazn zel etiketi grmedike ayn paragraftaym gibi ekrana grntlenmeye devam edilecektir. Bu satr da bir nceki gibi <br><ok ok ok ama ok <br> uzun bir satr. <br>Ancak HTML iin iin bunun iin bir <br>nemi yok. <br>nk ne yazarsanz yazn <br> zel etiketi grmedike ayn paragraftaym <br>gibi ekrana grntlenmeye devam edilecektir. <br> Bu satrn fark ise BR etiketi ile blnm olmas. </BODY> </HTML>
<p></p> etiketi
lev olarak <br>etiketine benzer ancak temelde farkldr. <p> etiketi </p> ile sonlandrlr. <br> sadece alt satra geerken bu etiket paragraf ba yapar. <HTML> <BODY> <br> 55
Bu satr ok ok ok ama ok uzun bir satr. Ancak HTML iin iin bunun iin bir nemi yok. nk ne yazarsanz yazn zel etiketi grmedike ayn paragraftaym gibi ekrana grntlenmeye devam edilecektir. <p> Bu satr ok ok ok ama ok uzun bir satr. Ancak HTML iin iin bunun iin bir nemi yok. nk ne yazarsanz yazn zel etiketi grmedike ayn paragraftaym gibi ekrana grntlenmeye devam edilecektir. </p> </BODY> </HTML>
56
<OL>..</ OL>
Sral (Ordered) listeler, liste unsurlarnn bana, tasarmcnn arzusuna gre, ya rakam, ya harf koyarak, sralanm listelerdir. Liste elemanlarn belirtir Srasz (Ordered) listeler, liste unsurlarnn bana, tasarmcnn arzusuna gre, ya ii dolu ya da ii bo bir yuvarlak, veya drt ke nokta konularak sunulan listelerdir. Listenin baladn ve bittiini belirten bu iki 57
etiketin arasna liste unsurlar (list item) <LI> etiketi ile yazlr. <CODE>.. </CODE> indeki metnin bilgisayar program veya benzeri bir Script paras olduunu gsterir: <CODE> // bu bir delphi satrdr Showmessage(Mesaj) </CODE> HTMLin metin biimlendirmekten ok metnin blmlerini tanmlamakta kullanlan ve zellikle Internetin metin arlkl olduu ilk dnemlerinden kalma, ACRONYM, BLOCKQUOTE, CITE, CODE, DEL, DFN, EM, INS, KBD, PRE, Q, SAMP, STRONG, SUB, SUP, VAR, B, I, U, SUP, SUB etiketlerini de ismen hatrlatmak yeterlidir. W3C konsorsiyumu artk metinlerin bu ekilde deil CSS ile biimlendirilmesini standart kabul etmektedir. Dolaysyla bu taglarn ou artk obsolete dediimiz ve sadece geriye dnk uyumluluk asndan varlklarn srdrmektedirler. Metni Koyu, veya talik Yazdrma Bu iler iin yukardaki tablodada grlecei <strong> <> ve <em> etiketleri kullanlr. <html> <head> 58 gibi
<title>Sayfa bal </title> </head> <body> <h1> Sayfama ho geldiniz </h1> <p>HTML etiketleri ile, </p> Tm yazlar <strong>koyu renkte</strong> <em>italik ynde</em> yazmak mmkn </body> </html> Burada paragraf etiketini kullandmza dikkat edin. <p>..</p> etiketleri, paragraf etiketleridir. Tarayc bu etiketi grd anda, bir sonraki ierik parasn alt satra kaydrr. Paragraf etiketinin nasl bloklanaca ALIGN parametresi ile belirtilir. rnein paragraf etiketini <p align=center> eklinde kullanrsanz, </p> etiketine kadar gireceiniz btn metin, bulunduu yerde ortalanacaktr.
edilmek iin hangi renkten ne kadar kartrlacan veren saylar grubudur. HEX sisteminde saylar 16 lk sistemde ele alnr. Say sistemini 1den 10a kadar saylar normal halleriyle dierleri ise A,B,C,D,E,F harfleriyle ifade edilir. Yani 11 yerine 1A 12 yerine 1B yazmak gerekir. Renkleri belirtirken, 00 ise o renkten yzde sfr orannda, FF ise yzde 100 orannda kartrlmas belirtilmi olur. Bilgisayar ve televizyon ekrannda beyaz renk, her rengin de yzde yz orannda olmas halinde, siyah ise her rengin de yzde sfr orannda olmasyla salandna gre #000000 Siyah, #FFFFFF ise Beyaz rengi ifade eder. Renk Ad Black Red Gren Blue Yellow Aqua HEX kodu RGB kodu
#000000 rgb(0,0,0) #FF0000 rgb(255,0,0) #00FF00 rgb(0,255,0) #0000FF rgb(0,0,255) #FFFF00 rgb(255,255,0) #00FFFF rgb(0,255,255)
61
62
33FF00 33FF33 33FF66 33FF99 33FFCC 33FFFF 660000 660033 660066 660099 6600CC 6600FF 663300 663333 663366 663399 6633CC 6633FF 666600 666633 666666 666699 6666CC 6666FF 669900 669933 669966 669999 6699CC 6699FF 66CC00 66CC33 66CC66 66CC99 66CCCC 66CCFF 66FF00 66FF33 66FF66 66FF99 66FFCC 66FFFF 990000 990033 990066 990099 9900CC 9900FF 993300 993333 993366 993399 9933CC 9933FF 996600 996633 996666 996699 9966CC 9966FF 999900 999933 999966 999999 9999CC 9999FF 99CC00 99CC33 99CC66 99CC99 99CCCC 99CCFF 99FF00 99FF33 99FF66 99FF99 99FFCC 99FFFF CC0000 CC0033 CC0066 CC0099 CC00CC CC00FF CC3300 CC3333 CC3366 CC3399 CC33CC CC33FF
63
CC6600 CC6633 CC6666 CC6699 CC66CC CC66FF CC9900 CC9933 CC9966 CC9999 CC99CC CC99FF CCCC00 CCCC33 CCCC66 CCCC99 CCCCCC CCCCFF CCFF00 CCFF33 CCFF66 CCFF99 CCFFCC CCFFFF FF0000 FF0033 FF0066 FF0099 FF00CC FF00FF FF3300 FF3333 FF3366 FF3399 FF33CC FF33FF FF6600 FF6633 FF6666 FF6699 FF66CC FF66FF FF9900 FF9933 FF9966 FF9999 FF99CC FF99FF FFCC00 FFCC33 FFCC66 FFCC99 FFCCCC FFCCFF FFFF00 FFFF33 FFFF66 FFFF99 FFFFCC FFFFFF
64
Sral Listeler
<OL>..</OL>: Sral (Ordered) listeler, bana, tasarmcnn isteine bal olarak, rakam, harf yada zel bir karakter koyarak, yazlm listelerdir. Listenin baladn ve bittiini belirten bu iki etiketin arasna liste satrlar (list item) <LI> </LI> etiketleri arasnda yazlr. TYPE : Etiketi biimlendirir. o 1 rakamla; o A byk harfle; o a kk harfle; o i kk Romen rakamlar ile; o I byk Romen rakamlar ile sralanmay salar COMPACT: listenin mmkn olduu kadar az satr aral ile verilmesine yarar START : listenin harf veya rakamdan balayacan belirtir) eklinde parametresi olabilir. imdi rnein, milli takm listesini Yanlarndada srt numaralar olsun. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <title>Web Tasarm Rehberi - Renkler</title> </head> 65 hazrlayalm.
<body> <p><font face="Arial"> <H2>Takm Kadrosu</H2> <ol type=1 compact> <LI>Rt</LI> <LI>Serdar</LI> <LI>mit</LI> <LI>nder</LI> <LI>Emre</LI> <LI>Yldray</LI> <LI>Tmer</LI> <LI>Tuncay</LI> <LI>Hakan kr</LI> <LI>Gkdeniz</LI> <LI>Semih</LI> </OL> </font> </p> </body> </html> TYPE parametresini 1 deil, a olarak deitirirseniz sayfadaki liste, bu defa rakamla deil, kk harflerle sralanm olacaktr:
66
! Bu tag Trke harflerle uyumsuzdur. A,b,c, eklinde devam etmez. A,b,c,d eklinde listeler
Srasz Listeler
<UL>..</UL>: Srasz (UnOrdered) listeler. Bu tip liste satrlarnn bana ya ii dolu ya da ii bo bir yuvarlak, veya drt ke nokta konulur. TYPE : Etiketi biimlendirir o DISC, ii dolu daire o CIRCLE, ii bo daire; o SQUARE salar drtke nokta ile sralanmay
COMPACT listenin mmkn olduu kadar az satr aral ile verilmesine yarar. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <title>Web Tasarm Rehberi - Renkler</title> </head> <body> <p><font face="Arial"> <H2>Takm Kadrosu</H2> <ul type=disc compact> <LI>Rt</LI> 67
<LI>Serdar</LI> <LI>mit</LI> <LI>nder</LI> <LI>Emre</LI> <LI>Yldray</LI> <LI>Tmer</LI> <LI>Tuncay</LI> <LI>Hakan kr</LI> <LI>Gkdeniz</LI> <LI>Semih</LI> </UL> </font> </p> </body> </html>
Color kullanlr.
izginin
rengini
ayarlamak
iin
Align:Bu parametre right,left ve center deerlerini alabilir. izginin sayfadaki yatay konumunun sola, saa veya ortaya hizalanmasn salar.
rnek: <HR><p> Trk Milli Takm Kadrosu </p> <HR width=400><p> Trk Milli Takm Kadrosu </p> <HR size =12 color=#cccccc><p> Trk Milli Takm Kadrosu </p> Resim ve Multimedya Dosyalarn Kullanmak Belgeye resim, video, ses dosyalar eklemek normal ierik eklemekle ayn deildir. rnein bir tablo iine istediinizi yazp; belgeyi atnzda bu yazy grebilirsiniz. O metin belge ieriinin bir paras durumundadr. Ama i resim, ses ve video dosyalarna gelince bu aamada i deiir ve HTML sayfasnda dosyann bulunduu yeri belirtmeniz gerekir. Bu ilem iin URL adreslerinden faydalanlr. Belge metinleri begenin iindeki yer alrken resim vs dosyalarn kendileri deilde sadece URL adresleri HTML sayfasnda yer alr. Web server byle bir balant grd anda ilgili dosyay kontrol eder ve bulursa talepte bulanan taraycya iletir. Tarayclar, resim format olarak JPG, GIF, PNG trlerini desteklerler. <HTML> 69
<HEAD> <TITLE>RNEK SAYFA</TITLE> <META http-equiv="Content-Type" content="text/html;charset=windows-1254"> </HEAD> <BODY text="#0000CC"> <DIV align="center"><IMG alt="Logo resmi"></DIV> 2006-2007 ampiyonu</H1> </BODY> </HTML> IMG etiketinin eitli parametreleri vardr. Bunlar ALT : Resim iin alternatif metin belirtir. Eer kullanc taraycsn resimleri gstermemeye ayarlamsa, tarayc resim gsterme kapasitesine sahip deilse veya en nemlisi eer resim verilen adreste yoksa bu metin ekranda grntlenir. WIDTH: Resmin ekranda grntlenecek boyutunu belirtir. Belirtilmez ise orijinal boyutunda gsterilir. Farkl boyut verilirse resim fiziksel olarak etkilenmez sadece ekranda gsterilirken yeniden boyutlandrlr HEIGHT: Resmin ekranda gsterilecek yksekliini belirtir. Belirtilmez ise orijinal boyutunda gsterilir. Farkl boyut verilirse resim fiziksel olarak 70 src="img/logo1.jpg"
etkilenmez sadece ekranda gsterilirken yeniden boyutlandrlr BORDER: Resim iin bir ereve izilmesini salar. ALIGN = Resmin hizalamasn belirtir. LEFT ile sola, RIGHt ile saa, CENTER ile ortaya hizalanr.
<IMG src="img/logo1.jpg" alt="Logo resmi"> img klasr iindeki logo1.jpg dosyasn sola hizal olarak grntle. Alternatif metin olarak gerekirse logo resmi metnini kullan. <IMG src="img/logo2.jpg" width="200" height="180"> <IMG src="img/logo2.jpg" width="100" height="90"> <IMG src="img/logo2.jpg" width="50" height="45"> Resimler ayn zamanda link verme ilemi iin kullanlabilirler.Bu konu ilerleyen ksmlarda ilenmitir. Marquee ile Resim Ve Metin Kaydrma Marque etiketi verilen parametrelere gre bir metnin yada resmin bir yerden bir yere verilen ynde ve hzda hareket ettirilmesi iin kullanlr. Parametreleri; Direction : Bu parametre right,up,down deerlerinden birisini alr ve buna gre ierin hangi yne kayaca belirlenir. Up yukar, right sadan, down ise aa doru kaymay gerekletirir. Behavior : Davranla ilgili bir parametredir. Alternate deeri verilirse yazlar kaybolmadan pencere iinde gider gelir. Ya yetenler Kara imek filmindeki arabann nnde saa sola giden 71
Bu
ilem
ayn
etkiyi
: Kayan yazlarn arka plan rengini : Yaznn kayaca alann ykseklii : Yaznn kayaca alann genilii
Loop : Yaznn ka kez kayaca belirlenir. Daha sonra da yaz durur. Scrolldelay : Kaydrma hz, iki arasndaki sreyi ms cinsinden belirtir hareket
Srollamount: Kayan yaznn bir defada ka piksel hareket edeceini belirtir. Marquee aslnda Internet explorera zg bir etiket olup dier tarayclar tarafndan kerhen desteklenmektedir. Kiisel tecrbelerime gre marquee etiketi ok dikkatli kullanlmaldr. Mutlaka dier tarayclar ilede denenmelidir. zelikle alternate parametresi farkl tarayclarda farkl davranmaktadr. Bu bakmdan dikkatli olup tarayc uyumunu maksimumda tutulmasnda fayda vardr. Marquee en ok haber balklarnn dar bir alanda gei yapmas iin alandan tasarruf ve vurucu etki asndan kullanlr. Sayfaya bir nebze olsun hareket katar. Ancak ne olursa olsun sayfada 4-5 tane her biri ayr yne kayan marquee etiketi ok berbat bir dizayna sebep olur. <MARQUEE DIRECTION=yn BEHAVIOR=tip BGCOLOR=renk HEIGHT=n HSPACE=n LOOP=n 72
SCROLLAMOUNT=n WIDTH=n>
SCROLLDELAY=n
VSPACE=n
5. GIF ve PNG dosyalar kullanken "Interlaced" haline getirilmeleri daha uygun olacaktr. Interlace tipli resimler kademe kademe yklenir ve yava yava netleerek resmi daha hzl ykleniyormu gibi gsterir. Aksi tadirde resmin tamam yklenmeden grntlenmeyecektir.
Dikkat edilecek nokta desteklenen uzantlardr. Ayrca kullanc tarafnda gerekli codeclerin ykl olup olmadnda hesap etmek ve ok nadir bulunan formatlardan kanmak gerekir.
74
Tablolar
HTML sayfalarnda veriyi izelge halinde sunmak iin tablolar dnlmt. Ancak tasarmclar birden bire bunu sayfann iskeletini kumak iinde kullanmaya baladlar. Bylece tablolar sayfalar iin ierikten sonra temel ge haline geldiler. Ancak gnmzde srekli yaygnlaan CSS kullanm, table ve frame (ereve) gerektiren durumlar ok daha pratik zmeye imkan verdiinden eski nemleri azalmaktadr. Buna ramen Table veri izelgeleri iin srekli kullanm alan bulacaktr. Div etiketleri ile table etiketi kullanmadan tablo oluturabilemektedir ancak bu henz yaygnlamamtr. Bir tabloyu bir Excel sayfasna benzetebilrsiniz. En genel hali ile ise mutfak dolabna benzetebilrsiniz. atal, kak, baharat, tabak, tava her ey kendine ait ekmecelerde durmaktadr.
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <TITLE>Tablonun Esaslari</TITLE> <BODY> <p><font face="Arial"> <h1><center>HTML'de Tablo</center></h1> <table align=center border=3 width=70%> <thead align=center>Bu (thead)</thead> tablomuzun Bal
<thead><tr><th>Birinci stun bal (th)</th><th>kinci stun bal(th)</th><th>nc stun bal(th)</th><th>Drdnc stun bal(th)</th><th> <tbody> <tr><td>Satr 1 Stun 1</td><td>Satr 1 Stun 2</td><td>Satr 1 Stun 3</td><td>Satr 1 Stun 4</td></tr> <tr><td>Satr 2 Stun 1</td><td>Satr 2 Stun 2</td><td>Satr 2 Stun 3</td><td>Satr 2 Stun 4</td></tr> <tr><td>Satr 3 Stun 1</td><td>Satr 3 Stun 2</td><td>Satr 3 Stun 3</td><td>Satr 3 Stun 4</td></tr> 76
<tr><td>Satr 4 Stun 1</td><td>Satr 4 Stun 2</td><td>Satr 4 Stun 3</td><td>Satr 4 Stun 4</td></tr> </tbody> </table> </body> </html> Kullanlan parametreler <td> iin : Bgcolor :Hcrenin Zemin rengini ayarlar Background:Hcre arkaplanna bir resim yerletirmekte kullanlr Width Height Align olabilir. :Hcre genilii :Hcre ykseleklii :Metin yaslama yn. Left, Right ve Center
Her zamanki gibi yine tekrarlayalm tablolar biimlendirmek iin artk en genel olan CSS kullanlmaldr. Buradaki biimlendirme etiketlerini sadece bilgi olarak bilmeniz yeterlidir. Bu nedenle aadaki etiketleri tasaramlarnzda kullanmanz nerilmez.
77
Zemin - Bgcolor
Bir tablonun, her bir satrn, her bir stunun ve her bir hcrenin ortak veya ayr zemini olabilir. Bu zemin dz renk olabilecei gibi bir resimde olabilir. Bu imkandan, uzun ve ou zaman gzle takibi zor rakamlar ieren tablolar oluturduunuz zaman, satrlara biri ak, dieri renkli zemin vererek, izleme kolayl salamak iin yararlanabilirsiniz.
verilmesi bu sorunun temel zmdr. Bylece ekran bydke tablo byr, kldkede klr.
79
Hcreler aras boluk miktar CELLSPACING Cellsacing deeri ise hcreler arasnda braklacak boluk miktarn gsterir. <TABLE BORDER=X CELLPADDING=X CELLSPACING=X WIDTH=[%veya X] HEIGHT=[% veya X] BGCOLOR=X BACKGROUND="X"
Kod
Tanm
Sonu
Boluk < > " & Kk Byk ift trnak Ve < > " &
80
² st simge ¼ Bl (rnek ) £ Pound ° ¥ Derece Yen
Buradaki sembol HTML iin nemli bir semboldr. Tablo dizaynlar asndan ok nemi vardr. Hcre ierii bo ise tarayc bunu gstermekte sknt yaar. <td> taglar arasna yazdnz teb bir bolukta dikkate alnmayacaktr. Oysa her hcreye bir koyarsak HTML bunu hcre iine mecburen koyacak ve tablomuz dzgn grntlenecektir.
81
st Banner alan
Men alan
erik alan
Men alan
erik alan
82
st Banner alan
erik alan
Men alan
st Banner alan
Men alan
erik alan
83
st Banner alan
Men alan
erik alan
st Banner alan
Men alan
Kayan 84
erik alan
Alt bilgi telif vs alan phesiz bunlar kartrarak daha farkl dizaynlarda yaplabilir ama bunlar ilk etapta size bir fikir verebilir.
85
ereveler -Frames
HTML ilk ktnda frame teknolojisi yoktu. lk olarak lanse edildiinde bir yandan tarayc firmalar frame desteiyle vndler dier yandan ise site tasarmclar bundan nefret ettiler. Hatta bu tepki yznden, Netscape ve Internet Explorer yazlmclar programlarnda frame seeneklerini devre d brakma kolayl bile getirdiler. Frame dmanl, mantksz ancak teknik adan eitli alardan hakldr. Aslnda site iskeleti iin frame kullanm tablo kullanmndan daha esnek ve gzel sonular verir ancak framelerin bir ok dezavantajda vardr. Tablodan farkl olarak frame teknolojisi, bize sayfamzn bir taraf sabit kalrken, dier tarafnn ieriini, kullancnn tercihine gre deitirme imkan verir. Bylece bir tarafta men dururken dier tarafta ier iin deitirilmesi salanabilir. Bu sayade men kodlamas iin tek bir dosya kullanlm olur. Avantajlar erii kontrol etmek kolaydr. Bir taraf men dieri ierik sunmak iin kullanlabilir. Frame hedef deimedii srece grntleniyor olacaktr. Eski tarayclar desteklemezler Ekranda ilave yer tutarlar Her bir frame iin ayr bir sayfa oluturulmas gerekir. 86
Dezavantajlar
Sayfann kaydedilmesi ve yazdrlmas sorun olur Frame kullanlan sitelerde link vermek zor olur (En nemli sorunlar son dr) Arama motorlar (Google, Yahoo vb) Frameleri sevmezler.
Bir frame de aslnda tablo gibi satr stun mant ile oluturulur. Ancak tablonun stun ve satrlar ancak komu hcrelerle birletiribilirken frameler tm ekran zerinde zgrce konumlandrlabilirler. Aadaki sayfa dzenini frameler varsayalm. ile kurduumuzu
87
Kullanc sol taraftaki menden bir sayfay setii taktirde _target=content (ierik framenin ad) denildiinde, st , alt ve sol frameler yerlerinde sabit dururken orta sadaki ierik frame deiecektir. Dolays ile bu yap sayesinde her sayfada meny ve ana isketlet tablosunu yeniden kullanmak zorunda kalmam oluruz. stelik mende deiiklik gerektiinde sadece men alannda bulunan frame kodunun bulunduu sayfay deitirdiimiz anda bu kod tm sayfalara yansm olacaktr. imdi madem bu kadar stn neden insanlar kullanmyor ve kullanmak istemiyor denilebilir. Gerektende ilk yaptm site (1998) hari hibir sitede frame kullanm deilim. stelik ilerde greceimiz CSS ve PHP yardm ile zaten bir men kodunu her yerden arabilme imkanmz baka ekillerdede mevcut. Dahas frame kullanlan bir sayfaya link vermek sanld gibi kolay deildir. nk adres satrnda bir ey yazarken sayfa aslnda baka bir ierii gsteriyor olabilir. stelik arama motorlarda frame sayfalardan pek holanmazlar. Ve linkler direkt alndnda ise frameli bir sayfa frame olmadan alabilmektedir. Frame Parametreleri marginwidth="..." (say) miktarn belirtir. marginheight="..." (say) miktarn belirtir :Soldan :Sadan boluk boluk
scrolling=".." (yes, no, auto) :Kaydrma ubuklarnn gsterilip gsterilmyeceini belirtir. noresize :Pencere boyutlarnn sabit 88
kalr ve Fare ile boyutlandrma yaplamaz frameborder="..." (yes, no) :ereveler arasndaki snr izgisinin olup olmayacan belirler. border="..." (say) :Snr izgisinin kalnln (veya ereveler aras mesafeyi) belirler
<frame name="col1" src="cer01.htm" marginheight="5" marginwidth="5" noresize scrolling="no"> <frame name="co2" src="cer02.htm" marginheight="5" marginwidth="5" noresize scrolling="no"> <frame name="co3" src="cer03.htm" marginheight="5" marginwidth="5" noresize scrolling="no"> <noframes> <body> </body> </noframes> </frameset> </html> Bu kodun iindeki <noframes>..</noframes> koduna dikkat ettiyseniz iindeki <body> etiketleride ne diyebilirsiniz. Batada dediimiz gibi eski tip tarayc kullananlar yada frame zelliini kapatm kullanclar sayfann sadece <noframe> blokunu greceklerdir. Setleri oluturacak sayfalara rnek ise <html> <head> <title>ereve 1</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </head> <body bgcolor="#C0C0C0"> 90
<p align="center">ereve: 1</p> </body> </html> Bu sayfay, rnekten anlalabilecei gibi cer01.htm adyla kaydedilmeli. Zemin rengi metinler deitirmek zere, cer02 ve cer03 adyla iki kopyas daha gerekli olacaktr. Ayrca tm dosyalarn ayn klasrde durmas gerektiinide unutmamak gerekir. Ana set dosyasndaki frameset iinde bulunan cols ifadesini rows yaptmz anda dikey olan frame kolonlar bu sefer yatay olarak yerleecektir.
NORESIZE
92
basarak yaplmasn salayabilirsiniz. Metin kelimesinin yerine yazacanz karakterler, klavye kestirmesi olur. CHARSET=metin: Balant salanan Web kaynann, taraycda hangi dil kodlamasyla gsterileceini belirler. Verilmedii takdirde, kullancnn tarayc program ISO8859-1 olan ASCII kodunu seer. COORDS=X1, Y1, X2, Y2... Xn, Yn: Bu parametre, balantnn metinde deil, bir grafik zerinde oluturulmas halinde, resmin hangi koordinatlar aras tklanrsa, balantnn salanacan gsterir. Bu etiket, SHAPE ile birlikte kullanlr. (Bu sayede bir resmin eitli ksmlarna basldndan farkl adreslere gidilmesi mmkn olur. Buna image map denilir) HREF=url: URL, (Uniform Recourse Locator) Internette bulunan bir adres demektir.Bu adres, HTTP, FTP veya elektronik posta yoluyla ulalabilecek bir Web alan ve o alann iindeki bir dosya olabilir. Ulalacak dosya, HTML dosyas olabilecei gibi bir Word , Excel dosyasda olabilir, grafik, ses, video ya da sktrlm ZIP dosyas da olabilir. Tarayclar genellikle, bir balant ile kendisine gelen dosyay ne yapacan bilemezse (rnein bir zip dosyas), kullancya bu dosyay yerel sabit diske kaydetmeyi nerirler. NAME=metin: Anchora isim vererek, daha sonra bu noktaya atfta bulunma imkan kazandrr. Bunu, bir sayfann kendi iinde, link vermek iin kullanabilirsiniz. ok uzun bir sayfann batarafna <a name="top"> eklinde bir isimlendirilmi Anchor noktas koyarsanz ve aada batarafa dn kolaylatrmak iin yle bir 94
balant yapabilirsiniz: <A HREF="ust>Sayfa bana git </A> REL=metin: Kurulacak ilikinin niteliini belirtir. Tarayclar, ou zaman bu ifadeye bakarak, balant kurulunca ne yapabileceklerini bilirler. rnein metin yerine stylesheet yazarak, taraycya alaca dosyann, daha sonra metinleri biimlendirmekte kullanlacan syleyebiliriz. SHAPE=(RECT/CIRCLE/POLY/DEFAULT): Bu etiketin karsna yazacanz ifade ile, taraycya bir resim dosyasnn zerine konmu balant noktasnn biimini tanmlarsnz. Rect eklin drtgen, circle daire, poly ok kenarl default ise araycnn varsaylan balant ekli olduunu ifade eder. Bu parametreyi COORDS parametresi ile birlikte kullanmak gerekir. Bu durumda COORDS etiketinin nne yazacanz X1, Y1, X2, Y2, Xn, Yn eklindeki koordinatlarn da anlam farkl olur. SHAPE etiketini rect olarak bildirirseniz, X1 ve Y1 ekin sol st kesinin, tarayc penceresinin sol st kesinden itibaren ka pixel saa ve aa konulacan; X2 ve Y2 ise eklin sa alt kesinin koordinatlarn gsterir (rnek: SHAPE=rect, COORDS=0,0,9,9). SHAPEi circle olarak tanmlarsanz, koordinatlar dairenin merkezini ve apn gsterir (rnek: SHAPE=circle COORDS=10,10,5). ok kenarl bir ekil tanmlamanz 95
halinde, her bir koordinat dierine, son koordinat da birinciye balanr (rnek SHAPE=poly COORDS=10,50,25,20,20,50). TARGET=pencere: Bu etiketle linkin sayfa iindeki hangi frame (yada bo bir yeni sayfaya) yklenecei belirtilir. FRAMESET etiketi bulunan bir sayfada kullanlmas halinde, alnacak sayfann hangi frame iine konulacan gsterir. Burada pencere kelimesinin yerine u deerler yazlabilir: ereve ad: Oluturulan erevelere nceden isim verilmi ise, o isimler buraya yazlarak, sayfa frame iine yklenir. ereve isimleri mutlaka rakam veya harfle balamaldr. _blank: Linkin hedefi yeni bir tarayc penceresinde alr. Frameler iinde baka bir siteye link vermek iin bu nemlidir. _parent: Alnacak unsur, o anda ak sayfay oluturmu bir ana sayfa varsa, onun yerine konulur. _self: Alnacak sayfa mevcut sayfann bulunduu tarayc perceresine konulur. _top: Alnacak sayfa mevcut pencereye en stten itibaren konulur. Frame kullanan bir sayfada baka bir siteye link verildiinde _blank kullanlmadnda sayfada bulunan mevcut sabit frameler duracandan dier site sizin sayfanzn iine gmlecektir. Hele birde link verilen sitede frame ise ite o zaman az yal az pimi 96
birbirine
gemi
bir
ekran
FTP balantlar:
Kimi zaman, HTTP protoln deil de FTP (File Transfer Protocol) yntemini kullanarak, bir dosyay kendi bilgisayarna indirmesini salamamz gerekebilir. Bunun iin link ifademiz, rnein yle olur: <A HREF="ftp://download.com/pub/">Bedava programlar</A>
Haber Gruplar:
Internetin bilgi paylam amacna ynelik bu kullanmnda, tartma gruplarna yer verilen Usenet servisi iin prtokol belirtilmez. Usenet iin rnek olarak: <A HREF="news:comp.ibm.www.developers.html"> Gelitiriciler grubu </A> 97
Dosya Balantlar:
Sabit bir dosyaya link vermek iin kullanlr. En ok intranet ortamlarnda kullanlr. rnek olarak, <A HREF="file://server/yazlmlar/kulanm.html">Kullanm rehberi </A> gibi
Dier balantlar:
Internetin ilk gnlerinde daha sk kullanlm olsalarda Gopher, ve ok geni bir alana yaylm alarda veri taban aratrmas yapmaya imkan veren WAIS, ok yaygn olmamakla birlikte, HREF ifadesi olarak kullanlabilir. Linkler hakknda detayl bilgi iin http://www.w3.org/addressing/schemes.html adresine bakabilirsiniz. Neden \ deilde / kullanlyor? HREF ile kullanlan dz bl / iareti dikkatinizi ekmi olmal. in asl u Unix trevi sistemlerde klasr hiyerarisi / ile ifade edilirken Windows iinde bu iem \ ile ifade edilemektedir. Aslnda \ iareti ile / arasnda hibir fark yok ve ilevleri de ayn. Yani 98
Windows altnda link verirken \ ilede link verirseniz link alr ancak unutmayn ki sayfa bir de hosting bilgisayarna yklenecektir. Peki web server iletim sistemi Windows deilse ne olacak. Tabi ki link krllacak. Windows altnda \ yazlsada web server program bunu normal karlna evirerek ilem yapar. Ancak Linux server iinse bu sorundur. \dosyalar\sayfa.html yazdnzda Linux sizin dosyalr klasr iinde bulunan sayfam dosyasn kastettiinizi bilemez.
ok keli etkin noktann konumunu tanmlamak iin eklin tm kelerinin koordinatlar kullanlr. ok keli etkin noktalar tanmlanan noktalar birletiren dz izgilerden oluur. Aada be keli bir etkin nokta iin gereken kod verilmitir: <map name="haritaadi" id="haritaadi"> <area shape="poly" coords="310,14,559,195,274,356,5,118,126,411" href="ankara.htm" /> </map> Aadaki resimde 4 adet geometrik ekle de link verilmitir. <img> etiketine usemap="#haritaismi" eklendiinde haritaismi adl resim haritasna gre resim ierisinde linkler belirir.
yazi1.html dosyasna link verirken yazilar/yazi1.html adresi kullanlabilir. Ancak istenirse http://www.abc.com/yazilar/yazi1.html adreside kullanlabilir. Bunlarn birincisi greceli ikincisi ise mutlak adreslemedir. Her ikisinin de hem avantaj hem de dezavantajlar vardr: Relative adreslenerek oluturulan sayfalarn bir makineden dierine tanmas kolaydr 101
Relative linkler bir st seviyedeki sayfa tand zaman krlrlar. (rneimizde yazilar kladr kalkarsa tm linkler bu smdaki tm linkler krlacaktr) Relative linkleri local serverlarda altrp denemek daha kolaydr. Absolute adreslemede yazlan linkler daha uzundur ve bakm daha zordur Baz dosyalarn mutlaka sunucudan yklenmesini istiyorsanz (bir kullancnn sayfann bir kopyasn kendi makinesine indirmesi durumunda) kesin sonu verir.
Bu iki adresleme arasndaki farklar bilerek hazrlanan bir sitede normalde greceli ve mutlak adresleme beraber kullanlr, ve greceli adreslerin says genelde daha ok olur. yi bir sitede yaplabilecek bir dzenleme, btnlnn bozulmamas gereken sayfalarda, greceli adresleme kullanmak, ve her yklendiinde deien sayfalara da mutlak link vermektir, rnein saatba deien istatistikler gibi.
102
Submit tklandndan ne ilem yaplacan gsteren hedef dosya ve bilgilerin iletilmesini istediimiz yntem (POST yada GET). Bilgileri bu hedefe gnderecek SUBMIT dmesi Formu ilk haline getirecek olan RESET dmesi
Form etiketinin kodlanmas FORM ACTION="url" METHOD=POST veya GET> eklinde olur. <form name="forma verdiimiz ad" action="isle.php" method="post"> Adnz Soyadnz: <input type="text" name="isim" size="40"> <input <input <form> type="submit" type="reset" 103 value="Gnder"> value="Temizle">
Formun name parametresi ile forma bir isim verilebilir. <FORM> etiketi, ieriinde kullanlan ACTION parametresi ile kullanc SUBMIT butonuna tkladnda forma girilmi olan bilgilerin hangi adresteki hangi programa teslim edileceinin belirtilmesine imkan verir. sterseniz formu bir sayfada kodlayp baka bir sayfada bu deerleri ileyebilirsiniz. te yandan parametrik yntemle bir sayfadan hem formu gnderip, action iinde ayn sayfay tanmlayp, kaytlar ayn sayfa iindede ileyebilirsiniz. Formun method parametresi ise verilerin, onu ileyecek olan yere nasl iletileceini belirtir. Form verileri HTML iinde iki ekilde iletilirler. GET POST
Get metodu ile iletilen bilgiler dier programa taraycnn adres satrndan iletilirler. rnein ieriinde AL bilgisi olan isim ve ierii ATMACA olan soyisim deerini isle.php dosyasna GET ile teslim edecek olursak taraycnn adres satr www.alanadi.com/isle.php?isim=AL&soyisim=ATMACA eklinde olacaktr. Get ynteminde bilgiler Web Serverda query_string" denen deikenin iine yazlp dier programa iletilirken, Post ynteminde bu bilgiler stdin" deikenine yerletirilir ve ifrelenerek iletilir. Buradaki handikap (ve tabi ki avantaj) adres satrnn herkes tarafndan grntlenebilmesi ve formun hi arlmadan adres ubuundan bilgilerin verilerek hedef dosyaya ilem yaptrlabilecek oluudur. rnein isle.php 104
dosyas bu bilgileri MYSQL veritabanna kayt ediyor olsayd ve bizde adres ubuundan www.alanadi.com/isle.php?isim=MEHMET&soyisim=ATM ACA bilgisini gndersek bu bilgilerde veritabanna kayt edilmi olacakt. Haliyle bu ilem parola vs ilemlerde tercih edilmez. GET yntemi benim kiisel tecrbelerime gre ekranda listeleme srasnda sayfalama yaparken, resim galerisinde resim ad gnderilirken, dosya ad gnderilirken yada dorudan adres satrndan bilgi gndermek iin uygun bir yntemdir. Parola vs ekranlar iinse uygun deildir. GET ynteminin handikap dediimiz olayda bir de avantaj gizlidir. POST yntemi iin form dizayn etmek gerekir ancak GET yntemi iin form dizayn etmeden dorudan dier programa bilgi geii yaplabilmesidir. www.alanadi.com/dildegis.php?dil=ENGLISH bilgisi hedef dosyaya yeni dil iin bir parametre deieri iletmektedir. Dier program ortada bir form olmamasna ramen bunu GET ile gnderilmi gibi kullanabilir. Oysa bu ilem POST ile yaplamaz. Ayrca GET iin kullanlan query string uzunluu belli bir deeri geemez. POST ynteminde byle bir sknt yoktur. zetle POST Yava Gvenli http header kullanr. 105
GET
Hzl Gvenlik daha zayf Taracnn adres satr kullanr. Max 2048 karakter gnderebilir. Form olmadan gnderilebilir adres satr ile Veri aln p
Formda ayrca giri kutular vardr ve bunlarn her birinin de name parametresi vardr. Bu name parametreleri son derece nemlidir. Bir INPUT etiketinin name deeri formu ileyecek olan dilin (PHP, JSP veya baka bir dil) o kutunun iindeki deere erimek iin kullanaca deiken addr. Ksaca Input etiketlerinin name zelliklerini verirken deiken tanmlama kurallarna uygun davranlmaldr. rnein adsoyad uygun bir isimdir ama ad soyad uygun bir isim deildir. Bu ilemde uygun olmayan isimlerin kulanlmas HTML tarafn enterese etmez. Ancak bu deerleri ileyecek olan program bunlarn deerlerine eriemez. Formun Submit seenei onu hedefe gnderecek butonu, RESET parametresi ise formu ilk anki deerlerine geri dnderecek butonu temsil eder.
ACTION=url Formun gnderildiinde hangi program tarafndan deerlendirileceini belirtir. METHOD=get-post Bilgilerin sunucuya hangi yolla gnderileceini belirtir. GET deeri verildiinde kontrollere girilen ierik o anda bulunulan adrese eklenip deerlendiriciye gnderilir. POST deeri ise form ieriini direkt olarak derleyici programa ynlendirir. TARGET=window Netscape tarafndan getirilen bu tag form deerlendirici tarafndan kullancya geri gnderilen yantn hangi pencerede belireceini gsterir. Pencere isimleri FRAME konumuzu ilerken gsterdiimiz " _blank" , " _top" gibi deerlerden biri olabilir. Submit ve Reset Dmeleri Bu dmeler formun hedefe iletilmesini ieriinin temilenmesini salayan gelerdir. yada
Passwo
<INPUT TYPE="password"
107
rd
>
yaplr. Bununla birlikte yazlan karakterler yerine * karakteri gsterilir. Formla birlikte tanan bu alandaki bilgi kullancdan gizlenir. Forma kullancnn bir dosyasnn ismini girmesine izin verir. Kullancnn doru/yanl (true/false) eklinde mantksal deer girmesinde kullanlr. zel bir seenek listesinden seim yapma imkan verir. Radibuttonlarn name zelliine ayn deerler verilerek
Hidden
** (grnmez)
<INPUT TYPE="hidden">
CheckB ox
108
FORM etiketinin ACTION zelliinde belirtilen URL ye form bilgilerini gndermede kullanlr. Btn form kontrollerini sfrlamada kullanlr. Formun sayfa ilk yklendiindeki eski halini almasn salar. Tklandnda Mouse imlecinin X ve Y koordinatlarn gndererek grafiksel onay buttonu yapmada kullanlr. stemci-taraf (Client-Side) scriptlerinden JavaScript ya da VBScript i tetikleyebilecek
Button
<INPUT TYPE="button">
109
komut dmesi oluturur <TEXTAREA> TextAre a ok satrl metinlerin girilmesine imkan salayan bir kontroldr. Kullancya alan bir listeden hazr seenekler sunar. Kullancya liste eklinde hazr seenekler sunar. Buradaki "n" ListBox n ka satrl olacan belitir.
Combo Box
<SELECT size="1">
ListBox
<SELECT size="n">
INPUT
INPUT etiketi ile ziyaretiye, forma klavyeden yazarak bilgi girme imkan verilir. Bu etiketi kullanmann genel kodlan yledir: <INPUT TYPE="..." NAME="..." VALUE="..." SIZE="..." MAXLENGTH=".." SCR="..." CHECKED"...." TABINDEX="X"> ALIGN=tip TYPE deeri bir resim olarak atandnda bir sonraki satrn resme gre nasl yerletirileceini 110
belirtir. TOP, MIDDLE veya BOTTOM deerlerinden birini alabilir. CHECKED Kontrol olarak bir iaretleme veya seim kutusu kullanldnda CHECKED deeri bu kutularn iaretlenmi olarak karmza gelmesini salar. MAXLENGTH=uzunluk Metin kutusuna kullancnn karakter girebileceini belirler. NAME=isim Kontrole bir isim verir SIZE=boyut Kontroln boyutlarn karakter cinsinden belirlemenizi salar. TEXTAREA kontrol kullanldnda en,boy' gibi bir ifade kullanlarak kontroln hem eni hem de ykseklii belirtilebilir. SRC=adres Kontrol olarak resim seildiinde resmin bulunduu adresi tar. TYPE=tip Kontroln cinsini belirler ve u deerlerden biri olabilir. Checkbox, Hidden, Image, Password, Radio, Reset, Submit o CHECKBOX: Bir onay kutusu grntler ve sadece doru veya yanl deerlerini alabilir. o HIDDEN: Web taraycsnn penceresinde grnmez fakat ierdii deer gnderilen form ile web sunucusuna ular. 111 maksimum ka
o IMAGE Bir resmi ifade eder ve zerine tklandnda form deerlerini sunucuya yollar. Genellikle bu amala kullanlsa da istenilirse kullancnn resmin hangi x ve y noktalarna dokunduu renilebilir. Bu tag SRC ile birlikte kullanlr ve SRC komutu resmin bulunduu URL'yi gstermelidir. o PASSWORD TEXT kontrol ile ayn zellikleri tar fakat kullancnn girdii karakterler bu kontrolde yldz olarak grlr. ifre girii iin uygundur. o RADIO Kullancnn bir ok seenek ierisinden bir tanesini seebilmesine olanak tanr. Grup iindeki RADIO kontrolleri her zaman ayn ismi tamal kontrollerin deerleri VALUE deerine atanmaldr. o RESET Tklandnda form ieriini temizler. Kullancnn form'u tekrar doldurmasn salar. o SUBMIT Form ieriini sunucuya yollar. VALUE deeri kullanlarak zerindeki yaz deitirilebilir. o TEXT Kullancdan tek satrlk veri alnmasna olanak tanr. SIZE ve MAXLENGTH taklar, bu kontrolle birlikte kullanlabilir imdi Input etiketinin kullanm ilkelerini kullancnn yapabilecei ilere gre ayrarak detaylca inceleyelim
112
varsa, tarayc Value=" hanesine yazacanz bilgiler ve kutunun adn bir ift olarak Servera gnderir. Kutuda iaret yoksa kutunun ad ve deeri Servera gnderilmez. Bylece iinin bo olduu varsaylr. Kutunun ekrana iaretlenmi olarak gelmesi iin, CHECKED parametrei kullanlr.
seilmesi iin nndeki <OPTION> SELECTED kelimesi konulur. rnek: <select name="cinsiyet" size="1"> <option selected>cinsiyetiniz <option value="Erkek">Erkek </option>
etiketinin
iine
NAME=Gonder
<INPUT TYPE=RESET NAME=Sil VALUE="Sil"> Taraycnn otomatik dme ekli yerine kendi dme grafiklerimizi kullanabileceimiz gibi sayfaya birden fazla ve deiik maksatlarla dme koymakta mmkndr. Ancak her dmenin ayr ismi ve ayr deeri olmas gerekir (aksi takdirde gnderilen bilgilerin ilenmesinde karklk kar). Bu kodu yle yazabiliriz: <BUTTON TYPE=SUBMIT NAME=Gonder VALUE="Kaydet"><IMG SRC="kaydet.jpg></BUTTON> <BUTTON TYPE=RESET NAME=Sil VALUE="Sfrla"><IMG SRC="sil.jpg></BUTTON> Not: Formlarda HTML iindeyken ok nemli olmasa da iin iine PHP ASP vs diller girdike nem kazananan bir konu vardr. O da form elemanlarna NAME ile isim verirken kullanlan deerlerdir. NAME bu bilgilerin gnderildii adreste temsil edilecek olan ismidir. Bilgiyi ileyecek olan program bilgilerin bu isimlerle eriecektir. Ksaca NAME ile isimlerde deiken tanmlama kurallarna uygun olacaktr. Aksi taktirde PHP ile ieriini okuyamayz. (Ayn durum ASP diller iinde geerlidir) ieriine verilecek uyulmas bunlarn ve dier
Tabindex
Forma bilgi girii yaplrken tab tuuna baslacak olursa kutular arasnda hareket etmek iin kullanlacak srann 116
girilmesini salar. rnein tabindex deeri 1 olan kutuda tab tuuna baslr ise tabindex deeri 2 olan kutuya gei yaplr. Burada formlar konusunda ok detayl durmaya gerek yoktur. nk standart HTML formdan gelen verileri ileme yeteneine sahip deildir. Bu ilem iin CGI, PERL, JSP, ASP yada PHP gibi dinamik diller kullanlr. Form ieren basit bir sayfa kodu ise: <HTML> <HEAD> <TITLE>ye Kayt Formu</TITLE> </HEAD> <BODY bgcolor=gray text="blue"> <H2><FONT color="#FF0001">ye Kayt Formu</FONT></H2> <FORM method="post" name="formKayit" action="mailto:xxxx@xx.com.tr?subject=deneme&cc=xx @xx.com.tr"> <strong>Ad : </strong><INPUT type="text" name="txtAdi" size="15"> <strong>Soyad : </strong><INPUT type="text" name="txtSoyadi" size="30"> <INPUT type="submit" name="kaydet" value="Mail Gnder"> <INPUT type="reset" name="temizle" value="Temizle"> </FORM></H3> </BODY> </HTML>
117
Dikkat ettiyseniz kodu yazmak iin table vs kullanmadk. Bilgi giri kutularnn uzunluklarnn farkl olacanda varsayarsak, buna TEXTAREA girileride eklenirse dzgn ve gzel grnen bir giri ekran yapmann imkansz olduunu grrz. Bu yzden en uygun seenek form elemanlarn tablo iine yerletirmektir. Sol taraftaki hcreler tantc metinler ad giriniz gibi yazlr, bunlarn karlarndaki hcreye ise giriin yapalaca form eleman konulur. Haliyle bu tasarm daha dzgn bir grnt retecektir.
URL Kodlar
Bazen adres satrnda % iaretlerine boulmu anlamsz gibi grnen bilgiler yer alr. Bunlar URL emasndaki karlna gre kodlanm bilgilerdir. Amalar bilgileri kakter seti sorunu olmadan aktabilmektir. HTTP protokolne gre, ASCII karakter seti iinde yer almayan karakterler(sadece Trke'de yada sadece baz dier alfabelerde bulunan harfler), bir Form'da yer ald taktirde, tarayc tarafndan karlklarna gre kodlanarak gnderilir. Geri bir ok HTTP sunucu program bu karakterlere tanyabilir ve bir dosyaya yazarken doru ekilde yazabilirler; ama bu evirme ileminin bazen program yardmyla yaplmas gerekebilir. nemli olanlarn listesi aada verilmitir. = %FC = %DC = %F6 = %D6 118
= %FD = %DD = %F0 = %D0 = %FE = %DE = %E7 = %C7 % = %25 & = %26 [ = +%5B ] = %5D { = %7B } = %7D ? = %3F = = %3D
119
ynlarna yol aacak sayafalarn kod uzunluklar gereksiz yere artm olacaktr. Bu yzden sayfalarmz azda olsa daha ge alacaktr. Bu az da olsa grecelidir. rnein tabloda ok fazla satr stun varsa ve bunlar biimlendirme ieriyorsa sayfann almas normalden ok daha uzun srecektir. Bunun alternatifi olarak CSS stilleri genel olarak tek bir dosyadan arlrlar ve kullanm iin hafzaya ylr, ad getike arlarak kullanlr. CSS web sayfasn biimlendirmede HTML den daha geni imknlar sunar. rnein div etiketiyle bir katman oluturabiliriz ama hizalama dnda baka bir zelliini deitiremeyiz. Ancak CSS ile katmann sayfa iindeki konumu, arka plan rengi, kenarlk tipi, yaz rengi, kanlnl vb. pek ok zelliini belirleyebiliriz. CSS sadece biimlendime ilemi iin deil sayfann iskeletini tanmlamaktada kullanlr. Bunun iin iin ekrann ayrlan her bir paras ayr bir katman gibi ele alnr ve bu sayede tablo kullanmadan stelik framesetler lede uramadan sayfann atsn oluturabiliriz.
rnek: <html> <head> <title>Css</title> <style type="text/css"> <!-- h2 {font-size:20pt; color:blue} --> </style> </head> <body> <h2>Web Teknikleri</h2> </body> </html> Yukardaki rnekte sayfa ierisinde kullanacamz tm h2 etiketlerinin zellikleri sabitlenmitir. Yani sayfa ierisinde nerede kullanrsanz kullann h2 etiketinin stil zellikleri hep ayn kullanlacaktr. Stil ablon tanmlamalar <head> </head> etiketleri arasnda <style type="text/css"> ile balayp </style> ile bitmelidir. Dezavantaj : Tanmlanan stiller her sayfada tekrarlanm olur. Diyelim ki stillerinin toplamda 5 kb yer tutuyor olsun 500 de sayfanz olsun. Stiller 2500 KB yer tutuyor demektir. Ayrca her sayfa iin CSS stilleri de taraycya yeniden gnderilecek ve gereksiz trafik oluacaktr. Hepsinden beteri ise bir stilde deiiklik 123
yaparsanz dier sayfalar da deitirmeniz gerekir. 3 -5 sayfa iin bu kolaydr belki ama binlerce sayfadan oluan bir portal dnrseniz bu iin ne derece zahmetli olaca aktr. Ayrca bir sayfada farkl dierinde farkl biimlere yer verilmi olabilir. Buda sitenin tutarlln drr.
<title>Css</title> <link rel="stylesheet" type="text/css" href="stil.css"> </head> <body> <h1>Web Teknikleri</h2> <h2>Web Teknikleri</h2> <h3>Web Teknikleri</h2> </body> </html> HTML dosyasnn kodlar arasnda geen <link rel="stylesheet" type="text/css" href="stil.css"> kodu stil.css dosyasndaki stil zelliklerini kullanmamz salar. Avantajlar : 1. CSS dosyas hafzada durduundan CSS seferinde web serverdan yeniden istenmez. her
2. CSS dosyas bir tane olduundan sayfalar klr. Bylece bu iki madde siteyi daha hzl hale getirir ve gereksiz trafii nler. 3. CSS dosyasnda yaplacak bir deiiklik annda tm siteye yansyacaktr. 4. Sitenin tamam biimlendirme asndan tutarl hale gelir.
aramamz gerektiinden hep rafn stnden altna doru aramaya balayacamz varsayyoruz. Peki ayn stil ablonu iki yada daha fazla sayda tanmlanrsa ne olacak ? Bu durumda olacak olan udur. Rafn stnden altna doru arama yaplr bulunan ilk eitlikte ie arama biter. Ksaca ncelik hep en son tanmalanan stilin olur. zetle 1. Bir HTML sayfaya iki LINK komutu ile ardarda iki ayr CSS dosyas balarsanz, ikisinde de ayn ada stil ablonu ieriyorsa, ikincisindeki, yani Cd rafnn en stndeki komutlar geerli olur. 2. Bir HTMLe biri LINK, dieri EMBED iki ayr stil bilgisi verilirse ve ikisinde de ayn ada sahip stil ablonu var ise, ikincisi, yani HTMLin iinde EMBED olan geerli olur; nk HTML nce d dosyay okuyacak, onun stne kendi iindeki stilleri koyacaktr. 3. Son olarak, bir sayfada hem LINK, hem EMBED stil balants olsa ve diyelim ki bir HTML etiketinin nnde onu biimlendiren bir yerel stil komutu (INLINE stil) bulunsa, en son okunan yerel stil komutu olaca iin, tarayc ilk iki stili bir kenara brakp, INLINE stili uygulayacaktr.
126
<DIV>..</DIV> etiketleri arasnda yer alan her ey, yani yazlar, resimler, grafikler, tablolar, video vs ierikler, bu etikete vereceiniz yerletirme ve deime zelliklerine uygun hareket ederler. <div> etiketi ile belgede blmler oluturulabilir. <div> etiketi iin herhangi bir stil zellii belirlendiinde <div>..</div> arasna yazlan tm etiketler bu stilden etkilenir. Aada oluturulan blmde <div> etiketine style="color:#FFCC66;" stili uygulandnda <div> iindeki paragraf ve balk da ilgili renkte (turuncuya yakn bir renk) grntlenecektir. <div style="color:#FF0000;"> <h4>Blm iinde bir balk</h4> <p>Blm iinde herhangi bir paragraf</p></div>
simlendirilmi Seiciler
Bu tip seicilerin kullanmnda html iinde etiketten sonra ID=xxx kodlamas yaplr. Bu tip seici kodlamas # ile balar. #mavi { COLOR: blue } #icerden { text-indent: 2cm } 127
isimlendirilmi seicilerdir. Balarndaki # iareti onlarn dierlerinden farkn gstermektedir. (Bu iaretten sonraki isim blm mutlaka harfle balamaldr; ama iinde rakam ve kesme izgisi kullanlabilir.) Bu seicilerden HTMLde yararlanmak iin, adlaryla arlmas gerekir. Bylece tanml olan isimleri ile kodlanm olan biimlerin uygulanmasn salarlar. <P ID=icerden>Bu paragraf dierlerine oranla 2 sm ierden balar<-p> <P ID=mavi>Bu paragraf mavi olarak gsterilir</p> Bu seiciyi kullanrken, ayn etikete iki ayr kimlik verilemeyeceine dikkat edilmelidir. Bunun bize ne getirip gtrecei konu sonunda detaylca anlatlacaktr.
Snf Seiciler
Bunlarn kodlamas ise . ile balar ve istenildii takdirde bir snf tanmlanp bu snfn biimlendirme zelliklerinin birletirildii standart html etiketine de uygulanabilmesini salar. stenildii kadar Snf Seici oluturmak mmkndr. rnein krmz diye bir snf oluturup, bu snfn font rengini krmz yapp, dikkat ekmesi gereken kelimeyi, cmleyi veya paragrafn etiketini bu snfa balamak mmkndr. Bu stilin komutu yle yazlr: .kirmizi { COLOR: red } 128
Kirmizi kelimesinin bandaki nokta iaretine dikkat edilmelidir. Bu iaret su snf isimlendirilmi seicilerden ayrmaktadr. HTML sayfasnda diyelim ki bir bal krmz yapmak gerekmekte olsun: <h1 class="kirmizi">Bu balk krmz olacak</h1> Ya da bir paragrafn tmn krmz renkte olacak denirse: <P class=.kirmizi>Bu paragrafn tm gsterilerek, dikkati hemen ekecektir.</p> krmz
Yukardaki kullanm snf seici trnn bamsz kullanmna bir rnektir. Dier bir kullanmda bir etikete bal olarak kodland aadaki kullanm eklidir. h1.kirmizi { COLOR: red } Yukardaki ekilde tanmlanm bir snf seici grld zere snrl kullanma sahiptir. Bu durumda krmz snfn sadece H1 etiketi ile kullanmak mmkndr. Snf seiciler HTML iinde bir etiket iin birden fazla olmak zere kullanlabilirler.
Link (henz ziyaret edilmemi olan adres) Visited (daha nce ziyaret edilmi adres) ve 129
Active (zeri tkland anda). imdi bu durumlara uygun CSS etiketi yazalm:
A:link { COLOR: Black } A:active { COLOR: red } A:visited { COLOR: Gray } Bu durumda ziyaretinin ekrannda A etiketleri siyah olarak gsterilecek, kullanc herhangi bir balanty tkladnda link metni krmz rengini alacak; daha sonra ilgili sayfaya bir daha gelirse bu kelimeler gri olarak gsterilecektir. a:link { font-family:arial; font-size:11pt; color:blue; text-decoration:none; } a:hover{ Sayfamdaki linklerin Yaztipi arial, boyutu 11 punto, rengi mavi olsun ve alt izili olmasn.
font-family:arial; Yaztipi arial,boyutu 11 punto, font-size:11pt; rengi krmz olsun ve Alt izili color:red; olmasn. text-decoration:none; } a:visited{ font-family: font-size:11pt; color:grey; Ziyaret edilen linklerin ise arial; Yaztipi arial, boyutu 11 punto, rengi gri olsun ayrca alt izili olsun. 130
textdecoration:underline; }
Karma etiketin kullanlabilecei bir dier durum ise balk veya metin gibi bir etiketin ilk satr veya ilk kelimesinin zelliklerini kontrol eden seicidir. rnein: P:first-line { font-variant: small-caps; font-weight: bold } P:first-letter { font-size: 300%; float: left } Bu seicilerle oluturulan etiketlere HTMLin iinde yle gnderme yaplr: <P><P:first-line><P:first-letter>B</P:firstletter>Bir aata ne kadar ok yaprak varsa o kadar az meyve olur </P:first-line> Arap atasz..... </P>
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 tanmlamalara gre HTML kodlanrken H1 etiketi iinde B etiketi kullanlrsa iaretlenen kelimeler pembe, paragraf etiketi iinde B etiketi kullanlr ise iaretlenen kelimeler siyah olacaktr. Not: CSS kullanmnda isimlendirilmi seiciler daha ok <DIV> yada <SPAN> gibi yaplar iin, snf seiciler ise biimlendirmeler iin kullanlrlar. simlendirilmi seicileri etiket bana biden fazla kullanmak mmkn olmadndan bunlarla biimlendirme yapmak sadece ekstra i demektir. Bunu basit bir rnekle izah etmeden fark anlamak zordur. Biimlendirme iin koyu, italik ve alt izili biimlerine ihtiyacmz olsun. Ancak yaz hem italik hemde alt izili olursa diye dnnerek ok daha fazla snf tanmlamak gerekecektir. nce bunu isimlendirilmi seiciler iin dnelim. 1. koyu 2. italik 3. altizili 4. koyu italik 5. koyu alt izili 6. italik alt izili 132
7. koyu italik alt izili 7 seici olmadan bu ii yapmak zor grnyor nk her etiket iin sadece bir isimlendirilmi seici kullanmna izin verilmekte. imdi imekler akt sanrm. rnei snf seicilerle yapmak iin ilk yeterlidir. nk snf seicileri bir arada kullanmak mmkndr.
fontfamily
Tahoma, Arial
133
Yaznn normal veya saa eik olmasn salar. Yaznn, yazld gibi veya tmnn byk harflerden olumu gibi grnmesini salar. kinci durumda metnin ilk harfi de boyut olarak byk gzkr. Yaznn belirler. kalnlk-inceliini
fontweight
font-size
Absolute-size (xx- Yaznn bykln small | x-small | small | medium | large | x-large | xx-large) relative-size (larger | smaller) px , pt, %
134
Letter Spacing
Text None | underline | Metin ssleme Decoratio overline | linen through | blink Vertical Alignmen t baseline | sub | Dikey hizalama super | top | texttop | middle | bottom | textbottom | Yzde:200% vb. none | capitalize | Metin dntrme uppercase | lowercase Left | right center | justify Boyut | Yzde | Metin hizalama
Text Transfor mation Text Alignmen t Text Indentati on Line Height RENK VE ARKAPLA
Metin girintisi
135
N Color Renk ad veya Renk RGB deeri (red veya #FF0000 gibi) Renk ad | RGB Arka plan rengi deeri (red veya #FF0000 gibi) | transparent Arka plana yerletirilecek resmin adresi resminin hangi tekrarlanacan
Backgrou nd Color
Sayfa kaydrma ubuuyla hareket ettirildiinde zeminin de hareket edip etmeyeceini belirler.
yzde | boyut | Zemindeki resmin sayfa top | center | zerinde istenilen yere bottom| left | yerletirilmesini salar. center | right
LER Magrin Padding Border Width Border Color Border Style Saysal deer. Saysal deer. Saysal deer. Nesnenin dndaki nesnelere olan araln belirler. Doldurma Kenarlk genilii (kalnl)
Renk ad | RGB Kenarlk rengi deeri none | dotted | Kenarlk stili dashed | solid | double | groove | ridge | inset | outset
Border
| Kenarlk | rengi.
kalnlk,
style
ve
137
List Style disc | circle Type square | decimal lower-roman upper-roman lower-alpha upper-alpha none
List Style adres | none (list- Liste simgesi olarak resim Image style-image: kullanlmasn salar. url(images/maddei mi.gif) gibi.) List Style inside | outside Position List Style Listenin ilk satrnn dier satrlar ayn hizada olup olmayacan belirler. disc (Liste biiminin disk (ii dolu daire) eklinde olmasn salar.) circle (Liste biiminin ember eklinde olmasn salar.) square (Liste biiminin kare olmasn salar.) decimal (Liste biiminin rakamlardan olumasn salar.) lower-roman (Liste biiminin i,ii,iii gibi kk
138
roma rakamlarndan olumasn salar.) upper-roman (Liste biiminin I,II,II gibi byk roma rakamlarndan olumasn salar.) lower-alpha biiminin a,b,c kk harf salar.) (Liste eklinde olmasn
upper-alpha (Liste biiminin A,B,C eklinde byk harf olmasn salar.) none (Listenin simgesiz olmasn salar.)
font
kullancnn
P { FONT-FAMILY: "New Century School Book", Times, serif } P { FONT-FAMILY: "Arial Black", Helvetica, sans-serif } FONT-STYLE(Yazl ekli): Bu etiketle harfin normal, italik veya yatk olmasn salayabilirsiniz. (talik harflerin mutlaka ne yatk olmas gerekmez! Ama ou italik harf, ne yatktr.) rnek: H1 { FONT-STYLE: normal } H2 { FONT-STYLE: italic } H3 { FONT-STYLE: oblique } FONT-VARIANT (Yaztipi tr): Bu etiketle harfin normal veya kk harf boyunda ama byk harf biiminde olmas salanabilir: H1 { FONT-VARIANT: normal } H2 { FONT-VARIANT: small-caps } FONT-WEIGHT (Yaztipi Koyuluu): Bu etiketle, fontun normal, siyah, koyu, daha koyu, daha ak olmas salanabilir. Verilebilecek deerler, normal, bold, bolder, lighter olabilecei gibi, 100, 200, 300, 400, 500, 600, 700, 800 veya 900 olabilir. Burada 100140
300 ince izgili harf, 400-500 kaln izgili harf, 600-900 ok kaln izgili harf saylr. rnek: H1 { FONT-WEIGHT: normal } H2 { FONT-WEIGHT: bold } FONT-SIZE (Yaztipi boyutu): Bu etiketle, fontun bykln belirleyebilirsiniz. Bu, mutlak veya greli olabilir. Mutlak byklk ya punto, santimetre veya in cinsinden belirli bir rakam (r. 12 pt, 1cm) veya en kkten en bye doru olmak zere, xx-small, x-small, small, medium, large, x-large, xx-large olabilir. Greli byklkler ise bir nceki fonta gre daha byk anlamna larger veya daha kk anlamna smaller olabilecei gibi, bir nceki harf byklnn yzdesi olarak verilebilir. Tarayc farklarn dnecek olursak en uygun seenek punto kullanmaktr rnek: H1 { FONT-SIZE: 12pt } H2 { FONT-SIZE: 90% } (Yzde iaretinin rakamn olduuna dikkat ediniz.) nnde deil, arkasnda
Yaztipi : FONT: eklindeki bu parametre ile bir ok font zellii birden verilebilir. Bu ifadenin karsna harf stili, tr, arl, ls ve ailesi ile bu harfin kullanld satrn satr ykseklii toplu olarak belirtilebilir. rnek: P { FONT: italic bold 12pt/14pt Times, serif } 141
142
P { BACKGROUND: black url(/images/zemin1.gif norepeat bottom right} Pozisyon deerleri, stte solda (left top), stte ortada (top center), stte sada (top right) olabilecei gibi, ortada ortalanm (center center), ortada sada (center right) veya ortada solda (center left), ya da altta solda (bottom left), altta ortada (bottom center) ve altta sada (bottom right) olabilir.
Metin zellikleri:
Kelime aralklar: WORD-SPACING: parametresi ile kelimelerinin arasna konulmasn istediiniz ilave boluklar belirtebilirsiniz. Burada kullanlan l kullanlan fontun en geni harfi olan m harfinin ondalk blmdr. rnek: P { WORD-SPACING: normal } H1 { WORD-SPACING: 0.2em } H2 { WORD-SPACING: -0.4em } Harf aralklar: LETTER-SPACING: parametresi ile harflerin arasna konulmasn istediiniz ilave boluklar belirtebilirsiniz. Burada kullanlan l de m harfinin ondalk blmdr. rnek: P { LETTER-SPACING: normal } H1 { LETTER-SPACING: 0.2em } H2 { LETTER-SPACING: -0.3EM } 143
Metin ssleme: TEXT-DECORATION parametresi ile bir metnin altn izdirebilir (underline), stn izdirebilir (overline), veya ortasna izgi koydurabilirsiniz (line-through), veya bir grnp, bir kaybolmasn salayabilirsiniz (blink). Bunu, alt normal olarak izilen A (Anchor) etiketiyle verdiiniz balant kelimelerinin altnn izilmemesi iin 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 saa (right), sola (left) veya ortaya (center) bloklayabilirsiniz. rnek: H3 { TEXT-ALIGN: left } H1 { TEXT-ALIGN: center } Birinci satrn ierden balamas: TEXT-INDENT parametresi ile ile bir metnin birinci satrn vereceiniz lde ierden balatabilirsiniz. rnek: H3 { TEXT-INDENT: 1cm } Satr Ykseklii: LINE-HEIGHT parametresi ile bir metnin satrlar arasna konacak boluu vereceiniz yzde ls ile normal satr yksekliine gre belirleyebilirsiniz. rnek: H3 { LINE-HEIGHT: 200% } H1 { LINE-HEIGHT: 350% } 144
(Bu l yzde 100n altna derse, satrlar birbirinin zerine binecei iin okunamaz hale gelir.) lk Harf Bytme : First-Letter Gazete ve dergi yazlarnda baz paragraflarn ilk harfi, dier harflerden ok byk ve aa doru iki, hatta satr yksekliinde olur. Gazetecilik dilinde buna Gmme Harf denir. Yazl basnn favori masast yaynclk program QuarkExpress'te bile bunu otomatik yapmak iin programn beinci srm beklenmitir. lk HTML srmlerinde bu olay olmadndan bu ilem hep <FONT> etiketleri ile yaplrd. imdi ise bu parametre ile yapmak mmkndr. P.first-letter {font-size: 200%;} Byte oran tamamen kodlayan kiiye baldr. lk harfi yzde 200 yerine yzde 400 de bytmek mmkndr. Bunu kod iinde kullanrken ise <p>Bu paragraf deneme paragrafdr. Bu paragraf deneme paragrafdr. Bu paragraf deneme paragrafdr. Bu paragraf deneme paragrafdr. Bu paragraf deneme paragrafdr. Bu paragraf deneme paragrafdr. </p>
belirleyen parametreler, son zamanlarda CSS-P (Cascading Style Sheets-Positioning) eklinde anlmaya balad. Gerekten pozisyon ilemi CSS iinde nemli bir yere sahiptir ve dikkatlice incelenmelidir. Konum POSITION: Deerleri Position parametresi ile belirlenen konum, sabit (static) mutlak (absolute) greli (relative)
deerlerini alabilir. Mutlak (absolute) konum verilmi bir ierik (paragraf, resim, tablo), HTMLin dier ierii nedeniyle asla yer deitirmez; kendisine verilen st (top) ve sol (left) deerlere gre mutlak bir yerde kalr. Buradaki l pixel cinsindendin ve taraycnn HTML sayfasn gsterdii alann sol st kesi 0-0 kabul edilerek verilir. rnein top: 20 px; left: 20px eklindeki bir l, bu ieriin taraycnn penceresinde sol st kesinden 20 pixel aa ve sol kenarndan 20 pixel saa doru yerlemesini salar. Sabit (Static) konum, yeri belirlenmek istenen ieriin, HTMLin dier ieriine gre, nereye geliyorsa, oraya yerlemesini salar. Bir anlamda bu ieriin durumu dier ierie baldr. Greli (Relative) konum ise verilecek llere gre belirlenecek yer, bir nceki ieriin konumunun bittii yerden itibaren hesaplanr. rnek: 146
<SPAN STYLE="position:static; backgroundcolor:#000000">Siyah. Konum: sabit</SPAN> <DIV STYLE="position:absolute; top:40px; left:40px; background-color:#cccccc">Gri. Konumu: mutlak[Absolute], sol kenar 40 Pixel santim ierden.</SPAN> Grnrlk: Visibility VISIBILITY: parametresi ile, biimlendirilen ieriin ekranda grnmesi yada gizlenmesi salanabilir. erik gizlenmi (hidden), veya grnr (visible) olabilir. Eer istenirse (inherit) parametresi ile grnrlk deeri iinde bulunduu nesneden miras yolu ile alnmasda salanabilir. Yani ata olan ierik grnyorsa iinde yer alan bu ksmda da grnr, aksi takdirde grnmez. rnek <div id="kanal01" style="position:absolute; left:10px; top:10x; width:200px; height:200px; z-index:1; visibility: visible; background-color: #cccccc">Bu ierik Mutlak konuma sahiptir, zemini siyahtr. Div ad kanal01 olan bu alan her kouldagrnr </div> CSS ve Katman (Layer) Kavram Photoshop ve Gimp tarz programlar kullananlar bu kavrama yabanc deildirler ancak burada katmann ne olduunu izah etmek gerekecek. Katman kavramn anlamak iin aadaki ekle bakalm:
147
ekilde grlecei gibi 4. katman en stteki kavram ve tamam grnmekte. Onun altndaki katman 3. katman nk bu katman 2 nolu katmann bir ksmn gizlemekte. Yani her art altnda 3 nolu katman 2. katmann stndedir. Buna gre tabi ki 2. katman da 1. katmann zerindedir. Normal artlarda web sayfalarnda ierik yan yana gelecektir. Dolaysyla katmana ihtiya yoktur diye dnlebilir. Ama CSS ve DIV etiketleri iin durum bundan ibaret deildir. DIV ile tanmlanan alanlara boyut vermek mmkn olduundan bu alanlarn st ste gelmesi de pekala mmkndr. Bunu zmek iinse CSS iinde katman indeksi denilen z-index paraetresi kullanlr.
148
Katman ndeksi (Z-index): Z-INDEX: parametresi, bir ieriin tarayc tarafndan hangi katmanda gsterileceinin belirtilebilmesini salar. Bir sayfada, DIV veya SPAN etiketi ile oluturulmu nesne varsa, onlarn katman endeksine bakarak, hepsini belirli bir kata koyar. Yanyana gelen nesnelerin kanc katta olduu nemli olmayabilir; ancak nesneler st ste geliyorlarsa, hangisinin hangi altta, hangisinin ortada, hangisinin stte duraca nem tayabilir. Verilecek deer 1, 2, 3 eklinde bir sra numarasdr. 1, en alttaki katmandr; dierleri srayla onun zerindeki katlar gsterir. rnek <div id="kanal01" style="position:absolute; left:10px; top:10x; width:200px; height:200px; z-index:1; visibility: visible; background-color: #cccccc">Gri ereveli yazi..</div> <div id="kanal02" style="position:absolute; left:20px; top:30px; width:220px; height:220px; z-index:2; background-color: #000000">Siyah Renkli yazi </div> Konum belirleyen parametreler arasnda eni boyu belirlenmi bir nesneye koyduunuz metnin tamas halinde taan yaznn gsterilip gsterilmeyecei, veya bir nesnenin iine konulan ieriin hangi blmlerinin gsterilip, hangi blmlerinin kesileceini belirleyen dier iki kontrol parametresi daha vardr. Bunlarn tarayc yorumlar srmden srme deimektedir. Position: Katmann yerinin neye gre belirleneceini (absolute, relative) pencere esas alnarak belirlensin 149
Top: Pencereye gre ka piksel aada olacan, Left: Pencereye gre ka piksel solda olacan, Width: Katmann geniliini, Height: Katmann yksekliini, Background-color: Arkaplan rengini, Overflow: Taan metnin durumunun (hidden, gizli kalsn, gsterilmesin), ne olacan sra ile verilmitir,
Z-index: stste geldiinde hangi yerletirileceini (1. katmana 1 deeri dolaysyla en altta o gsterilecektir),
Padding: Katmann kenar izgileri ile iindeki nesneler arasnda braklacak boluu, Border: Kenar izgilerinin kalnlk, kenarlk tr ve rengini belirtmektedir. Boluk brakma, Margin : .eriin drt bir yannda braklacak boluk miktarlar toplu olarak yada stnde (MARGIN-TOP), sanda (MARGIN-RIGHT), solunda (MARGIN-LEFT) ve altnda (MARGIN-BOTTOM) olacak ekilde ayr ayr belirtilebilir. Tanm tek bir defada yaplacak ise parametrelerin ileni sras st, sa, sol, ve alt olarak okunacaktr. rnek: P { MARGIN-TOP: 10px } P { MARGIN-RIGHT: 20px } P { MARGIN-LEFT: 20px } P { MARGIN-BOTTOM: 10px } 150
P { MARGIN: 10px 20px 20px 10px} Bir etiketin iinde yer alabilecek <! ve --> eklindeki etiketler HTML dilinin yorum etiketleridir; bu etiketlerin arasndaki eyler, tarayclar tarafndan dikkate alnmaz.
Xhtml BELGE TR
XHTML aslnda bir HTML kodlama standarddr. <html> etiketinden nce belge tipi, DOCTYPE ifadesi ile belirlenebilir. XHTML'de tip belge tr seenei vardr. Bunlar Transitional (Geili), Strict (Kat), Frameset (ereve Kmeleri) 'dir. Transitional (Geili): Bu belge tr standart HTML zerine kurulmu olup artk geerli olmayan HTML etiketleri ile de uyumludur. Genelde kullanlan belge trdr. Belgeye <html> etiketinden nce aadaki kod eklenir. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> Strict (Kat) : Uygunluu kabul edilmemi etiketleri kabul etmeyen bir belge trdr. Belgeye <html> etiketinden nce aadaki kod eklenir. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 151
Frameset (ereve Kmeleri) : Bu belge tipi sayfada ereve kullanmna izin verir. ereveler fazla kullanl olmadklar iin tavsiye edilmezler. Belgeye <html> etiketinden nce aadaki kod eklenir. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
Bir editr kullanrken editrn kodu renkledirme yapabilmesinin yannda XHTM etiketini grd anda renklendirme emasnda buna uygun deitirebilmesine dikkat etmek gerekir.
Sonu
u ana kadar genel olarak statik HTML yapm ile etiketleri grm olduk. Her ne kadar burada ad gemeyen baz etiketler olsada en genel olanlar burada ele alnmtr. stelik hi etiket bilmeden Frontpage ile sayfa yapan birisi ele alndnda siz en azndan iin geri plan hakknda fikir sahibi oldunuz ve bir avantaj elde ettiniz. stelik bir ok iyerinde ie alrken aday kiilerden sadece notepad kullanarak tasarm yapmalar beklendii bilinmektedir. Etiketleri biliyor olmasaysnzz bunu nasl yapacaktnz ? u anda belki size az gelebilir ama rahatlkla normal grnml bir sitesi tasarlayabilecek kadar bilgi edinmi durumdasnz
152
Altn tler
Hosting Hizmeti Alrken
1. irket ne kadar gvenilir. Referanslar ne durumda kontrol edilmelidir. 2. Host referans sitelerinden irket hakkndaki olumlu-yada olumsuz bilgiler kontrol edilmelidir. 3. irketin UP-time vaadi kontrol edilmelidir. %100 up time orann kimse salayamaz ama ne kadar yksekse o kadar iyidir. 4. htiyacnz olan hizmete iyi karar vermeliniz. rnein sadece iirlerini yanlayacanz bir site iin IIS zerinde hizmet veren bir paket daha pahal olacaktr. Oysa Linux+Apache ikili ile ok daha ucuz bir zm bulabilirsiniz. 5. irketlerin hizmet paketlerini detaylca karlatrn. Paketlerde ka Mb alan verilecei, ne kadar Bant Genilii tanndn, Veritaban dahil olup olmadn, ilave mail hesab verip verilmediini kontrol etmelisiniz. 6. Kontrol panelinin ne olduu da nemlidir. Genel itibari hepsi kolay kullanmldr ama baz paneller site sahipleri iin hayat inanlmaz derecede kolaylatrrlar.
2. Sade olun. Abartdan kann. Bir arap airin dedii gibi bir aata ne kadar ok yaprak varsa o kadar az meyve olur. 3. Gereksiz resim, hareketli gif, animasyon ve film dosyalarndan kann. Kullanclar anlamsz bir resim iin sayfanzn geciken yklemesini beklemek zorunda deildirler. 4. Kullanclar sayfaya ne iin geldilerse onu en ksa yoldan bulsunlar. Kimseyi oradan oraya linklerle srndrmeyin. 5. Sayfanzda meta tag kullanmna zen gsterin ki arama motorlarndaki aramalarda mstakbel ziyaretilerin sizden haberi olsun. 6. Renk uyumuna dikkat edin. Erkek Giyim maazasna Pembe, Gen kzlar iin Fan sitesine Gece mavisi renk uymaz. Renk kontratsda nemli bir konudur. 7. Siteniz genel bir ablonu takip etsin biimlendirmeler genel itibar ile ayn olsun. ve
3. Bu i iin uygun donanm ve yazlma sahip olup olmadnz kontrol edin 4. Yapacaz site tasarmlarn test etmek iin sisteminize birka ayr web taraycs kurun. Benim kiisel tercihim Internet Explorer, Firefox ve Opera ilk anda yeterlidir. (IE iin 5.5,6 ve 7 srmleri arasnda dalar kadar fark olduunu unutmamakta fayda var) 5. iin gerekeceini dndnz Javascript dosyalarn elinizin altnda bulundurun eer yoksa bulmak iin Open source arivlerden tarama yapn. 6. Sitenin ana temas tablo yada CSS olarak kodlayn 7. Sitede kullanlacak belirleyin 9. Sitenizi test edin. Dier tarayclarda nasl grnyor Stillerde dzeltilmesi gereken yerler varm Deiik ekran znrlklerinde nasl grnyor Bask nizleme yaptnzda kat stndeki hali normalmi Dikkatten kaan bir nokta varm Yazm hatalar varm resimleri ve yaz stillerini
155
olmaldr. Tabii birde tasarmc bunlar altracak uygun bir bilgisayara sahip olmaldr. Tabii burada u da unutulmamaldr. Web sitesi yapmak iin illa 1000 $ verip Photoshop, 500 $ verip Dreamweaver almaya gerek yoktur. Bunlarn daha ucuz alternatifleri olduu gibi Open source programlarda mevcuttur. nerim Gimp, Nvu, Open Lazslo, Notepad++, Pogrammers Editor gibi programlarn indirilip denenmesidir. Ben u ana kadar Gimp kullandm ve tkandn hatrlamyorum. Normal bir web kullancs iin bir tarayc yeterlidir ama tasarmc iin deil. nk tasarmc, yapt tasarmn en azndan en popler tarayclarda dzgn grndnden emin olmaldr. Site tasarm yapan bir kii internette gezerken grd gzel tasarm stillerini, men stillerini, javascriptleri ve gelimi teknikleri bir kede tasnifleyerek tutmak gibi bir zllie sahip olmaldr. Bunu sylerken kesinlikle bakalarna ait bir eyin aynen alp kullanlmas deil, nasl yapldnn renilmesi kastedilmitir. Tabii baz kodlar open source olduundan aynen kullanmakta bir beis yoktur. Kada izilen temay tablo yada CSS olarak oluturmakla ileme balanr. lgili linkler, grafikler vs yerletirilir ve site sahibinin genel dnceleri alnr. Gerekli ise deiiklikler yaplr ve daha sonra dier sayfalarn kodlanmasna geilir. Daha sonra test aamasna geilmeli ve yukarda anlan tm hatalar kontrol edilip gerekli dzenleler yaplmaldr. zellikle tarayc testi ok nemlidir. nk mteri siteyi 157
tasarmcnn bilgisayarnda ayr, kendi bilgisayarnda ayr ekillerde grrse, iin kalitesinden phe eder. Ufak tefek farklar izah edilebilir ancak birbirine giren katmanlar, ekranda adeta zplayan men CSS menleri (benim bama geldi site 7 srmnde normaldi ancak IE 6 kullanan biri tam o anda denk gelip sitenin karizmasn bozmutu) izah edilemez. Sitede kullanlan dosyalarn isimlerini, klasrleri vs kontrol edip hepsini ayn notasona getirmekte fayda vardr. Genel olarak tm web sitelerinde tm dosya isimleri kk harf kullanlrlar. nk hosting ileminin olaca sistemde Windows mu Linux mu kurulu olmasna gre bu isimlerin durumu nem kazanr. Bu aamada hosting iin uygun yer belirlenir ve gerekli FTP ayarlar yaplp site web zerine kopyalanr. Site son bir kez kontrol edilip, telim edilir.
Sitesinin
Tutulmasn
Salayan
Internette tek tklama uzamzda miyonlarca ve hatta milyarlarca site varken neden sadece bazlar ok byk hit saylarna ularken bazlar unutulup gider diye dndnzm ? rnein bir zamanlarn gzde arama motoru www.excite.com nerdeyse ad bile unutulmu durumda, ilk arama motoru www.yahoo.com ar kan kaybna devam edip durmakta. Yine ayn ekilde nerdeyse unutulan Altavista motorunun aratrma ekibi lideri, Googlen yerinde bir olabilrdik derken, bir gerei ifade etmektedir. fadesine gre arama motoruna gml reklam fikri ok daha 158
ncesinde onlarn gndemine zaten gelmi ancak, kullanclar bundan holanmaz diye anslarn denemedikleri iin ans kapy iki kere almam ve altavista eski teknolojili bir arama motoru olarak kalmaya devam etmi. Bu gn itibariyle syledikleri ise en iyi teknolojiye ahip olmak yetmez, bunu uygun giriimlerlede desteklemelisiniz. Bunlar olurken nasl olupta birka yllk www.google.com inanlmaz karlara, eriim rekorlarna sahip olmaktadr. yle ki ABD bakan yardmc dnyann yuvarlar olduuna artk inandm dedikten sonra kendisine yneltilen nasl sorusuna Google sayesinde demekte. Internette arama anlamna gelen Googling kelimesi nerdeyse szlklere girmek zere. Peki bunlar nasl oluyor Bu olay 5 ana balkta incelemek mmkn 1. Tantm 2. Kullanc dostu tasarm 3. Eriilebilirlik 4. Kaliteli ierik 5. Geri Besleme Bu balklar biraz aarak inceleyelim
Tantm
Gnmzde web ortamna hergn milyonlarca sayfa, binlerce site katlmaktadr. Durum bu iken insanlarn sitenizi ziyaret etmesi iin haliyle iyi bir sebepleri olmaldr. Sebep olsa bile en basitinden insanlarn 159
bundan haberi olmas iin Google robotlarnn sayfanza uramas gerekmektedir. Bunu abuklatrmal ve srekli klmak iin bteniz uygun ise web sitelerine ve arama motorlarna reklam verebilrsiniz. Google reklam veren siteleri aramalarda en st sralarda gstermektedir. Ayrca karde site dediimiz siteler edinmeli, onlara link vermeli ve onlarnda size link vermelerini salamalsnz. rnein Google indekslerini olutururken dier sitelerden sizin sitenize belirli bir sayda balant erilmemise sizin sitenizi ciddi anlamda bir referans olarak kabul etmemektedir. Tantm bu yzden nemli bir admdr.
Eriilebilirlik
Google yada baka bir arama motorunun altnda bu site en iyi x tarayc ile alr diye bir ifade gren birisi olmumudur acaba. Ben gremedim ve greceimide hi sanmyorum. O halde site ierii ve grnm nasl olursa olsun her ekilde siteniz ortalama bir grnt kalitesi yakalamaldr. Ziyaretiler sitenize hangi tarayc ile bakarsa baksn ieriinizi doru ekilde grntleyebilmelidir. Site tasarlanrken sadece tek bir taraycda alan etiketlerden kanlmaldr. 160
Kaliteli erik
rnein tarih konulu bir siteniz var ve Ankara Sava hakknda aratrma yapan birisi sitenize girdiinde sadece Ankara Sava sonucu Fetret devrine girildi bilgisini buluyorsa ierikle ilgili sorununuz var demektir. Kullanclar en ok arama sitelerini kullanrlar ve buradan sitelere bakmaya balarlar. Kalite ieriiniz yok ise kimse sitenize link vermez. Yeterince link alamazsanz, google ve dier arama motorlar sizi alt sralara atarlar. Kullancy mmkn mertebe sitenizde tutmanz gerekir. rnein bu sayfann yannda Kurtulu Sava, Preveze Deniz Sava gibi linkler olur ise ziyaretiniz belki bu linklerede tklayacaktr.
Geri Besleme
Sitenizin tasarm ve ierii size tamamen doyurucu gelebilir ancak kullanclarn hatalar, isteklerini ve nerilerini size bildirebilmeleri iin geri besleme olana sunmalsnz. rnein Tuncay anl iin bir fan sitesi hazrlyorsunuz. erik sizce gayet yeterli ama bir kullansnz, bir ma sonras ilgili ahsn UEFAda haftann golcs seildiini ama bunun sizin ierikte olmadn fark etti. Kullanc bunu size bildirebilmeli ve sizde bunu en ksa srede dzeltebilmelisiniz. Bylece hem ierik gzelleir, oalr, hemde kullanc kendisi ile site arasnda bir ba kurar. nk site sahibi ona deer vermi ve nerisini hemen yerine getirmitir.
161
PHP 4 srmne geldiinde ise eitli gelitirmeler resmen bariyerleri yerle bir etmitir. Bunlar Zend Engine Sunucudan bamsz alma nce derle sonra altr mant ile hz kazanma Nesneye ynelik programlama Multithreading
Zeev ve Andi ZEND adl irketi kurup PHP dilini kurumsal lee tadlar. Gelitilen Zend Engine ile PHP artk referans sayma, hafza ynetimi ve sunucudan bamsz alma yetenei de kazanmt. Tabi veritaban balantlarnn, dosyalarn, hafza boluklarnn bu engine ile kontrol edilebilir hale gelmeside cabas. Sunucudan bamsz alma derken PHP dilinin neredeyse bilinen btn web sunucularla ortak alabilir hale gelmesi kastedilmektedir. Ayrca derleyici nceki srmlerdeki bir satr oku, yorumla, altr, dier satra ge mantn brakm, nce tm kodu okuyup, ardndan derleme ve altrma yeteneine kavumutur. Buda tabi ki eitli hzlandrma mekanizmalarnda beraberinde getirmitir. Tabi ki bu abalar sonusuz kalmam PHP bu srmde kurulu olduu sunucu saysn 9.500.000 a tamtr. En ok kullanlan Apache sunucu modl olma zellii uzun zamandr PHPdedir. PHP 5 srmnde artk dilin olgunlama aamasna gelinmitir. nk nceki PHP srmleri byk apl projeler iin biraz basit kalmakta idi. PHP 5, ile gelen yenilikler ise 163
olmutur. PHP, Linux gibi, Ak Sistem (Open source) kurallarna tabidir; isteyen programda istedii deiiklii yapabilir; ancak bu deiiklikten para kazanamaz ve yapt deiiklikleri isteyen herkese aklamak zorundadr. Dilin resm ad "PHP: Hypertext Preprocessor" (Hiper-metin n-ileyici) olarak deitirildi, ve eitli Web Server'larn PHP dili anlamas iin gerekli eklentiler yeniden retildi. PHP arkasnda ASP yada JSP gibi kurumsal bir destek olmamasna ramen gerek performans gerek destek asndan dier Web yazlm gelitirme dilleri ile kolayca yarabilecek kapasitedir. Hemen her trl iletim sistemiyle alabilir olmas ve yine ak kaynak gelitirilen MYSQL ile birlikte gsterdikleri ikili performans onlar bir anda yazlm dnyasnn gzdeleri arasna sokmutur.
Neden PHP
PHP dilinin web ortamnda ok tercih ediliyor olmasnn sebepleri unlardr. Platform eitlilii (PHP nerdeyse btn web server ve iletim sistemleri ile albilir)
164
Yksek Performans (PHP + Apache bir ok ortamda olduka hzl almaktadr) Veritaban Uygulamalar in deal ve Birok VTYS ile alabilme Yetenei Internet Standartlarna Uyum Geniletilmeye Msait Yap (PHP komut setine eklenti yapabilme) Gelimi zellikler (Oturum ynetimi, kullanm, Paylaml hafza ynetimi erez
165
tabi
ki
Web tarayclarnda % 100 bir standart olmadndan scritplerin her taraycda alaca garanti deildir. rnein Vbscript sadece Internet Explorer ile alr. Kullanc gvenlik gerekesiyle script altrmay tamamen iptal etmi olabilir. Kullancda ykl JRE srm alt srm ise baz appletleri altramayabilir. Baz ilemler mutlaka sunucu tabanl olmak zorundadr. rnein iletim sistemine ait bir komut karda altrlmak zorundadr. Yine ayn ekilde veritaban ilemleride sunucuda mantken almak zorundadr. Sunucuda alan daha kolaydr. bir uygulamay gncellemek
Sunucuda almakta bazen bant geniliine faydaldr. rnein siz sunucuya sadece bir sorgu gnderirsiniz. Sonucu size buna uygun kaytlar gnderir. Tm kaytlar gnderip, kullanc tarafndaki bir uygulama bu szme ilemini yapacak olursa ok daha fazla bant genilii kullanlr.
Gnmzde yazlm gelitiren kiilerin rotas genel olarak istemci-sunucu modeline doru gitmektedir. Bylece irketler veri btnln kontrol etme konusunda gc ellerinde tutmaktalar. 166
167
3. ASP ak olan her dosya iin hafzada yer ayrr. Geri ASP 5 bu srn zmtr ama ASP 5te NT 4 ile almadndan sorunlu olan bir ok sunucu vardr denebilir. PHP ise sadece gereken dosyalar hafzaya ykler. 4. ASP ile gelen componentler snrl ve yetersiz olduundan 3. parti component desteine ihtiya vardr. bununla bitmez bu componente gre kod gelitirdiinizde bunun sayfay yaynladnz web sunucuya da kurulmas gerekir. 5. ASP iin iin gerekli yazlmlar lisans maliyeti getirdiinden, PHP sitelerini yaynlamak daha ucuza gelmektedir. 6. PHP dilinde daha az komutla daha ok i yaplabilmektedir. rnein aadaki kodlara bir bakalm. Her ikiside bir cmledeki kelimeleri alt alta satrlara yazmak iin ilem yapacaktr. <%@ Language=VBScript %> <% Option Explicit %> <% Dim strcumle, arrWords, strWord strSentence = "ASP PHP dilinden ok daha fazla komut kullanr " arrWords = Split(strcumle, " ", -1, 1) For Each strWord in arrWords Response.Write(strWord) 168
Response.Write("<br />") Next %> imdi bu programn PHP dilindeki karlna bakalm. <?php $sentence = ASP PHP dilinden ok daha fazla komut kullanr ; $words = explode(' ', $sentence); foreach ($words as $word) { echo "$word<br />"; } ?>
3. Gelimi kontrol bloklar ve hata ynetimi destei vardr. 4. Operatr ve fonksiyonlar arasnda (overloading) ilemine destek vermez. Ezme
5. Gelimi bir eklenti sistemi vardr. Eer C diline yeterince ana iseniz rahatlkla sizde eklenti yazabilirsiniz. Bunlar genel olarak PHP 5 ten itibaren gelen zelliklerdir ve bazlarn PHP 4 iin geeri deildir.
Buradan bir sonu daha kyor ki; PHP kodlarn altrmak iin bir web taraycmzn olmas yeterli deildir. nk Web taraycs sadece HTML iin gerekli olan yrtme yeteneini barndrmaktadr. O yzden bir web server kurulu olmas ve bu web server zerine PHP modlnn yklenip gerekli ayarlarn yaplm olmas gerekir. Modl yoksa ne olur derseniz; yazdnz kodun orjinalini halka am olursunuz hepsi bu. 2 HTML 3 Sunucu 4 HTML 2 PHP 3 Sunucu 5 HTML 6 HTML 4 PHP 1 Tarayc 1 Tarayc
3 Sunucu Yukarda grdnz ekildende anlalabilecei gibi PHP sonu olarak hep sunucu tarafnda almaktadr. Dolays ile ile PHP ile tarih gstermek isterseniz eer grdnz tarih sizin bilgisayarn deil web sitenizin bulunduu sunucunun tarih bilgisidir. PHP bu anlamda JSP, ASP gibi dillerle ayn ileve sahiptir! 171
HTML iin sadece verilerin ekranda nasl grntleneceini gsteren biilendirme dilidir demitik. Dolaysyla HTML ile web sunucusunda bir ilem yaptramayz rnein web sunucusu'ndaki bir veritaban dosyasn ap, iindeki kaytlar okuyamayz, yada web serverda bir metin dosyas oluturup ziyatretilerin notlarn vs buraya kayt edemeyiz. HTML ile Web ziyaretimizden bilgi toplayabilirz, bunu sunucuya gnderebiliriz ama hepsi bu. Sonuta bu verileri ilemek iin bize mutlaka bu yetenee sahip bir program gerekir. PHP Dili ve Veritaban
Gnmzde neredeyse tm programlama dilleri ile en ok veritabanna ynelik programlar yazlmaktadr. Ksaca programlarn ou hep bir eyleri kayt altna almak zere yazlmaktadr. Zaman iinde bu kayt altna alnan bilgilerin ynetilmesi ve hzl ilenmesi bir sorun olarak ortaya kt ve bu defada ortaya bu verilerin ilenmesi konusunda teknikler ieren DBMS olarak ksaltlm haliyle Data Base Management System programlar kt. Trke olarak VTYS yani Veri Taban Ynetim Sistemi ifadesi kullanlmaktadr. Veritaban programlar kendisine gnderilen verileri istenen ortamlarda tutar, talep edilmi ise bunlar aramada kolaylk sakayacak indeks dosyalarn gncelletirir, gelen talebe gre aranan artlara uygun kaytlar bulur ve telp eden programa gnderir. VTYS gelitiren irketler ise kendi sistemlerinin kullanmn artrmak iin kendi sistemlerinin kullanmnda yardmc olmak zere eitli srcleri gelitirip bunlar yazlm dnyasna sunmaktadr. Bu bakmdan gnmzde VTYS ile iliki kurmak isteyen diller sadece bu VTYS ile iletiim kuran 172
bir src dosyas kullanmak durumundadr. PHP gelitiricileri ise neredeyse bilinen btn VTYS sistemleri iin bu srclere eriimde kullanmak zere balant dosyalar hazrlamlardr. rnein MYSQL iin gerekli olan LIBMYSQL.DLL dosyas (Mysql tarafndan gelitirilmitir.) PHP ile hazr gelmektedir. PHP ise bu LIBMYSQL.DLL dosyasn kendisi iin gelitirilmi bir balant ktphanesi ile ynetir. PHP gelitiricileri aa yukar btn VTYS sistemleri iin srcler gelitirmitir (Adabas, dBase, FilePro, Informix, InterBase, mSQL, Oracle, Solid, Sybase, Sqlite, Firebird ve bir ok Unix veritaban). PHP ayrca, ODBC srcleri ile de alabilir; ve ODBC'nin okuduu btn veritabanlarndan veri ekebilir. (ODBC'nin Unix-Linux srm de vardr.) PHP dilinin detaylarndan nce PHP ile kullanlabilen veritabanlarndan nden bahsedelim. PHP'nin varolma sebeplerinin banda, ticar Unix veya Microsoft Windows iletim sistemlerinden ayr, kar kaygs olmayan, her trl platformda alabilen Script dili ile bu dille kullanlabilecek yine Ak Sistem rn bir VTYS aracna sahip olmak gelir. Perl, PHP'den ok nce de bu platformda mevcuttu ama PERL VTYS ynetmekten ok sadece metin dosyalarn okuyup ve sonucu biimlendirerek rapor haline getirmek amacyla tasarlanmt. Bu bakmdan PERL veritabanna dayal ilemlerde programcya ok glk kartyordu. Gelitirilmeside skntl bir sreti. PERL alm olarak Practical Extraction and Report Language kelimelerinden oluyor dendii zaman zaten PERL dinin amac ve yapmak zere tasarland ey kendiliinden ortaya km olmaktadr. ASP ise sadece Windows zerinde alabilir olmas sebebiyle hosting konusunda 173
masrafl bir dildi. stelik Open source felsefesine uygun deildi. PHP, tasarmclarnn MySQL ve PostgreSQL teknolojilerini gelitiren kurum ve firmalarla yapt yakn ibirlii sonucu ikinci srmnden itibaren veriynlendirmeli (Data-Driven) Web uygulamas alannda nemli bir ara olarak belirdi. PHP ile, Web Server'a sayfanz Internet ziyaretisine gndermeden nce bir takm komutlar yrtmesini, bir takm veri dosyalarn ap iindeki kaytlar okuyup rnein bir tablo iine yerletirmesini syleyebiliriz. MySQL, PostgreSQL ve SQLite ise, ak Kaynak eklinde gelitirilen Veri Taban Ynetim Sistemi VTYS (Data Base Management System DBMS) dediimiz trden programlardr. En ok bilinen VTYS programlar ticari olarak Oracle, MSSQL, Informix, DB2 ve ak kaynak tarafnda ise MYSQL, PostgreSQL, Firebird ve Sqlitedr. MySQL, ok-kanall (multi-threaded), ok kullanlcl alabilen (multi-user), hzl ve salam (robust) bir veritaban ynetim sistemidir. Mysql veri tablolarn iki formatta tutabilmekteydi. InnoDB ve MYisam. Veritabanlar arasnda kzan rekabet sonucu pabucu pahal gren Oracle, Innobase irketini satn alarak bir anlamda MYsql in elini kolunu balad. nk diledii anda Innobasei lisansl hale geirip MySql rnlerini tartmal duruma getirebilecekti. MYsql in buna cevab ise farkl oldu. Onlarda InnoDb yerine yllar nce Interbasei gelitiren Jim Starkey i ie alarak, kendi tablo formatlarn entegre etme yoluna gittiler. PHP gelitiricileri ise 5. srmden itibaren doal MYSQL destei yerine, SQLite veritabann ne karmaya baladlar. SQLlite, basit veritaban ilemleri iin oldua 174
yeterli bir veritaban programdr. Geri network ortamnda oklu kullanm iin uygun deildir ama internet programlarnn ounun buna ihtiyac yoktur.
php_exif.dll
175
Form Data Format eklentisi. PDF dosyalarnda formlarla alma Grafik oluturma ve izme Deiik dillerde yazlmlar iin alabilecek
ile
iletiim
LDAP (Lightweight Directory Access Protocol) protokol ile iletiim kurmak iin gerekli fonksiyonlar MultiByte fonksiyonlar String ileme
php_mbstring.dll php_mcrypt.dll
DES, TripleDES, Blowfish (varsaylan), 3-WAY, SAFERSK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB, ECB cipher, RC6 ve IDEA algoritmalar ile ifreleme yapmak iin gerekli ktphane (son iki free algoritma deildir) HASH ifreleme fonksiyonlar
php_mhash.dll
176
php_mime_magic.dll
Dosya ieriine bakp dosya tr hakknda tahminde bulunan ktphane dosyas. (Bu eklenti yerine artk Fileinfo eklentisi gemektedir. Bu eklenti geri dnk uyumluluk iin korunmaktadr) Flash animasyon dosyalar retmek iin gerekli fonksiyonlar SSL protol iin SNMP protokol (Simple Network Managemet Protocol) Web servisleri iin Soket balantlar iin XML ve RPC ktphanesi. XMLRPC sunucu ve istemcileri gelitirmek iin gerekli fonksiyonlar XML dosyalarna k tanmlamak iin fonksiyonlar Dbase VTYS balants Interbase VTYS balants 177 format gerekli
php_xsl.dll
php_dbase.dll php_interbase.dll
Msql VTYS balants Mssql VTYS balants Mysql VTYS balants Mysql VTYS eriimlidir) balants (Nesne
Oracle VTYS balants (Oracle Call Interface 8) Postgresql VTYS balants Sqlite VTYS balants Sybase VTYS balants PHP Data Object balantlarnn kullanm iin (Database Abstraction Layer ktphanesi) Firebird PDO balants Mssql PDO balants Mysql PDO balants Oracle PDO balants Oracle PDO balants ODBC PDO balants 178
php_pdo_pgsql.dll php_pdo_sqlite.dll
hatalarn kontroln yapabilmek iin (hatta site tasarmn gerek ortamdaki gibi mteri test edebilsin diye) kendi bilgisayarmza bir kiisel Web Server kurmak ve bu program PHP-uyumlu hale getirmek gerekir. Normal artlar altnda Apache, PHP, MYSQL kurulumu detayl bir ilemdir. Merak edenler iin kitabn sonlarnda yinede yer verilecektir. Ama benim nerim bu yntemi takip etmeyip, hazr WAMP paketlerinden birini kullanmanz olacaktr. WAMP Windows+Apache+Mysql+PHP kelimelerinin ksaltlmdr. WAMP paketleri tm bu programlarn sisteminize otomatik kurulumunu salarlar. Bylece ayarlarla uramadan dorudan iinize bakabilirsiniz. Linux iin tasarlanan bu paketler ise LAMP olarak bilinirler.
XAMPP
En ok tutulan WAMP paketlerinden birisi www.apachefriends.org adresinden bulabileceiniz XAMMP paketidir. Linus srmde vardr. PHP varsaylan olarak desteklenmitir. Ayrca istenirse JSP altrmak iin TOMCAT eklentiside vardr. Paket bir ok geyi barndrd iin biraz byk, download edilmesi daha uzun ve dosya says ok fazlaolduu iin kopyala yaptr vs ilemlerde belirgin bir yavalk szkonusu olmakta.
APPSERV
Yine ayn ekilde APPSERV paketide iyi bir pakettir. Kendine zg bir kullanc kitlesi olup Flash disk zerinde almasn salayan betikleride vardr. 180
Uniform Server
Benim kiisel olarak tercih ettiim WAMP paketi budur . www.uniformserver.com adresinde yaynlanan bu paket, kk ve sadece amaca ynelik bir paket. stelik bir flash disk zerinde tm tasarmlar (MYSQL verileri ve veri ayarlar ilede birlikte) taabilme avantaj vermekte. Bu ilemi XAMMP ilede yapmak mmkn ama Uniform ak halde iken sadece 40 mb civar yer tutarken XAMPP 250 mb civarnda yer kaplyor. Fakat Uniform Server iinede PEAR ve dier bir ok eklentinin elle kurulmas gerekebiliyor. Uniform varsaylan olarak sadece MYSQL eklentisi hazr halde geliyor ve PEAR ktphaneleride dahil deil.
EasyPHP
EasyPHP olduka tutulan bir www.easyphp.org adresinde ki srmleri bulunmaktadr. WAMP paketidir. sitesinde gncel
Bunlar dnda Saint WAMP, Php Triad, LWS, WD Studio vs uzayp giden bir liste eklinde bir sr WAMP paketi var. Benim seim yapma kritelerim ise 1. Tanabilir olmal 2. Admin Paneli basit olmal 3. Sk sk gncellenmeli 4. Fazla yer kaplamamal 5. Ayarlar mmkn olduunca hazr gelmeli ve ilave ayarlar iin yormamal. 181
Php kodlama sintaks bir ok dilden gelenler iin eitli kolaylklar iermektedir. Kodlamada aklda bulundurulmas gerekenler 1. Php kodlar <?PHP .... ?> veya <? .... ?> arasnda yazlrlar. 2. Her komut satrndan sonra ; noktal birgl ile komut sonlandrlr. Ancak istisna durumlar vardr. 3. Phpde aklama satr eklemek iin /* ------ */, # veya // taglar kullanlr. Bunlar bulunduklar yere gre kodun belli bir ksmn PHP tarafndan gzard edilmesini salarlar. 4. PHP deikenleri $iareti ifade edilirler. $adi gibi. 5. Deiken isimlerin boluk kullanlamaz. rnein $adi doru bir deikendir ama $ad soyad eklinde bir deiken kullanlamaz. 6. PHP dilinde dier dillerden farkl olarak Trke harfler kullanlabilir. rnein $ad="ali";echo $ad; eklinde yazlan bir komut alr. Ancak bir ok diller laan birisi olarak bunu tavsiye etmiyorum. 7. Deiken isimleri rakamla balayamaz mutlaka harfle balamaldr. 8. Deikenleri isimlendirirken uygun bir notasyonda isimler kullanlmaldr. Ayrca deiken isimleri gereksiz yere uzatlmamal ancak ancak anlalmayacak ekilde ksada olmamaldr. rnein $sayfasonudegiskenikullanimornegi uygun bir isim degildir. Keza $a,$b deikenler tm script boyunca kullanlacaksa uygun isimler deildir. 183
9. PHP dilinin ayrlm kelimeleri deiken ad olarak kullanlamaz (rnein Not, if, switch gibi) 10. PHP deiken isimlerinde harf duyarldr. rnein $adi ve $ADI deikenleri ayn deildir ve iki ayr deikendir. 11. Metin deerleri veya arasnda yazlabilir. Eer metin iinde ift trnak kullanlacaksa bu ift trnaktan nce \ karakteri (ters slash) yazlmaldr. 12. Metin deikenlerin ieriine bir karakter dizisi gibi eriilebilir. 13. arasnda yazlan deikenlerin ierii ekrana baslrken trnak kullanlr ise deiken isimleri metin gibi ele alnr ve rnein $adi=Ahmet; ile atama bile yaplm olsa echo $adi ekrana Ahmet deil deikenin adn yazacaktr. 14. ift trnak iindeki zel karakterler ilenirken tek trnak iindekiler metin olarak ele alnr. 15. Kontrol ve dng bloklarnda ilenecek komut says birden fazla ise bu komutlar {} iine alnarak koul yada dngye ait komutlarn belirtilmesi gerekir. (aksi durumda bir mantk hatas oluur) rnek deiken tanmlar $adi $1abc $_adi $adi soyadi Doru Yanl Doru Yanl 184
$adisoyadi
Yanl
PHP bir Script dilidir ve dolays ile ; PHP ile yazdnz "programlar" birer dzyaz dosyasdr. PHP komutlar aadaki iftler arasna yazlabilir demitik. 1. <?PHP .... ?> 2. <? .... ?> Bunlara PHP komut ayrac denir; birinci tr uzun veya standart ayra saylr; ikincisine ise "ksa ayra" denir. PHP yorumlaycsnn ksa ayra kullanmasn istemiyorsak, PHP.ini dosyasndaki, short_open_tag = On: satrn short_open_tag = Off; yapmak yeter. Bununla birlikte uzun vadede, PHP programlarnzda HTML yerine XML kullanmak istiyorsanz, imdiden elinizi uzun ayraca altrmanz yerinde olur; nk XML etiketleri "<?xml" eklinde balar ve "?>" eklinde biter. Eer siz <??> ile kod yazacak olursanz XML kodlarnzn PHP den ayrlmas gleecektir. (iin asl XML kodlamas iin PHP de ilk satr echo komutu ile yaptrlr) ASP ile alan Web programclarnn alt stil olan "<%" ve "%>" ASP blounu kullanmalarndan dolay hata almalarn nlemek iinde bir kolaylk dnlmtr. PHP.ini dosyasn aarak, asp_tags = Off; satrn ON yaparak ASP al kapan etiketleriylede PHP kodlamak mmkn olur! PHP komutlarnz kullanabilirsiniz. <HTML> <SCRIPT LANGUAGE="PHP"> 185 <SCRIPT> etiketiyle de
print ("Merhaba Dnya!"); </SCRIPT> </HTML> Ancak bunlar ok kullanlan durumlar deildir. Daha ncede belirtildii gibi sadece nceden baka dilleri kullananlar iin kolaylk olsun diye eklenmilerdir. NOT: PHP kodlar ne ekilde yazlrsa yazlsn sunucuda alrlar. PHP <SCRIPT> etiketi iinde yazlsa dahi. Javascript veya VBScript gibi scriptler ise kullanc tarafnda alrlar. Bu bakmdan 3. kullanm kafa karklna sebep olmamaldr. PHP daima sunucuda altrldndan dolay ziyaretiye asla PHP kodlar gsterilmez. PHP kodlarmz, oluturulmasn istediimiz sayfann HTML kodlar ile kod adack oluturmak zere iie yazlr. rnek koda bakarsak bunu grebiliriz: <HTML> <HEAD> <TITLE>PHP ile Merhaba</TITLE> </HEAD> <BODY> <CENTER> <B> <H1> <?PHP 186
print "Merhaba Dnya!"; ?> </H1> </B> </CENTER> </BODY> </HTML> Sayfamzn grntsnde hi bir deiiklik olmamakla birlikte, Browser'a giden HTML kodlar nemli lde deimi olacaktr.
Browser bu satrlar dikkate almaz - - > <HEAD> <TITLE>PHP ile Merhaba</TITLE> </HEAD> <BODY> <CENTER> <B> <H1> <?PHP /* Bu satr da PHP'nin ok-satrl yorum blm.. Bunu da PHP yorumcusu asla dikkate almaz Buraya istediimiz kadar yorum yazabiliriz. */ print "Merhaba Dnya!"; // Bu ise PHP'nin tek satrl yorum blm // Bu satrlar da PHP yorumcusu dikkate almayacaktr. # Bu ise PHP'nin tek satrl yorum blm # Bu satrlar da PHP yorumcusu dikkate almayacaktr. ?> </H1> </B> </CENTER> 188
</BODY> </HTML> <?PHP # Bu satr da yorum blm.. # Bunu da PHP yorumcusu asla dikkate almaz # Buraya istediimiz kadar yorum yazabiliriz. print "Merhaba Dnya!"; ?> Diyez ile yorum haline getirdiimiz satrlarn sonuna baka iaret koymaya gerek yoktur.
?> <?php echo merhaba dnya; echo merhaba dnya // bu rnek doru // bu rnek doru // bu rnek doru
echo merhaba dnya $adi; // bu rnek kod olarak doru ama ekrana ad deikenini deil kendisini // yazacak ?> Ekrana tek br deiken veya metin yazdrlacaksa sadece ? de kullanmak mmkndr.
190
Doruluunu test etme imkan bulamadm ama echo fonksiyonun genel olarak print fonksiyonundan daha hzl altn iddia eden makaleler okudum. Gerektende echo daha ok kullanm alanna sahip. Escape Kodlar Tek veya ift trnak iine de alsak, PHP, bir deiken adn grd zaman onun yerine o deikenin tuttuu deeri yazar. PHP bunu, deiken adnn bandaki $ grerek yaparak. $ iareti gibi PHP iin zel anlam olan iaretlerin ilenmesini nlemek ve bu iaretleri dz metin saymasn salamak iin bu iaretlerin nne ters-bl iareti koyarz. Buna o karakteri kurtarma veya ESCaping denir. PHP'nin anlaml iaretleri ve bunlarn ESCape-yazl yledir: \' \" \\ \$ \n \r \t Tek trnak ift trnak Ters-bl Dolar iareti Yeni Satr (New Line) Satr Ba (Return) Sekme (Tab) karakteri
Bu ilemi daha iyi anlatmak iin Excelden bir rnek yararl olur. Bazen Excelde bir saynn metin olarak ele alnmas istenir. Exceli buna zorlamak iinde o deerin bana karakteri konulur. ESCape kodlar ite bu ilemi 191
yaparlar. PHP bu kodlar grnce deikeni ilemek yerine metin olarak varsayar.
Deiken Nedir ?
Deikenler tm programlama dillerinde karmza kacak bir konudur. Genel olarak tm dillerde standartlarda ayndr. rnein tm programlama dillerinde deiken ad rakam ile balayamaz kural vardr. Neden deiken kullanrz diyecek olursanz cevap ok basittir; sadece programcnn iini kolaylatrmak iin. Bilgisayarn RAM hafzasn bir Excel sayfas gibi dnebiliriz. Bilindii gibi orada her satr hcrenin kesimesine bir hcre denir ve A1 gibi birde hcre adresi alr. CPU larda buna benzer bir teknikle hafzay adresleyerek kullanrlar. rnein siz $maas =2000; dediinizde PHP bilgisayarn RAM hafzasnda xxxx:xxxx gibi bir adresi ayrmakta kendisi iin buraya sembolik olarak maas adini vermektedir. Aslnda xxxx:xxxx deeri sadece bir ifadedir. Gnmzde 64 bitlik ilemci ile ok daha kark hale gelmitir. Hele birde binary yani sadece 1 ve 0 lardan oluan adresleri dnrsek bunlarn adreslerini ve neyi temsil ettiini hatlamak adeta imkanszdr. Dolays ile biz maas degiskenine bakmak istediimizde ise karmza onun temsil ettii adresteki bilgi gelmektedir. Bylece program kii adres ezberlemek yada hatrlamak zorunluluundan kurtulmaktadr. Deikenleri adnn nne $ iareti koyarak tanmlarz: 192
$ad; $syd; $Ay1; Deikenler, harf, veya alt izgi (_) ile balayabilirler; bu karakterleri ve rakamlar ierebilirler; ama iinde boluk veya dier iaretler bulunamaz. PHP deikenleri her trl deeri tutabilirler: bir deikenin adnn yazl ekli onun tutabilecei deerin niteliini belirlemez. Dolaysyla, "$adi" deikenin deeri "Tuncay" da olabilir, "1255" de olabilir. PHP'de genellikle deikenleri deerini atayarak belirleriz: $adi = "Tuncay"; $soyadi = "anl"; $a123 = 123; Deikenler, kullanldklar yerde, tadklar deerin kullanlmasn salarlar. rnein $adi deeri AL bilgisini ieriyor ise PHP bu deikeni grd yerde deikenin ierdii AL bilgisini kullanacaktr: print $adi; komutu, eer deeri "Tuncay" ise tarayc penceresine "Tuncay" kelimesini yazdrr. PHP'de zel bir deikene deiken ad olarak kullanlacak deerleri de atayabiliriz: $adi = "Tuncay"; $degisken = "adi"; print $$degisken; Burada Browser penceresine yine "Tuncay" kelimesi yazlacaktr; nk PHP $degisken adl deikenin "adi" 193
adl deikeni tuttuunu bilecek ve iki Dolar iaretini grnce, $degisken'in deerini deil, onun tuttuu deikenin deerini yazacaktr. Bu, size u anda kark grnebilir. Daha sonra dngleri grdmzde bu teknii bir satrlk kod ile yzlerce deeri yazdrmakta kullanacaz. Bu teknik yle de kullanlabilir: $degisken = "adi"; $$degisken = "Tuncay"; print "$adi"; print $$degisken; print "${$degisken}"; print "${'adi'}"; Buradaki drt "print" komutu da Browser'a "Tuncay" kelimesini yazdracaktr. PHP'de bir deikenin tuttuu deer, bir baka deikene atanabilir. Bu ya duragan, ya da dinamik olarak yaplr. Duraan yntemde: $birinci_degisken = "Nurcan"; $ikinci_degisken = $birinci_degisken; $birinci_degisken = "Tlay"; print $ikinci_degisken; Kimi zaman iki deiken arasndaki deer al -verii srekli olsun istenebilir. PHP, buna, ilk atama srasnda & iareti kullanrsak izin verir. Aslnda bu ilem bir hiledir. nk yaplan ilem iki deikeninde hafzadaki ayn adresi gstermesi salanmaktadr: $birinci_degisken = "Nurcan"; 194
$ikinci_degisken = &$birinci_degisken; $birinci_degisken = "Tlay"; print $ikinci_degisken; Buradaki "print" komutu ise Browser penceresine "Tlay" kelimesini yazdracaktr. nk iki deiken arasndaki deer al-verii birinci deikenin tuttuu deeri deitirmeden nce halde, ikinci deikene birinci deikenin deerini dinamik olarak atam olduk. Atama ilemi srasnda & iareti kullandmz iin, birinci deikenin deeri deitiinde ikinci deikenin de deeri deiecektir.
Deiken Trleri
PHP, deikenlere, tiplerine gre farkl miktarda hafza alan ayrr. O yzden etkin bir programc iin veri tipinin doru tespiti ok nemlidir. (bu olay Veritaban tasarmnda ok daha nemlidir). Ayrca PHP, dier btn programlama dilleri gibi belirli veri trleri ile sadece belirli ilemleri yapabilir. rnein, ancak iki say arasnda aritmetik ilemler yaplabilir ama iki metin deiken aritmetik olarak toplanamaz; ancak ierdikleri deerler ardarda eklenebilir. Ne var ki, PHP sizin aritmetik toplama m, yoksa ardarda ekleme mi yapmak istediinizi bilmek durumunda deildir. (PHP'ye 'muazzam dil' dedik; iinde yapay zek var demedik!) Dolaysyla deerleri 5 ile 6 olan iki deikeni topladnz zaman ortaya 11 yerine 56 karsa, kabahati PHP'de deil, deikenlere veri atayan kiide (byk bir ihtimalle kendinizde) aramalsnz. PHP asndan yedi tr deer vardr: 195
Tamsay (Integer): 5,124, 9834 gibi (2147483647 ile 2147483647 aras saylar) ift (Double): 3,567 gibi Alfanmerik (String): "Deniz" gibi Mantksal (Boolean): doru (true)/yanl (false) gibi Nesne (Object) Dizi (Array) Resources (Kaynak)
Kaynaklar aslnda PHP deikeni olmayan Sql sorgular, yada bir dosyadan yklenen resim gibi kaynaklardr. Deikenlerden farkl genellikle olarak ileri bitince yok edilmeleri gereklidir. Bylece verimli bir hafza kullanm salanr. <?php $str $int print ?> = = $mystring + "12"; 20; $myinteger;
"Kelam, = =
Yukarda grdnz kullanmda ncelikle bir alfanmerik deiken oluturuluyor. Daha sonra ise bu deikenin ilk harfi deitiriliyor ve en sonundada metnin en son karakteri deitirilip ekrana yeni hali yazlyor.
Diziler (Array)
Diziler ayn tipte birden ok deikeni zincirleme olarak barndran deikenlerdir. Buna neden ihtiya duyulurki derseniz, rnein meyveleri ileyen deikenlere ihtiyacmz olsun. Yapmamz gereken $elma, $armut gibi her meyveyi sra ile tanmlamak. Bu ie kodlamada zorluk ve sknt demektir. 1. Bu meyveleri ekrana yazdralm diyecek olursak tek tek elle yazmak zorundayz. 2. Bu meyve isimlerini sralayalm desek yapacak hibir eyimiz yok 3. Meyve isimlerini bir srada ileyelim dersek elimiz kolumuz bal Dizilerde ise bu konular sknt olmaktan kmaktadr.imdi bir rnekle hem meyveleri ieren bir dizi tanmlayalm hemde bu diziyi ekrana yazdralm. 197
<?php // for each dizi elemanlar boyunca tekrarlar phesiz dizideki sayy bulup for ilede bu ilemi yapabiliriz $meyve = array ( 1=>"elma", 2=>"armut", 3=>"ayva", 4=>"eftali", 5=>"zm", 6=>"nar"); foreach ($meyva "<br>";} ?> Yukardaki dngde koyu harflerle yazlan ksm tm meyveleri ekrana yazan koddur. stelik tek bir fonksiyonlar bu diziyi artan yada azalan ekilde sralamamzda mmkn. imdilik dngnn nasl alt konusuna girmeyeceiz. Bu ilerde ileyeceimiz bir konu. Ancak ilerde bu konuya tekrar genie yer verilecektir as $deger) {echo $deger .
ok Boyutlu Diziler
Diziler ok boyutluda olabilir. rnein meyvelerin renginide tutmak isteseydik 2 boyutlu bir dizi tanmlayabilirdik. 198
<?php $meyve = array ( array ( adi => "elma", renk => "krmz"), array ( adi => "karpuz", renk => "krmz"), array ( adi => "ayva", renk => "sar"), array ( adi => "nar", renk => "pembe"), ); print $meyve [0][adi]; // meyve dizisinin ilk elemannn adi bilgisini yaz elma ?>
Diziler tanmlanrken ssl parantez deil, normal parantez kullanlr Herbir elemann konulur. deerlerinin sonunda virgl
<?php $a[0] = "abc"; $a[1] = "def"; $a[1] $a[1][0] ?> = $f; = $f; # tek boyutlu tanmlama # iki boyutlu tanmlama
199
Nesneler (Objects)
NYP yani Nesneye Ynelik Progamlama programlama dnyasnda r aan bir tekniktir. ngilizce OOP olarak ifade edilir ve Objet Oriented Programming kelimelerinin ba harflerinden oluur. Bu teknik ortaya ktnda geleneksel programlamaya alkn olanlar nce tereddt etsede nesneler ksa srede programclar iin vazgeilmez oldular. Tanmlarsak, nesne, kendi deikenleri ve altraca komutlardan oluan fonksiyonlar ile bir btndr. Nesneyi bir kere tanmladktan sonra istediimiz kadar rneini oluturabiliriz. Bir nesnenin yapaca iten, o nesnenin metodu diye sz ederiz. Nesneler birbirinin atas olabilir. Birden fazla nesne bir araya gelerek yeni bir nesne oluturabilirler. Windows iletim sistemi tamamen NYP ile yazlmtr. Pencereler birer nesnedir. Pencere nesneleri ise, balk ubuu, pencelere alan, durum satr, sol ve sa st kelerdeki dmelerden olumutur. Gene ayn ekilde Windows pencelerinde grdnz bilgi giri kutular dmeler vs her ey bir nesnedir. Nesneler leri programlama konusu olduundan rnekler sonra ilenecektir. Ancak bast bir rnek vermek iin ; <? class nyp{ function yazdir($str){ echo "Merhaba\n"; echo "deiken : $str\n"; } } 200
$deneme= new nyp(); $a="rastgele bir metin deeri"; $deneme -> yazdir($a); ?> bu program altrdmzda ekrana Merhaba Deiken : rastgele bir metin deeri yazacaktr. Konu banda belirtildii gibi bu basit bir rnektir. $a ile $str farkl olmas sizleri artmasn. leriki konularda bu olay daha net ekillenmi olacaktr.
bir deiken ve deer atamayada ak durumda. te bunun iin satirsayisi diye bir sabit tanmlayp buna deer atabiliriz. Bylece hem bir deiiklikle tm satirsayisi deerlerini gncellemi olacaz, hemde kod iinde bu deeri yanllkla deitirmenin nne gemi olacaz. stelikta yanllk ayn isimde bir sabit daha oluturmaya kalknca PHP ilemi yapmayacaktr. PHP'de sabit deerler, Script boyunca deimeden kalr. Sabit deerler, deikenlerden farkl ekilde oluturulur. Bunun iin PHP'nin define() fonksiyonunu kullanrz. Bu fonksiyonun yazm kural yledir:
deerini 10 yapmak olacaktr. Kodun geri kalan annda KDV orann 10 olarak kullanacaktr. Sabit deer ile ayn ismi tayan deiken oluturmak mmkndr; ancak ayn ismi tasa da PHP bir sabit ile bir deikeni (birinin adnn nnde $ iareti bulunduu iin) kartrmaz. Tanmlanm olan bir sabiti yeniden oluturamayz; ama buna teebbs ettiimizde PHP hata vermez. Bir sabit deerin oluturulmu olup olmadn defined() fonksiyonu ile anlayabiliriz: <?php $tutar = 125; if (defined( "KDV" )) { echo ("Sabit tanmlanmt.<br>"); } define ( "KDV", 18); $TL_Tutar = $tutar+(($tutar * KDV)/100); print ($TL_Tutar); ?> PHP'nin kullanlmaya hazr bir ka sabit deeri vardr. True (doru) deeri 1 olan, False (yanl) ise deeri sfr says veya bo alfanmerik olan iki sabittir. Dier sabitler ise unlardr:
deer
daha
nce
__LINE__ : Bu ifadenin yer ald satrn says PHP_VERSION: PHP'nin srm; PHP_OS: PHP'nin alt iletim sistemi; PHP_VERSION : PHP'nin srm (ki kelimenin arasnda bir alt-izgi var);
Bunlara ek olarak, E_ERROR, E_WARNING, E_NOTICE ve E_PARSE eklinde hata durumunda hatann eitli zelliklerini bildiren sabit deerleri de kullanabiliriz. PHP hakknda ok daha geni bilgiyi phpinfo() fonksiyonunu ararakk alabilirsiniz. Buradaki deikenler iletim sistemine ve web server programna grede deiirler. lerde bunlar detaylca incelenecektir.
Operatrler
Operatrler kullanldklar dile, atama, aritmetik ilemler ve karlatrma gibi yetenekler kazandran sembollerdir. PHP dilinde en ok kullanlan operatr = operatrdr. Deer atamak iin kullanlr. PHP getirdii yazm kolaylklarndan biriside hem atama hem ilem yaplabilmesidir. rnein: print ( $Fiyat = 1000 ) ; ifadesinde olduu gibi, bir fonksiyonun iinde de hem atama ilemi yaplabilir; hem de ilem yrtlebilir. PHP'nin aritmetik, birleik-atama (combined assigment), birletirme, karlatrma ve mantksal snama operatrleri vardr.
204
Aritmetik Operatrler:
+ / * % Toplama kartma Blme arpma Kalan (Modulus) 6+5 6-5 6/5 6*5 6%5 = = = = = 11 1 1.2 30 1
Aritmetik ilemleri gerek saylarla yaptmz gibi, tuttuu deer say olan deikenlerle de yapabiliriz. Daha nce, PHP'de deiken tanmlarken ve bunlara deer atarken say olan deikenleri trnak iareti kullanmadan, alfanmerik deikenleri ise trnak iinde yazdmz hatrlayacaksnz. Bu, geleneksel hale gelmi olan bir programclk alkanldr. PHP, trnak kullanmasanz da bir deikenin say olup olmadn anlar; daha sonra bu deikenlerle aritmetik ilem yapabilir. PHP ayrca rakamla balayan alfanmerik deikenleri say olarak kullanmaya kalktnzda, bu deerin bandaki btn rakamlar say olarak kabul eder. PHP asndan harf veya iaretle balayan alfanmerik deikenlerin say olarak deeri sfrdr. rnek: $a = 6; $b = "22/A" print ($a + $b) sonu olarak 28'i verecektir; veya $a = 6; $b = "a/22" 205
print ($a + $b) sonu olarak 6 kacaktr. Bu kk rnekler, PHP ile program yazarken hangi deikenin ne sonu vermesi gerektiini dikkatle dnmek zorunda olduunuzu gstermitir sanrm. Bir kiinin maa ile baba adn toplamak istemezsiniz doal olarak ama bununla birlikte elimizde bir kiinin ad ve soyad ayr deikenler halinde ise, bunlar birbirine ekleyerek (concatenation) ortaya yeni bir alfanmerik deiken kartabiliriz: <?php $ad = "brahim Halil"; $soyad = "Kutluay"; $adi_soyadi = $ad . " " . $soyad; print ("<br>"); print ($adi_soyadi); print ($ad . "'nn soyad " . $soyad . "'dir.") ?> Grdnz gibi alfanmerik deikenleri ekleyerek yeni bir deiken elde edebilmenin yannda, deikenlerin deerlerinide birbirlerinin sonuna eklememizde mmkn. Son satrdaki araya konula nokta iaretiyle (.) bu ilem yaplmaktadr. Bu ilemciyle sadece deikenlerin deerlerini deil sradan metin deerlerinide birbirine ekleyebiliriz:
206
<?php print ("lim inde bile olsa; " . "..." . "arayp bulunuz..! ") ?>
lem ci += -= /= *= %= .=
Anlam $a = $a + 25 $a = $a 25 $a = $a / 25 $a = $a * 25 $a = $a % 25 $a"
.= $a = metin"
Bu ilemi zihnimizde, "A deikeninin mevcut deerine 25 ekle, kan sonucu A deikenin yeni deeri yap!" eklinde canlandrabiliriz. 207
Karlatrma Operatrleri
PHP'nin karlatrma yapmas iin kullandmz ilemciler ilem iaretinin sa ve solundaki deerleri veya deikenlerin deerlerini iaretin belirttii karlatrmay yaptktan (ncelik srasna gre) sonra ortaya ya doru (true) ya da yanl (false) sonucunu 208
kartrlar. Sz gelimi, deeri 26 olan deikenin 25'ten byk olup olmadn snarsak, sonu doru; 25'ten kk olup olmadn snarsak sonu yanl kacaktr. PHP'nin karlatrma ilemcileri unlardr: lemci rnek == != === > < <= >= eitse eit deilse ayn ise bykse kkse kkse eitse bykse eitse rnek $a 25 $a=26 ise:
== Yanl/False
PHP'nin karlatrma ilemcileri hem tam ve ondalk say tr deerlerle, hem de alfanmerik deerlerle kullanlabilir. Karlatrma ve kontrol ifadeleri hem zaman bu kadar basit olmaz. rnein bir kiinin ehliyet alabilmesi iin hem Trafik, hem Motor hemde lkyardm derslerinin tmnden 70 veya zerinde not almas gerektii gibi. 209
Motor 70 (yanl/false)
Trafik
70
lkyardm
69
kalr
lkyardm 90
= geer
PHP dilinde iki veya daha fazla koulu birden kontrol edeceksek araya aadaki tablodaki operatrlerden birisini koymak gerekir. PHP'de bu karlatrmay iki grubun arasna koyduumuz iaretlerle yaparz. Operatrlerin ilem ncelii kural burada geerlidir. lemci Ad || Veya Anlam sol veya doru sol veya doru sol ve doru sol ve doru rnek sa Doru yanl doru sa Doru yanl doru sa Doru yanl yanl sa Doru yanl yanl || = || = || = || = || =
Or
Veya
&&
Ve
And
Ve
Xor
artlveya
Dikkatinizi ektiyse "veya" ve "ve" snamalar iin tabloda iki operatr bulunmaktadr. Ve iin (and ve &&), Veya iin (or ve ||). Yukarda operatrlerin nceliinden bahsetmitik. Bu iftlerin amac ncelii deitirmektir. Bu konuyu biraz amamz gerek. PHP de en yksek ncelik her zaman ! operatrnndr. Daha sonra ise parantez iine alnm ifadeler gelir. nk ncelikle bu iaretin deeri hesaplanmaldr ki kontrol edilecek deerler ortaya ksn. te yandan manta gre and operatr or operatrnden nceliklidir. Yani bir cmlede hem and hem or kullanlm ise nce and kontrol edilerek ifade ilenmeye balanr. Bunun nceliini deitirmek iin or yerine || kullanlr ise bu defa || ifadesi and operatrnden nce kontrol edilecektir. Buras biraz kark gibi gelsede ilemcinin mant bu yndedir. Onun iin en uygun ey birden fazla koul olduu zaman hangi koul nce ilenecekse o koulu parantez iin almaktr. Parantez ama kapama sras ok nemlidir. O bakmdan gelimi bir editr iinizi kolaylatrabilir. nk gnmz editrleri parantezleri uygun srada ayr renklerde bile gsterebilir.
2. ++ ve -3. / * 4. + 5. < <= 7. && 8. || 9. = += -= /= %= .= 10. and 11. xor 12. or => > 6. == === | = %
if komutu
Doadaki her ey sebepler sonular zerine kuruludur. rnein gk grlyorsa - yamur yaacak, benzin yoksa-araba duracak gibi. Programlarda bunun gibi koullara gre farkl ilemler yapmak zere tasarlanrlar. rnein alveri yaptnz, aldnz ey ; ekmek ise KDV %1, temizlik maddesi ise %18, lks tketim ise %25, temel gda ise %8 olarak hesaplanacaktr. Burada program mantda u olmaldr. Kontrole bala Eer alnan ekmek ise KDV %1 hesapla Eer ekmek deilse kontrol et temel gda ise KDV % 8 hesapla Eer temel gda deilse kontrol et 212
PHP programnda if deyimi bunu salar. Kelime anlam eer olan if deyimi ile programmz karar almaya zorlar ve bu duruma gre deiik ksmlarn yrtlmesini salarz. If PHP dilinin ayrlm kelimelerinden (reserved words) birisidir. (Nerdeyse tm dillerde if reserved word olup karlatrma iin kullanlr) if ( koullar ) { koullar doru ise yaplacak ilere ait komutlar } elseif (dier koullar) { dier koullar doru ise yaplacak ilere ait komutlar } else { dier her durumda yaplacak ilere ait komutlar } PHP, if ifadesinde verilen koulu doru olarak hesaplarsa, ifadeye ait ilk ssl parantezin iindeki komutlar altrr; bu artlar doru deilse, elseif deyimi ile verebileceimiz baka bir grup koulun doru olup olmadn snayabiliriz. Bu koullar yerine geliyorsa, PHP, elseif blmndeki komutlar altrr. Eer tm koullar salanmad takdirde altrlmasn istediimiz komutlar varsa onlarda else blmnde belirtiriz. if koulu doru deilse, koula ait komutlar es geer ve varsa elseif deyiminin koullarn test eder; elseif blm yok fakat else blm varsa bu blmdeki komutlar altrr. Deyimde else blm de yoksa, PHP koul salanmadnda if komutundan bir sonraki komuta geerek program iletmeye devam eder.
213
<?php $yasi = 10; if ( $yasi == 10 ) { echo ("yanz 10 ocuksunuz. ); } elseif ($yasi == 18 { echo ("yanz 18. gensiniz"); } elseif ($yasi == 35 { echo ("yanz 35 yolun yarsndasnz"); } else { echo ("Bu if blokunda sadece 10,18 ve 35 deerleri kontrol edilmektedir!"); } ?> if komutundan sonra elseif yada else ifadesi kullanlacak diye bir zorunluluk yoktur. if ( $sifre == "" ) { echo ("Parola girmediniz. Ltfen parola giriniz. } Yukardaki if komutunda sifre deeri bo ise program uyar verecek bo deilse hi bir ey yapmadan bir sonraki komuta geerek devam edecektir. $vize1 = 35; $final1 = 75; if ($vize1 >= 60 && $final1 >= 60) { print ("Geti!"); } 214
Merhaba <b><? echo ucfirst($ad) . " " . ucfirst($soyad) ?></b>,<br> Siteye hogeldiniz. </body> </html> <? exit; ?> <? endif; ?> <form action="ifendif.php" method="post"> <input type="hidden" name="islem" value="1"> Kendinizi tantn ltfen ? <table> <tr><td>Adnz:</td><td><input type="text" name="ad"></td></tr> <tr> <td>Soyadnz:</td><td><input type="text" name="soyad"></td></tr> <tr><td colspan=2><input type="submit" value="Gnder></td></tr> </table> </form> </body> </html> Yukarda rnekte grld gibi ayn php sayfas ilem deikeni tanmsz ise bir form grntlemekte ve bu formun submit ksmnda ise kod kendini yeniden armakta. Ancak form ksmnda ilem deikeni deer aldndan bu defa karlama mesaj grnr. Ancak exit komutu kullanmna zellikle dikkat edilmelidir. Aksi takdirde form grntlenecektir. Buna benzer bir kullanm if else ile de salamak tabi ki mmkndr.
216
Endif
If blokunun sonlandn gstermektedir. Yukardaki rnekte kullanm verilmitir.
switch komutu
If komutunun yazla dikkat ettiyseniz elseif ve else deyimleri kullanld zaman programn ard ardna birden ok kontrole girmesi gerekir. Bu tip ilemleri hzlandrmak iin PHPde birde switch kontrol bloku kullanm getirilmitir. Switch blokundan k iin break (kr) komutu kullanlr. rnek kodu bir inceleyelim;
<?php $Name = if ($Name == print "Adnz } else if ($Name == print "Adnz } else if ($Name == print "Adnz } else if ($Name == print "Adnz } else print "Adnz } } } } ?> "Ahmet"; { Ali \n"; { "Veli") { Veli \n"; { "Ahmet") { Ahmet \n"; { "Mehmet") { Mehmet \n"; { bilmiyorum!\n"; "Ali")
217
Grdnz gibi gerekirse isim deerini tespit iin tm kontroller yaplmak zorundadr. te bunu nlemek iin Switch kullanlrsa hem kodumuz daha okunur hale gelir hemde kontroller hzlanr. switch ( deiken ) { case KOUL-1 ; ilemler break; case KOUL-2 ; ilemler break; case KOUL-3 ; ilemler break; case KOUL-4 ; ilemler break; ...................... ...................... default: dier durumlarn tmnde yaplacak ilemler } break komutunu kullanmak zorunlu deildir. Ancak break kullanlmazsa koullardan birisi salanm ve iletilmi bile olsa PHP dier koullarda kontrol etmeye devam edecek daha da garibi varsa default blokunuda 218 Koul-4 doru ise yaplacak Koul-3 doru ise yaplacak Koul-2 doru ise yaplacak Koul-1 doru ise yaplacak
altracaktr. Bu sadece zaman israf demek olduundan break komutunun kullanlmas programmza hz kazandracaktr. imdi ilk rneimizi yeniden yazalm; $Name = 'Ahmet; switch($Name) { case "Ali": print "Adnz Ali \n"; break; case "Veli": print "Adnz Veli \n"; break; case "Ahmet": print "Adnz Ahmet \n"; break; case "Mehmet": print "Adnz Mehmet \n"; break; default: print "Adnz bilmiyorum!\n"; }
switch ( $KDV ) { case 1 ; echo ("ekmek <br>") ; break; case 8 ; case 25; echo ("Temel gda <br>") ; break; echo ("lks tketim <br>") ;break; bir KDV oran case 18 ;echo ("genel rnler <br>") ; break; default: echo ("byle tanmlanmamtr <br>") ; } PHP bu kodu yrtrken KDV adl deikenin deerini kontrol edecektir. Deeri 1 ise ilk koul gerekleecek ve kodumuz ekrana ekmek yazacak ve break ifadesini grd iin switch blokundan komple karak swicth blokundan sonraki ilk komutla yoluna devam edecektir. Break komutu olmasaydr. 8,18, ve 25 olma durumlarda 219
gereksiz yere kontrol edilecek, daha sonrada hi alakas yokken default blokunu altrp ekrana ekrana birde byle bir KDV oran tanmlanmamtr yazp ylece kacakt. Bu bakmdan switch kullanlrken uygun yerlerde bra komutlarnn kullanlmas gereklidir diyebiliriz.
Dng Kavram
Dngler bir kod yada kod blokunun belirli artlara gre tekrar edilmesini salayan program paralardr. yle 220
dnelim. 1 den 100 e kadar saylarn toplamn bulmak istiyoruz. Dngler olmasa srasyla saylar yazp toplayacaktk. Oysa dngler ile bu ilemi ok daha basit yapabiliriz. PHP dilinde iki tip dng vardr. Koulun durumuna gre tekrar eden While ve belirli sayda tekrar eden FOR dngleri.
For Dngs
Bir kod satrn yada blokunu belirli sayda tekrar eder. <?php for ($i = 1; $i < 100; $i = $i + 1) { print "Say $i\n"; } ?> Yukardaki rnekte 1 ile 100 arasndaki saylar ekrana yazdrlmaktadr. Dikat edilecek nokta ise kouldur. Bu dngle yazdrlan son say 99 dur. <?php // or dongusu ilemleri billi bir sayda tekrarlar // sayac kendi artrp eksilttiinden sonsuz dng riski yoktur /*for ( dng deikeni; koul ; art basama ) { Koul doru ise yaplacak ilere ilikin komutlar } */ for ($sayac = 1; $sayac <= 7 ; $sayac++ ) { // 1 den balayarak 7 olana dek artr 221
print ("<font size= $sayac >"); print ("<b><p>Milli byyor!</b></p>"); print ("</font>"); } ?> Yukardaki dngde yaznn bykl dng ile birlite artacaktr ve 7 olunca dng sona erecektir. For dngs sayy kendi artrdndan normal artlar altnda While dnglerinde sonsuz dng riskini barndrmaz. Ancak kullanc adeta sabotaj yapar gibidngnn iinde iken dng sabitine k deerinden kk bir deer atarsa dng k deerine hi gelemez ve sonsuz dngye girer. Aadaki rnei deneyecek kadar gznz kara ise en azndan nce almalarnz kaydedin. <?php for ($sayac = 1; $sayac <= 7 ; $sayac++ ) { // 1 den balayarak 7 olana dek artr print ("<font size= $sayac >"); print ("<b>Milli byyor!</b><br>"); print ("</font>"); // $sayac=3; // bu satr aklama satr olmasayd sonsuz dngye girecekti. } ?> 222 takm gittike takm gittike
While Do Dngs
While dngs for dngsnden farkl olarak nce bir koulu kontrol edecek koul doru ise dng komutlarn altracaktr. rnein ; <?php $sayac = 1; while ( $sayac <= 7 ) { print ("<font size= $sayac >"); print ("<b>Milli byyor!</b><br>"); print ("</font>"); $sayac ++; // bu ilem yaplmazsa program sonsuz dngye girer. } ?> Yukardaki gibi dngler kodlanrken dikkat edilmesi gereken noktalar vardr. Bunlardan en nemlisi ise koul bir saya ise artrma ilemin unutulmamasdr. rnein yukarda dngde saya deikenini artrmay unutmu olsaydk, saya asla 7 olamayacak ve program sonsuz dngye girecekti. Dng iinde yanllkla sayaca kouldan byk deer atasaydk, program dngden o anda kacakt. takm gittike
Do While Dngs
Do While dngs While dngsnn tersi mantkla alr. nce dng blokunu altrr daha sonra ise art kontrol eder. 223
<?php $sayac = 1; do { print ("<font size= $sayac >"); print ("<b>Milli byyor!</b><br>"); print ("</font>"); $sayac ++; // bu ilem olmazsa kodumuz sonsuz dngye girer } while ( $sayac <= 7 ) ; ?> Yukardaki dngy incelediinizde unu greceksiniz. Saya deikenine ilk atanan deer 100 olsa bile dng 1 defa alp daha sonra duracaktr. Do While dngsnn alma prensibi budur. Do while dngsnde While satrnn sonunda noktal virgl olduuna ; dikkat etmelisiniz. Aksi taktirde derleme hatas alrsnz. While ve Do While dngleri zellikle dosyalarla ve veritaban tablolar ile ilem yaparken faydaldr. rnein, oku, ile, dosya sonuna gelince dur yada dosya sonu deilse, oku, ile eklinde kullanlrlar ve metin dosyalarnn yada veritaban tablolarnn bandan sonuna ilem yaplaca durumlarda ie yararlar. 224 takm gittike
225
// for each dizi elemanlar boyunca tekrarlar phesiz dizideki sayy bulup for ilede bu ielmi yapabiliriz $adlar = array ( 1=>"Ali", 2=>"mer", 3=>"Mehmet", 4=>"ihsan", 5=>"Ahmet", 6=>"brahim"); for ($i=1;$i <=count($adlar);++$i) {echo $adlar[$i] . "<br>";} ?>
print ("</font>"); if ($sayac== 7){echo "sayac u an 7 bu dongu burada krlacak"; break;} // burada say 7 olunca dongu krlacak ksaca sayac asla 8 olamayacak } ?> Yukardaki dngde dng sayacna gre yaz bykl verilmektedir. Ancak bu HTML de maksimum 7 olduundan 7 olduundan dng krlmas salanmtr. Aslnda dngy sadece 7 ye kadar da kurabilirdik ama burada break komutunun ilevini grmek iin bu ekilde ayarland. Yine ayn ekilde bir dng boyunca kullancdan bilgi sorulduunu dnn rnein 200 defa. Kullanc skld anda belirli bir say girip dngy krabilmelidir.
} Ekran grnts yle olacaktr. I:1,J:1,K:1 I:1,J:1,K:2 I:1,J:2,K:1 I:1,J:2,K:2 I:2,J:1,K:1 I:2,J:1,K:2 I:2,J:2,K:1 I:2,J:2,K:2 Yukardaki rnee break komutunu eklersek; 228
for
($i = 1; $i < 3; $i = $i + 1) { for ($j = 1; $j < 4; $j = $j + 1) { for ($k = 1; $k < 3; $k = $k + 1) { print "I: $i, J: $j, K: $k\n"; break; } }
} ?> Burada yaptmz hata u; madem PHP ve HTML i ie yazlabiliyor o halde koul salandndan alan print komutlar yerine koul salandndan PHP blokundan kp HTML diline geip ekrana yazlar yle yazdrsak nasl olur ? <?php if ($a == ?> Devam edip giden kod satrlar Devam edip giden kod satrlar Devam edip giden kod satrlar [.devam..] Devam edip giden kod satrlar Devam edip giden kod satrlar Devam edip giden kod satrlar <?php } ?> imdi hem kodumuz ayn ii yapyor hem kod daha okunur halde stelikte PHP gereksiz yere ekrana unu yazdram diye uramyor. $b) {
ekleyebiliriz.
Bu
fonksiyonlara
bir
include() fonsiyonu
Ad verilen dosyay kodun iine orada imi gibi ekler ve altrr. Dosya yoksa sadece bir uyar verir ve kodun geri kalann altrmaya devam eder. Include() fonskyionu geriye bir deer dnderebilir.
require() fonksiyonu
require fonksiyonu ilev olarak include() ile temelde ayndr yani ad verilen dosyay kodun iine orada imi gibi ekler ve altrr. Include() ile olan fark ise ad verilen bu dosyann bulunanamas durumunda grlr. Require dosyay bulamazsa program ldrr. Require (kelime anlam gerekli demektir) dosyann olmasn art Koar dosya yoksa kod altrlmaz ta ki dosya yerine konulana kadar. Require () geriye deer dndrmez.
include_Once ve require_Once
Bir liste oluturur ve dahil edilen dosyalarn adn bu listede tutarak her dosyann sadece bir kere dahil edilmesine izin verirler. Aada ki rnei inceleyelim <?php print include print ?> 'Birinci 'Birinci dosya dosya foo\n'; 'iki.php'; bitti\n';
'Kontrol
ikinci
dosyada
\n';
'Birinci 'Birinci
dosya dosya
dosya dosya
dosya dosya
Inclue ve Require kullanrken bu komutlarn iletim sistemine gre deiik davrandklarn unutmamak gerekir. nk Unix trevi iletim sistemleri (Linux, Bsd,Sun solaris) Byk-kk harf ayrm olan sitemlerdir. Windows gibi davranmazlar. rnein
232
<?php include 'dosya.php'; include 'Dosya.php'; include 'DoSya.php'; include 'dosYa.php'; ?> Yukardaki kod Windows iletim sisteminde ad geen 4 dosyayda ayn dosya olarak ele alr nk harf ayrm yoktur. Oysa Linux bir server stnde ise bu 4 dosyada ayr dosyalar olarak aranacak ve bulunamazsa hata verielcektir. Bu bakmdan altn kural dosya isimlerini her zaman kk harf olarak kullanmaktr. Bazen include iin parametre olarak dng deerleride kullanlabilir. rnein aadaki dosyada 1 den 99 a kadar bir dng ile dosyalar include () ile eklenecektir. <?php for ( $i = 1 ; $i <= 99 ; include ("beniekle" . $i . ".x"); ?> ++$i) {
durumda rnein ekle.php?dosyaadi=beniekle.txt deeri ile ilem yaptmz farzedelim. Dikkatli bir kullanc adres satrna o dosya adn yazacak olursa txt dosyann ieriini grr. Helede bu dosayada parola vs bilgiler varsa tehlike ok daha byk olabilir.
234
HEREDOC Nedir
Heredoc PHP iinde ok uzun metinleri zahmetsizce yazmaya yarayan bir yetenektir. Heredoc ile uzun metinler oluturulabilir, kendi metin sonu etiketimizi oluturabiliriz. u kodu inceleyelim; <?php $metin = <<<son Burada biraz PHP iinde metin rnei var. Bu alanda tamamen zgrz bu alanda ift trnak yada tek trnak2 kullanmaktada zgrz Art $degiskenler gibi kullanmda cabas Bu deikenler ilem srasnda ierdikleri deeri alacaklardr, son kelimesini istediiniz yere yazabilirsiniz. u anda sonladrma etiketi o ancak aadaki gibi deil: son; ?>
235
Deikenlerle ilem yapan fonksiyonlar Program kodunu durduruma fonksiyonlar Tarih Zaman bilgisiyle ilem yapan fonksiyonlar Matematiksel fonksiyonlar 236
Metin leme fonksiyonlar Veri ifreleme fonksiyonlar Dzenli fade (Regular expressions) fonksiyonlar Uzant ynetimi Kendi fonksiyonlarmz yazmak Kendisini aran, fonksiyonlar deiken, ve geri arml
empty() fonksiyonu true sonu retmektedir. <? $sayi = 10; echo empty($sayi); $isim = ""; echo empty($isim); ?> // 0 azacak say bo deil 10 // 1 yazacak isim bo
$a = 3.14; //$a = Ali; //$a = 14; // buras imdilik yorum satr // buras imdilik yorum satr
if (is_string ($a)) { print ("A String'dir<br>"); } if (is_integer($a)) { print ("A tamsaydr<br>"); } ?> Bu kod, tarayc penceresine deikeni tipine gre ilgili print ile tanmlanan metni yazdracaktr. Bu program paras Browser penceresine sadece empty() fonksiyonun doru sonu verdii birinci echo() deyiminde 1 yazdracaktr. is_array() ve is_object fonksiyonlar ise srasyla deikenin tipi dizi yada nesne ise true deer retirler. Burada bu konu hakknda detaya girilmeyecektir. Bu fonksiyonlar tm ilerde greceimiz Kullanc Verilerini Dorulama konusunda ie yarayacaktr. rnein kullancya maan soran bir kutucua kullanc bin ytl yazarsa, doru yazmas konusunda uyarlarda bulunmak zere yapalacak kontrollerde bu fonksiyonlardan yararlanlacaktr.
print_r () fonksiyonu
Bu fonksiyon parametre olarak ald deiken ve ierii hakknda bilgi verir. Bu deiken bir dizi ise dizinin elemanlarda buna dahildir.
240
<?php $abc=456; print_r($abc); ?> Bu fonksiyon rneklenecektir. diziler konusunda daha detayl
"brahim"; $sayi;
Deikenin tipinin mantksal olmas iin BOOL Deikenin tipinin alfanmerik olmas iin STRING 241
Deikenin tipinin tamsay olmas iin INTEGER Deikenin tipinin ondalkl say olmas iin FLOAT ifadeleri kullanlabilir.
Metin deikenleri evirirken ok dikkat etmek gereklidir. Metin ifadeler sayya evirilirken banda say varsa bunlar alnr, geri kalanlar yoksaylr. Eer deiken say ile balamyor ise evrim sonucu 0 kabul edilir. rnein yukardaki rnek kod 0 deerini verecektir.
print "<br>"; print "<br>"; $str1k = "Tuncay"; print "kinci deikenin ad: \$str1<br>"; print "Deeri : "; print("Tr : "); //alfanmerik/string print "$str1<br>"; print gettype( $str1 ) ; 242
print "<br>"; print "<br>"; $pi = 3,14; print "nc deikenin ad: \$pi<br>"; print "Deeri : "; print("Tr : "); //ift,ondalk say/double print "$pi<br>"; print gettype( $pi ) ;
print "<br>"; print "<br>"; $logical = true; print "nc deikenin ad: \$logical<br>"; print "Deeri : "; print("Tr : "); //mantksal/boolean ?> PHP iin mantksal olarak doru anlamna gelen True Deeri 1 olarak varsaylmaktadr. PHP'de bir fonksiyon, elde ettii deer doru ise sonu olarak 1 deerini verir. print "$logical<br>"; print gettype( $logical ) ;
<?php $pi = 3.14; print("Deikenin deeri : "); print "$pi<br>"; print("Tr : "); ; //ift,ondalk/double print "<br>"; print "<br>"; print "deitirme ilemi:<br>"; settype( $pi, string ); print "Deeri : "; ?> Bu program altrdmzda, ilk atadmz deerin ondalk bir saydr. Bu deerin trn alfanmerik/string olarak deitirdiimizde ieriim korunduunu gryoruz. Fakat tamsayya dndrme ilemi yaplsayd PHP deerin tamsay blmn alp, ondalkl ksmn atacaktr. Daha sonra bu tamsay deiken yeniden ondalkl sayya evrilese bile bu ondalk ksm ilk deeriyle elde etmek mmkn deildir. Mantksala dnm yaplr ise ierii 0 olmayan tm deerler True olarak geri dner. 0 olanlar iinse False deerini verir.
Ondalk saylar tamsayya evrilirken ondalk ksm atlr (3.14 >3) 244
Tamsaylar ondalk sayya evrilirken .00 ondalk eki getirilir. (3->3.00) Bir ondalkl say tamsayya evrildikten sonra tekrar ondalkl sayya evrilse bile ilk ondalkl ksm geri getirilemez Boolean tipe evrilen ve 0 ve null dnda bir deer ieren tm deerler true olarak dnerler.
<? $dene=selam; $bul=true; $son=2000; echo gettype($dene);//tip renme ilemi, ekrana string yazacaktr settype($bul,string);//tip deitirme ilemi, tipi stringe cevirir echo gettype($bul);//ekrana string yazacaktr $tampon=(integer) $dene;//tip kopyalama ilemi tipi integere evirir. echo $dene;//ekrana 0 yazacaktr. ?>
array_merge() fonksiyonu- (Dizileri birletirme) ki veya daha fazla dizinin btn elemanlarn birletirerek, ortaya yeni bir dizi kartr. array_merge() ileminde en ok dikkat edilmesi gereken nokta birletirilen dizilerin deimeden korunmu olmasdr. rnek: <? $dizi1 = array ("A" , "B" , "C" , "D"); $dizi2 = array ("E" , "F" , "G" , "H"); $dizison = array_merge ( $dizi1, $dizi2); // dng iinde yeni diziyi yazdralm foreach ( $dizison as $eleman2 ) { print (" $eleman2 <br>"); } ?> kinci dizinin btn elemanlar, birinci dizinin elemanlarnn arkasna eklenmitir. array_merge() ilemi, ok-boyutlu ilikili dizilere de uygulanabilir; PHP iki dizideki uyumlu-uyumsuz, yani birinde olan dierinde olmayan btn anahtar+deer iftlerini yeni dizide de olutur. array_push() fonksiyonu(Dizilere deiken ekleme) Bir diziye yeni deikenler eklemek iin, array_push() fonksiyonuna eklemenin yaplaca dizinin adn ve yeni deerleri yazarz. rnek: 246
<? $dizi1 = array ("A" , "B" , "C" , "D"); $dizison = array_push($dizi1, "E", "F", "G"); // dng iinde yeni diziyi yazdralm foreach ( $dizi1 as $eleman2 ) { print (" $eleman2 <br>"); } ?> array_shift() fonksiyonu(Dizinin ilk elemann silme) Dizi tipine sahip bir deikenin ilk elemann tmyle silmek iin array_shift() fonksiyonu kullanlr. Bu fonksiyona sadece birinci eleman silinecek dizinin adn vermek yeterlidir. $silinen_deger = array_shift ($diziadi); array_slice() fonksiyonu (Diziden kopyalama) Bir dizi-deikenin btn elemanlar yerine belirli bir blounu kullanmak gerekirse bunu array_slice() fonksiyonu ile almak mmkndr. Bu fonksiyona kaynak dizinin ad, kopyalamann balad yer ve ka adet deiken alnaca argman olarak verilir. <? $dizi = array ( "A" , "B" , "C" , "D", "E" , "F" , "G" , "H"); $kopya = array_slice ($dizi , 2, 4); 247
?> Burada, PHP'ye $kopya adl yeni oluturulacak dizi tipli deikene, $dizi adl dizinin 2nci deerinden itibaren (2 dahil) 4 deeri alp yerletirmesi bildirilmektedir. Orijinal dizi aynen korunmaktadr. Elemanlar yeni yeni oluturulan diziye kopyalanmaktadr sort() ve rsort() fonksiyonlar-(Dizileri sralama) Bir dizinin iindeki deerleri sralamak iin sort() fonksiyonu kullanlr. Bu fonksiyon kkten bye sralama yapar. Bunu tersine evirmek iinse rsort() fonksiyonu (reverse yada revert) kullanlr. Sralama ileminde dikkat edilecek konu bu fonksiyonlarn Trke uyumlu sralama yapmamasdr. Ayrca sralanacak diziler birden fazla boyutlu ise bu fonksiyonlar doru sonu vermez. Bunlarn yerine asort() ve ksort () kullanlr. asort() ve ksort() fonksiyonlar-(likili dizileri sralama) Bu dizilerin normal dizilerden fark deerlerinin birde ad olmasdr. Deerlerin adna anahtar (key- ksort fonksiyonun adndaki k harfi buradan gelmektedir) denir. Bu tip bir diziyi elemanlarn deerlerine gre sralamak iin asort(), deerlerin anahtar adlarna gre sralanmas isteirse ksort() kullanlr. <? $dizi=array(a1=>"Ali", a2=>"Aye" , a3=>"Bra" , a4=>"Betl"); asort ($dizi); 248
a2=>"Aye"
a3=>"Bra"
249
Bu fonksiyonlar genel itibar ile nemli durumlarda kurulacaktr. rnein bir MYSQL veritabanna balant kurulmadnda buradaki bir tablodaki kaytlar listeleyemeyiz. Bu durumda die(Mysql balants kurulamad) fonksiyonun tabi ki kullanacaz ancak imdilik kafa karkl olmasn diye basit kullanm rnei grmek daha mantkl olacaktr. rnein aadaki kod bir dosyay amaya alyor ancak dosya alnda bir sorun varsa kod deyim yerindeyse intihar ediyor. Dosya ama fonksiyonu ilerde grlecektir. Ancak nemli olan die() fonksiyonunun kullanm eklidir. <?php $dosyaadi = fopen( "benimdosyam.txt" , 'a' ) or die ("Dosya alrken bir sorun olutu!") ; ?
Avantajlar
Tarih formatn merak etmeye gerek yoktur. rnein 01.12.1970 yada 19701201 yada Aralk 12 1970 yazlmas durumunu merak etmeye gerek yoktur. Tarih zamanlarla yapabiliriz. milisaniye 250 baznda ilem
Bir gn 24*60*60 saniye olduundan 86400 saysna eittir. Yani yarnn tarihi iin time ile gelen sayya bu sayy eklemek yeterlidir.
Dezavantaj
Balangc 1970 tir. PHP, ile tarih zaman verilerinin ilenmesi gayet kolaydr. Gelen bilgi taraycnn olduu deil web sunucunun tarih zaman bilgisidir.
Yukardaki kodu altnda ekrana 11843764951184376495 gibi bir say basacaktr. Bu say alt bilgisayarn zamanna gre deiecektir.
basabiliriz, istersek bir deikene alp ilemlere tabi tutabiliriz. <?php print microtime(true); ?>
January
strtotime("2007/12/22")
date () fonksiyonu (tarih zaman bilgisini metne evirme) Yukarda grdmz gbi epoch kullanl bir formattr ancak son kullanc iin bu ok bir anlam ifade etme. nk kullanc her eyi alt gibi isteyecektir. Tarihide tarih gib grmek ister milisaniye cinsinden bir say deil. Bu fonksiyon iki parametre alr ve ikinci parametre zorunlu deildir. Birinci parametre tarihi evirmekte kullanacamz format, ikincisi evrilmesini istediimiz deerdir. Birinci parametre iin PHP dilinde tanml 31 mmkn deer vardr. Bunlardan istediimizi seebiliriz. 252
Bunlarn listesi aadadr ancak bu deerlerin byk kk harf ayrm yaptna ok dikkat edilmelidir. A 12 saatlik Anglo-Sakson am-pm sistemlerinde leden nce ("am") veya leden sonra ("pm") iaretinin verilmesini salar. a ile ayndr ancak sonucu AM-PM byk harfle yazdrlmasn salar. ki haneli gn says, tek "01" - "31" haneli gnlerin nne sfr konur haneli gn ad ksatmas Uzun ay ad "Sal" "Temmuz"
D F h
12 saatlik sistemde saat 01 - 12 (tek haneli saylarn nne sfr konulur) 24 saatlik sistemde saat 00 23 (tek haneli saylarn nne sfr konulur) 12 saatlik sistemde tek 1 12 haneli saatlerin nne sfr konmadan saat 253
24 saatlik sistemde tek 0 23 haneli saatlerin nne sfr konmadan saat Dakika 00 59
i j l L
Tek haneli saylarn nne 1 31 sfr konmadan gn says Uzun gn harfi) ad (kk L Cuma
Artk yl olup olmadna 1,0 ilikin Boolean (doru/yanl) deiken. Artk yl ise 1, deilse 0. Tek hanelilerin nne sfr 01 12 konarak ay sra numaras Tek hanelilerin nne sfr 1 12 konmadan ay sra numaras Ksaltlm ay ad Saniye Ock 00 59
m n M s S
ngilizce ('nc anlamna) 2 th, nd karakter ek (Trkedei 2. deki nokta gibi) Belirtilen ayn gn says 254 28 31
Haftann gn says. lk 0-6 gnn Pazar yada Pazartesi olmas yerel ayarlardan alnr Yl bilgisi drt haneli ki haneli yl Yln gn says yllarda dnerek) 2007 07 (Artk 0 - 365 0-999
Y y z B C I O R T U W Z
ISO 8601 tarih zaman blge 2007-06ayar 18T09:26:55+01:00 Yaz saati uygulamas varm GMT diliminden fark RFC-822 biiminde tarih Sunucu iin blge alan Unix zaman pulu 1 var 0 yok 200 Sat, 12 Jan 17:30 +0000 GMT,CET,EST 1056150335 1979
ISO-8601 formatnda 1-52 haftann numaras Blge ayar cinsinden ofseti saniye -43200 to 43200 255
<?php print date("H:i") . "<br>"; print "dnn tarihi " . date("l", time() - 86400) . "<br>"; print "Bu yl" . date("Y") . "<br>"; print date("jS / F Y") . "<br>"; print "Doum gnm " . date("l", strtotime("01 Apr 1974")) . "<br>"; print (date ("l, d F Y g:i:s")) . "<br>"; ?> lk rnek en ok bilinen formattr. 24 saatlik saat biimi.
<?php setlocale (LC_TIME, "tr_TR"); print (strftime ("Bugn gnlerden: %A ")); ?> Bu kod altrldnda gn ad, Monday,Sunday gibi ngilizce olarak geliyorsa, sunucuda Trke iin blgesel ayar destei yok demektir! Bu durumda aadaki rnek kod her trl koulda ie yarayacaktr.
.date("Y")."<br>".$gun[date("w")]; ?>
$simdi = getdate()
259
= =
$f ?>
round(250
40);
//
rnek kodu en son satrna dikkat edersek eer yuvarlama fonksiyonlarnn dikkatli kullanlmas gerektiini grrr. imdi dnelim nakletmemiz gereken 250 tane koyunumuz var ve bunlar vagonla nakledeceiz. Her vagon maksimum 40 koyun alyor. imdi ka vagon gerektiini bulmak iin round() kullandmzda en son satrdaki kod bize 6.25 saysn yuvarlayp, 6 deerini verecek. 6 vagonda bize en fazla 240 koyun nakletme ans verecek. Peki kalan 10 koyun ne olacak ? Oysa round() yerine ceil() kullanm olsaydk bu bize 6 deil 7 saysn verecekti. Ksaca yuvarlama fonksiyonlarnn her biri kendi asndan kullanldr ve yerinde kullanlmaldr.
kuvvetli sallanm bir saydr. Tabii bu fonksiyon hz olarak biraz daha dk ilem yapmaktadr. <?php $rastgele $randsiniri $mtrandsiniri ?>
= = =
imdi rand() fonksiyonu ile ziyaretilerimizi rastgele ekillerde selamlayacak bir kod yazalm. <?php switch(rand(1,6)) case 1: $slm = 'Hello!'; case 2: $slm = 'Bonjour!'; case 3: $slm = 'Merhaba!'; case 4: $slm = 'Ne haber!'; case 5: $slm = 'yi gnler!'; case 6: $slm = 'Nasl gidiyor!'; } print ?> { break; break; break; break; break; break; $slm;
262
263
print sqrt(25); print sqrt(26); // print pow(10,2); print pow(10,3); print pow(10,4); print pow(-10, 4); // 10000 print hypot(3, 4); // 5 ?>
16lk
AA
265
Trigonometrik fonksiyonlar
sin() fonksiyonu (sins)
Sins deerini dnderir.
267
Saylardan birisi verilmez ise verilen saydan itibaren metnin sonuna kadar her ey alnr. Balang says negatif ise balang sondan itibaren hesaplanr. Alnacak say negatif ise sondaki uzunluk byte deerleri hari her eyi kopyala denilmi olur. (Balang says gzeltimektedir) <?php $string = "brahim Halil Kutluay!" $a = substr($string, 5); //im Halil Kutluay! $b = substr($string, 5, 5); //im Ha $c = substr($string, 0, -1); // brahim Halil Kutluay! $d = substr($string, -5); // luay! 268
// //
str_replace() ve str_ireplace() fonksiyonlar (Metin iinde bul-deitir yapma) Bazen metnin iindeki bir paray aratp bunu yeni bir deitirmek isteyebiliriz. PHP dilinde bu ilem iin iki fonksiyon vardr. Str_replace ve str_ireplace. Str_replace fonksiyonu parametre alr ve kullanm ise str_replace("Aranan", "yerine konulacak olan", $Kaynak metin,say) eklindedir. <?php $eski = "brahim Halil Kutluay"; $yeni = str_replace("brahim", ".", $eski); print $yeni; ?> Yukardaki rnekteki kod metin iinde geen brahim kelimelerini bulacak ve . olarak deitirecektir. imdi ayn rnei deitirip mstakbel problemimizi tanyalm. <?php $eski = "brahim Halil Kutluay"; $yeni = str_replace("ibrahim", ".", $eski); print $yeni; ?> Bir nceki ifade ile ilk bakta hibir fark yok ancak bu rnekteki str_replace fonksiyonu kendisinden beklenen 269
ii yapmayacaktr. nk brahim ile ibrahim alfabetik olarak eit olsada normal ASCII dzeninde eit deildir. Sonuta metinde aranan ifade brahim deilde ibrahim" olduundan str_replace bu metni bulamayacaktr. Bu durumu nlemek iinse str_ireplace() kullanlr. Str_ireplace fonksiyonu harflerdeki byk kk harf ayrmlarna dikkat etmez. Son parametre olan say deikeni verilmi ise metin iinde en fazla o kadar sayda bul deitir yaplr. rnein metin iinde geen 10 brahim varsa ve bu parametre 5 ise str_replace bu ifadelerin sadece 5 ini deitirir.
<?php print strlen("ali") . "\n"; // 3 if (strlen($adi) > 25 { // girilen deer 25 karakterden uzun ise echo ("sim en fazla 25 harf olabilir!); } ?>
$d = str_word_count($st); echo " <br>a deeri <br>";print_r($a); echo " <br>b deeri <br>";print_r($b); echo " <br>c deeri <br>";print_r($c); echo ?> Sonu kts yle olacaktr. a deeri 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 deeri Array ( [0] => brahim [1] => Halil [2] => Kutluay [3] => PHP [4] => ve [5] => HTML [6] => Programlama ) c deeri Array ( [0] => brahim [8] => Halil [14] => Kutluay [22] => PHP [26] => ve [29] => HTML [34] => Programlama ) Metinde 7 kelime var "<br>Metinde $d kelime var \n";
metin
aslnda
8.
karakterden
balyor
Kutluay "a") .
strpos() "\n";
Bu rnekte dnen say 3 olmasna ramen grld gibi A karakteri aslnda 4. karaterdir.
fonkyionlar ne ok metin iindeki veya nnde-arkasnda bulunan gereksiz boluklar tralamak iin kullanlr. <?php $a = trim(" kutluay "); kutluay $b = trim(" kutluay ", " ku"); tlay $c = ltrim(" kutluay "); kutluay ?>
// // //
274
275
<?php $sayi = 12345.6789; $a //12,346 $b = //12,345.67 $c = //12,345.679 = number_format($sayi); number_format($sayi, number_format($sayi, 4, ',', 2); 3); '.');
$d = number_format($sayi, //12.345,6789
= = strcmp($str1,
switch ($sonuc) { case -1: print "ali veliden ncedir "; 277
break; case break; case "; } ?> rnee bakldnda phesiz gzle bile karlatrma yapp bu fonksiyona ne gerek var demek mmkndr ancak bu fonksiyonun byle aka yazlan metinler iin deil deikenlerle kullanldn unutmamak gerekir. Son olarak operatrler ksmnda grdmz === operatrn hatrlarsak yukardaki rnekte switch iindeki ikinci satrnda ayn ilemi yaptn grebiliriz. Bir PHP efansesi derki === operatr bu fonksyiondan hzldr. Bu belki binlerce ilem ard ardna yaplrsa kk bir fark iin doru olabilir. Ama asl sorun udur; strcmp iki metin ayn ise 0 deeri dnderirken, === mantksal true olarak 1 deeri dnderecektir. 1: print "ali veliden sonra gelir break; 0: print "ali ve veli ayndr ";
Sadece iki parametre ile kullanlrsa metnin nne ve arkasna verilen sayda boluk karakteri ekler. Ama eklenecek karakter nc parametre ile verilmise ekleme ileminde bu karakter kullanlr. Dndnc parametre ile ise ekleme ileminin sadece saa , sadece sola yada her iki ana yaptrlaca belirtilir. <?php $str = "Merhaba!"; $str1 // " = Merhaba! str_pad($str, " 10, 10); 'c');
$a = str_pad($str, 10, '-', STR_PAD_LEFT); // "----------Merhaba!" $b = str_pad($str, 10, '-', STR_PAD_RIGHT); // "Merhaba!----------" $c = str_pad($str, 10, '-', STR_PAD_BOTH); // "----------Merhaba!----------" ?>
279
Bu fonksiyonlar bir deikenin ieriini yazdrrken biimlendirmekte kullanrz. Printf sonucu taraycya yazdrrken, sprintf ise sonucu deer olarak dnderir. Bu fonksiyonlarla birlikte kullanlan biimlendirme parametreleri ise:
b c
Deiken tamsay olarak ilem grr ve ikili say olarak dner. Deiken tamsay olarak ilem grr ve ASCII deerinin karl olan karakter olarak dner. Deiken tamsay olarak ilem grr ve ondalk say olarak dner. Deiken kesirli say olarak ilem grr ve kesirli say olarak dner. Deiken tamsay olarak ilem grr ve sekiz-tabanl (octal) say olarak dner. Deiken alfanmerik olarak ilem grr ve alfanmerik olarak dner. Deiken tamsay olarak ilem grr ve 16 tabanl (hexadecimal) say olarak dner. (Harfler, kk harf olur). Deiken tamsay olarak ilem grr ve 16 tabanl (hexadecimal) say olarak dner. (Harfler, byk harf olur). 280
d f o s x
Her iki fonksiyonun da kullanl biimi ayndr: printf( "biim" , $degisken1, $degisken2, ... "metin" ); sprintf( "biim" , $degisken1, $degisken2, ... "metin" ); Burada "biim" yerine yukardaki biim parametlerinden istediimizi yazarz. Biim parametrelerini ayrt etmek iin, nne yzde iareti konulmas gereklidir. Yukardaki tabloya bakarak bu fonksiyon zor yada kullansz grlebilir ancak fonksiyonun ilevlerine ve yapabildiklerine baknca yanldnz anlayacaksnz. <?php $hayvan = "kaplan, aslan, ylan"; printf("Etrafta %s - var. Kim korkmazki!", $hayvan); echo "<br>"; $sayi = 150; printf("150 binary olarak: %b", $sayi); echo "<br>"; printf("150 hex olarak: %x", $sayi); "<br>"; printf("150 metin olarak: %s", $sayi); "<br>"; printf("%% echo "<br>"; ise yzde iareti echo echo
yazdrr");
"Biimli sayi
say
$bicimli\n"; $sayi2);
%.2f\n",
ve
metinleri
ayrmakta
daha
2. oklu dil kullanlan kod yazarken ok kullanldr. 3. Ancak echo fonksiyonunun hz olarak avantajda gz ard edilmemelidir. Yukardaki tr belirten biimlendirme parametlerine ek olarak dier zellikler yle sralanr: Doldurma karakteri: tek trnak ve onu izleyen bir karakterden oluur. Hizalama: Eksi iaretinin varal yaznn sola, yokluu ise saa hizalanma anlamna gelir. Minimum-Maksimum uzunluk: Say-nokta-say (rnein 20.20 gibi) yazlr; birinci say maksimum, ikinci say minimum uzunluu belirtir. Bu zellie bir rnek verelim.Bir deikenin deerinin sonuna yanyana yeteri kadar nokta konarak uzunluunun 40 karaktere kartlmasn u deyimle salarz: <? $vecize = " Olmaya devlet cihanda bir nefes shhat gibi " ; printf( "%'.-60.60s" , $degisken); 282
?> Burada "%'.-60.60s" eklindeki biim komutu, metni yazp sonunuda uzunluk 60 karakter olanada dek noktalarla dolduracaktr. nc biim komutu olan "%s" ise nc deikenin sadece metin muamelesi grmesini salyor. Biim komutlarnn arasnda boluk bulunmamas, ait olduklar deiken deerlerinin de aralarna boluk konmamasna sebep olur. nc deikenin etkisini, kat zerinde gremeyiz; ancak bu tarayc penceresinde bundan sonra gelecek satrlarn bir satr aa kaymasn salayacaktr. Drdnc biim zellii, ondalk saylarn virglden (veya noktadan) sonraki ondalk blmnn ka hane olacan belirler. Bunu da bir rnekle grelim: <?php $fiyat = " 500 " ; printf( "Tutar (ABD) $%.3f" , $fiyat); ?> Bu kod tarayc penceresine kt olarak Tutar (ABD) $500.000 yazdracaktr.
parse_str() fonksiyonu (get ile alnan deikenleri paralayarak bir diziye atma)
HTML formlar incelerken GET metodunda bilgilerin adres satrndan query string adl bir deikene aktarldn grmtk. rnein sayfa.php?a=abc&b=def digi. parse_str() fonksiyonu bu metni paralarna ayrr. Parametresiz kullanm mmkndr ancak en uygunu bir 283
diziyle kullamaktr. Bu fonksiyon oluturdu deikenleri global olarak tanmlamaktadr. <?php $array = array(); if (isset($array['a'])) { print "a= {$array['a']}<BR />"; } else { print "a tanmszdr <BR />"; } parse_str("a=abc&abc=def", $array); if (isset($array['a'])) { print "a= {$array['a']}<BR />"; } else { print "a tanmszdr <BR />"; } ?>
Adminler grevleri gerei parolay sfrlama imkanna sahip olsalarda bu kullancdan habersiz olamayacak <?php print sha1("ibrahim") . "<br>"; print sha1("brahim") . "<br>"; print sha1("brahim sifreleme"); ?> Ekrana dnen sonular ise 04bbd3d882dc8b95efba41c3814ca1f1e417aa8f 86cc77f526bb554ccf073dc691e218228e3f23ee 8065019f642faa3d88a9c2f162e68a79bffd6ba7 ifadeleri ve bana ilk halleri ile pek alakal gibi grnmyorlar. zellikle birinci ve ikinci arasndaki tek bir harf deiikline ramen sha1 sonucu oluan farka dikkat etmek gerek. Halil Kutluay ve SHA ile
bunu grelim; 32 bye demek 128 bitlik ifreleme demektir. Peki bu algoritme bu durumda ka deer retebilir. 2128 kadar yani 3.4028236692093846346337460743177e+38 farkl deer geriye dnebilir. ahsen ben sayy okurken bile zorlanyorum. <?php $md5sifre print ?>
md5("parolam"); $md5sifre;
Metin iinde baka bir metin arama veya var olup olmadn test etmek Metinden bir paray almak
PHP dili iki tp Regexp destekler. POSIX geniletilmi srm ve Perl Uyumlu Regexp srm. Bunlar Posix extended ve Perl Compatible Regular Expressions kelimelerinden gelmektedir. Perl uyumlu Regexp PCRE olarak bilinir ve buna ait fonksiyonlar hem daha gl hem daha hzldrlar. Bu yzde konularda PCRE fonksiyonlar takip edilecektir. Aklnzda bulunsun 1. Regexpler / iareti ile balar 2. Regexpler aksi belirtilmedii srece byk kk harf ayrm yaparlar 3. /i byk kk harf ayrmn iptal eder
Byk byk
288
/[^Aa]bc/ Abc Eit deil. Regexp F ve F yi kabul etmiyor. Bbc,cbc vs eit olurdu. /[A-Z][0-9]/ Z6 Eit en son D /[A-D]bc/ Ebc Eit deil ilk harf olabilir. Sonraki harfler kabul edilmemi /[A-C]bc/ Bbc Eit AbcAA abc99 Eit deil Eit Eit Deil. Byk /[a-z]abc[0-9][0-9]/ /[a-z]abc[0-9][0-9]/
/[a-z]abc[0-9][0-9]/i
Abc99
Eit. /i kullanlm
/[^a-z]abc/ Abc Eit. Set ilk harf iin kk harf dnda her eyi kabul ediyor /[^a-z]abc/i Abc Eit deil. A uygun gibi gelebilir ama /i kullanldndan buda a ilemi grr
? iareti {0,1} anlamna gelir. Kendisinden nce yer alan ifadenin en az sfr en ok bir kere tekrar edilmesi gerektiini (olmayabileceini ama olursa en fazla bir kere olabileceini) belirtir. * iareti {0, } anlamna gelir. Kendisinden nce yer alan ifadenin sfr veya daha fazla kere tekrar edilmesi gerektiini (tmyle opsiyonel olduunu) belirtir. + iareti {1, } anlamna gelir. Kendisinden nce yer alan ifadenin en az bir veya daha ok kere tekrar edilmesi gerektiini (bulunmasnn zorunlu olduunu) belirtir ^ ifadenin bata olmasn kontrol eder $ ifadenin sonda olmasn kontrol eder {} arasna yazlan kadar says art koar
^[a-zA-Z0-9_]+ En az bir harf veya rakam yada altizgi ieren herhangi bir kelime ^[0-9]+ ^\-?[0-9]+ ^\-?[0-9]*\.[0-9*$]+ Regexp /[A-Z]{3}/ harf gerekli Metin AbC Tm sfrdan byk tamsaylar Tm tamsaylar Tm ondalk saylar Sonu Eit deil. byk Eit. Yukardaki
/[0-9]{3}-[0-9]{4}/ 236-3800 Eit 3 rakam, bir tire(-) ve 4 rakam daha (telefon numaras gibi) /[0-9]{3}-[0-9]{2}-[0-9]{2}/ 236-38-00 Eit rakam, bir tire(-) 2 rakam ve yine ve 2 rakam daha 3
/[a-z]+[0-9]?[a-z]{1}/ ab1 Eit deil ifade en son arakter kk harf olmal artn kouyor /[A-Z]{1,}99/ 99 en az bir byk harfle balamal Eit deil ifade Eit deil
/[A-Z]{1,7}[0-9]{2}/i papatya99 Eit ilk 7 harf byk harf olmal ancak /i ile byk harf art geersiz
291
\b \B
[\b] \cX
\d
ikisi de herhangi bir rakamla biten "IE5" ve "IE4" deerlerini ikisini de bulur, \D \f \n \r \t \v \w \W \xHex Herhangi bir ondalk iaretini bulur. Form-feed (kat kart) karakterini bulur. Newline (yeni satr) karakterini bulur. Return (satrba) karakterini bulur. Yatay sekme (Tab) karakterini bulur. Dey sekme karakterini bulur. Herhangi bir harf, rakam veya alt-izgiyi bulur. Harf, rakam ve alt-izgi dndaki karakteri bulur. Verilen 16 tabanl (Hexadecimal) sayya uygun Escape karakterini bulur. rnein, \n25, % iaretini bulur. Herhangi bir harf Herhangi bir rakam
[[:alpha:]] [[:digit:]]
[[:alnum:]] Herhangi bir harf veya rakam [[:space:]] [[:upper:]] Herhangi bir bo karakter Herhangi bir byk harf 293
Herhangi bir kk harf Herhangi bir noktalama iareti Herhangi bir Hexadecimal karakter. [0-9afA-F] Veya (\.com|\.com\.tr : .com veya com.tr deerlerinin bulunmasn salar
(preg_match("/php/", print
"php")) { "eit!\n";
preg_match_all() fonksiyonu
Bu fonksiyonda preg_match() gibi alr. Ancak preg_match() ilk bulduu metinde ilemi bitiriken bu fonksiyon metnin tm iin ilem yapar. <?php $a = "yat Kat sat yatarak preg_match("/[A-Za-z]at\b/i", $a, ?> mat!"; $dizi);
Grdmz rnekte fonksiyon ilk eitleme rneinde iini yaptn varsayacaktr. <?php $a = "yat Kat sat yatarak preg_match_all("/[A-Za-z]at\b/i", $dizi); ?>
mat!"; $a,
ise tm eitlikleri diziye alacaktr. Eer isterseniz kodun sonuna var_dump(dizi) fonksiyonun ekleyip sonucunu grebilrsiniz. Var_dump zellikle dizilerle kullanlan ve ieriini ekrana basan bir fonksiyondur.
295
alanlarda zararl karakter giriine msati alan olabilir. Bunlarn en bandada < ve > karakterleri gelir. Geri bunlarn arasnda bir sr karakter bulunabilir ancak banda bu karakterler olmadan scriptler almayacandan bu bir seviyeye kadar gvenlik salar. rnein ziyareti defteri uygulamas gibi bir formdan adi, adr ve msg isimli deer alm olalm. <? $adi = ereg_replace("<","",$adi); $adi = ereg_replace(">","",$adi); $adr = ereg_replace("<","",$adr); $adr = ereg_replace(">","",$adr); $msg = ereg_replace("<","",$msg); $msg = ereg_replace(">","",$msg); ?>
Dnen deer says fonksiyonun dnderecei maksimum deer saysn belirtir. Geri dnen dizi en fazla bu sayda elemana sahip olabilir. Bu parametre verilmez dizinin eleman says gerektii kadar otomatik olarak belirlenir. imdi split kullanarak bir cmleyi kelimelere ayralm. 297
rnek kodumuz boluk karakterlerini arayacak ve bulduu yerde kelimeleri saptayacaktr. En sonunda ise for..each dngs ile bu kelimeleri srayla ekrana yazdryoruz. <?php $str = "brahim Halil Kutluay PHP ve Mysql Kullanm rehberi."; $ara = " "; $sonuc = split($ara, $str); foreach ($sonuc as $deger) { print "$deger <br>"; } ?>
298
fonksiyonun yapaca ie ilikin komutlar } imdi basite yazdmz ilk rneimizi inceleyelim <?php function myecho($degisken) { echo $degisken; echo "<br>"; } $a=1; $b=2; $c=3; $d=4; $e=5; myecho($a); myecho($b); myecho($c); myecho($d); myecho($e); ?> phesiz sadece <br> etiketi iin fonksiyon yazmak ok mantkl deil ama aklnza gelebilecek her konuda fonksiyon yazmak ve bunu PHP nin iinde hep varm gibi kullanmak mmkn. imdi biraz daha gelitirelim; <?php function echobr ($metin) { 300
print ("$metin<br>\n"); } function echoh1 ($metin) { print ("<h1>$metin</h1>\n"); } function echoh2 ($metin) { print ("<h2>$metin</h2>\n"); } function echoh3 ($metin) { print ("<h3>$metin</h3>\n"); } function echop ($metin) { print ("<p>$metin</p>\n"); } echoh1 ("Bu H1 Balk"); echobr ("Bu satira Br etiketi kendiliinden ekleniyor."); echop ("Bu satra paragrafetiketi fonksiyon tarafndan eklenmektedir.."); ?> imdi yukardaki fonksiyonlar kullanlarak, kod yazlrsa etiket akm, kapalm dikkat edilmesine yada kodlama hatalarn dnmeye gerek kalmayacaktr. imdi arpm tablosu rnei yapalm ; 301
<?php $sayi1 = 3; $sayi2 = 4; function toplama ($sayi1, $sayi2) { $bakiye = $sayi1 + $sayi2; return $bakiye; } function cikartma ($sayi1, $sayi2) { $bakiye = $sayi1 - $sayi2; return $bakiye; } function carpma ($sayi1, $sayi2) { $bakiye = $sayi1 * $sayi2; return $bakiye; } function bolme ($sayi1, $sayi2) { $bakiye = $sayi1 / $sayi2; return $bakiye; } echo print print print ?> toplama($sayi1, $sayi2); echo("<br>"); cikartma($sayi1, $sayi2); echo("<br>"); carpma($sayi1, $sayi2); echo("<br>"); bolme($sayi1, $sayi2); echo("<br>");
tanml bir deikene o fonksiyon iinde yazlan kodlar ile eriilebilir. Fonksiyonda kendisi dnda tanml deikenlere eriemez, deerlerini bilemez ve bunlarla ilem yapamaz. (Yeni $_POST ve $_GET bunun dndadr). Fonksiyon iinde tanml deikenlerin hesaplanan deerlerinin saklanmas isteniyorsa bu deikenler static olarak tanmlanmaldr. rneimize bakalm ; <?php $adi = "brahim Halil Kutluay!"; function yazdir () { print ("<h1>Adnz: $adi </h1>"); } yazdir(); ?> Yukardaki rnek ilk myecho rneimizdeki gibi masum bir fonksiyon. Ancak bu kodu altrrsak ekrana sadece Adnz: yazlacak ancak $adi deikeninin ierii yazlmayacaktr. nk yazdir fonksiyonu $adi deikenine eriemez. Erimesi isteniyorsa global tanmlaycs kullanlr. <?php $adi = "brahim Halil Kutluay!"; function yazdir () { global $metin; yetkisi alnyor // global deere ulam 303
print ("<h1>Adnz: $adi </h1>"); } yazdir(); ?> imdi static rneini inceleyelim; <?php function saybakalim () { static $rakam = 0; $rakam++; print ("<h3>u anki sayi: $rakam </h3>"); } echo ("<h2>1.:</h2>"); echo ("<h2>2.:</h2>"); echo ("<h2>3.:</h2>"); echo ("<h2>4.:</h2>"); ?> Eer rakam deikeni static olmasayd fonksiyon her almasnda rakam deikenini tekrar sfrdan balatacakt. Ancak static olarak tanmlannca deikenin o anki deeri unutulmamaktadr. saydir(); saydir(); saydir(); saydir();
304
Dizi Fonksiyonlar
array() fonksiyonu (deerleri diziye evirme)
En az bir ve st snr belirsiz olmak ere parametre alr ve bu deerleri bir dizi olarak dnderir.
Deikenlerin boyutunuda verir Nesnelerdeki yaynlanm bilgileri yazdrmaz Sonucu bir deikene ynlendiremez parametreyide kabul etmez. ve ilgili
imdi rneklerle bu fonksiyonlar inceleyelim; <?php $benimdizi "ilek"); $boyut = = 305 array("elma", "armut",
count($benimdizi);
print_r($benimdizi); ?> Yukardaki rnekte tanmlanan dizi deiken meyve adnda ieren bir container durumuna gelmektedir. $boyut deikeni ise count() ile dizinin eleman saysn alacaktr. print_r() fonksiyonu ise ekrana dizi ieriini yazacaktr. Array ( [0] [1] [2] )
<?php $benimdizi = array("elma", "armut", "ilek"); $boyut = count($benimdizi); print_r($benimdizi); s ?> $cikti = print_r($benimdizi); // ilem kt bu deikene atlacak print($cikti);
<?php $benimdizi = array("elma", "armut", "ilek"); $boyut = count($benimdizi); var_dump($benimdizi); ?> 306
list() fonksiyonu
Parametre olarak ald dizinin elemanlarn deikenlere evirir,
each() fonksiyonu
Parametre olarak ald dizinin o anki array corsor konumundaki anahtar alan ve bunun deerini dnderir. <?php while (list($degisken, each($array)) print "$degisken = } ?> $deger) = { $deger\n";
$deger) { $deger\n";
307
308
PHP ve Formlar
PHP dilinin en byk var olu amac formlar yoluyla kullancdan alnan bilgilerin ilenmesidir. Daha nce HTML ile hazrladmz formlarda baz bilgiler edinmitik. Bunlar ksaca tekrarlamakta fayda var; 1. Formdan bilgiler gnderilir Get yada Post metodu ile
2. Get ile gnderilen bilgiler querystring adl zel bir deikene, Post ile gnderilenler stdin deikenine saklanarak gnderilir. 3. Get metodunda gnderilecek bilgiler adres satrnda grnnrler. Satrn sonuna ? iareti eklenerek deiken=deer ve deiken aralarna & kodlanarak bilgi iletilir. 4. Query string geemediinden sakncaldr in uzunluu belli bir sayy byk formlarda kullanlmas
5. Parola vs sorulan ekranlardada get kullanlmas sakncaldr. 6. POST metodunda ise kullanc bilgileri gnderdikten sonra taraycnn geri dmesine tklarsa bu sayfa gnderilmi veriler iermektedir benzeri bir mesaj grntler. Bu da kafa kartrc olabilir. Sper Globaller (Superglobals) PHP dilinde form verilerini ilemek istiyorsak nce sper globalleri tanmalyz. Sper global adn almalarnn sebebi ise kodumuzun her yerinden ulalabilir olmalardr. Formlardan alnan bilgiler metoda gre farkl 309
dizilere alnr. GET ile alnan bilgiler $_GET, POST ile alnanlar ise $_POST deikenlerine alnr. Bunlar bir dng iinde srayla ilemek yada dizi ieriklerine teker teker erimek mmkndr.
$GLOBALS
Tm global deikenleri (dier sper globallerde dahil) eriilebilecei bir dizidir. Kullanm ok gerekmedike tavsiye edilmez. Post ile gnderilen deerlerin tutulduu dizi ($HTTP_GET_VARS) yerine bu dizi kullanlmal) Get ile gnderilen deerlerin tutulduu dizi ($HTTP_POST_VARS) yerine bu dizi kullanlmal) http erezleri ile gnderilen tm deikenleri ierir. ($HTTP_COOKIE_VARS) yerine artk bu dizi kullanlmaldr. Yukardaki deikenin birletirilmi hali olarak dnlebilir. Kullanm $GLOBALS e gre daha gvenli olsada hala gvenli kaynakl olmayan bilgileri ierebilmesi nedeniyle dikkatli olunmaldr. Upload edilen tm dosyalarn tutulduu 310
$_POST
$_GET
$_COOKIE
$_REQUEST
$_FILES
dizidir. ($HTTP_POST_FILES) yerine artk bu dizi kullanlmaldr. $_SESSION Oturum iin kaydedilen tm deikenleri ierir. ($HTTP_SESSION_VARS) yerine artk bu dizi kullanlmaldr. Kullanlan web sunucunun bize varsaylan olarak sunduu deikenleri ierir. ($HTTP_SERVER_VARS) yerine artk bu dizi kullanlmaldr. Kullanlan web sunucudaki iletim sistemi tarafndan ayarlanm tm sistem deikenlerini ierir. ($HTTP_ENV_VARS) yerine artk bu dizi kullanlmaldr.
$_SERVER
$_ENV
Grdnz tablodaki birok deiken eski deikenlerinin yetenekleri artrlm ve isimleri ksaltlm halidir. Eskileri dururken neden yenisini kullanalmki diyecek olursanz sebep saylabilir. 1. Yeni isimler ksa olduundan kodlama asndan daha pratik 2. Yeni sper globaller gerekten kodun her yerinden erielebilmektedirler. Oysa eski deikenler adlar global olsalarda rnein fonksiyonlarn iinde iken zellikle talep edilemeden erielemiyorlard 3. Kodunuzun gelecei iin 311
Eski deikenler imdilik kullanm iin braklm olsada imdiden yeni sisteme ayak uydurmanzda fayda vardr. (Zaten kodlanrken isimleri uzun olduu iin yazmasda sknt vermekte.) rnein deikenlere global eriimin gvenlik ana yol at saptannca bu iki dizi getirilmi ama php ayar dosyasnda bir ayarla iki kullanmda mmkn klnmt. Oysa bugnlerde kacak olan PHP 6 da artk bu ayarda olmayacak ve sper dilizlerin kullanm art olacak. PHP 7 srmnde ise belkide HTTP_GET_VARS ve HTTP_POST_VARS deikenleride olmayacak. O yzden yukardada belirtildii gibi imdiden uyumlu kod yazmakta yarar var.
6. Kullancy hata yapmaktan koruyan bir yap gzetilmelidir. rnein rencilerin snf bilgisini alacamz bir alan dnelim. Bu dzyaz olarak tutulursa, kullanc bu alana 6.a, 6.A, 6-a,6A, 6/A girebilir. Bunlarn hepsi kullanc iin gerli verilerdir ama kullanc gerekten 6 -A snfnn listesini isterse ne olacak. Oysa daha ilk bata form dizayn edilirken alan dz metin yerine combobox ile tasarlanm olsayd. Kullanc snf deerini listeden setii iin mecburen ayn deeri girmek zorunda kalacakt.
<HTML> <HEAD> <TITLE>Form</TITLE> <meta http-equiv="content-type" charset=ISO-8859-9"> <meta http-equiv="Content-Type" charset=windows-1254"> </HEAD> <BODY> <FORM ACTION="hedef.php" METHOD="GET"> Adnz, Soyadnz: NAME="adsoyad"><br> <INPUT TYPE="TEXT" content="text/html; content="text/html;
E-email: <INPUT TYPE=TEXT" NAME="email"><br> <INPUT TYPE="SUBMIT" VALUE="Gnder"> TYPE="RESET" VALUE="Sfrla"> </FORM> </BODY> </HTML> imdi hedef.php dosyasn inceleyelim. <?php print ("Merhaba <b>$adsoyad</b>\n\n"); print ("<p>E-mail: <b>$email </b></p>\n\n"); ?> 314 <INPUT
Kodu altrdmzda aslnda tm bilgiler iletilmesine ramen ekrana sadece Merhaba Email satrlar gelmekte ama isimleri gelmemektedir. Eer sizinin altrdnz rnekte girdiiniz bilgiler grnyor ise sisteminizde gvenlik a var demektir. Burada yapabileceimiz iki ey var ; Ya tembellik eder PHP.ini dosyasnda register_globals ayarn on yapar ve sistemde gvenlik ana sebep oluruz, yada kodlama eklimizi gelecee hazr hale getirir ve bu ayar gerektirmeyecek ekilde kod yazarz. Anladnz gibi rnek kod eski ekilde kodlanm bir rnektir. Peki ne yapalmda bu kodu alr hale getirelim? Olayn sebebi, form deikenlerinin gvenlik kurallar gereince kullanlan metoda gre gerekli olan diziden alnmasdr. imdi hedef dosyann yeni haline bakalm ve nasl alr hale getireceimizi grelim. <?php $adsoyad =$_GET[adsoyad]; $email =$_GET[email]; print ("Merhaba <b>$adsoyad</b>\n\n"); print ("<p>E-mail: <b>$email </b></p>\n\n"); ?> Grdnz gibi iki satr kod ekledik belki ama kodumuz imdi ok daha gvenli ve hosting irketinin ayar neydi diye dnmek zorunda deiliz. 315
Kendi ahsma ait 7-7 tane parasn verip aldm Trke PHP kitab var. Bunlarn bir ou konular ok yaln alm, gene bir oundada rnekler eski tipte kodlanm. Kitap PHP 5 kitab ve PHP 4 srmnden beri bu gvenlik sorunu sebebi ile yeni sitemle kod yazlmas gerektiini neredeyse sar sultan duymu durumda ama bizim yazarlar bundan hari galiba. nk PHP 5 i anlatan kitabmda rnek almyorsa register_globals=on yapn deniliyor. Diyelimki yazara uyup bunu yaptnz; peki kodu hosting irketine attnzda ne olacak. Gene almayacak. Hosting irketide srf sizin iin sistemini hackerlara amayacana gre siz en iyisi yazara deil akln gereine uyun ve dorusu neyse onu renin.
316
// yukardaki ksmlar html icin gerekli olanlard. // Program u mantkla alyor. nce $_GET deikenin deerini kontrol ediyor. eer bu deiken bo deilse // gelen bilgi var demektir. bilgileri ileyen else ksmna gidiyor. Aksi takdir yani gelen bilgi yoksa // ekrana formu gsterip bilgi girii salyor. Gnder dmesi ise PHP_SELF sayesinde bilgileri dosyaynn kendisine gnderir. // Gnderim annda GET dolu olduundan bu defa bilgiler gsteriliyor if (!$_GET): {?> <table border=1> <Form Action="<?$PHP_SELF?>" Method="GET"> <tr><td colspan=2 align=center color:red;"> Bilgi Alma</td></tr> <tr><td> Ad</td> <td><input name="adsoyad"></td></tr> <tr><td> Email</td> <td><input name="email"></td></tr> <tr><td> <input ="Gnder"></td></tr> </table> </form> 318 style="fonttype="TEXT" type="TEXT" value
type="SUBMIT"
<?} else : $adsoyad=$_GET['adsoyad']; $email=$_GET['email']; echo "Merhaba $adsoyad <br> Email $email"; endif; ?> </body> </html>
Eer form konusunu biraz biliyorsanz ve yukardaki kodu incelediyseniz PHP_SELF yerine sadece dosya adn yazabileceimizide grm olmanz gerekirdi. rnein dosya ad a.php olsayd action=a.php komutuda ayn ilemi yaptrrd. Peki PHP_SELF i kullanmann faydas ne olacak denirse dosya ad deiikliinden etkilenmemek ve kopyala-yaptr ilemlerinde birde sonradan dosya ad deitirmemek olarak aklanabilir. Yukardaki rnekte ki kullanm mantk ve asndan doru sradr. Bu sray ayn ekilde if (empty($_GET)) kontrol ilede yapabilirdik. kodlama
319
if (!$_POST): {?> <table border=1> <Form Action="<?$PHP_SELF?>" Method="POST"> <tr><td colspan=2 align=center color:red;"> Bilgi Alma</td></tr> <tr><td> Ad</td> <td><input name="adsoyad"></td></tr> <tr><td> Email</td> <td><input name="email"></td></tr> <tr><td> <input ="Gnder"></td></tr> </table> </form> <?} else : $adsoyad=$_POST['adsoyad']; $email=$_POST['email']; echo "Merhaba $adsoyad <br> Email $email"; endif; ?> </body> 321 style="fonttype="TEXT" type="TEXT" value
type="SUBMIT"
</html>
break; case "/": $sonuc = $sayi1/$sayi2; break; case "*": $sonuc = $sayi1*$sayi2; break; case "+": $sonuc = $sayi1+$sayi2; break; default: echo 'Hata olutu.'; } } ?> <form action=="<?$PHP_SELF?>" method="post"> <input type="text" name="ilksayi" size="1"> <select name="islem"> <option value="*">x</option> <option value="/">/</option> <option value="+">+</option> <option value="-">-</option> </select> 323
<input type="text" name="ikincisayi" size="1"> <input type="submit" value="="> <?=$sonuc?> </form> </body> </HTML>
denilmesi bu ilem iin teknik anlamda yeterlidir. Ancak burada formu dolduran kiinin bilgileri size POST formu nasl yollad ise yle gelecektir. Deiken ad, & 325
iaretleri, = iaretleri %20 karakterleri vs vs. Ksaca bu bilgiyi okumak zordur ve bunu teknik bilgisi olmayan birisine kabul ettirmek zordur. (Teknik bilgisi olan birisi ise bunu grnce zaten sizle almaktan vazgeer) Peki ne yapmal. Akln yolur birdir. Demek ki formdan bilgiler alnp toplanmal daha sonra uygun ekilde biimlenip PHP nin kendi fonksiyonlar ile e-posta olarak gnderilmelidir. Not: Bu kodu kendi bilgisayarnzda denemeniz iin bir SMTP sunucuya ihtiya vardr. Internet ortamnda ise emrinize ait bir SMTP sizi bekliyor olacaktr.
Bu fonksiyon ile e-posta otomatik olarak "kime" ksmndaki kiiye veya kiilere gnderilir. Her bir virgl (,) ayr bir ksm gstermektedir. Burada ksmdan kast edilen ey bir epoastann ksmlardr. Hedef adres, konu, bilgi, karbon kopya, gvde metni gibi. rnein: mail("deneme@abc.org.tr", "Deneme", "Merhaba\nBu bir denemedir\nHoakaln."); Ek balklar da yazarsak: Mail ("xyz@abc.org.tr", "Deneme", "Merhaba\nBu bir denemedir\nHoakaln.", "From: xyz@abc.org.tr\n,Reply-To: postmaster@abc.org.tr"); Ek Balklarn tmnn daima ift trnak iinde olduuna 326
ve birbirlerinden "\n" ile ayrldklarna dikkat edilmelidir. Bu yazm ekli mesaj olutururken de geerlidir. Mesaj olutururken bir alt satra gemek iin her zaman \n karakteri kullanlmaldr. Posta yollarken listeleyelim: From (Kimden) Reply-to (Cevabn yollanaca adres) Cc (Carbon Copy - Karbon kopya) Bc (Blind Copy - Kr Kopya - gnderdiiniz e-posta adreslerini gizler) imdi kullancnn girdii isim, eposta adresi, yorum bilgilerini xyz@deneme.com adresine web sitesinden gnderildi konusuna sahip bir epoasta olarak gnderecek kodu inceleyelim. Burada kullanlacak formda isim (ziyareti dolduracak) eposta (ziyareti dolduracak) yorum (ziyareti dolduracak) kime (xyz@deneme.com) konu (web sitesinden gnderildi) eklinde bilgilerin kaynan belirleyip buna uygun bir format oluturalm. nce formu hazrlayalm ve dosyay feedback.php olarak saklayalm: 327 en sk kullanlan balklar
<html> <head> <title>Yorum Gnderme Formu</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </head> <body> <!-Bilgiler sender.php dosyasna gnderilecek --> <form name="eposta" method="post"> <table border="0" align="left"> action="sender.php" cellpadding="2"
cellspacing="2"
<tr> <td colspan="2"> <p align="left">Ltfen yorumunuzu gnderin.</p></td></tr> <tr> <td width="98"> Ad Soyad: </td> <td width="150"><input type="text" name="isim"><!-- 1. Deiken alnd "isim" --></td> </tr> <tr> <td width="98"> E-Posta: </td> 328
<td width="150"><input type="text" name="eposta"><!-- 2. Deiken alnd "eposta" -></td> </tr> <tr> <td width="98">Yorumlarnz </td> <td width="150"> <textarea name="yorum" cols="55" rows="10"></textarea></td></tr> <!-- 3. Degisken alnd "yorum" --> <!-- 4. ve 5. Degisken "kime" ve "konu" ise zaten belli olduundan hidden ile veriliyor--> <br><input type="hidden" value="xyz@deneme.com"> name="kime"
<input type="hidden" name="konu" value="web sitesinden gnderilmitir"> <!-- 6. ve 7. deikenler ise buton olduundan Php karl deer almaya gerek yoktur. --> <tr><td> <input type="submit" value="Gnder"> </p> <p>Ltfen 10 sn. bekleyin. Tekrar butonuna basmanza gerek yoktur.</p> 329 Gnder name="gonder"
</td> </tr> </table> </form> </body> </html> imdi bu verileri kullanarak elektronik hazrlayp yollayacak PHP kodumuzu yazalm: <?php $mesaj = "Ad Soyad: " . $isim . "\n"; $mesaj .= "E-Posta: " . $eposta . "\n"; $mesaj .= "Yorum: " . $yorum . "\n"; $extra = "From: $kime\n"; $extra .= "Reply-To: $eposta\n"; $extra .= "Bcc:def@deneme.com\n"; $extra .= "Content-Type:text/plain; charset=\"iso8859-9\"\n"; $extra .= "Content-Transfer-Encoding: 8bit\n"; mail($kime, $konu, $mesaj, $extra); ?> HTML sayfalarn yaynlarken geerli olan btn kurallar, e-posta hazrlarken de geerlidir: eriin hangi karakter seti ile okunmas gerektiini mutlaka belirtmelisiniz, aksi takdirde e-postanz farkl e-posta istemcilerinde farkl 330 postamz
sonular verecektir! Bu sorunu zmek iin, $extra deikenine Content-Type ve Content-Transfer-Encoding deerleri eklenmitir. Postann BCC blmne de bir eposta adresi yazlarak epostann ayn zamanda def@deneme.com adresinede bilgi olarak geilmesi salanm oldu. Son olarak aklda tutulmas gereken konu ise kullancy sonutan haberdar etmektir. Bylece hem kullanc dostu bir kod yazlm olur hemde kullanc postann gnderildiini grr ve merakta kalp iini salama almak iin ikinci bir posta gndermez. Bunun iin yukardaki kodun altna sadece birka HTML kodu eklenmesi yeterli olacaktr. Sender.php dosyasnn son durumu: <?php $mesaj = "Ad Soyad: " . $isim . "\n"; $mesaj .= "E-Posta: " . $eposta . "\n"; $mesaj .= "Yorum: " . $yorum . "\n"; $extra = "From: $kime\n"; $extra .= "Reply-To: $eposta\n"; $extra .= "Bcc:def@deneme.com\n"; $extra .= "Content-Type:text/plain; charset=\"iso8859-9\"\n"; $extra .= "Content-Transfer-Encoding: 8bit\n"; mail($kime, $konu, $mesaj, $extra); ?> <html> 331
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <title>Merhaba; Sayn <?php formunuz baaryla alnd.</title> </head> <body> <b>Sayn <font ?></font>, color="Purple"><?php echo($isim); echo($isim) ?>,
formunuz <b><font color="Purple"> <?php echo($kime); gnderilmitir. Teekkr ederiz.</b> </body> </html> Bu kodu keni bilgisayarnzda denemek iin bir SMTP sunucuya ihtiyacnz olduunu hatrlatalm. Ayrca bu SMTP sunucu varsa ve Windows altnda alyorsanz, php.ini dosyasn an ve [mail function] bal altndaki ayarlarnz u ekilde deitirin: Kullandnz bilgisayarda kurulu bir SMTP sunucusu varsa: SMTP = localhost ;for win32 servernzn smtp ayarn yazn) 332 only (Kendi ?></font></b> adresine
sendmail_from=xyz@deneme.com ;for win32 only (Email adresinizi yazn) te yandan kendinize ait POP3 ve SMTP destekli bir adresiniz var ise bunu da kullanmanz olasdr. Web Sayfasndan (Upload) Bir Siteye Dosya Ykleme
Upload terimine uygun bir Trke karlk bulmak sorun. Biz ykleme diyip geelim. Normalde kullanclar internette gezer yada dosya indirir. Formlar ilerken grdmz INPUT etiketinin TYPE="file" parametresi ziyaretiye Web sunucusuna dosya ykleme (upload) imkan salamaktadr. Ancak HTTP buna izin versede tarayc programlar bu yetenei ileriki srmlerinde kazandlar. Bu endie birazda hakldr. Dnecek olursak; rnein kullancdan CV dosyasn yklemesini istedik. Peki kullanc bunu Word formatndam ykledi yoksa HTML formatndam. Peki ya kullanc bir punduna getiripte hack iin kullanlabilecek bir dosya yklerse ne olacak. Grld zere dosya ykleme (upload) olay hafife alnacak bir konu deildir. nternette herkesi kt niyetli gibi dnp ona gre tedbir almak gerekir. <HTML> <HEAD> <TITLE>PHP Kullanarak Dosya Gnderme</TITLE> <meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-9\"> </HEAD> 333
<?php $dizin = "files/"; $url = "http://localhost/"; if ( isset ( $gonder )) { print ("<b>Yol:</b> $gonder<br>\n"); print ("<b>Ad:</b> $gonder_name<br>\n"); print ("<b>Boyut:</b> $gonder_size<br>\nst"); print ("<b>Tr:</b> $gonder_type<br>\n"); copy ( $gonder, "$dizin/$gonder_name" )or die ("Dosya kopyalanamad!"); if ( $gonder_type ||$gonder_type == "image/pjpeg" == ) { "image/gif" ("<img
<FORM ENCTYPE="multipart/form-data" ACTION="<?php print $PHP_SELF?>" METHOD="POST"> <INPUT TYPE="hidden" VALUE="500000"> NAME="MAX_FILE_SIZE"
</BODY> </HTML> Bu programda <INPUT TYPE="file" NAME="gonder"> etiketinde kullandmz NAME parametresine verdiimiz deer, ziyaretimizin gnderecei dosyann sunucu tarafndan kaydedilecei geici dizinin tam yolunun yazlaca deikenin ad olacakdr. PHP, bu dosya ile ilgili her trl bilgiyi bu adla kaydedektir. PHP, ziyaretiden bir dosya baaryla aktarld anda otomatik olarak bu isimden yararlanarak u deikenleri oluturur: $gonder Geici kayt dizini yolu (UNIX'te /tmp/phpXXX, Windows'da Windows/TEMP0phpXXX Burada XXX yerine ziyaretilerin gnderdii dosyalarn sra numarasn greceksiniz.) $gonder_name Ziyaretinin gnderdii dosyann ad. $gonder_size Ziyaretinin gnderdii dosyann boyutu. $gonder_type Ziyaretinin gnderdii dosyann tr PHP ayrca bu bilgileri $_POST dizi-deikeninde de tutar. Yukardaki programda u iki deiken ok nemlidir: $dizin = "/inetpub/wwwroot/"; 335
$url = "http://server/"; $dosya_dizin adyla oluturduumuz deikene vereceimiz deer, ziyaretinin gnderecei dosyann kopyalanaca klasrn ad olarak kullanlacaktr. Szgelimi Windows ortamnda buraya kiisel Web sunucunun varsaylan klasrnn adn yazabilirsiniz.
QUERY_STRING
Form ile gelen bilgilerin gnderildii metod: GET veya POST O anda almakta olan PHP dosyasnn ad ve varsa bu ada eklenmi Query_String 336
SCRIPT_FILENAME SCRIPT_URI
olan
PHP PHP
protokolnn
Sunucunun IP adresi
HTTP_USER_AGENT Kullancnn sayfay gezmek iin kulland taraycnn imzas. Bir ok site bu imzaya bakarak farkl kod paralarn kullanp uyumsuzluk sorunlarn elimine etmeye almaktadr HTTP_REFERER Kullancn bizim sayfamza gelmek iin tklad linkin bulunduu sayfa
<?php phpinfo() ?> Yukardaki rnek kod kurulu olan PHP programna ait bilgilerin yannda yukardaki deerleri ve dier tm deikenleri listelemektedir. Ancak istenirse zel bir deikene ait kod yazmak mmkndr.
337
338
okuma ve altrma, dierleri iinse sadece altrma yetkisi olacak ekilde ayarlayalm. lem sras yle olmal. U, G, O harflerini yazp altlarna sras ile rwx harflerini koyup ve rnekte grld gibi verilen ifadelerden veya + olarak yetkileri yazp daha sonra bunlarn saysal deerini hesaplayabiliriz. U rwx +++ 4+2+1 G rwx +-+ 4+0+1 O rwx --+ 0+0+1
Sonu deeri ise U iin 7, G iin 5 ve O iinse 1 olur. Bunlar yan yana yazarak chmodi ile kullanlacak 751 deeri bulunur. Buradan anlayacanz gibi 777 nitelii olan bir dosya herkes arafndan her ileme ak durumdadr. FTP programlar dosya nitelii ayarlarken rastgele 777 deerini kullanmamaya zen gsterilmelidir. Buna dikkat edilemezse byle bir ak bekleyen hackerlar can yakabilir.
340
341
if ( is_dir( "$klasor_adi/$bilgi" ) ) print " [Klasr] " ; print ("<A href=\"$klasor_adi/$bilgi\">$info</A><br>\n"); } closedir ($klasor); ?> Yukardaki rnek kodla; alt klasrler sra ile HTML formatnda listelenmektedir. Aadaki kod ise dosyalar listelemektedir. <? $dizinler=opendir("."); 342
while (($dosya = readdir($dizinler))!==false) { echo ("<li>$dosya\n"); } closedir($dizinler); ?> imdi kapsaml bir rnekle dosyalar listeleyip, link halinde gsterlim ve tklanan dosyayda ierik olarak okuyup ekrana karalm. ncelikle dosyalar listeleyen kod liste.php <? if ($basla)://form ksm alr $i=1; $dizinler=opendir("$yol");//dizini ayoruz while (($dosya = readdir($dizinler))!==false) /*dosyalar yapyoruz*/ { if $yol!=""): ((substr($dosya,-4,4)==".php") && bitinceye kadar okuyor ve atama doldurulmusa if-else aras
4hanesinden
elseif $yol==""):
((substr($dosya,-4,4)==".php")
&&
echo ("<li><a href=dokum.php?dosyaad=$dosya>$dosya</a><br>"); $i++; else: $i++; endif; } closedir($dizinler); else: //form doldurulmamsa else-endif blounu yapar yani yol ister ?> <form action="liste.php" method="post"> Yol <input type="text" name="yol"><br> <input type="submit" value="gonder"> </form> <? endif; ?> Bu kod ise dokum.php <? //dokum.php show_source($dosyaad); 344 name="basla"
/*dier dosyann adres satrndan gelen $dosyaad deikeninin ifade ettii dosya ieriini ekrana dker*/ ?> rnek altrldnda ekrana form gelecektir. Burada ieriinin grntlenmesi istenilen dizin ad girilir, eer bo geilirse dosyann bulunduu dizin baz alnr. Daha sonra dosyalar tek tek listelenecektir. Herhangi bir dosya ad tklandnda ise show_source fonksiyonu alacak ve dosyay grntleyecektir.
print ("Dosya var!"); ?> rnek kodumuz dosya.txt adnda bir dosya var m diye kontrol etmektedir. Eer dosya varsa Dosya var mesaj grntlenecek aksi takdirde program yoluna devam edecektir. <?php if (file_exists(dosya.txt)): echo dosya mevcut; else: echo dosya bulunamad; endif; ?>
346
true/doru,
deilse
kodlamak ok maharet gerektiren bir itir. Dnelim; hosting makinesi Linux olsun ve bu makinede RAR program ykl olsun. Linux sistemlerde kullanc ifreleri passwd dosyasnda tutulmasndan hareketle rar a d pass passwd dosyasn bir yere sktrp sonra silmek ve daha sonra mail komutu ile bu dosyay bir adrese mail yoluyla gndermek mmkndr. Byle bir a affedecek hacker yoktur. Onun iin bir ok hosting irketi dosya altrma yetkisini ya hi vermez yada ok kstl kullandrr. Bu fonksiyon dosya altrlabilir ise true/doru, deilse false/yanl sonu verir. rnek: <? if ( is_executable ( "dosya" ) ) print ("Bu dosya altrlabilir!"); ?>
349
r+: Hem yazma hem de okuma ilemine izin verir. Dosyay silmez. w: Sadece yazma ilemine izin verir. Eer sistemde belirtilen adda bir dosya varsa, dosyann ierii silinir ve boyutu sfrlanr. Eer belirtilen adda dosya yoksa, yeni bir dosya oluturulur. w+-: Hem yazma hem de okuma ileminde kullanlr. Eer dosya varsa silinerek yenisi oluturulur. Dosya yoksa yeni bir dosya oluturulur. a : Sadece yazma ilemi iin kullanlr. a+ : Hem okuma hem de yazma ilemlerine izin verir. Eer dosya yoksa oluturur.
352
print ("Dosya ald!<br>"); } else { print ("Dosya alamad!"); } while (!feof ($dosya)) { $satir = fgets ( $dosya, 1024 ) ; print ("$satir<br>"); } fclose ($dosya); ?> rnekte grld gibi dosya almaya allyor ve duruma uygun mesaj ekrana basldktan sonra dosya ierii satr satr ekrana yazdrlyor. Fgets ile 1024 deerinin kullanlmas kafa kartrabilir. Ancak eer satr 1024 ten ksa ise fgets okuyabildii kadarn kabul eder. while() dngs, feof() doru deilken devam etmek zere kurulmu olduu iin, dosya sonuna ulaldnda dng duracaktr. Okuma ilemi durabilen bir dng iinde kullanlmazsa, fgets() PHP'nin bir programn sona ermesi iin verilmi varsaylan sresi doluncaya kadar dosyay okumak isteyecektir. Bunun ksa anlam ise sonsuz dngdr. imdi fseek ve fread kullanan rnee bakalm; <?php 354
$adi =dosya.txt; if ($dosya = (fopen ($adi, 'r') ) ) { print ("Dosya ald!<br>"); } else { print ("Dosya alamad!"); } $boyut = filesize($adi); $seek_konumu = (int) ($boyut / 2 ); while ( ! feof ($dosya) ) { $str = fread ( $dosya, $ seek_konumu) ; print ("$str<br>"); } fclose ($dosya); ?> Fgetc kullanan rnek ise aadadr. <?php $adi = "dosya.txt"; if ($dosya = (fopen ($adi , 'r') ) ) { print ("Dosya ald!<br>"); } else { print ("Dosya alamad!"); } 355
while ( ! feof ($dosya) ) { $bytebyte = fgetc ( $dosya ) ; print ("$bytebyte"); } fclose ($dosya); ?>
$str = "Bu satr dosyaya kaydedilecek: brahim Kutluay!\n"; fwrite ( $dosya , $str ) ; fputs ( $dosya , "PHP dersleri. Bu satr ise fputs ile yazlmtr \n" ) ; 356
<?php $adi = "dosya.txt"; $dosya = fopen alamad!"); ($adi , 'a') or die ("Dosya
$str = "Bu satr dosyaya kaydedilecek: brahim Kutluay!\n"; fwrite ( $dosya , $str ) ; fputs ( $dosya , "PHP dersleri. Bu satr ise fputs ile yazlmtr \n" ) ; fclose ($dosya); ?>
parametre olarak vermek gerekir. Bu fonksiyon ile kullanabileceimiz kilit tr parametreleri unlardr: 1:Paylam imkan verir Dier proseslerin dosyay paylamalarna proseslerin dosya ile ilem
flock ( $dosya , 2); // dosyay kilitle komutu bylece verildi $str = "Merhaba Dnya!\n"; fwrite ( $dosya , $str ) ; // dosyaya yazld fputs ( $dosya , "Merhaba Hayat \n" ) ; flock ( $dosya , 3); //dosyann kilidini z fclose ($dosya); ?> Bir dosya, kilitlendii anda, ayn dosyay daha sonra kilitlemeye kalkan dier programlar kendilerinden nce konulmu kilide sayg gsterirler. Yani kilitli dosya bir daha kilitlenemez. nce ilk kilidin zlmesi gerekir.
358
bir tablo gibi kullanma imkan verir. Excel tafndan ilenebilir. Onun iin bir metin dosyasn Excel ile amak iin uzantsn csv yapmak yeterlidir. PHP dilinde CSV dosyalarndan bilgi okumak iin fgetcsv, CSV dosyasna bilgi yazmak iinse fputcsv kullanlr.
} } fclose($handle); ?> Yukardaki kod bir CSV dosyasn satr satr okuyup dng iindeki bilgileri deerlere ayrlm olarak yazmaktadr.
foreach ($liste as $satir) { fputcsv($dosya, split(',', $satir)); } fclose($dosya); ?> Yukardaki kod bir CSV dosyasn satr satr okuyup dng iindeki bilgileri deerlere ayrlm olarak yazmaktadr.
<head> <title>CSV arama</title> <META Http-Equiv="Pragma" Content="no-cache"> <meta http-equiv="content-type" content="text/html; charset=iso-8859-9" /> <meta name="keywords" content="Csv" /> </head> <body> <? if (!$_POST): {?> <Form Action="<?$PHP_SELF?>" Method="POST"> <tr><td colspan=2 align=center color:red;"> Not arama</td></tr> <tr><td> No</td> name="no"></td></tr> <tr><td> <input ="ARA"></td></tr> </table> </form> <?} else : $no=$_POST['no']; //echo $no; deger aliyormu kontrol iin 363 <td><input style="fonttype="TEXT" value
type="SUBMIT"
$dosya="dosya.csv"; $baglan=fopen($dosya,'r'); if (!$baglan) { echo "baglanti kurulmad"; exit(); } else { echo "tabloya baglandi <br>"; } while (!feof($baglan)) { $satir=fgetcsv($baglan,filesize($dosya),";"); //echo $satir[0]; okuyor mu kontrol iin kullanabiliriz if ($satir[0]==$no) { $varmi=true; break; } } if ($varmi) { 364
numaral
kii
else {echo "numara bulunamad"; } endif; ?> </body> </html> Yukardaki kodda imdiye kadar grdmz bir ok bilgi bir araya getirilmitir. Her eyden nce programda tek dosya iinde hem form hemde formu ileyen kod verilmitir. Program ilk kez altnda $_POST dizi deikeni bo olacandan, programn form ksm ekrana verilmekte ve notu aranan renci numarasnn girilmesi istenmektedir. Bilgi girilip butona tklandnda ise $_POST bu sefer dolu olacandan programn formu ileyen ksm yani bu numaray arayan ksm alacaktr. Arayan ksmda ise sra ile satrlar fgetcsv ile okup paralanmakta ve soldaki ilk bilginin yani paralandktan sonra dizinin [0]. elemannn forma girilen bilgiye eit olup olmad kontrol edilmektedir. Eitlik salandnda dng krlmaktadr aksi takdirde numara bulunsa bile dosya bitene kadar dng srecek ve web sunucuya adeta ikence ektirecektir.
Rehberin yine CSV formatnda ve hazr varsayalm; aadaki rnek veriler nda Ahmet;05335333355 Mehmet;0542542442 rnek koda geelim; <html> <head> <title>CSV arama</title>
olduunu
<META Http-Equiv="Pragma" Content="no-cache"> <meta http-equiv="content-type" content="text/html; charset=iso-8859-9" /> <meta name="keywords" content="Csv" /> </head> <body> <? if (!$_POST): {?> <Form Action="<?$PHP_SELF?>" Method="POST"> <tr><td colspan=2 align=center color:red;"> Telefon Rehberi </td></tr> style="font-
<tr><td> <input ="ARA"></td></tr> </table> </form> <?} else : $isim=$_POST['isim']; $dosya="dosya.csv"; $baglan=fopen($dosya,'r'); if (!$baglan) { echo "baglanti kurulmad"; exit(); } else {
type="SUBMIT"
value
echo "tabloya baglandi <br>"; } while (!feof($baglan)) { $satir=fgetcsv($baglan,filesize($dosya),";"); //echo $satir[0]; okuyor mu kontrol iin kullanabiliriz if ($satir[0]==$isim) { 367
$varmi=true; break; } } if ($varmi) { echo "<b>$satir[0]</b> isimli kiinin telefon numaras : <b>$satir[1]</b>"; } else {echo "numara bulunamad"; } endif; ?> </body> </html> Bu kodda da tek dosya iinde hem form hemde formu ileyen kod verilmitir. Program ilk kez altnda $_POST dizi deikeni bo olacandan, programn form ksm ekrana verilmekte ve numaras aranan kiinin girilmesi istenmektedir. Bilgi girilip butona tklandnda ise $_POST bu sefer dolu olacandan programn formu ileyen ksm yani bu ismi arayan ksm alacaktr. Arayan ksmda ise sra ile satrlar fgetcsv ile okup paralanmakta ve soldaki ilk bilginin yani paralandktan sonra dizinin [0]. elemannn forma girilen bilgiye eit olup olmad kontrol edilmektedir. Eitlik salandnda 368
dng krlmaktadr aksi takdirde numara bulunsa bile dosya bitene kadar dng srecektir.
Basit Szlk
Yukardaki rnekte yine ufak bir deiiklik yaparak ayn program bu defa basit bir szlk olarak kullanabiliriz. Verilerin yine CSV formatnda ve hazr olduunu varsayalm (internette hazr halde bir sr kelime listesi eitli formatlarda bulunmaktadr. Dolays ile bu uygulamay irket iin bir szlk olarak kullanmanz mmkndr). Aadaki rnek verileri inceleyecek olursak; yes;evet no;hayr evet;yes hayr;no name;ad,isim ad;name isim;name bu yapda bir veri ile hem ngilizce hem Trke szlk olarak aadaki 30-40 satrlk program kullanabileceimizi grrz. rnek koda geelim; <html> <head> <title>CSV arama</title> <META Http-Equiv="Pragma" Content="no-cache"> 369
<meta http-equiv="content-type" content="text/html; charset=iso-8859-9" /> <meta name="keywords" content="Csv" /> </head> <body> <? if (!$_POST): {?> <Form Action="<?$PHP_SELF?>" Method="POST"> <tr><td colspan=2 align=center color:red;"> Basit Szlk </td></tr> <tr><td> Kelimeyi Giriniz </td> type="TEXT" name="sozcuk"></td></tr> <tr><td> <input ="ARA"></td></tr> </table> </form> <?} else : $sozcuk=$_POST['sozcuk]; $dosya="dosya.csv"; $baglan=fopen($dosya,'r'); if (!$baglan) { 370 style="font<td><input value
type="SUBMIT"
echo "baglanti kurulmad"; exit(); } else { echo "tabloya baglandi <br>"; } while (!feof($baglan)) { $satir=fgetcsv($baglan,filesize($dosya),";"); //echo $satir[0]; okuyor mu kontrol iin kullanabiliriz if ($satir[0]==$sozcuk) { $varmi=true; break; } } if ($varmi) { echo "<b>$satir[0]</b> <b>$satir[1]</b>"; } else {echo "kelime dosyada mevcut deil "; } endif; 371 kelimesinin anlam:
?> </body> </html> Bu kodda da tek dosya iinde hem form hemde formu ileyen kod verilmitir. Program ilk kez altnda $_POST dizi deikeni bo olacandan, programn form ksm ekrana verilmekte ve numaras aranan kiinin girilmesi istenmektedir. Bilgi girilip butona tklandnda ise $_POST bu sefer dolu olacandan programn formu ileyen ksm yani bu ismi arayan ksm alacaktr. Arayan ksmda ise sra ile satrlar fgetcsv ile okup paralanmakta ve soldaki ilk bilginin yani paralandktan sonra dizinin [0]. elemannn forma girilen bilgiye eit olup olmad kontrol edilmektedir. Eitlik salandnda dng krlmaktadr aksi takdirde numara bulunsa bile dosya bitene kadar dng srecektir.
Ziyaretilerin durmadan yada otomasyon yoluyla yazmasnn nne gemek iin otomatik onay kodu reteleri Bilgilerin doruluunu kontrol etmeli Veritaban kullanm
<?php if (!$_POST) { // Form dolduruldmu ise ?> <HTML> <HEAD> <TITLE>PHP'de Formlar</TITLE> <meta http-equiv='"content-type' content='text/html; charset=ISO-8859-9'> <meta http-equiv='Content-Type' content='text/html; charset=windows-1254'> </HEAD> <BODY> <FORM METHOD="POST"> <P><font Helvetica'> size='3' ACTION="<?$PHP_SELF;?>" face='verdana, okumak iin Arial, <a
buray tklayn</a></FONT></P>
<P><font size='3' face='Arial, Helvetica'> Adnz, Soyadnz: NAME="adi"><BR> Email Adresiniz: NAME="adres"><BR> Mesajnz:<BR> <TEXTAREA NAME="mesaj" COLS=30></TEXTAREA> <BR><BR><BR> <INPUT TYPE="SUBMIT" VALUE="Gnder"> <INPUT TYPE="RESET" VALUE="Sfrla"> </FORM> </BODY> </HTML> <? } else { ?> <HTML> <HEAD> <TITLE>PHP'de Ziyareti Defteri</TITLE> <meta http-equiv='content-type' content='text/html; charset=ISO-8859-9'> 374 ROWS=10 <br><INPUT <br><INPUT TYPE="TEXT" TYPE="TEXT"
<meta http-equiv='Content-Type' content='text/html; charset=windows-1254'> </HEAD> <BODY> <P><font Helvetica'> <?php $txtdosya = "mesajlar.txt"; if (file_exists("$txtdosya")) { $baglanti = fopen($txtdosya,'a'); } else { $baglanti = fopen($txtdosya,'w'); } foreach ($_POST as $key=>$deger ) { $buyugecevir = strtoupper($key); print ("$buyugecevir: $deger<br>"); $deger<br>"; $metin = "$buyugecevir: size='3' class='s4' face='Arial,
"<center><img height=1
<TITLE>PHP'de Misafir defteri</TITLE> <meta http-equiv='"content-type' content='text/html; charset=ISO-8859-9'> <meta http-equiv='Content-Type' content='text/html; charset=windows-1254'> </HEAD> <BODY> <P><font Helvetica'> size='3' class='s4' face='Arial, width=100%
Sayn: <?$adi=$_POST['adi'];echo $adi;?><br> Deftere bilgi girdiiniz iin teekkr ederim </P> <p>Ana Sayfaya Dnmek HREF="index.php"> tklayn</A><BR> iin <A
</HTML> <? } ?> Program ncelikle gnderilen bir deer varm diye bakp, eer bu deer varsa deerleri ilemek, yoksa formu gnderip deerleri toplamak zere tasarlanm durumdadr. if (!$_POST) kodu ile deer olup olmad ksaca form zerinde gnder dmesine baslp balmad kontrol ediliyor. Eer form iletilmi ise bu defa mesajlarn kaydedilecei dosya zaten varm diye baklyor. Eer dosya varsa eklemek yoksa yazmak zere dosya alyor ve sras ile formdan gelen veriler bu dosyaya kaydediliyor ve en sonunda bu dosyaya yazlan bilgiler ile birlikte bir teekkr mesaj grntlenip klyor. Programda u haliyle mesajlar ekrana gsteren zd1mesaj.php dosyas eksik. Onu da dosya fonksiyonlar ile kendiniz yazabilirsiniz.
ayn yere geldiinde ise erez varm diye kontrol edip, eer varsa ankete daha nceden katldn gsteren bir mesaj grntlemektir. Zaten erezler genel olarak anket formlarnda ve yelik sistemlerinde kullanlr. yelik sistemlerine gelince; sayfaya giriin bir kullanc ad ve ifre ile mmkn olduunu varsayalm. Sayfaya ye olduktan sonra yeler kullanc ad ve ifresi ile sisteme giri yaparlar. Daha sonra bu web sayfasna girilmek istendiinde sistem atlan erez, web sayfas tarafndan kontrol edilir ve ifreyi tekrar girmemize gerek kalmaz. Aslnda erezler daha pek ok ilemde kullanlrlar ancak en ok bu alanda kullanldklarndan bunun detaylarna girildi. Not: Sakn aha sper bir gvenlik nlemi buldum diye dnmeyin. nk erezler tarayc tarafndan verilen bir komutla temizlenebilir. Ksaca erezler tek bana gvenlik iin yetmez. IP numarasnda kullanarak bir nebze etkili olunur ancak bu seferde kiiler ADSL modemlerini resetleyerek deiik bir numara alp bizi aldatabilirler. erezlerin tamamen gvenilir olduunu dnenler aadaki listeye bir gz atmaldr. erezler ifrelenmeden saklanr yani dzyaz dosyalardr. ifre vs bilgiler iin uygun deildirler. (Parolalar MD5 yapp saklamay tekrar hatrlatm olalm. Detay iin md5() fonksiyonuna baknz) erezler sistemde herkesin rahatlkla grevilecei bir ekilde ve belli bir klasr iinde durur 378
erezler kullanc tarafndan silinebilir yada tarayc programa temizletilebilir Kullanc erez kullanm yasaklam ve bu dosyalarn braklmasn tarayssna engelleme talimat vermi olabilir
erezlerin kullanc tarafnda ne kadar saklanacada belirlenebilir. Eer bir zaman belirtilmezse erez sadece tarayc penceresi akken braklr ve kapatlrken silinir. Aksi takdirde istenirse 1 ay gibi bir zamanda belirtilebilir. erezlerin ierdii deerlere erimek iin PHP sunucu deikenlerinden $_COOKIE kullanlr. $degisken=$_COOKIE[erez ad]; Not: $_COOKIE[] deikeni $HTTP_COOKIE_VARS[] deikeninin yerine gelmitir. imdiden kod yazlrken buna uygun davranlmas uygun olur. Her ne kadar kerhen geriye uyumluluk adna iki kod alyor olsada bu ilerdede bu destek recek anlamna gelmez.
Braklan bir erezi temizlemek iinse kodda ufak bir hile kullanlr. setcookie(erez ad,,time()-sure) Birden fazla kullanlabilir. erez brakmak iin dizi deikeler
setcookie(eleman [adi],tuncay); setcookie(eleman [soyadi],anl); Siteye giren kullancy tanma ; <? setcookie ( "Kod", "555", time()+3600 ) ; if ( $ _COOKIE ['Kod']=="555") { echo "Kodunuz 555 tir "; ] else { echo "erez ykl deil" }; ?> Yukardaki rnekte php sayfamz altran ziyaretinin sistemine 1 saat sre ile saklanmak zere bir erez braklmtr. erezin ad Kod ve deeri 555 tir. Daha sonra bu adrese tekrar girilirse haliyle erez bulunmu olacak ve Kod deeri yazlacaktr. Kullanc siteye kanc defa girdi ; <? $tmp=$_REQUEST['gelis]; echo "$tmp"; setcookie ( "gelis", "2", time()+3600 ); if ( $tmp > "0" ) { echo "Sayfamz daha nce $tmp kez ziyaret etmitiniz."; 380
$tmp++; setcookie ( "gelis", $tmp, time()+3600 ); } else { echo "Sitemize ilk geliiniz. hogeldiniz.."; setcookie ("gelis","1",time()+3600); }; ?> Yukardaki komutlar sayfaya girilerimizi sayacaktr. Sayfaya ilk giriimizde "Sayfaya ilk giriiniz.." ibaresi ile karlaacaz. Daha sonraki girilerimizde sayfaya ka kere girmiimizi gsterecektir. Burada dikkat etmemiz gereken husus, "$_REQUEST" birimini kullandmz. Herzaman $HTTP_COOKIE_VARS deyimini kullanmayabiliriz. erez deerini alrken $_REQUEST metodunu da kullanabiliriz. Cookie kullanarak bir saya kodu hazrlayalm. <? // cookiesayac.php $hane=3;//ka haneli saya kullanlacak? $sure=5;//cookie sistemde ka saat tutulacak $yasam=$sure*3600;// cookie sresi hesaplanyor gn iin 3600 $cookiename="counter";//cookie ad counter olacak $ok=$_COOKIE[$cookiname]; $isim="cookie.txt";//cookie dosyas ad if (file_exists($isim))://dosya var ise a $dosya=fopen($isim,"r"); $bak=(integer)fgets($dosya,1024); if(!$ok):// erez sistemde yoksa bir artr $bak++; endif; fclose($dosya); 381
else://dosya yoksa oku deikenine 1 verilir yani yeni a lr $bak=1; endif; $dosya=@fopen($isim,"w");//dosya yazma modunda acl r ve bilgiler yazlr fputs($dosya,$bak); setcookie($cokiename,1,time()+$yasam); fclose($dosya); /* Ekrana yazdrlyor */ $str=strlen((string)$bak); $str=$hane-$str; if($str>0): for($i=1;$i<=$str;$i++): echo 0; endfor; endif; echo "$bak"; ?> Yukardaki kod alnt ancak deitirilmi bir koddur. Kodda dikkat edilecek konular ise ncelikle bu konu include edecek kiilerin include komutunu kodlann en banda kullanmalardr. Eer iclude edilmeden nce ekrana kt veren komut yada tag kullanlr ise cookie sisteme braklamaz. Bu da kodun almamas demektir. En sonda ise saya hane says sayacn o anki deerinden byk ise sayac deerinin bana 0 deerleri eklendiine dikkat edilmelidir.
382
383
384
Mysql veri tipleri Tablo Tasarlama, Key ve index kullanm Mysqli komut satrndan ynetmek SQL dili Mysql zerinde veritaban ve tablo oluturmak iin kullanlacak aralar PHP ile bu tablolara balanp ilem yapmak
MySQL Nedir ?
MySQL bir likisel Veri Taban Ynetim Sistemidir. SQL komutlar ile alr. SQL Sorgular ile veritabanlarna bilgiler eklenir, silinir ve gncellenir. Ksaca, SQL veritabanlarnda kullanlan komut dilidir. Unix tabanl sistemler iin gelitirilen ancak zaman iinde Windows, Linux, Mac OS gibi pek ok sistemdede kullanlabilir hale gelen MySQL veritabanlar arasndaki en hzl sistemlerdendir. Oracle'dan sonra en hzl veritaban olan MySQL, kullanm kolayl ve Linux iletim istemi yada ticari olmayan kullanmlar iin bedava olmasndan dolay Web zerinde en ok tercih edilen veritaban durumundadr. MySQL, ayrca tm programlama dilleri tarafndan da desteklenir. Sorgular salt SQL kodlar ile alp gnderdii iin olduka hzldr ve kullanld dili fazla zorlamaz. MySQL'de veriler sunucu zerinde tutulur, size tahsis edilen ifre ile bu veritabanna erierek veri ak salanr. PHP, MySQL iin biilmi kaftan gibidir. Bunun yzden PHP ve MySQL muhteem ikili olarak adlandrlr. Her 386
ikiside Unix tabanl sistemler iin gelitirildii birbirine son derece uyumludur ve hzldr.
iin
olay kavramak kolaylar. Dile veya gre programa gre deiseler de mantk hep ayndr. Mysql iin 4 ana tip vardr. Metin, say, tarih/zaman ve kme tipleri. Bir tablo stunu iin bir tip belirlemek demek o alana nasl bir bilgi depolanacann belirtilmesi demektir.
Metin tipleri
CHAR( ) VARCHAR( ) TINYTEXT TEXT BLOB MEDIUMTEXT MEDIUMBLOB LONGTEXT LONGBLOB 0 ile 255 karakter uzunlukta sabit kayt boyutlu metin alan. 0 ile 255 karakter uzunlukta deiken kayt boyutlu metin alan. Maksimum 255 karakterlik metin alan Maksimum 65535 karakterlik metin alan Maksimum 65535 karakterlik metin alan Maksimum 16777215 karakterlik metin alan Maksimum 16777215 karakterlik metin alan Maksimum 4294967295 karakterlik metin alan Maksimum 4294967295 karakterlik metin alan
olursa olsun kaydettiiniz bilginin uzunluu kadar yer kullanlr. Bu hesap gerektirdii iin ve char ipinde a lan genilii hep ayn olduu iin Char tipli alanlarn nispeten biraz daha hzl alt sylenir. Aslnda bana grede bu mantkldr. Ancak bu konuda aratrma yapan baz arkadalarm dier veritaban sistemlerinde olsun Mysql de olsun ya bu fark konusunda 3 ey sylyorlar. 1. Varchar daha yavatr. 2. Evet varcgar daha yavatr ancak fark nemsiz denecek kadar az 3. Varchar daha hzl Ancak disk zerinde ve hafza kullanmnda tasarruf saladndan varchar daha ok tavisye edilmektedir. Ayn tabloda hem char hemde varchar tipi alan varsa Mysql uyum sebebiyle char alanlar varchar tipine evirmektedir. BLOB ve TEXT Alanlar BLOB Binary Large OBject . TEXT ve BLOB alanlar deiken boyutlu ve uzun metinleri tutmak iin kullanlan alanladr. Varchar tipinin daha uzun veri tutabilen st srmleridir. Bu tipler byk metin paralar depolayabilirler ancak dier tiplerden ok daha yavatrlar.
TINYINT( ) SMALLINT( )
-128 ile 127 aras yada 0 ile 255 aras iaretsiz (UNSIGNED) -32768 ile 32767 aras yada 0 ile 65535 iaretsiz
MEDIUMINT( ) -8388608 ile 8388607 aras yada 0 ile 16777215 aras iaretsiz INT( ) BIGINT( ) -2147483648 ile 2147483647 aras yada 0 ile 4294967295 aras iaretsiz -9223372036854775808 9223372036854775807 aras yada 0 ile 18446744073709551615 iaretsiz FLOAT DOUBLE( , ) DECIMAL( , ) Kk boyutlu ondalkl say Byk boyutlu ondalkl say Metin tipte deikendir. saklanan Double tipli ile aras
Tamsay tiplerinde grdnz iaretsiz (UNSIGNED) seenei ek bir zelliktir. Normalde tamsaylar eksi veya art deer alabilirler. Ancak say unsigned olarak tanmlanrsa eksi deer alamaz ve sfrdan balar. Buda saynn tayabilecei st snr artrr.
Kme Tipi
ENUM ( ) ENUMERATION (numaralandrma) numaray veri olarak depolar SET Enum ile ayndr ancak veri uygun elemanlarn bir kandan olauabilir. ENUM('y','n') Enum listelerinde 65535 deer olabilir. Bu listede olmayan bir deer verilirse alana bo bir deer atanr. SET yukarda da belirtildii gibi enum ile ayndr. Ancak Set listesinde 64 eleman olabilir ve bunlardan bir kada deer olarak depolanabilir. tipidir.Stun gelen
391
Kutluay 2 5
imdi genel mantk asndan tablo tasarm konusunda fikir gelitirelim. Grld gibi renci no herkes iin tek bir deer almaktadr. sim ve soy isim char ve ya varchar olarak tanmlanabilir ve 20 karakter yeterlidir. Snf deeri iin u anda smallint tipi bile uygun ama 6 FEN C gibi deerler iinde hazr bir alan tutmak adna varchar yada char tanmlanabillir. Burada tasarm hneri bunlarda deil son iki stundadr. yleki grdnz gibi cinsiyet bilgisi 5, mezuniyet ise 392
10 karakter uzunlukta. Tabloda 1.000.000 kayt var ise bu iki stun toplam 15 Mb yer kullanacaktr. Peki biz cinsiyet deeri yerine, erkek =1 kadn= 0 olarak smallint , ve de mezuniyet iin ayn teknikle, ilkokul =0, ortaokul=1, lise=2 , Myo =3 ve niversite=4 diye iki deer kullansak nasl olur. Ekrana grntlerken ilave kod yazmak gerekecek ancak ilk hali ile 15 MB yer kullacak olan bu stunlar smallint ile sadece 2 MB yer tutacak. Tabii bu deerler liste alnrken vs hafzann daha ekonomik kullanlmasnada yarayacak. Son olarak ise arama ilevleri iin hazrlk yapmaya gelelim. imdi rnein ad Tuba olan renciyi bulmak istersek ne yapmak gerekecek. CSV rneklerini hatlarsak For each ile btun tabloyu srayla okuyup kontrol edeceiz. Peki bu ilemi hzlandramazmyz. rnein yukardaki asl tablonun asl tablonun yannda birde anahtar dosya tanmlasak. Mesela numara alan iin renci no Ad 1 2 3 4 5 8 9 brahim smail Tuba smail Trkan brahim Azize
eklinde kayt tutan bir indeks dosyas tanmlasak ve burada kaytlar sral olduu iin arama yntemleri 393
kullansak nasl olur. rneimizde 8 nolu kayda ulamak iin 5 kayda gidip kontrol etmek gerekirken ikiye blerek arama yntemi kullanlrsa neler olur. Bu tntemde kaytlarn en ortasndaki eleman bulunur. rneimizde bu 4 tr. Aradmz deer bundan bykse buraya kadar elemanlar iptal olur, kkse bundan sonraki deerler iptal olur. Grld gibi ilk elemede kaytlarn yars umakta. Daha sonra orta eleman 8 oluncaya kadar bu yntem devam edecektir. Key kullanmann tek faydas bu deildir. Key alanlar tablolar zerinde ilem yaparken bize doru kaytlarn ileme girmesi konusunda ehberlik eden alanlardr. rnein yukardaki tabloda ad brahim olan kayd sil deseydik silinen kayt says iki olacakt. Peki ya silmek istediimiz kayt sadece bir tane olsayd. Bu durumda ilgili kaydn numarasn vermemiz gerekirdi. te key alanlar bu konuda yardmc olarak n plana karlar. Key alan kullanmadan veri girii yaplr ancak silme yada gncelleme yaplacak olursa iler karr. Programclk dnyasnda artk veritaban tasarm ayr bir uzmanlk alan haline gelmitir. Yukarda saydklarmz phesiz kimseyi veritaban yneticisi yapmaz ama arama algoritmalar ve indekslerin gereklilii ise sadece tavsiye anlamnda kaynaklarda yer almaktadr. O bakmdan iin detayn renmek bakmndan iyi bir adm atlm olmaktadr.
394
Mysqli Balatmak
Benim kullandm Uniform paketinde bu i iin komut noktasnda c:\> satrnda iken mysqld-opt.exe komutu verilemektedir. Bylece Mysql alacaktr.
Bu komutla, "tablom" isimli stunlu bir tablo oluturulur: ilk stunda sadece tam say olan deerler bulunabilir,sonraki iki stunda ise en fazla 10 karakterlik deien boyutta alfanmerik deerler yer alr. Genel bir kural olmamakla birlikte tablolarda bir adet indeks alan bulunmas mutlaka tavsiye edilir. Bu alan genellikle otomatik artl bir alandr. Yine genel olarak bu alann ya ad id olur yada alan ad id ile biter.
Sadece alan1 alanndaki bilgileri gmek isteseydik , bu komutu yle yazmak gerekirdi: SELECT alan1 FROM tablom; Select komutunda sadece bize gereken stunlarn seilmesi ok nemli bir konudur. Bir ok enge programc SELECT * from diyerek ii daha ksa yoldan haletliini sanr ancak bu her zaman dru deildir. Hatta genellikle yanltr. Neden derseniz. Select komutu sonu olarak bir kt retmektedir. Bu kt ya ekrana yollanacaktr yada istenen yere. Web ortamnda buna riayet etmezseniz sonuta almanz gerekenden daha byk bir sonu veri kmeniz olacaktr. Bylece hem sunucu gereksiz yorulacak, hem siz iinize yaramayan bir bilgiyi sunucudan almak iin gereksiz zaman harcam olacaksnz hemde sunucu trafii olumsuz etkilecenecektir. Cidden amacnz sadece ad-soyad listsi almak ise yanda tm kimlik detay bilgilerinide grmek istermiydiniz.
397
Bu komut, tablodaki btn satrlarda, ilgili stundaki deerleri "Ali" olarak deitirmekle sonulanr. Amacmz gerekten bu olsayd sorun deil ancak genelde sadece bir yada bir koula gre deiiklik yaplmas gerekir. Ksaca MySQL'e hangi satrda (veritaban diliyle sylersek, hangi kaytlarda) deiiklik yaplacan daha ayrntl sylememiz gerekir. Veritaban dosyamz olutururken, her kaydn dier kaytlarda olmayan (unique) bir stun (bunu da veritaban tekniindeki terimle sylersek alan) bulunmaldr. Yukardaki key kullanmn hakknda yazlanlar hatrlattktan sonra nei yeniden ele alalm UPDATE tablom SET alan1 = "Ali" WHERE id = 1; MySQL bu komutu grd zaman sadece id alan 1 olan kiinin (yani 1 nolu kaydn) "alan1" alanndaki deeri bizim verdiimiz yeni deerler yani Ali olarak deitirecektir.
398
RDBMS (VTYS) arasndaki karakteristik fark RDBMS'nin set-oriented (kme ynelimli) veritaban dili sunmasdr. Birok RDBMS'in veritaban dili SQL'dir. Kme ynelimli demek SQL'in veri kmesini grup halinde ileme tabi tutmasdr. VTYS gelitiricileri programlarna SQL komutlarn anlama, ileme yeteneklerini eklemektedirler. Ancak her irket kendi VTYS programn daha iyi hale getirmek iin ayr ayr komutlar ekleyince bir standart belirlemek zaruri hale geldi. Gnmzde SQL dili iin iki ayr kurum iki ayr standart belirlemitir. Bunlardan biri ANSI (American National Standards Institute) dieri ise ksa ad ISO olan International Standards Organization dur. VTYS sistemlerinin bir ou ANSI-92 standardna tam uyum desteiyle gelirler.
8. Set level Insertion, update, and deletion 9. Physical Data Independence 10. 11. 12.
1-
Logical Data Independence Integrity Independence Distribution Independence Relational Data Process: VTYS programlar depoladklar bilgileri veritabann ilikisel olarak ynetebilmeli Information Rule : Btn bilgiler bir ilikisel veritabannda (tablo ve kolon adlar dahil) bir tablodaki deerler gibi gsterilebilmeli. (rnein Mysql de btn veritaban isimleri, bunlarn iinteki,tablolar, bu taplardaki alanlar ve bu alanlarnda tipleri, uzunluklar da Mysql tablolarnda tutulmaktadr) Guarented access : likisel veritaban iindeki her deer tablo ad, birincil index deeri ve kolon adlar birletirilerek eriilebilir olmal. Systematic Null Value Support : Veritaban ynetim sistemi altyap olarak null verileri (deerleri verilmeyen veya uygulanabilir olmayan veri) desteklemeli. Active, Online Catalog : Veritaban tanm ve ierii mantksal seviyede bir tablo gibi 401
Olarak belirlenmitir.
2-
3-
4-
5-
Comprenhensive Data Sublanguage : En az bir dil, veritaban tanmlanmal ve bu dil, veri tanmlama, deitirme ve gvenilirlik kurallar, yetki ve hareketleri destekmeli. (rnein SQL gibi) View updating rule : Btn grnt tablolar (view) sistem tarafndan gncellenmeli. Set level Insertion, update, and deletion : Veritaban sistemi sadece kaytlar seme ilemini deil ayn zamanda veri kmesi seviyesinde ekleme, gncelleme ve silme yapabilmeli. Physical Data Independence : Uygulama Program mantksal olarak Fiziksel eriim metodu veya depolama yaps deitiinde etkilenmemeli. Data Independence : Uygulama program tablo yapsndaki deiikliklerden etkilenmemeli. Independence : Veritaban gvenlik kurallar tanmlayabilmeli ve bunu online katalog iinde depolayp geersiz klnamamal. (rnein mysql2in kullanc yetki tablosu) Veritabanndaki 402 veriler Independence: tekrar tekrar
7-
8-
9-
10- Logical
11- Integrity
12- Distribution
datlabilmeli. 12Nonsubversion : Tanmlanm gvenlik kurallar dk seviyeli dillerle etkisiz hale getirilememeli. Bir ok database'in ata-ocuk ilikisi bulunmaktadr. Ata her bir ocuk iin iaretiler ierir. Bu metodun bir ok avantaj ve dezavantajlar vardr. Bu sayede disk zerindeki fiziksel veri yaps nemini kaybetmektedir. Programclar basit olarak iaretileri bir sonraki yerde saklayarak veriyi eriilebilir klmaktadr. Bu yolla veri kolayca eklenebilmekte ve silinebilmektedir. Codd'un fikri VTYSlerin, ilikisel cebirin matematiksel konseptleri ile veriyi kme ve ilikisel altkmelere blmekti. nk bilgi doal olarak farkl kmeler yoluyla gruplanr. Dr.Codd. Veritaban sistemini bu konsept etrafnda toplamtr. likisel model altnda veri kmelere blnm ve tablo yapsnda toplanmtr. Bu tablo yapsnda veri elementleri kolon veya alan ( Column-Fields) olarak anlr. Bir grup alan kmesi satr veya kayt olarak bilinir.
Definition
Language):Veri
tanmlama
DML(Data Manupulation Language):Veri dzenleme ve ileme komutlar. DCL (Data Control Language):Veri kontrol komutlar.
403
404
Mysql e Tm kaytlar gnder der ve gelen kaytar kontrol edip 6-A rencilerini ekrana kendiniz yazarsnz. Mysqle Okuldaki recileri rencileri kontrol et ve 6-A rencilerini gnder dersiniz ve buradan gelen tm kaytlar ekrana yazarsnz.
405
phesiz bu iki ilemi yapan kiide programcdr ancak 1. ilemi programc amatr ii yapmtr. Komutlara gemeden nce son bir hatrtmada bulunalm. SQL, sadece PHP diline yada MYSQL e ait bir kavram deildir. Bugn PHP, Java, C++, Delphi, Python, ASP, C# dahil hangi dile bularsanz bulan mutlaka temel SQL bilmeniz gerekir. Yine ayn ekilde Interbase, MsSQL, Oracle, Mysql, Firebird vs hangi VTYS sistemini kullanrsanz kullann mutlaka SQL bir gn size lazm olacak. Onun iin SQL konusunu ok ama ok iyi almalsnz.
A. DDL KOMUTLARI
CREATE Komutu
CREATE komutu tablo ve view gibi bir veritaban nesnesi yaratmay salar. (Create ayrca yeni veritabanda oluturabilir.) Mysqlde stun adlarn snrlamak iin ` karakteri kullanlr. Normalde bu verilmedende ilem yaplr. normal SQL nostasyonlarnda bu karaktere gerek yoktur. Kullanm Yaps: CREATE <tablo ad> rnek: CREATE TABLE ogrenci ( ogrno INT, adi VARCHAR(30), 406
soyadi VARCHAR(30) ); Daha st dzey bir rnek CREATE TABLE ders01a ( id INT NOT NULL AUTO_INCREMENT, ad VARCHAR( 25 ) NOT NULL , soyad VARCHAR( 25 ) NOT NULL , tel VARCHAR( 15 ) NOT NULL , email VARCHAR( 40 ) NOT NULL , PRIMARY KEY ( id ) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_turkish_ci;
ALTER DEYM
Daha nce yaratlm nesnenin deitirilmesini salar. rnei bir tablonun tasarmn deitirmek gibi. rnek: ALTER TABLE ders01a ADD msn VARCHAR( 40 ) NOT NULL ; Yukardaki komutla ders01a tablosuna birde msn adl alan eklenmektedir.
DROP DEYM
Bir nesnesin silinmesini salar. 407
rnek: DROP TABLE ders01a Yukardaki rnek kod az ders01a adl tabloyu mevcut veritabanndan kaldracaktr. Yani tablo komple yok olacaktr. Drop Database eklinde kullanlrsa bu komut komple bir veritabannda silebilir.
Parametrelerin Anlamlar:
ALL : Parametresi btun stunlar dndrr. DISTINCT : Parametresi iftleyen kaytlardan sadece birer tane gelmesini salar. liste : Parametresi tablodan dndrlecek stunlarn isimlerini bildiren listedir. INTO :Parametresi Select ifadesiyle gelen kaytlar baka bir tabloya dorudan yazmaya yarar. yeni tablo : Parametresi sorgu sonucu yaratlacak tabloyu belirtir. FROM : Verilerin hangi tablodan getirileceini belirtir. tablo : Parametresi ise sorgulanacak olan tablo ya da tablolar, grnmleri belirtir. WHERE : Select ifadesi iin koul belirtmeye yarar. GROUP BY: Kaytlarn gruplanmasn salar. HAVING : Gruplarn ara toplamlar alnr. HAVING szc de kaytlarda kstlama yapar ancak hesaplamay etkilemez. ORDER BY: Sorgulama sonucu dnen kaytlar belir bir stuna gre artan (ASC) yada azalan (DESC) ekilde sralamay salar. COMPUTE : Parametresi ise hesaplama yapar. Tipik olarak SUM, AVG, MIN, MAX, COUNT gibi fonksiyonlar kullanarak hesaplama yapar. LIMIT : Parametresi ifade ile verilen sayda kayd dnderir. LIMIT Mysql ile kullanmda belirli bir zellie sahiptir. Normal SQL de limit 10 ilk 10 kayd getir demektir. Ancak Mysql de limit 0,10 ilk 10 kayd getir demekken limit 100,10 100. kayttan sonraki ilk 10 kayd getir 409
demek anlamna gelir. Bu ilem en ok verileri sayfalar halinde listelemeye yarar Yukardaki kark kullanm kullanm iin Select komutu eklindedir. rnek: SELECT * FROM ders01a Bu komut ders01a tablosundaki tm kaytlar seer. SELECT deyiminin ardndan kullanlan * iareti btn kaytlar anlamna gelir. Bu deyimin ayns u ekilde de yaplabilir: rnek: SELECT id,ad,soyad,tel,email,msn FROM ders01a SELECT deyimi ile sadece belli kolonlar (alanlar) da seilebilir: SELECT id,ad,soyad FROM ders01a Yukardaki komutla tablodan id, ad ve doyad kolonlar seilmitir. SELECT Distinct ad FROM ders01a Yukardaki komutla ders01a dosyasnda isimler sadece birer kere listelenecektir. Yani 10 tane ad Mehmet olan renci varsa bunlardan sadece birisi listelenecektir. SELECT * FROM ders01a Order by Sinif Yukardaki komutla tablodaki kaytlar sinif alanna gre sralanarak listelenecektir. 410 tablosu yerine en basit
SELECT * FROM ders01a Order by Sinif, ogrencino Yukardaki komutla tablodaki kaytlar nce sinif alanna, daha sonra snf ayn olanlarda kendi ilerinde ogrenci no alanna gre sralanacaktr. SELECT * FROM ders01a Order by Sinif DESC Yukardaki komutla tablodaki kaytlar sinif alanna gre bykten ke gre sralanacaktr. SELECT * FROM ders01a Group by Sinif Yukardaki komutla tablodaki kaytlar sinif alanna gre gruplanarak listelenecektir. SELECT * FROM ders01a LIMIT 0 , 300 Tablodan ilk 300 kayd seerek listeler SELECT * FROM ders01a LIMIT 10 Tabloadan ilk 10 kayd seerek listeler SELECT * FROM ders01a LIMIT 100 , 20 Tablodan ilk 100 kayttan sonra gelen 20 kayd seerek listeler SELECT mamul, siparisadet FROM siparisler ORDER BY mamul COMPUTE SUM(adet) Yukardaki rnekte siparisadet kolonunun toplam alnr.
rnein hazr bir veritaban olsun. Bu tabloda personel iin L_01_employee_db_recs olsun Bunu SQL inde doru yazmak kesinlikle zor..stelikte birden fazla tablodan kayt ekilen ve ilerde grlecek olan Join ilemlerinde SQL yazmak iin hem kodu uzatan hemde okumay zorlatran bir durum. imdi koda bakalm ve durumu daha iyi anlayalm. Kod yazlrken Joinli ifadelerdeki notasyon kullanlmtr. Select L_01_employee_db_recs.name, L_01_employee_db_recs.surname, L_01_employee_db_recs.date1 Select abc.name,abc.surname, L_01_employee_db_recs AS abc abc.date1 from
Grld gibi abc yerine eleman gibi daha anlalr bir isim yazlacak olursa kodu okumak dahada kolaylaacak. Aslnda burada mantk basit. SQL altran sisem burada kullancdan ald ifadeler yerine altrmadan nce gerek hallerini koyup yle ilem yapmaktadr, hepsi bu.
Where Deyimi
Where deyimi aslnda en ok Select ile birlikte kullanlr. Ancak where deyiminin tek kullanm alan bu deildir. Where kayt silerken veya gncellerkende kullanlmas adeta zorunlu bir deyimdir. Select komutunda kullanlan Where parametresi ile belirli koullara uyan kaytlarn seilmesi salanr. Aslnda bu olay ok nemlidir. rnein Adanada oturan kiilerin listesi dediimiz zaman yapabileceimiz iki ey vardr. Ya 70 milyon kayd eker tek tek oturduu yer kontrol edilir. Yada daha veritabanndan sorgu aamasnda iken Oturduu yer 412
Adana olan kaytlar e ve bana gnder denilebilir. Bu ilem bize iki fayda salar; 1. Web server yorulmaz mmkn olan en az sayda kaytla ilemi yapm olur 2. Gerekmedii halde seilen kaytlarn geniliini kullanmas engellenmi olur SQL ile Arama Operatrleri Aadaki tabloda ilemde kullanlabilecek operatrler grntlenmektedir. Karlatrma operatrleri Aralk belirtme Liste String karlatrma Bilinmeyen deerler Koullarn birletirilmesi Tersini alma (=, >, <, >=, <>, !=, !<, !> BETWEEN ve NOT BETWEEN IN ve NOT IN LIKE ve NOT LIKE IS NULL ve IS NOT NULL AND, OR NOT web bant
RNEK: SELECT * FROM ders01a WHERE id =1 SELECT * FROM ders01a WHERE adi =AL
413
In ve Not In Deyimleri
In ve Not In deyimleri bir koul iin birden fazla deerin kontrol edilmesini salarlar. Aslnda bunlarn yerine AND OR bloklar da yazlabilir ancak bu iki deyim daha temiz bir kod grnm sunarlar. imdi yukardaki son rnei ele alalm. Daha sonra bunu IN deyimi ile yazalm. SELECT * adi=Veli from ogr WHERE adi= Ali and
Grld gibi ikinci kullanm daha temiz ve anlalrdr. IN deyimi birden fazla deerin iinden eitlik durumunu kontrol ederken NOT In kelime anlam gibi bunun tersini yani deerlerin dnda olmas artn arar.
// Eleman
// Tabloda
ondaki sonraki harfi ne olursa olsun sonu al ile biten kaytlar listelenmektedir.
Group By Deyimi
Kaytlar belirli bir alana gre gruplamak iin kullanlr. rnein mterileri ehirlere gre gruplanm olarak listelemek iin bu deyimden faydalanlr. Ancak grup by sadece kendisine verilen srada ilem yapmaktadr. Ksaca kaytlar sral deilse bu ilemin sonucu tuhaf veriler dnebilir. O yzden temel prensip gruplanacak alana gre sralama yaplyor olmasdr. Kullanm ekli: SELECT [Alan Adi] FROM [Tablo Ad] WHERE [Seilen Kriter] Group By [Alan Ad]; rnekler: Select * from isim group by ad;
Order By Deyimi:
Tablodan sorgulanan kaytlar sralamak iin kullanlr.Dikkat edlmesi gereken nokta anahtar alan kullanmdr. Eer tabloda anahtar alan var ise sralama bu kullanlarak yapalacandan ilemin hz artacaktr. te bu yzden ilerde olabilecek bu gibi durumlar iin tablonun daha tasalanma aamasnda gerekli anahtarlarn konulmas nemlidir. Order by ile birden fazla alan kullanarak sralama yaplabilir. 416
Kullanm ekli: SELECT [Alan Adi] FROM [Tablo Ad] WHERE [Seilen Kriter] Order By [Alan Ad]; rnekler: Select ad,soyad from eleman order by soyad; Yukardaki rnekte eleman adl tablodan ad ve soyad stunlar ekilerek soyad alanna gre sralanyor. Peki ayn soyada sahip kiiler ne olacak derseniz bir alttaki rnee bakalm. Select ad,soyad from eleman order by ad,soyad; Bu rnektede ayn tablodan ayn kaytlar sorgulanmakta. Ancak bu sefer sralama ileminde nce soyad daha sonrada ad sralanacaktr. Yani eer ayn soyada sahip kiiler varsa bunlarda adlarna gre sralanm olacaktr.
imdi diyeceksiniz ki ee PHP zaten sunucu da almyormu o zaman neden kaytlar zerinde ki bu tip aritmetik ilemleri PHP ile yapmayaym Cevab iki kl bu sorunun; 1. SQL de yaptrmak her ikiside sunucuda almasna ramen nispeten daha hzldr. nk SQL de Mysqlin kendisi kaytlar okuyup deeri hesaplayacak ve bunun iin en optimize yntemi kullanacaktr. Dier yanda PhP tarafnda yapmak iinse, kaytlar ekilip deikenlere atanacak, sonra birde bunlarla ilem yaplacak ve deer elde edilecek. Hangisi daha ksa ? 2. Daha ksa kod yazmak iin. Yani SQL ile olsa kod; select maas+mesai as hakedis from eleman Grdnz gibi sonu elimizde PHP ile olsa birde bunlar ileyecek while yada for dngs kurulacak dngde ilem yaplacak ve bunun iin kod yazlp varsa hatalar bulunup dzenlenecek.
SELECT borc, (borc*10)/100 FROM taksitler Bu komutla hem gerek bor hesaplanm hali listelenecektir. hemde vade fark
Aggregerate fonksiyonlar
SQL dilinin kolaylklar bununla bitmez. SQL dili, bir stundaki bilgilerin arasnda ortalama, en kk, en byk deerleri bulan fonksiyonlar hazr sunar. Yine ayn ekilde bir stundaki deerlerin toplamn veya saysn da SQL fonksiyonu ile renmek mmkndr.
avg() fonksiyonu Bir stunun ortalamas Bir stuna gre bir select ifadesinin ortalamasn bulur. SELECT avg(maas) FROM eleman Yukardaki sade kullanm ilevi grmeniz iindir. Bu komutla eleman tablosundaki kaytlarn ortalama maa bulunur. Tabii koul eklemekte mmkndr. SELECT avg(maas) bolum=Bilgi lem FROM eleman WHERE
Yukardaki komutta birinci gibi ortalamay bulur ancak bu sefer bulunan ortalama sadece Bilgi lem blmne ait ortalamadr. SELECT avg (maas+prim) FROM eleman Yukardaki rneke bu sefer maa ve prim toplamnn ortalamas istenmitir. Grld gibi avg () fonksiyonu ile basit aritmedik ilemelerde yapmak mmkndr. min() fonksiyonu Bir stundaki en kk deer Bir select ifadesinin bir stunundaki deerlerden en kk olan verir. SELECT min (maas) FROM eleman Yukardaki sade kullanm ilevi grmeniz iindir. Bu komutla eleman tablosundaki kaytlarn iinde maa bilgisi en dk olan deer gelecektir. Tabii koul eklemekte mmkndr. SELECT min (maas+prim) FROM eleman Yukardaki rnekte bu sefer maa ve prim toplam en dk olan kayt istenmitir. Grld gibi min () 420
basit
airtmedik FROM
ilemelerde eleman
yapmak WHERE
Yukardaki komutta birinci gibi minimum deerini bulur ancak bu sefer bulunan deer tm elemanlarn deil sadece Bilgi lem blmne ait en dk maa deeridir. max() fonksiyonu Bir stundaki en byk deer Bir select ifadesinin bir stunundaki deerlerden en byk olan verir. SELECT max (maas) FROM eleman Yukardaki sade kullanm ilevi grmeniz iindir. Bu komutla eleman tablosundaki kaytlarn iinde maa bilgisi en byk olan deer gelecektir. Tabii koul eklemekte mmkndr. SELECT max(maas) bolum=Bilgi lem FROM eleman WHERE
Yukardaki komutta birinci gibi minimum deerini bulur ancak bu sefer bulunan deer tm elemanlarn deil sadece Bilgi lem blmne ait en byk maa deeridir. SELECT max (maas+prim) FROM eleman Yukardaki rneke bu sefer maa ve prim toplam en fazla olan kayt istenmitir. Grld gibi max () fonksiyonu ile basit aritmedik ilemlerde yapmak mmkndr.
421
Yukardaki komutta birinci gibi minimum deerini bulur ancak bu sefer bulunan deer tm elemanlarn deil sadece Bilgi lem blmne ait en byk maa deeridir.
JOIN LEM
Sqlde bazen birden fazla tablodan ilikilendirme ile sorgulama yapmak gerekir. rnei renci tablosundan no, ad, soyad, yanna ise Trke dersinden ald notlarn getirilmesi gerektiinde uygulanacak ilem byle bir sorgudur. Aslnda temel olarak uygun where kullanm ileda baz join ilemleri yaplabilir ancak JOINin kendisi kodlama asndan daha sadece bir kullanm salar. imdi Personel ve departman adl 2 tablodan sorgulama yapalm. 422
ad,
soyad,
dept_no,
yonno
FROM
WHERE personel.dept_no = dept.dept_no Join ileminin eitleri vardr. Inner join, Left Outer Join, Right Outer Join. Gnmzde ksaca Left ve Right join olarak bilinmektedirler.
INNER JOIN
Join ileminde her iki zorunluluunu arar. Aksi alnmaz. tarafnda arta uymas takdirde kaytlar listeye
rnein Mteri tablosundan Mteri adn ve Telefonlar tablosundan da Mteri telefonunu setiimizde Inner join kullanarak Adn ve telefonu yan yana getirelim. Select id,adi, telno From Cari Inner join TELNO on Cari.id=TELNO.mus_id Yukardaki sorguda aslnda her ey gllk glistanlk grnyor ama aslnda nemli bir sorunu da iinde barndryor. imdi u soruyu kendimize soralm. Ya mterinin kaytl bir telefonu yoksa ? Yukardaki sorgu bu durumda o mteriyi hi gstermeyecektir. Peki Sorgumuzda alacaklarnda olduunu ve mterileri arayarak para tahsilat 423
yaplacan dnn. Haberiniz olmayan bir alaca kimden tahsil edeceksiniz ? te bu yzden Inner Join kullanmnda son derece dikkatli olmak zorundasnz.
LEFT JOIN
Left Join ileminde soldaki tablodaki her kayt detayda karl olsun olmasn listelenir. Select id,adi, telno From Cari Left join TELNO on Cari.id=TELNO.mus_id Mesela yukarda rnei bu ekilde yazm olsaydk, telefonu olsun olmasn btn cariler listelenecek, teleonu kaytl mterilerin ise bu bilgileride grntlenecekti.
RIGHT JOIN
Right Join ileminde detay tablosundaki her kayt, ana tabloda karl olsun olmasn listelenir.
UNION KULLANIMI
ki ayr SELECT komutunun sonucunda elde edilen tablolarn birleimi ilemini gerekletirir. Select * from a where adi=Ahmet Union Select * from a where adi=Mehmet
425
Tabiki yukardaki komutu grnce biz bunu where ilede yapardk diyebilirsiniz ama yukardaki ama kullanm eklini gstermektir.
EXISTS KULLANIMI
And, or veya not operatrleri ile kullanlabilir.
CONTROL
LANGUAGE)
Veritabanndaki kullanc haklarn dzenlemek iin kullanlan deyimlerdir. rnein GRANT, DENY, REVOKE gibi. rnek: USE DB GRANT SELECT ON Stok TO PUBLIC GRANT DEYM Aadaki rnek Aye adl kullanc veritaban ve tablo oluturma izni verilir: GRANT CREATE DATABASE, CREATE TABLE TO aye
426
SQL FONKSYONLARI SQL dilini destekleyen programlarn daha iyi olma abas SQL diline birok hazr fonksiyon eklenmesine sebep olmutur. Sonuta kazan kullanc olmutur tabi ki. Aada listelenen fonksiyonlarn bir ou sadece Mysql deil bir ok VTYS iin geerlidir. Ancak baz sistemlerde fonksiyon ad deiebilir, kulland parametre tipleri vs deiebilir. Bu bakmdan eer birden ok VTYS ile alacak bir kod dnyorsanz ilk yntem SQL92 standardna uygun foksiyonlar kullanp dierlerinden kanmak olacaktr. Dier yntemler ise her VTYS iin ayr kod yazmak yada bu ii otomatik hale getiren bir DAL kullanmak. DAL Database Absraction Layer kelimelerinden retilmitir. Veritaban soyutlama katman demektir. Bundan sonraki SQL fonksiyonlarnn bazlar her DBMS zerinde almayabilir, yada kullanm farkllklar gsterebilir. Metinlerle lem Yapan SQL Fonksiyonlar
ascii() fonksiyonu
Parametre olarak verilen deerin ASCII karln bulur.
char() fonksiyonu
ASCII olarak verilen deerleri birletirip string bir deer olarak sonu dnderir. CHAR ( N1, N2 .. ) 427
concat() fonksiyonu
Birden ok deeri birleirip bir string olarak verir. Bu fonksiyonlar rnei ad veya soyad bilgisi sanal olarak tek bir stun haline getirilebilir. CONCAT ( N1, N2 .. )
length() fonksiyonu
Kelime anlamndan da tahmin edilecei zere parametre olarak verilen deerin kakater saysn verir. LENGTH (N1) Dntrme Fonksiyonlar
conv() fonksiyonu
Veriyi bir tabandan baka bir tabana evirir. CONV ( veri, a1, a2 ) veri'yi a1 tabanl olarak alp a2 tabana dntrr.
bin() fonksiyonu
Sayy onluk say sisteminden ikilik say sistemine evirir. BIN (Sayi) eklinde kullanlr. oct() fonksiyonu Sayy onluk say sisteminden sekizlik yani octal say sistemine evirir. OCT (N) eklinde kullanlr.
hex() fonksiyonu
Sayy onluk say sisteminden onaltlk yani Hex say sistemine evirir. HEX (N) eklinde kullanlr. 428
Tarihlerle lem Yapan SQL Fonksiyonlar DAYOFWEEK(tarih) => YYYY - MM - DD formudaki tarih'in, ODBC standardinda haftann kanc gn olduunu bulur. SELECT DAYOFWEEK('2001-12-26') =>4 DAYOFMONTH(tarih) => Ayn kanc gn olduunu bulur. DAYOFYEAR(tarih) => Yln kanc gn olduunu bulur. MONTH(tarih) => Kanc gn olduunu bulur. DAYNAME(tarih) => Gn adn bulur. MONTHNAME(tarih) => Ay adn bulur. QUARTER(tarih) => Tarihin, yln kanc eyreinde olduunu bulur. WEEK(tarih) => Yln kanc haftas olduunu bulur. YEAR(tarih) => Hangi yl olduunu bulur. HOUR(zaman) => HH : MM : SS formatndaki zaman verisinden saat bulunur. MINUTE(zaman) => Dakikayi bulur. SECOND(zaman) => Saniyeyi bulur.
429
%M : Ay ad ( January, December ) %W : Gn ad ( Sunday, Saturay ) %D : Gn deeri ve eki ( 1st, 2nd ) %Y : Yl deeri , 4 dijit ( 1993 ) %y : Yl deeri , 2 dijit ( 93 ) %a : Ksa gn ad ( Sun, Sat) %d : Gn deeri , 2 dijit ( 00 , 31) %e : Gn deeri ( 0 , 31 ) %m : Ay deeri , 2 dijit ( 01 , 12 ) %c : Ay deeri ( 1 , 12 ) %b : Ksa ay ad ( Jan , Dec ) %j : Yln gn says ( 001 , 366 ) %H : Saat , 2 dijit ( 00 , 23 ) %k : Saat ( 0 , 23 ) %h : Saat , 2 dijit ( 01 , 12 ) %l : Saat ( 1 , 12 ) %i : Dakika ( 00 , 59 ) %r : Zaman , 12 saatlik ( hh : mm : ss [AP] M ) %T : Zaman , 24 saatlik ( hh : mm : ss ) %S : Saniye ( 00 , 59 ) %p : AM yada PM %w : Haftan kanc gn olduu (0=Sunday , 6=Saturday ) %U : Yln kanc haftas olduu ( Pazar ilk gn olmak zere) %u : Yln kanc haftas olduu ( Pazartesi ilk gn olmak zere) %% : Sadece ' % ' karakteri
430
sim adl tabloya sadece ad ve soyad alanlarna olmak zere kayt yapar. Insert Into isim (ali,null,ali@rizeli.com); values
Bu kullanm eklinde alanlar belirtilmediinden tm alanlarn deeri belirtilmek zorundadr. Eer girilecek alanlar belirtilmi olsa idi bo kaytlar belirtilmek zorunda kalmazd. rnei renci tablosuna numaras 1 olan renciyi ekleyelim. INSERT INTO ogrenci (no, adi) VALUES(1,Ali); Insert komutunun deiik kullanm ekilleri de vardr ancak temel kullanm budur. almamzn ileri srmlerinde bu konu ile ilgili daha ok rnek ekleyeceim.
UPDATE Komutu:
Tablodaki verileri gncellemek iin kullanlr. Tabloda ilem yapmak zere uygun bir alan zerinden where ifadesi ile kullanlmaldr. Kullanm ekli 431
alan=yeni
deger
Where
Kullanlacak anahtar alann ilem oklu gncelleme deilse Unique (tekil index) olmas tercih edilmelidir. SET ile de kullanlabilir. SET deitirilecek kolonlar ve deerleri belirtir. WHERE szc ise deitirilecek satr belirtir. UPDATE tablo SET stun = ifade WHERE kosul eklinde set halinde dzenleme yapar. rnek: Aadaki rnekte fiyat deerini %10 artrr. UPDATE taksitler SET tutar= tutar * 1.1 rnein bir kayd dzeltmek istersek ; UPDATE Musteri SET Ad = 'Ali WHERE id='1';
Not: Yukardaki rnekte eer id alan bir olan birden fazla kayt varsa onlarda etkilecektir. Eer derdiimiz cidden tek bir kayd ilemekse o zaman tekil bir key alan kullanmalyz.
DELETE DEYM
Bir tablodaki kullanlr. Kullanm biimi: DELETE FROM tablo WHERE arama_koulu rnein musteri tablosundaki tm verileri silmek iin; DELETE * from musteri; 432 verileri silmek iin DELETE komutu
Tabloda, bakiyesi 1000'den kk mterilerin satrlarn silmek iin: DELETE * FROM musteri WHERE bakiye <=1000
olan
Bu komutu, kayt yenileme tarihini yenilememi kiilerin tmn silmek iin de kullanabiliriz. Veritabanmzda yenileme tarihini gsteren bir alan bulunduunu farzedelim: DELETE FROM musteri WHERE yenileme_tarih < 200710-10;
433
PHPMYADMIN
Gnmzde kullanlan grafik ekranlarla ilem yapmak olduka kolaylamtr. Bir ok ilemi yaparken programlarda tanml sihirbazlar gerekli ynlendirmeleri yaparak ilemi basitletirmekte, ilem iin gereken ek bilgiler dialog penceleri yardmyla alnmaktadr. Oysa eskiden bu ilemlerin hepsini yapmak iin yzlerce belki binlerce komutu ve parametrelerini renmek gerekirdi. Gnmzde her nekadar grafik arayzler Linux ve unix trevlerinde de varsa bile komut gereksinimi devam etmektedir. SQL komutlarnda grdmz zere veritabann ynemek iin Mysql komutlar vermek mmkndr. Ancak bir ok son kullanc iin bu komutlar doru ve hatasz yazmak deveye hendek atlamkatan zordur. te bu yzden daha grsel ve gvenli bir arayz tercih edilir. Hosting hizmeti verenler komut eriiminin tehlikelerini bilirler. Web ortamnda bunun eitli sakncalar vardr. Tabii birde hosting servislerini kolaylatrmak zorunluluu vardr ki kullanclar ilemlerini daha rahat yapp, teknik destee ihtiya duymasn. 1. Web ortamnda nne gelene komut altrma yetkisi vermek saflnda tesinde aptallk demektir. nk saniyeler iinde sunucu hack edilebilir. 2. Kullanclar iin grafik bir arayz daha irin ve basit gelecektir.
434
3. Kullancy dorudan bir arayzle karlamak ayn zamana daha gelimi gvenlik kontrolne izin verir. yle dnelim. Kullanc ehir adn parametre vererek buna dair kaytlar listeleyecek olsun. Bunu iki ekilde yapabiliriz. Ya kullanc istedii ehri yazar, yada programc ehir adlarn bir liste kutusuna koyar ve kullanc buradan sadece veriyi seebilir. phesiz ikinci yntem kullancya daha kolay gelir. Ancak bu asl gvenlik asndan ok daha nemlidir. nk kullanc yazma ekran olsa araya bir takm kodlar gmerek SQL Injection denilen saldr tekniini kullanabilir. Ancak liste kutusunda tek yapabilecei bir geyi semek olacaktr. Grld gibi ne kadar profesyonel olursanz olun, hazr yazlmlar kullanarak yaplan MySQL ynetimi hem daha hzl hem de daha skntsz olacaktr. nk dier trl her trl ilem iin batan aa SQL komutlar ile uramak gerekir. PHP'yle gelitirilmi olan PhpMyAdmin yazlm kullanlarak tarayc penceresi iinden MySQL'le ilgili birok ilemi gerekletirebilmek mmkndr. Pmayi kullanabilmek iin Apache ve Mysql alyor olmaldr. Pma stnde tanml formlardan ilemler seilir ve yazlmas gereken SQL kodlarn Pma, kendisi oluturup, PHP balants zerinden MySQLe gnderip altrr.
PhpMyAdmin Kurulumu
Bu konuya burada yer veriliyor olmas bunun sk sk tekrarlanan bir grev olduunu dndrmemelidir. Phpmyadmin kurulumu ok zor bir ilem deildir ancak 435
hosting irketleri PHP destei veren sunuculara nerdeyse otomatik olarak bunuda kurduklar iin zaten sradan kullanclar zaten byle bir sorunla karlamazlar. Peki ne zaman gerekir ? 1. Hosting ii yapyorsanz ve bir sunucu kuracak iseniz 2. Kendi sisteminizde lokal kullanm ve test ortam iin Bir ok durumda her iki iide hazr WAMP yada LAMP paketleri ile yapmak mmkndr bu durumda gene Phpmyadmin hazr gelecektir. Kurulum iin kurum dosyas ilgili sitesinden indirilip web sunucunun webroot klasrne aldktan sonra config.inc.php dosyasna Mysql eriimi iin gereken ifre ve kullanc ad gibi ayarlar girilmelidir. Not: PMA iine bu ayarlar girildikten sonra MySQL ifresi deitirilecek olursa bu dosyada da gerekli deiiklikler yaplmaldr. Aksi takdirde PMA almaz.
yeni kurulan bir MySQL kurulumu iin sadece test ve mysql olarak grlecektir. Menden bu veritaban isimlerine tklanarak, veritaban iinde yer alan tablolar ekranna ulalr. Ayn zamanda, sol tarafta da veritabannn altndaki tablolarn isimleri belirecektir. Sol mendeki tablo isimlerine tklanarak, tablolarn iinde yer alan alanlar hakknda ayrntl bilgiye eriilebilir. Bilinmesi gereken udur; Test veritaban mysql iinde zaten tanml olan bo bir veritabandr. Test ve deneme ilemleri iin kullanlr. Mysql isimli veritaban ie MySQLin master veritabandr. Ksaca kullancnn oluturaca dier veritabanlar, ve bunlarn iindeki alanlarla ilgili bilgiler, indeks bilgileri, kullanc isim, parola ve yetkileri gibi tm bilgiler Mysql isimli veritabannda tutulur. Bu adan eer deneme ilemler yapacaksanz Mysql adl veritabanndan uzak durun.
437
yazan blme tablo ad ve ka alandan oluaca yazlarak ka alandan oluacaksa belirtilerek sihirbaz mant ile oluturmak mmkndr. Not: PHP ile yazlm open source yazlmlar genelde kullancnn iini kolaylatrmak iin bir takm ilevler ierirler. Mesela kimi yazlm sadece MySQL iin kullanc ad ve ifre sorar, ondan sonra ise tm veritaban, gerekli tablolarve kullanc bilgilerini kendisi oluturur. Kimi programda ise gerekli tablo yaplar SQL halinde verilir. te bu durumlarda bu sql komutlarn Pma iinden altrp kurulum ilemini tamamlamak mmkndr.
CREATE TABLE ogrenci ( adi VARCHAR (20) not null , soyadi VARCHAR (20) not null , email VARCHAR (60) not null ) Your SQL-query has been executed successfully eklinde bir yant alnrsa tablo sorunsuz olarak oluturulmu demektir. Eer Create new table on database blmnden yola devam edilirse, burada tablo ad ve tablonun alan says belirtilerek ayn tablo oluturulabilir. Fakat sql cmlecikleri nispeten iimizi kolaylatrr. (elle yazlmad durumlarda diye harlatmaya gerek yok sanrm) Sa erevenin alt blmnde yer alan drop database linki database silmek iin kullanlr. Tablo oluturulurken kullanlan alan trleri Mysql konusu iinde iken anlatlmt.
Burada ; Structure only: Sadece alanlar ve tablolar verir. Structure and data: Hem alanlar hemde alanlara kaytl verileri verir. Boyut olarak byk olabilir. Data only: Sadece tablolara kaytl alanlar verir. UPDATE [Tablo Adi] SET [Yeni Deer] WHERE [Seilen Kriter]
441
MySQL ve PHP
PHP ile MySQL altrmak basit dier fonksiyonlar kullanmak kadar kolay ve pratiktir. Kodlama yaps dier fonksiyon ve prosedrlerden farkl olmayan MySQL fonksiyonlar sorgular da SQL komutu ile gerekletirerek dnen deerleri While, For gibi deerlerle alabilir. MySQL iin kod yazarken nce Veritaban sunucusuna balanmamz gerekir. Bize verilen kullanc ad ve ifre ile sunucuya balandktan sonra yetkilerimiz bize hangi imkanlar sunuyorsa buna uygun ilemlerimizi gerekletirebiliriz. PHP dilinin son srmleri Mysql ile farkl ekillerde balant kurup ilem yapabilmektedir. PDO, Mysql Improved ve klasik SQL cmleleri ile. Aslnda u an PHP ile yazlm hazr kodlarn bir ounda klasik yntem tercih edilmitir. Ayrca programclk dnyasnda SQL dilini yani bir veritabann nasl sorgulayacan bilmek nemli bir olaydr. Kullanc hangi programlama dilinde ve hangi Veritaban iin kod yazarsa yazsn olu mutlaka SQL dili ile kesiir. Dolaysyla programc kii veritaban ile urayorsa SQL bilmek zorundadr. PHP ile klasik yntemi kullanarak MySQL ve dier veritaban tablolarna balanmak ve onlarla ilem yapmak olduka kolaydr. Bu konuda izlenmesi gereken sra udur: 1. Veritaban sunucusuna balanma (mysql_connect, vs... gibi fonksiyonlar ile) ve bir balant numaras (link identifier) alma, 2. Bu balanty kullanarak bir (my_sql_select_db, vs...), 442 veritaban seme
3. Bu balant zerinde sunucuya sorgu gnderme (mysql_db_query, vs...) ve ve sorgu sonuncu bir dizi deiken (result identifier) olarak alma 4. Bu diziyi PHP deikenlerine aktararak kullanma (mysql_fetch_row, mysql_fetch_assoc vs...), 5. Sunucu ile fonksiyonu) balanty kesme (mysql_close()
Daha nce Msqli komut satrndan yada sql ile nasl kullanacamz ilemitik. imdi mysql ile php arasndaki balantlar ve komutlar grelim:
Sonular dizi deikeni olarak alr Sonutaki satr saysn verir Veritabanna sorgu gnderir Sorgudan dnen sonular alr Sunucudan veritaban seer
mysql_affected_rows: Bir nceki ilemde etkilenen satr says mysql_create_db : mysql_data_seek : mysql_db_query : mysql_drop_db : mysql_errno : mysql_error : mysql_fetch_field : mysql_fetch_lengths : MySQL'de veritaban aar Sonu satrnda belirtilen sraya geer MySQL'e sorgu gnderir Sunucudan veritaban siler Bir nceki ilemdeki MySQL hata numarasn verir Bir nceki ilemdeki MySQL hata mesajn verir Sonu tablosundaki alan adn obje olarak alr Sonu tablosundaki dizi deikenin uzunluunu alr 444
Sonu satrn obje olarak alr Sonu tablsundaki sonucun tablodaki alan adn verir Sonu tablosunda sra belirtilen yere gtrr indisini
Alan ad verilen sonucun tablo adn verir Sonutaki alann olduunu belirtir hangi tip
Sonutaki alann hangi tr ekstra parametrelerle tanmlandn belirtir Sonutaki alann veritabanndaki uzunluunu verir Sonular boaltr iin atanan hafzay
Bir nceki veri yerletirmede oluan otomatik veri deerini verir Sonutaki listeler Sunucudaki listeler 445 tm tm tablo alanlarn
veritabanlarn
Veritabanndaki listeler
tm
tablolar
$baglan =mysql_connect("localhost", "root",); if ( ! $baglan) kurulamyor!); die ("MySQL ile veri balants
kinci satrdaki if ile balayan satr, $baglan deikeninin deer ierip iermediine bakmaktadr. nk eer balant baarl ise bu deiken bir deer ierecek aksi taktirde iermeyecektir. Haliyle kodumuz deikende bir deer yoksa, balant kurma giriini durdurarak, ziyaretiye hata mesaj dnderecektir.
mysql_select_db() deyimi
Balant baaryla kurulduktan sonra PHP program, veritaban sunucusuna, hangi veritaban dosyasn kullanmak istediini belirtmelidir. Buna veritaban dosyas seme ilemi denir. Bu i iin mysql_select_db() komutu kullanlr. Kullanm ekli: mysql_select_db(veritaban ad); eklindedir. PHP'nin MySQL veritabann seememesi ou zaman kullanc yetkilerinin Internet ziyaretilerini kapsayacak ekimde dzenlenmemi olmasndan kaynaklanr. Bu durum gerek Web sunucusunda ortaya karsa, Web sunucusu ynetimine bavurmak gerekir. Ancak en basitinden balanlacak veritabannn adn yanlta yazm olabiliriz. Bu ve dier ngrlemeyen hatalar iin burada da daha konroll bir kod yazmak elimizdedir. ad,baglant
447
mysql_select_db( "veritabannn_ad" , $baglan) or die ("Veritaban alamyor!"); Bu kod bize balant kurulamad durumlarda ilgili mesaj gsterecektir. Daha detayl bir kontrol kodunu ile hata kontrol ksmnda tekrar ileyeceiz.
448
mysql_result()-Sorgudan Dnen Kaytlar lemek Eer sorgudan gelen kaytlar deikenlere almak istiyorsak bunun icinde mysql_result() komutu kullanlr. Mesela yukardaki sorgudan ad ve soyad diye iki alan geldiini dnelim burdan gelen tm kaytlar ayr ayr iki deikene aktaralm. $i=0; while($i<$kac_tane): $ad[]=mysql_result($islem,$i,ad); $soyad[]=mysql_result($islem,$i,soyad); $i++; endwhile; Yukarda $i deikeni sorgudan gelen sonular alrken kullanlan geici bir deikendir. Sras ile her satrdaki ad ve soyad alanlarndaki kaytlar $ad ve $soyad isimli iki dizi deikene aktarlmtr. Bylece mysqlde yer alan yaptmz sorgu ile alakal tm kaytlar artk phpnin iine aktarlmtr. Kaytlar Ekrana Listelemek Yukardaki sorguda dnen kaytlar ekrana listelemek iin kukusuz PHP dili bizlere birden ok imkan sunmaktadr. Ancak imdilik basit bir FOR dngs ile yetinelim. for($j=0;$j<$kac_tane;$j++): 449
.$soyad[j].<br>;
eklinde ksa bir dng kullanlabilir. Tabii ki bunu html kullanarak daha grsel hale getirmek mmkndr.
mysql_connect($host,$user,$password) mysql_select_db($db); $sorgum = select eleman where isim=$isim; $kactane isim,soyad,maas,email from
450
$i=0; while($i<$kactane): $isim =mysql_result($sonuc,$i,isim); $soyad =mysql_result($sonuc,$i,soyad); $maas =mysql_result($sonuc,$i,maas); $email =mysql_result($sonuc,$i,email); echoad: $isim $soyad<br> email: $email<br>; $i++; endwhile; ?> <br> soyad:
Daha dinamik bir program yaps kullanmak ve ileride kodlarnz srekli yeniden kullanmak iin bu tip yaplar alanlk edinmelisiniz. Benim kendi kullandm genel yapda buna benzerdir. Ancak ben buradan bir adm sonras olarak veritaban bilgilerini, mysql_connect ve mysql_select_db komutlarn harici bir dosyaya koyar oradan include komutu ile arrm. Dosyada ayrca hata kontrol koduda yer aldndan Mysql balants kurulamamas durumundandan kullanc haberdar edilir. Bylece veritaban ad, kullanc ad yada ifre vs deiecek olursa tek bir yeri deitirmem yeterli olur aksi durumda tm kodlar gzden geirip balant bilgilerini yeniden dzenlemek durumunda kalrm. 451
452
Yukardaki PHP satrlar mysql_error() komutunu kullanarak herhangi bir MySQL hatas olutuunda ekrana MySQL hatasnn yazlmasn ve PHP yazlmcsnn uyarlmasn salar. mysql_select_db( "veritabannn_ad" , $baglan) or die ("Veritaban alamyor!".mysql_error()); Yukardaki kod veritaban seme ksmndada grdmz kodun deha detayl ve gelimi bir srmdr. Bu fonksiyonun sonucunun true yada false olmas bize balan kurulup kurulmadn vermektedir. Bu deer false ise dorudan die() blm ilenerek kullancnn taraycsna veritabannn alamad mesajyla birlikte MySQL'in hata mesaj da gnderilecektir. $kayitlar = mysql_query(select * from eleman"); if (mysql_error()) {echo ("MySQL hatas olutu. Hata no :"); echo mysql_error();} $isim = mysql_result($kayitlar,$i,"isim"); $soyad = mysql_result($kayitlar,$i,"soyad");
oluturma yetkisi verilmemitir. Yada bu ilem bir panel yada sihirbaz yardmyla gerekletirilir. <? @mysql_connect("localhost","root",""); // Mysqle balanlyor $sorgu=mysql_query("CREATE DATABASE Deneme"); // Deneme adl database oluturuluyor echo $sorgu; $sorgu=mysql_query("SHOW DATABASES"); Mevcut databaseler alnyor //
while ($listele=mysql_fetch_assoc($sorgu)): echo "$listele[Database]"; endWhile; $sorgu=mysql_query("DROP DATABASE Deneme"); //Deneme database kaldrlyor echo $sorgu; ?> Yukardaki rnek kodlar nce "Deneme" adl bir veritaban oluturacaktr. $sorgu deikenine atanan mysql sorgusundan dnen deer eerilemde bir hata yoksa 1 olmaldr. Sorgu ile ilgili bir hata olursa bu deer "0" olarak dnecektir. Daha sonra Show databases ile mevcut veritabanlar listelenmektedir. Bunun ardndan bir dng ile sorgu sonucu dnen veritaban listesini dng iinde listelemek iin gerekli kodu en basit haliyle grmekteyiz. Dng 454
ierisinde "echo $listele[Database] diyerek tampon deikeninden dnen deerin ekrana yazlmas istenmeir. Bu yntem PHP ile sorgu alverilerinde en sk kullanlan yntemlerden birisidir. En son olarak ise DROP yardm ile Deneme veritaban silinmektedir. Grld gibi MySQL'de PHP ile veritaban oluturmak, silmek ve listelemek standart'da ayn fonkisyonlar kullanarak basit SQL kodlaryla mmkn. Burdan sonraki konulardada ayn mantk ve pratik alma ile dier ilemlerimizi gerekletirebiliyoruz.
<? @mysql_connect("localhost","root",""); // Mysql e balanld @mysql_select_db("Deneme"); $sorgu=mysql_query(" CREATE TABLE `Tablo` ( `id` INT NOT NULL, `adisoyadi` TEXT NOT NULL, `user` TEXT NOT NULL, `pass` TEXT NOT NULL)" );
// //
455
$sorgu; // //
while($listele=mysql_fetch_assoc($sorgu)): echo "$listele[Tables_in_Deneme]"; endWhile; echo $sorgu; $sorgu=mysql_query("DROP TABLE Tablo"); echo $sorgu; ?> imdi yukardaki rmek kodlar detaylca inceleyim; nce veritabanna balanp, ilem yaplacak veritaban seimli ve daha sonra create table komutu ile istenen yap verilerek bir tablo oluturulmutur. Daha sonra mevcut veritaban iindeki tablolar bir sorgu ile alnm ve dnen kaytlar ekrana yazlmtr. En son olarak ise Drop Table ile oluturulan rnek tablo yok edilmektedir. Kimi durumlarda btn tabloyu deilde tablonun ierisindeki bir stunu silmemiz gerekebilir. Byle durumlarda da aadaki gibi bir kod kullanlr.
//
Sorgudaki farka dikkat ettiyseniz Alter komutu ile ilem yaplmakta ve kaldrlacak stunlar DROP ile birlikte verilmektedir. Bu komutlarla tablodan user ve pass alanlar kaldrlacaktr.
$sorgu=mysql_query("INSERT INTO `Tablo` ( // bir kayt girii yaplyor `id`, `name`, `code`, `pass`) VALUES ( '1', 'brahim Kutluay, 'BarMano, '1234') "); echo $sorgu; $sorgu=mysql_query("SELECT * FROM Tablo"); // tablodaki tm kaytlar alnyor while($liste=mysql_fetch_assoc($sorgu)): // kaytlar sra ile deikene alnyor echo "$liste[id]-$liste[name]-$liste[code]-$liste[pass]"; // alnan satr ekrana yazlyor endWhile; $sorgu=mysql_query("UPDATE Tablo SET pass=123 WHERE id=1"); // 1 nolu kayt gncelleniyor echo $sorgu; $sorgu=mysql_query("DELETE FROM Tablo WHERE id=1");
458
imdi rnei detaylca inceleyelim. Deneme adl veritabanndaki "Tablo" adl tabloya bir kayt girii yaplmaktadr. "INSERT INTO" ile veritabanna kayt eklenmitir. Bu ilem iin kaydn hangi tabloya yaplaca, tabloya hangi bilgilerin eklenecei ve eklenen bilgilerin hangi stunlar iin verildiini vermekteyiz. Sonraki aama da listeleme olayna geilmitir. Grld gibi buradada daha nceki ibi nce ilgili kaytlar sorgu ile ekilmi daha sonra dng halinde ilenmitir. SQL ksmnda da grld gibi "SELECT * FROM" kaytlarn seilecei tablo belirtilmitir. Ayrca bu hali ile yaplan listelemede, dnen deerler verilerin son gncelleme tarihine gre listelenir. Yani sral olarak listelenmez. Bu ilem iin sorguya bu seenein eklenmesi gerekir. Bunu yapmak iinde yine QL ksmndan hatrlayacanz ORDER by deyimi gereklidir "SELECT * FROM Tablo" sorgusunu, "SELECT * FROM Tablo ORDER by id" olarak deitirirsek kaytlar bu sefer id alanna gre sral olarak listelenecektir. Sralamann tersten yaplmas istenirse order by id yerine order by id DESC yazlmas gereklidir. Yine SELECT Sql komutunu hatrlarsanz burada belirli koullara uygun kaytlarnda seilebileceini grrsnz. nk her zaman btn tablodaki verilerin listelenmesi gerekmeyebilir. Kimi zaman tablo ierisindeki tek bir bilginin alnmas bile yeterli olabilir; 459
"SELECT * FROM Tablo WHERE id=1" yaplrsa sadece 1 nolu kayt sorgu sonucu olarak dnecektir. Bu size ilk etapta pratik gelmeyebilir ancak dnelim ki bir snf kayt var ve retmen geer not alanlar grmek istiyor. Tm snf listeleyip geenleri sen say ve notlarnn ortalamasnda sen elle hesapla m diyeceiz. "SELECT * FROM Tablo WHERE ort>49" gib bir sorgu ile ortalamas geer olan kaytlar sorgulanp dng ile yazdrlabilir. Varolan bir kayd gncellemek iinse grld gibi tabloya UPDATE komutu gnderilmitir. Deiikliin yaplaca verinin bulunduu tabloyu belirtilir ve "SET pass=123" komutu ile deitirilecek alan verilerek bunun yeni deeride girilmi olur. En son aama ise varolan bir kaydn silinmesidir. Delete SQL komutuna istenilen duruma uygun bir koul eklenerek ilem yaplm olur.
`sifre` varchar(8) NOT NULL default '', `adi` varchar(20) NOT NULL default '', `soyadi` varchar(15) NOT NULL default '', `email` varchar(40) NOT NULL default '', `cinsiyet` enum('e','k') NOT NULL default 'e', `songiris` timestamp(14) NOT NULL, `suan` enum('0','1') NOT NULL default '0' ) TYPE=MyISAM; daha sonra dosyalarmz srasyla dosyalarmz oluturalm. lk nce sabitlerin sakland sabit sayfas: sabit.php
<? $server ="localhost"; $user ="root"; $pass =""; $database ="giris"; ?>
461
<head> <title>PHP&MySQL Giri Sayfas</title> <meta http-equiv="Content-Type" content="text/html; charset="> </head> <body bgcolor="#FFFFFF" text="#000000"> <SCRIPT> function submitChange() { var theForm = document.giris; if ( theForm.kullanici.value.length == 0 ) { alert( 'Ltfen bir kullanc ismi giriniz!' ); theForm.kullanici.focus(); return; } if ( theForm.sifre.value.length == 0 ) { alert( 'Ltfen ifre giriniz!' ); theForm.sifre.focus(); return; } theForm.submit(); } </SCRIPT> <center> <b><font face="Verdana, Arial, Helvetica, sansserif" size="2">Kullanc Girii </font></b> <form name="giris" method="post" action="gir.php"> <table width="223" border="0" cellspacing="1" cellpadding="1" > <tr> <td width="115"><font face="Verdana, Arial, Helvetica, sansserif" size="2">Kullanc Ad</font></td> <td width="101"> <font face="Verdana, Arial, Helvetica, sans -serif" size="2">
462
<input type="text" name="kullanici" size="10" maxlength=" 8" value="<? echo $kullanici?>"> </font></td> </tr> <tr> <td width="115"><font face="Verdana, Arial, Helvetica, sansserif" size="2">ifre</font></td> <td width="101"> <font face="Verdana, Arial, Helvetica, sans -serif" size="2"> <input type="password" name="sifre" size="10" maxlength= "8"> </font></td> </tr> </table> <p> <input type="button" onClick="submitChange()" value="Giri" > </p> </form> </center> <br> <br> <br> <center><a href=kaydet.php>Kullanc Kayt</a></center> </body> </html> <? endif; mysql_close() ?>
463
<html>
<head> <title>Kullanc Kayt Sayfas</title> <meta http-equiv="Content-Type" content="text/html; charset="> </head> <body bgcolor="#FFFFFF" text="#000000"> <center> <p><font face="Verdana, Arial, Helvetica, sansserif" size="2"><b>Kullanc Kayt Sayfas</b></font></p> <form name="form1" method="post" action="kayit.php"> <table width="337" border="0" cellspacing="1" cellpadding="1" > <tr valign="middle"> <td width="93"> <div align="right"><b><font face="Verdana, Arial, Helvetica , sans-serif" size="2">Lakap</font></b></div> </td> <td width="25"> </td> <td width="209"><font size="2"> <input type="text" name="kullanici" size="10" maxlength=" 8" value="<?echo $kullanici?>"> </font></td> </tr> <tr valign="middle"> <td width="93" height="2"> <div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Sifre</font></b></div> </td> <td width="25" height="2"> </td> <td width="209" height="2"><font size="2"> <input type="password" name="sifre1" size="10" maxlength ="8"> </font></td> </tr> <tr valign="middle"> <td width="93" height="17">
464
<div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Tekrar</font></b></div> </td> <td width="25" height="17"> </td> <td width="209" height="17"><font size="2"> <input type="password" name="sifre2" size="10" maxlength ="8"> </font></td> </tr> <tr valign="middle"> <td width="93"> <div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">sim</font></b></div> </td> <td width="25"> </td> <td width="209"><font size="2"> <input type="text" name="adi" size="25" maxlength="20" v alue="<?echo $adi?>"> </font></td> </tr> <tr valign="middle"> <td width="93"> <div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Soyisim</font></b></div> </td> <td width="25"> </td> <td width="209"><font size="2"> <input type="text" name="soyadi" size="25" maxlength="2 5" value="<?echo $soyadi?>"> </font></td> </tr> <tr valign="middle"> <td width="93"> <div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">E-mail</font></b></div> </td> <td width="25"> </td> <td width="209"><font size="2">
465
<input type="text" name="email" size="30" maxlength="40" value="<?echo $email?>"> </font></td> </tr> <tr valign="middle"> <td width="93"> <div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Cinsiyet</font></b></div> </td> <td width="25"> </td> <td width="209"><font size="2"> <font face="Verdana, Arial , Helvetica, sans-serif"> <input type="radio" name="cinsiyet" value="e" <? if($cinsiy et=="e") echo checked?>> Erkek<br> <input type="radio" name="cinsiyet" value="k" <? if($cinsiy et=="k") echo checked?>> Kz </font></font></td> </tr> </table> <br> <input type="submit" name="Submit" value="Submit"> <input type="reset" name="Submit2" value="Reset"> </form> <p> </p> </center> </body> </html>
466
if (($sifre1==$sifre2) && ($kullanici) && ($adi) && ($soyadi) && ($e mail) && ($cinsiyet)): mysql_connect($server,$user,$pass); mysql_select_db($database); $sorgu="SELECT kullanici from kisi"; $ids=mysql_query($sorgu); $i=0; while($i<mysql_numrows($ids)): $id = mysql_result($ids,$i,"kullanici"); $i++; if($kullanici==$id): echo"<center>Kullanici ad mevcut</center>"; include "kaydet.php"; die(); endif; endwhile; $sorgu = "INSERT INTO kisi values ('$kullanici','$sifre1','$adi','$so yadi','$email','$cinsiyet','','0')"; mysql_query($sorgu); mysql_close(); echo "<center>Kullanc Kayd Tamamland</center><br>"; include "index.php"; else: echo"<center>Ltfen tm alanlar doldurunuz!</center><br>"; include "kaydet.php"; endif; ?>
467
mysql_connect($server,$user,$pass); mysql_select_db($database); $sorgu="select * from kisi where kullanici='$kullanici'"; $bul=mysql_query($sorgu); $sayi=mysql_numrows($bul); if ( $sayi == 0 ): $hata=2; mysql_close(); include "hata.php"; die(); endif; if ($sayi == 1 ): $el=mysql_result($bul,0,sifre); if ( $el != $sifre ): $hata=1; mysql_close(); include "hata.php"; die(); endif; if ( $el == $sifre ): setcookie("kim","$kullanici"); $sorgu1="update kisi set suan='1' where kullanici='$kullanici '"; mysql_query($sorgu1); mysql_close(); @header ("Location: sayfa.php"); endif; endif; else: @header("Location: sayfa.php"); endif; ?>
468
469
470
$islem=mysql_query($sorgu); echo "<center>lem Tamamland</center>"; echo "<br><br><center><a href=index.php>Ana Sayfa</a></ center>"; else: include "hata.php"; endif; mysql_close() ?>
471
472
PHP ve GVENLK
lk konularda anlatld zere internetin iletiim protokol olan TCP/IP protokol gvenlikten daha k verinin iletilmei amacna ynelik tasarlanmt. te bu yzden web ortamnda gvenlik inert yaygnlatka byk sorun olmaya balad. nk k eitli sebeplerle internet siteleri, bular yaynlayan web sunuc ulara saldrlr oldu, o da yetmez gibi web sunuculardaki we server programlar, iletim sistemleri hedef tahtasna kondu. Gnmzde Merakn gidermek ve renmek Kendini test etmek Bir yerlerden okuduu bir yntemi yada kodu denemek Yazlm geliirenlere sizin rnnz krdm, bunu daha gvenli yapn, ben sizden daha akllym mesaj vermek Kiisel egosunu tatmin etmek Yazlmlarn gvenlik aklarna dikkati ekmek Edindii sisteme szma yollarn bilgileri para karl satmak Rakibine ait bilgileri ele geirmek yada nemli
Gibi ok eitli sebeplerle sistem gvenliine saldr olabilir. stelik sadece iyi niyetli olmayan kiilere kar deil, ne yaptn tam bilmeyen Web ziyaretilerini de dnmek ve PHP programlarnn gvenliini arttrmak gereklidir. 473
Internet ve iyiniyet bir arada olmaz. Size tuhaf gelsede iinde gvenlik a olan bir kodu yada program ortaya brakrsanz birisi yada birileri bunu mutlaka kullanacaktr. Sunucu gvenlii de son derece nemlidir ancak bunu salamak genellikle tasarmcnn sorumluluunda deil hosting irketinin sorumluluundadr. Ancak sitedeki kodlarn ve vasa veritabannn gvenlii haliyle siteyi tasarlayann sorumluluundadr. Zararlar ne trde olabilir; Sayfanz baa yerlere ynlendirilebilir Sayfalarnz silinebilir veya deitirilebilir Sitedeki ak yardmyla sunucu kertilebilir Site veritabanlarnda bulunan kredi kart numaralar ve telefon numaralar, email adresleri gibi zel bilgiler bakalarnn eline geebilir
Bunun dnda birde insan faktr ile hata yapan ziyaretilerin hatalarnn kontrol edilmesi gerekir. Mesela elektronik posta adresini yazmak isteyen kii yanllkla @ yerine q yazabilir yada iki @ iaretiyle yazabilir, adresi eksik yada hatal yazabilir. Formu eksik doldurabilir. Bu gibi durumlarda hatay sonradan dzeltmek zaman kaybna yol aar. Kimi zaman eksik verilmi bir bilgi bu bilgileri ileyecek olan dier programda hataya yol aabilir. Bu sebeple, zellikle Form yoluyla alnan bilgilerin kontrol edilmesi ve dorulanmas nemlidir.
474
Form dorulama iki yerde yaplabilir. Ziyareti yani istemci tarafndan yada sunucu tarafnda. Kullanc tarafndaki, yani ziyaretiye gndereceimiz HTML sayfasnn iinde yer alan kodlarla yapacamz kontrol ve dorulama sunucuya balant gerekmedii iin tabi ki hzl alacaktr. Kullanc gnder dmesini tkladktan sonra ok beklemesi gerekmez. Ancak bildiiniz gibi HTML kodlar herkese kolayca grlebilirler. Bu durumdan anlamamz gereken konrol ve dorulama ilemini yapan kodlarnda grntlendiidir. Bunlar inceleyen kt nietli ve bilgili biri kodunuzun aklarn kullanarak zararl kod gnderebilir. Bu kontrol ileminin sunucu tarafnda yaplmas ise zaman, hz ve trafik geniliinden kayp demek olsada gvenlik asndan daha etkindir. Kullanc her gnder dmesinde gnder dmesini tkladnda sunucu taraf verilen kodlara gre bilgileri dorular ve eksik ksmlar bildirerek tekrar giri ister. Bu gerektiinde 4-5 defa git-gel-dorula ilemine yol aar ama sonuta nemli olan gvenliktir. PHP ayrca mevcut hemen hemen btn sunucu kullanc kimlik dorulama protokolleri ile uyumludur; ve sunucu ynetimi ile iliki kurularak daha karmak kullanc kimlik dorulama yntemleri uygulanabilir. Bu yntemler arasnda Secure Socket Layer (SSL) yntemlerini, ve OpenSSL ve ModSSL teknikleri sayabiliriz.
475
zararl
olabilecek
addslashes fonksiyonu ile metinde hacking gibi etkilere ak kap brakabilecek (tektrnak), (ift trnak), \ (ters slash) iaretleri etkisiz hale getirilebilir. Daha nce escape karakterlerinde grdmz gibi bu karakterlerin nne \ karakteri getirilir ve etkisiz hale getirilmi olur. <?php $str = "tuncay'n $a = addslashes($str); transferi ?> transferi"; // Tuncay\'n
// Tuncay'n
rnek1 <?php header("Pragma: no-cache"); header("Cache-Control: no-cache, must revalidate"); ?> Yukardaki kullanmda safa ierii ara bellekte depolanmayacaktr. Bu, zellikle yksek gvenlik gerektiren ve ok sk deien siteler iin gereklidir. rnek 2: <?php header("Location: http://deneme.com.tr"); ?> Yukardaki kullanmda ise header fonksiyonu kullancdan hibir ey sormadan tanmlanan URL adresine gider. Burada dikkat edilecek konu ncesinde ekrana kt vermemektir. 479
Header fonksiyonunun bu kullanmna ok sk bavururlur. nk zellikle ifre koruma sitelerde, parola doru ise u adrese git tarz ilem yapmak iin kullanlr. rnek : Aada grld gibi parola ve isim soran parola.php dosyas olsun. Daha sonra bu bilgileri konrolphp dosyasnda onrol edip basit bir ifreli giri ilemi yaptralm. //Parola.php dosyas <html> <head> <title> Giri Form </title> </head> <body> <form action="kontrol.php" method="post"> <input type="text" name="user"> <p><input type="password" name="pass"> <p><input type="submit" value="Tamam"> </form> </body> </html> name="submit"
480
Bu sayfadan alnan girdiler user ve pass adl iki deikendir. Bu bilgileri kontrol.php dosyasnda verilen deere gre test edip gidilecek adrese karar verilecekir. <? //kontrol.php dosyas // gereksiz boluklar alnyor $user = trim($user); $pass = trim($pass); if ($user == "tuncay") { if ($pass = "FB") { header ("Location : OK.php"); } } header ("Location : olmadi.php.php"); ?> Kod da kullanc ad ve parolann doru olup olmad kontrol edildikten sonra eer her iki bilgi de doru ise OK.php adl dkman arlyor. Eer bu bilgilerden herhangi birisi doru deilse bu ilem yaplmayacak e olmadi.php adresine gidilecektir. Yukardaki rnekte dikkat edilmesi gereken bir nokta vardr. header ("Location........."); kullanm sadece kendisinden nce ekrana bir kt yaplmad durumlarda alacaktr. 481
rnein
bir
: kt";
Kod parac beklendii gibi deneme.html dosyasn armayacaktr. Bu kstlama PHP' nin zayflndan deil HTTP protokolnn tanmlarndan kaynaklanmaktadr.
482
Bir Nesne Oluturalm Bir nesne oluturmak iin nce onu tanmlamamz gerekir. Bunu PHP'nin class deyimini kullanarak yapabiliriz. Bir nesnenin zellikleri (properties) ve metodlar (methods) vardr. u kodu nesneler01.php adyla kaydedin: <HTML> <HEAD> <TITLE>PHP'de Degiskenler</TITLE> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> </HEAD> <BODY> <B> <H2> <?php class ogrenci { // zellikleri tanmlayalm var $adi; var $soyadi; var $sinav1; var $sinav2; 483
var $not; // metodlar tanmlayalm function adi_belirle ($n) { $this->adi = $n; } function soyadi_belirle ($n) { $this->soyadi = $n; } function sinav1_belirle ($n) { $this->sinav1 = $n; } function sinav2_belirle ($n) { $this->sinav2 = $n; } function not_hesapla() { $this->not = ($this->sinav1 + $this->sinav2)/2; print ($this->adi. " " . $this->soyadi . " iin not ortalamas: ". $this->not); } } //Buraya baka kodlar girecek $ogr1 = new ogrenci(); $ogr1 -> adi_belirle("ahika"); 484
$ogr1 -> soyadi_belirle("Tabak"); $ogr1 -> sinav1_belirle(7); $ogr1 -> sinav2_belirle(10); $ogr1 -> not_hesapla(); ?> </H2> </B> </BODY> </HTML> Bu programda ogrenci adl bir nesne tanmlyoruz; ve daha sonra bir deiken adna new komutu ile bu nesnenin bir rneini oluturuyoruz. Nesnelerin yeni bir rnei veya kopyasn kartmak ifadeleri aslnda yaptmz tam anlatmyor. Nesnenin tanm bir adet; her new komutu ile bu nesnenin zelliklerine ve metodlarna sahip yeni bir nesne yapm oluyoruz. Nitekim bu ie insann dilini dolayan ngilizce bir kelimeyle Instantiation (yeni bir varln oluturma) deniyor. Bu rnekte, $ogr1 adl deiken gerekte, ogrenci nesnesinin tam bir rnei: iinde be deiken ve alt metod var. Nesneyi bir kere tanmladktan sonra programn daha ileri aamalarnda bu istediimiz kadar rneini farkl isimler vererek oluturabiliriz. imdi u satra dikkat edelim: $ogr1 = new ogrenci(); $ogr1 -> adi_belirle("ahika"); 485
Burada $ogr1'in parametrelerine nasl deer yazdrdmz gryorsunuz. Nesnenin metodlarndan biri olan adi_belirle fonksiyonuna bir deer veriyoruz: "ahika"; nesne oluturulurken yazlm olan bu fonksiyon ise ald deeri, kendi ait olduu nesnenin bir deikenine kaydediyor: function adi_belirle ($n) { $this->adi = $n; } Bu ve dier fonksiyonlarda kullandmz "$this->" ifadesi, kendisine ulatrlan deeri bir parametre olarak kullanyor ve "$adi" deikenine yazyor. "this" (bu) kelimesi o anda nesnenin o anda oluturulmakta olan rneine gndermede bulunur. "->" ilemcisini kullanarak, istediimiz nesnenin istediimiz metoduna veya parametresine deer gnderebiliriz. Bir nesnenin yeni bir rneini oluturduumuz zaman, bu rnein btn parametrelerini salamak veya btn metodlarn kullanmak zorunda deiliz. Yukardaki rnee gre yeni rnekler oluturarak en az drt rencinin not ortalamasn hesabedebilir misiniz? PHP ile Web programcl yolunda hzl admlarla yol alyoruz. Bu blmde grdmz dizi deikenler ve nesneler, Web sayfalarmzda bir ok ii adeta otomatik hale getirecek unsurlar olarak kullanlacak.
486
PRATK BLGLER
Resim Albm:
Bir dizindeki tm resimleri sras ile nceki sonraki eklinde gsteren program rnei olarak aadaki rnei kullanmak mmkndr. Bu ekli ile kullanman iin kodu index.php olarak, kulland stil ablonunu ise galeri.css adyla bir klasre kaydedip ayn klasre gsterilecek resimleri de koymak yeterlidir. Kodun sadeletirilmesi mmkndr. Ayrca kulland stil ablonunun deitirilmesi sadece hayal gcnn snrna baldr. <link rel="stylesheet" type="text/css" href="galeri.css" > <? //index.php $resim_link="index.php?no="; $imagelist=array(); $handle=opendir('.'); while ($file = readdir($handle)) { if(is_file($file) ) $uzun=strlen($file);$son=strlen($file)-3; { $ext=substr($file,$son,$uzun); $ext=strtolower($ext); if ( $ext == "jpg" || $ext == "gif" || $ext == "bmp" ) { array_push($imagelist, "$file"); } 487
} } $sayi=count($imagelist); if ($no =="") {$no=0;} $i=$no+1; $onceki =$no-1; $sonraki =$no+1; if ($onceki<0) echo" <center> <font face=verdana size=2 color=white>Resim Says : $sayi</font><br> <font face=verdana size=2 color=white>u An Gsterile n : $i</font><br> <br> <img src=$imagelist[$no] border=1 class=bir><br><br > <a href=$resim_link$sonraki>Sonraki Resim</a> <center> "; else if ($sonraki>=$sayi) echo" <center> <font face=verdana size=2 color=white> Resim Says : $sayi</font><br> <font face=verdana size=2 color=white>u An Gsterile n : $i</font><br> <br> <img src=$imagelist[$no] border=1 class=bir><br><br > <a href=$resim_link$onceki>nceki Resim</a> <center> "; else 488
echo" <center> <font face=verdana size=2 color=white> Resim Says : $sayi</font><br> <font face=verdana size=2 color=white>u An Gsterile n : $i</font><br> <br> <img src=$imagelist[$no] border=1 class=bir><br><br > <a href=$resim_link$onceki>nceki Resim</a> | <a href=$resim_link$sonraki>Sonraki Resim</a > <center> "; ?> css dosyas galeri.css body { font-family: Verdana, Arial, Helvetica, sans-serif; background: #666666; scrollbar-arrow-color: scrollbar-base-color: scrollbar-face-color: } a.bir { font-family: Verdana; color: #FF9999; textdecoration: none} 489 #FFFFFF; #000000; #000000;
a.bir:hover { cursor:crosshair; font-family: Verdana; color: #99FFFF; text-decoration: underline overline} img.bir { border: #FFFFCC; border-style: solid; bordertop-width: 1px; border-right-width: 1px; border-bottomwidth: 1px; border-left-width: 1px}textarea { fontfamily: Verdana; font-size: 10pt; color: #FFFFCC; background-color: #666666; border: #CCFFFF; borderstyle: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px}
490
<script LANGUAGE="JavaScript"> <!-- eski browseryardan gizleyelim // DateCal B. Allard JavaScript v1.00 Copyright (c) 1998 Carolyn
var bugun = new Date() var gun = bugun.getDay() var tablo var ay = bugun.getMonth() var tarih = bugun.getDate() var yil = bugun.getYear() var ay_uzun = "January" var yil_uzun = 1900 var uzuntarih = "bugun" if (gun == 0) {resim = "pazar.jpg"} if (gun == 1) {resim = "pazartesi.jpg"} if (gun == 2) {resim = "sali.jpg"} if (gun == 3) {resim = "carsamba.jpg"} if (gun == 4) {resim = "persembe.jpg"} if (gun == 5) {resim = "cuma.jpg"} if (gun == 6) {resim = "cumartesi.jpg"} if (ay == 0) {ay_uzun = "Ocak"} if (ay == 1) {ay_uzun = "ubat"} if (ay == 2) {ay_uzun = "Mart"} 492
if (ay == 3) {ay_uzun = "Nisan"} if (ay == 4) {ay_uzun = "Mays"} if (ay == 5) {ay_uzun = "Haziran"} if (ay == 6) {ay_uzun = "Temmuz"} if (ay == 7) {ay_uzun = "Austos"} if (ay == 8) {ay_uzun = "Eyll"} if (ay == 9) {ay_uzun = "Ekim"} if (ay == 10) {ay_uzun = "Kasm"} if (ay == 11) {ay_uzun = "Aralk"} yil_uzun = 1900 + yil uzuntarih = ay_uzun + " " + tarih + ", " + yil_uzun tablo = '<TABLE CELLSPACING="2"'; tablo += ' <TR>'; tablo += ' HEIGHT="34"ALIGN="center" BACKGROUND="'; tablo += resim; tablo += '"><CENTER><FONT FACE="Arial" SIZE="-1">'; tablo += uzuntarih; tablo += ' </FONT></CENTER></TD>'; 493 tablo += ' </TR>'; COLOR="#003399" <TD WIDTH="120" VALIGN="bottom" WIDTH="120" BORDER="0"
tablo += '</TABLE>' document.write(tablo) // gizlemeye son--> </script></font><</td></tr></table> Bu kodu yazarken, en ok dikkat edilmesi gereken blm, Javascript'e HTML yazdrtan son 16-17 satrdr.; tek ve ift trnaklarn yerine zellikle dikkat etmeniz gerekir.
494
CMS Sistemleri
Bugn web ortamnda milyonlarca site hazrlanmtr. Web siteleri ilk ortaya ktklarnda irketler bir web master bulup bir site yaptrrlar ve daha sonra gerektiinde gene ayn webmaster siteyi gnceller yada site ieriine hi dokunmadan yllaca kalrd. Baz irketler ise daha anslyd nk bnyelerinde Bilgi ilem birimleri bu gncelleme ilemini de yapard. Ancak daha sonra site ieriklerini gncellemenin siteyi ilk kez yapmaktan daha da nemli olduu anlald. nk bu hem maliyetli bir ilemdi hem de ou site iin srekli d kaynak gerekinimi demekti. Tabii birde kodlamay bilmek gerekiyordu. nsanlar bu ortamda daha kolay gncellebilir sitelerin talebini yapmaya baladklar. Ek olarak belirtmem gerekirse; Arama motorlarnn gncelleme konusunda site sahiplerini deyim yerindeyse zorla koturmas bu konuda itici bir g olmutur. nk ticari siteler iin arama motorlarnn st sayfalarnda yer almak iin can atmaktayd. Bunun yoluda belliydi. Arama motorlarna reklam vermek ancak dahada nemlisi arama mortlar ile dosta geinen ve ska gncellenen bir site kurmak. Arama motorlarnn kulland algoritmalar daha sk gncellenen siteleri daha yukarya tamaya baladklar ki bu da ok mantkl bir ilemdi. Bundan hareketle site yaptranlar FLASH animasyon yazarlarndan bile metinlerin Flash dosyas dnda tutulmasn ve bylece deitirilebilir olmasn is temeye baladlar. Yine menler iinde grafik dosyalar yerine uygun ekillerde metinler kullanlmaya balad. yle ya 495
Google web e her gn eklenen milyonlarca milyarlarca sayfa ile zaten yeterince megulken birde ii gc brakp Flash yada resim dosyalarn analiz edip iindeki metinleri bulup karmaya uraamazd. Yani da yerinde durmu, ben ayanza gelemem, eer ziyareti istiyorsanz buyurun siz gelin diyordu. Sonunda PHP dili ile site tasarlayan baz yazlmclar baz hazr site kodlar rettiler. Bu site kodlarnda bir ok deerler parametrik olduundan kolayca kurulduu her siteye uygun hale getiriliyordu. Ayrca ieriide kolayca deitirmek mmknd. zelikle PHP dilinde gelitirilmi olan CMS says dier dillerden daha fazladr. Bundan PHP dilinin ve Mysql veritabannn cretsiz sunumu olmasnn yannda hosting masraflarnn daha dk olmasnn etkiside byktr. Benim CMS sistemleri ile ilk tanmam PHP Nuke ile oldu. Venezuellal bir gen olan Francesco Burzi tarafndan yazlan bu CMS open source idi. Daha sonra DCP Portal adna rastlam ve ne de ok sevinmitim. nk bir Trk tarafndan gelitiriliyordu ve oldukada poplerdi. PHP Nuke o gnler iin adeta by etkisi yapan modle, blok ve tema gibi kavramlar da ieriyordu. Ksaca Php Nuke iin kendi modllerinizi eklemek mmknd. Ayrca blok kavram gelmiti. rnein ekrann her bir gesi bir blok idi. Tema kavram ile blok kavram sayesinde bir birinden ayr gibi grnen yzlerce ablon dosyas oluturuldu. nsanlar Php nuke bloklarnn konumu ile ve renklerle oynayarak bir sr hazr PHP Nuke temas gelitirdiler.
496
O gnden bu gne zaman iinde onlarca CMS ile tantm ve bir ounu ya demolardan yada makalelerden inceledim, bazlarn da mterilerime kurdum. Bu ksm yazarken amacm sizlere baz CMS sistemlerinin zelliklerini retmek ve bir karlatrma sunabilmek. Ancak tamamen uzman olacanz seviye de bir CMS anlatldn dnyorsanz yanlyorsunuz demektir. Bunun kendimce sebepleri var. nternette tamamen GNU lisans ile datlan yzlerce CMS sistemi bulumaktadr. Size uyan bir tanesini deneye yanla renebilirsiniz. CM Simple CMS Made Simple SMF Mambo Joomla Php Nuke Post Nuke Red CMS E107 Etomite Bunlardan sadece bir ksmdr.
497
PHP kod bloklarn da baz yerlerde <?php ve ?> kullanlmamtr. Dolaysyla kodlar denemek isteyenler bu duruma dikkat etmelidirler. almada baz yerlerde gzden kaan yazm hatalar olabilir, onun iin sizlerin yardm ve tevii nemlidir. yi almalar dilerim.
498