You are on page 1of 498

HTML-CSS-PHP MYSQL-SQL

brahim Halil Kutluay


Nisan 2013

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

PEAR (PHP Extension and Application Repository) .. 179 PHP - Web Sunucusu PHP Kurulumu ..................... 179 XAMPP .............................................................. 180 APPSERV ........................................................... 180 Uniform Server .................................................. 181 EasyPHP ........................................................... 181 Php renmek Zormu ........................................... 182 lk PHP 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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Mysql Tablo Tipleri ................................................ 387 Mysql Veri Tipleri ............................................... 387 Metin tipleri .......................................................... 388 CHAR ve VARCHAR Fark ........................................ 388 BLOB ve TEXT Alanlar ...................................... 389 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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Bir Web Sitesi Bilinmesi Gereken Temel Bilgiler


Bir web sitesi iin Her web adresi aslnda bir numara bloku tarafndan temsil edilir. Bu o sitenin IP numarasdr. rnein 212.175.12.43 gibi. IP numaras hatrlamak kolay olmadndan her site iin bir isim tanmlanmasnn hatrlamay kolay klaca dnlmtr. Bu isimlere alan ad (domain name) denir. Hangi ismin hangi IP tarafndan karlanacan tutmak iinse NS (name server) dediimiz rehber bilgisayarlar kurulmutur. (9 ana NS bilgisayar vardr ve tamam ABD dedir). Name server zeride kayt sorgulamak iine DNS denilen servisten yararlanlr. rnein IP adresi olarak 194.27.128.101 gibi numaralar aklda tutmak zor olduundan 1983te Wisconsin niversitesi DNSyi gelitirmitir. DNS isimleri rakamlara evirir ve bu da daha kolay kullanm salar. Bazen Ttnet DNS sunucular hata verdiinden internet almyor diyenler olur. Oysa adres ubuuna IP no yazlrsa siteye eriim salanmas mmkndr. 26

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Domain Uzant Adlar


Gnmzde alan adlar yaanan skntlarn ardndan eitlendirilmi ve alternatifler artmtr. Ancak biz temel standartlar zerinden anlamlarn belirtelim. 28

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

.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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Web Server tutmaktadr.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Webde Gezme lemine Genel Bir Bak


Internet ve intranet ortak dili, HTML dilidir. Bir Web sayfasnda yer alan belgenin iindeki baz kelimeler, simgeler, fotoraflar, grafik unsurlar veya bunlarn paralar bir baka sayfa ile hiper-link kurularak, balanmtr. Kullanc, hi bir komut renmek zorunda kalmadan, hi bir balantnn Internetteki adresini bilmek zorunluluu olmadan bu sayfalardaki balantlar tklayarak, yazdan yazya, ekilden ekilde, gidebilir. Aslnda kullanc ya da ziyaretinin bir HTML sayfasyla ilikisi burada da 35

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

HTMLin balca sralayabiliriz:

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Microsoft Internet Explorer


Windows ortamnda tarayc piyasasna, dier tarayclardan sonra girmesine ramen, u anda pazarda %80 in zerinde bir oranda kullanma sahiptir. 39

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Tarayclar in Yardmc Programlar ve Ek Birimler


Tarayclar eskiden sadece iletilen metni gstermekteydi. imdi hibir eklenti gerekmeden bir ok resim dosyaysn gsterebilmekte ve zc (CODEC- COder DECoder) yardm ile video dosyalarn 40

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

HTMLin Temel Bileenleri


Bir web sitesinin temeli ieriktir. Resimde olsa metinde olsa grntde olsa sonuta hepsi ieriktir. Bu ierikler ise Etiket denilen (TAG) iaretleyiciler yardmyla biimlendirilir.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

HTML Yazm Kurallar


1. Etiketlerin byk harfle veya kk harfle yazlmas arasnda fark yoktur. <br> ile <BR> ayn ii yapmaktadr. 2. Bir ka istisna tiket hari btn etiketlerin birde sonlandrma ifti vardr. Sonlandrma iin ayn etiketin nne / (bl) iareti konulur. rnein <strong>Trkiye</strong> gibi. 3. <!-ile --> arasndaki metinler yorum olarak ele alnr ve gsterilmez. yi bir programc at etiketi kapatmay unutmamaldr. Bunun iin en kolay yntem nce ama ve sonladrma etiketlerini yazma sonra ierisini doldurmaktr.

HTML Dosyasnn Blmleri


HTML dosyas iki ksmdan oluur. 1. Head denilen balk ksm. 2. Body denilen metnin kendisi Web tarayclar, HTML etiketini grdkten sonra hemen HEAD ve BODY etiketlerini arar ve ekrandaki sayfay buna gre biimlendirirler. Basit bir HTML rnei, <HTML> <HEAD> Balk Metni 45

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

</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-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Merhaba. Web Tasarm Rehberine Ho Geldiniz! </BODY> </HTML>

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Meta Etiketleri Arama Motorlar in Sitemize Eklememiz Gereken Bilgiler


Normal olarak oluturulan her sayfann HEAD ksmna sayfann aklamasnn yapld, sayfa hakknda anahtar kelimelerin belirtildii meta etiketler konabilir ve konulmaldrda. Anahtar kelimeler arama motorlarnn sayfay tanmasn ve tespit etmesini salar. Yeni nesil arama motorlar (rn : Google gibi) meta etiketlerinin yansra belgenin Gvde ksmndaki ierii de dikkate alr. Eskiden srf ziyareti ekmek iin popler metinlere meta etiketlerinde alakasz yer verilir bir nevi kullanc aldatlrd. Google BODY ksmnda dikkate alarak bu ie bir nlem alm olmaktadr. NAME: Sayfann yazar, sayfann yayn tarihi, vb., bilgiler ierir. <META NAME="bilginin tr" CONTENT="bilgi"> eklinde yazlr. <META NAME="keywords" CONTENT = "kelime1 kelime2 kelime3"> "keywords" sayfa hakknda baz anahtar kelimeler ierir. Bylece arama motorlar iin index oluturmaya yardmc olur. (Dikkat: bu ksma ilgisiz alakasz eyler yazarak arama motorlar aldatldndan artk sadece bu alan deil komple ierik indekslenmektedir. Ksaca kendinizi kandrmayn) <META NAME ="metin"> ="description" CONTENT

"description" etiketi site hakknda tanmlanma bilgisini ierir. Bu etiketi tanmayan arama motorlar ise 48

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Meta Talarnn Gelimi Kullanm


Sayfann Sre Amn Belirtmek
Bu ilem iin expires etiketi kullanlr. <META HTTP-EQUIV="expires" 04 Apr 2008 23:59:59 GMT"> CONTENT="Wed,

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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 Karakterleri Grntlemek-Kod Sayfas


Yukarda rneini grdmz meta etiketi sayesinde sayfa iin bir kod sayfas belirtebiliriz. Bylece hazrlanan sayfann ekranda hangi karakter seti ile grntleneceinin bilgisini taraycya vermi oluruz. Trke iin 3 adet karakter seti kullanma imkanmz vardr. Windows-1254 Iso-8859-9 UTF

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

nedenle artk UTF kodlamasnn kullnalmas kesinlikle nerilir. <meta http-equiv="Content-Type" content = "text/html; charset=utf-8">

<BODY> Etiketinin Parametreleri


Body etiketi Bunlar Bgcolor eitli parametreler ilede kullanlabilir.

: Sayfann zemin rengini belirtir

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.

TrueType Fontlar-Harf Genilii Serif ve Sans Serif Harfler


Daktilolarda, kad hareket ettiren mekanizma, her harfin geniliine gre farkl hareket yeteneine sahip 52

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

H1,H2,H3,H4,H5,H6 Balk Etiketleri


HTML bize H1, birinci yani en byk, H6 sonuncu, yani en kk olmak zere alt ayr byklkte balk kullanma imkan veriyor. Farkl balk byklklerini daha yakndan tanmak iin, u sayfay yazarak, rnein baslik.htm adyla kaydedin: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> 53

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Genel Biimlendirme Etiketleri


Genel Biimlendirme Etiketlerinin Listesi ncelikle unu belirtmek gerekiyorki biimlendirme etiketlerinin ou obsolete yani devre d braklm durumdadr. Bu yzden bu listede sadece birka temel etiketi brakp eski standarda uygun olanlar ise karmak durumunda kaldm. nk bu etiketleri kullanmak iin zaman harcamak yerine en uygunu yeni standart olan CSS kullanmn renmenizdir. <strong> <em> Kapatlana kadar her harflerle yazlacaktr metin koyu

Kapatlana kadar her metin italik olarak yazlacaktr N

<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

<LI> <UL>..</ UL>

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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.

HTML Dilinde Renk Kodlamas


Web tarayclar renk belirtmek iin, ya ngilizce kelimeleri ya HEX karlklarn yada RGB deerlerini kullanrlar. Aslnda bilgisayarda sadece renk vardr. Krmz yeil ve mavi. Dier renkler bunlarn karmndan ibarettir. RGB (Red Gren Blue) dediimiz ey aslnda o rengi elde 59

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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)

Fuchsia #FF00FF rgb(255,0,255) 60

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Gray White Bunlar 16 renk temel renktir.

#C0C0C0 rgb(192,192,192) #FFFFFF rgb(255,255,255)

61

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Gvenilir 216 Renk


Tm tarayclarn hepsinde birden 256 renk paleti kullanldnda hep ayn renkte gsterilen renk kolar vardr. Bu renkler 216 adettir. Bunlar Gvenilir 216 Renk (216 Web Safe Colors) olarak bilinirler. Aadaki tabloda kodlar verilen renkler her bilgisayarda ve taraycda ayn renk sonucunu verir. 000000 000033 000066 000099 0000CC 0000FF 003300 003333 003366 003399 0033CC 0033FF 006600 006633 006666 006699 0066CC 0066FF 009900 009933 009966 009999 0099CC 0099FF 00CC00 00CC33 00CC66 00CC99 00CCCC 00CCFF 00FF00 00FF33 00FF66 00FF99 00FFCC 00FFFF 330000 330033 330066 330099 3300CC 3300FF 333300 333333 333366 333399 3333CC 3333FF 336600 336633 336666 336699 3366CC 3366FF 339900 339933 339966 339999 3399CC 3399FF 33CC00 33CC33 33CC66 33CC99 33CCCC 33CCFF

62

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

! 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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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>

<HR> Etiketi ile izgi Oluturma


Yatay izgi (horizontal rule) etiketi, bulunduu yerde, belirtilen parametrelere gre yatay bir izgi izilmesini salar. Bu etiketin kapan ifti yoktur. Pencere boyunca izgiyi izer ve ilevi biter. Parametreleri unlardr; Width kullanlr. Size kullanlr. : izginin geniliini ayarlamak iin : izginin 68 kalnln ayarlamak iin

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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"

<H1 align="center">Fenerbahe Spor Kulb<BR>

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

hatrlayacaktr. vermektedir. Bgcolor belirler. Height Width

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

SCROLLAMOUNT=n WIDTH=n>

SCROLLDELAY=n

VSPACE=n

Resimleri Kullanrken Dikkat Edilecekler;


1. in durumuna gre PNG, GIF KPG kullanmna karar verilmelidir. GIF dosyalar sadece 256 renge kadar desteklerler. Ama daha keskin grnrler. JPG resimler isedaha az yer kaplarlar ancak kaypl bir format olduundan resimde hassasiyet kayb olacaktr. PNG ise GIF formatnn lisans sorunlarna are olarak gelitirilmi gir formattr. Ancak IE6 srm transparan PNG resimlerle sorunludur. 2. Byk resimleri kullanmaktan gerekli olmadka kanmaldr. Hi kimse dakikalarca bir resmin yklenmesini beklemez. Resim kendisi iin ok nemli ise ayr tabii. te bu yzden her zaman resimlerin boyutunun kk, miktarnn az utulmas tavsiye edilir. 3. Eer byk resimler kullanmak zorunlu ise, bunlarn JPEG formatna evrilip ve kalitesinin drlmesi tavsiye edilir. JPEG resimler daha hzl yklenirler. 4. Siteye her girenin en son tarayc ve Windows kulland dnlmeden, herkes iin kod yazlmaldr.Resimlere her zaman ALT tag kullanlarak alternatif metinler verilmelidir. Bylece resim zelliini kapatanlar yada metin bazl tarayc kullananlarda o ekranda resim olduunu grebilsinler. 73

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Video ve Ses Dosyalarnn Kullanm


Eer sayfa yklendiinde bir ses dosyasnn alnmas istenirse <BGSOUND> etiketi kullanlabilir. <BGSOUND SRC='ses.wav.mid' LOOP=5> Bu ekilde yklene ses srekli ayn olacak ve durdurulmas istendiinde bir ilem yaplamayacaktr. te bu yzden bu yntem ok nerilmez. Ama dinamik bir dil yardm ile ses dosyas rastgee deiecek ekilde bir ilem yaplrsa daha iyi bir etki brakabilir. Video dosyas gstermek iinse <Object> kullanm gerekir. etiketinin

Dikkat edilecek nokta desteklenen uzantlardr. Ayrca kullanc tarafnda gerekli codeclerin ykl olup olmadnda hesap etmek ve ok nadir bulunan formatlardan kanmak gerekir.

74

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Balk, Satr ve Veri Etiketleri


HTMLde bir tablonun balangc ve bitii <TABLE>..</TABLE> etiketiyle iaretlenir. Tablonun stun balklar <TH>..</TH>; gvdesi <TBODY>..</TBODY> etiketiyle belirtilir. Stun balklar veya gvde etiketinin hemen altnda taraycya bir tablo satr baladn sylemeniz gerekir. Bunu <TR>..</TR> etiketiyle yaparz. Bu iki etiketin arasnda Tablonun deerleri, yani iinde bilgiler bulunan hcreleri oluturan etiket, <TD>..</TD> yer alr. Bu iki etiketin arasnda tablonuzun ilgili hcresinde yer alacak bilgi bulunur. 75

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Stun ve Satr Birletirme Colspan- Rowspan


Bir tablonun balnda ve gvdesinde yer alan hcreler yatak ve dikey olarak komular ile birletirilebilirler. Bunun iin COLSPAN ve ROWSPAN etiketlerini kullanrz.

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.

Tablonun genilii- Width


Bir tablo, tarayc penceresindeki alan kullanm tamamen tasarlayan kiiye baldr. Tablo sayfann tmne, belli bir yzdesine veya belli bir lsne yerletirilebilir. Tabloyu olutururken TABLE etiketine l birimi ve miktarn eklemeniz gerekir. rnein, <TABLE WIDTH=50%> ile tablonun ekrann yarsn kullanacan belirtmi oluruz. Yzde yerine pixel olarak mutlak l de verilebilir. Altn kural hatrlayalm. Herkesin ekran genilii farkldr. rnei tablonuza 600 pixel genilik verip sola hizaladnz. 800x600 pixel genilikteki bir ekranda tablo gzel durabilir. Peki 19 in ekrannda 2048 genilikte alan kii ne grecektir ? Solda duran ekrana gre ok kk bir tablo. Tablonun ortaya hizal olmas bu sorunu bir nebze zer ama ama width lsnn yzde olarak 78

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

verilmesi bu sorunun temel zmdr. Bylece ekran bydke tablo byr, kldkede klr.

Tablonun erevesi - Border


Bir tablonun btn stun ve satrlar iine alan en d erevesinin kalnln belirlemek iin BORDER=xx (xx, pixel cinsinden ereve kalnl) kullanlr. FRAME=x ile tablonun d ve hcreler aras ereve izgilerini kontrol edebilir x yerine VOID yazarak tm d ereveyi kaldrabilirsiniz; ABOVE sadece tablonun st tarafna; BELOW sadece alt tarafna; HSIDES sadece alt ve st taraflara; LHS sadece sol tarafa, RHS sadece sa tarafa, VSIDES sadece sa ve sol taraflara ereve konulmasn salar. <TABLE BORDER="1" WIDTH="100" BGCOLOR="#C0C0C0"> <TR> <TD WIDTH="50"> </TD> <TD WIDTH= "50"> &nbsp; </TD> </TR> </TABLE> Not: Yukarda baz hcrelere neden &nbsp; yazldn gelince bunun sebebi tarayclarn bo olan hcreleri gstermemesi ve sayfa dizaynnn ekranda tuhaf durmasdr. Hcre iindeki boluk miktar CELLPADDING Cellpadding deeri bir hcredeki metnin kenarlk izgisine olan uzakln gsterir. hcrenin

79

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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"

Sembol aretlerinin HTML Dilindeki Karlklar


HTML kodlanrken bazen sembollerin kodlanmas gerekir. rnein ekrana a<c yazdrmak istiyorsunuz. Tarayc bu ksm yorumlamakta skntya girecektir. nk < iareti tarayc komutlarnnda balangcdr. Byle durumlarda taraycnn kafas karmakta ve ounlukla bu blm hatal etiket olarak ele alnp yoksaylmaktadr. Byle durumlarda taraycya sembol karakterleri ile bu semboln karln ekrana yaz dememiz gerekir.

Kod

Tanm

Sonu

&nbsp; Boluk &lt; &gt; &quot; &amp; Kk Byk ift trnak Ve < > " &

80

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

&copy; &reg; &para; &cent;

Copyright Kaytl Paragraf Sent

&sup2; st simge &frac14; Bl (rnek ) &pound; Pound &deg; &yen; Derece Yen

Buradaki &nbsp; 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 &nbsp; koyarsak HTML bunu hcre iine mecburen koyacak ve tablomuz dzgn grntlenecektir.

81

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Genel Sayfa Kullanm ekilleri


Sayfalar genelde belirli sayfa dzenlerinde tasarlanrlar. rnein men solda ierik sada, stte banner, yada sada kayan haber gibi alanlar vardr. Genel olarak sayfalar 2 li yada 3 l stun halinde tasalarnr. eitli sayfa ats rnekleri aada verilmitir.

st Banner alan

Men alan

erik alan

Alt bilgi telif vs alan

Men alan

erik alan

Alt bilgi telif vs alan

82

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

st Banner alan

erik alan

Men alan

Alt bilgi telif vs alan

st Banner alan

Men alan

erik alan

Kayan Haber Sa men alan

83

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Alt bilgi telif vs alan

st Banner alan

Men alan

erik alan

Alt bilgi telif vs alan

st Banner alan

Men alan

Kayan 84

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

erik alan

haber yada Sa Men alan

Alt bilgi telif vs alan phesiz bunlar kartrarak daha farkl dizaynlarda yaplabilir ama bunlar ilk etapta size bir fikir verebilir.

85

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

st Banner alan (frame banner) (sabit)

Men alan Menu1 Menu2 Menu3 Frame Menu (sabit)

erik alan (Frame content )

Alt bilgi telif vs alan frame footer (sabit)

87

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 Satrlar ve Stunlar


Frame kullanan bir HTML sayfas oluturmak, aslnda, ereve says kadar HTML sayfas oluturmaktr demitik. Tablo ile frame arasndaki en nemli farkta budur. Frame oluturma kodu olan <frameset cols="">...</frameset> eklindedir. Burada frame say belirtilmez, verilen l saysna gre tarayc bunu kendisi hesaplar. cols= ifadesinden sonra sayfamzda ka ereve olmas isteniyorsa o kadar l yazlr. <frameset cols="20%,60%,20%> Bu komuttaki col ifadesiyle dikey frame oluturuyoruz bu ereve setinde solda ve sada ekrann %20si eninde birer alan brakp kalan /60 ise ierik iin kullanacaz. Bu framelerin iine ne konulacan ise, FRAMESET etiketinin iine yazacamz kaynak gsteren satrlarla bildirmemiz gerekir; imdi bunlar yazalm. </frame> kodunun nne unlar yazn: <frameset cols="20%,60%,20%> 89

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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.

Yatay Dikey Kark Frame Oluturmak


Frameler teknik olarak birbirleriyle birletirilemez ancak ayn grnty elde etmek mmkndr. Sadece kodlama ekli biraz farkl olacaktr. Frame kullanmnda ne kadar frame isteniyorsa belirtilir demitik. Bu belirtilen frameler iin <FRAME SRC> ile kaynak belirtilmedii anda tarayc o alanda bir stun oluturur. Buraya dier frameler yeletirilebilir. Eit olmayan sayda stun ve sra ieren frame ilevi iin bu olay kullanlr. Birinci stun tek sral, ikinci stun iki sral bir ereve sayfas iin kodumuz yle olmaldr: <FRAMESET COLS="25%,75%"> <FRAME SRC="cer01.htm" SCROLLING="auto"> <FRAMESET ROWS="20%,80%"> <FRAME SRC="cer02.htm" SCROLLING="auto"> 91 NORESIZE NORESIZE

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<FRAME SRC="cer03.htm" SCROLLING="auto"> </FRAMESET>

NORESIZE

92

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

HTMLde Balantya (LINK) Giri


Buraya kadar grdklerimiz metini biimlendiren ve gsterimi ile ilgili etiketlerdi. Oysa web ile biraz ilgili birisi bile linkler olmadan web ortamndan hibir ey yaplamayacan bilir. nk linkler yardm ile kullanclar bir web adresinden dierine zgrce gezebilirler. Ancak tabi ki verilen balantnn hedefindeki resim, ses, vide yada web adresi doru olmaldr. Aksi taktirde krk link (dead link, broken link) dediimiz adeta kmaz sokak saylacak bir kopukluk oluur. rnein link verirken c:\belgelerim\cv.doc linkini verdiniz ve amacnz kullanclarn cv dosyanza eriebilmesi. Peki sizin sabit diskinizde kendi halinde duran bir dosyaya, sabit diskiniz Internete ak deilse, kullanc nasl eriecek.. Tabii bu traj komik rnekte asl sorun u, hardiskinizi internete atnz diyelim, bu sefer zel bilgilerinizi nasl koruyacaksnz? <A>..</A> etiketi HTMLe hareket kazandran ve link vermeyi salayan etikettir. HTML etiketleri arasnda Anchor (A) etiketinin yan sra, <BASE> ve <LINK> etiketleri de, bir noktadan bir dierine gitmemizi salar. <PRE></PRE>: nceden dzenlenmi (preformatted) metin bloklar iin kullanlr. Normalde, HTML birden ok whitespace'i tek bir boluk karakteriyle deitirdii iin, grntlenmesi baka trl mmkn olmayan metin bloklar bu tag yardmyla grntlenebili <A>..</A> etiketine zellik kazandran parametreler unlardr: ACCESSKEY=metin: Bu parametre ile, balantnn fare ile tklamak yerine, klavyede bir veya birden fazla tua 93

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

bulgur orbas tarz grntmz olacaktr.

birbirine

gemi

bir

ekran

HTMLde Balant Trleri


HTTP balantlar:
Link, taraycnn HTTP protokoln kullanarak ulaabilecei bir alanda ise, bunun gnderme ifadesi, <A HREF="http://site adresi/sayfa adi.htm">Link metni </A> eklinde yazlr. Baka bir Web alannda belirli dosyaya deil de, alann birinci sayfasna (home page, index page, vs.) balant veriyorsak, balanty <A HREF="http://www.hedefsite.com.tr/"> olarak yazmak gerekir. Web server anasayfa hangi dosya ise onu gnderecektir.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Elektronik Posta Balants:


Bazen kullancn bir linke tkladndan hemen o linkteki bir adrese e-mail atmak zere kullancnn varsaylan email programnn almas istenebilir. rnek olarak <A HREF="mailto:webmaster@bizimweb.com.tr>e-mail gnder </A>

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Resimleri Link Bal Vermek in Kullanmak


Link verirken yazdmz bir kodu ele alalm. <A HREF="http://site adresi/sayfa adi.htm">Link metni </A> Burada Link metni yazs link olduunu belirtmek zere alt izili yazlacaktr ve buraya tkland andada hedef linke gidilecektir. Burada link metni yerine bir resim dosyas kullanlrsa, resim linkin simgesi olacak ve resme tklandnda link alacaktr. rnein <A HREF="http://site adresi/sayfa adi.htm"><img src=dugme.jpg> </A> gibi. Tabii istenirse </A> yazmakta mmkndr. metninden nce metin

<A HREF="http://site adresi/sayfa adi.htm"><img src=dugme.jpg> <br>Link metni</A> gibi 99

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Resim Haritas (Image Map) ile Link Kullanm


Resimlerin farkl ksmlarndan farkl yerlere link vermek isterseniz resim haritalarndan faydalabilirsiniz. rnein ilk anda aklnza gelebilecei gibi Trkiye haritas zerinde tklanacak ile gre ilgili ilin sayfasna gei yaptrlabilir. Resim haritas bir resim zerindeki tanmlanm etkin noktalar (hotspots) link olarak belirler. Etkin noktalar dikdrtgen veya yuvarlak olabilecei gibi dzensiz ekiller de olabilir. Bunlar iin uygun koordinatlar belirtilmelidir. Dikdrtgen etkin noktann konumu iki noktayla tanmlanr: sol st ve sa alt keler. Her nokta resmin sol-st kesinden yatay ve dikey uzakln piksel cinsinden belirten bir say iftiyle tanmlanr. Aadaki rnekte 0,0 etkin noktann sol st kesinin 50,50 de sa alt kesinin resmin sol st kesine olan uzakldr. <map name="haritaadi" id="haritaadi"> <area shape="rect" coords="0,0,150,150" href="adana.htm" /> </map> Yuvarlak etkin noktann konumunu tanmlamak iin adet koordinat kullanlr: ikisi (yatay ve dikey deerler) dairenin merkezini tanmlamak iin, ncs dairenin yar ap iindir. <map name="haritaadi" <area shape="circle" href="adana.htm" </map> 100 id="haritaadi"> coords="100,150,60" />

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Link Verirken Relative (greceli) ve Absolute (mutlak) Adreslemelerin Farklar


www.abc.com sitesinin www.abc.com/yazilar adresinde yaynlanacan varsayalm. ise tasarlandn, makaleler

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

KULLANICI LE ETKLEM VE FORMLAR


HTML iinde ne sunarsak sunalm kullanclar bir noktadan sonra gezdikleri sayfada kendilerinden bir eyler grmek isteyecektir. rnein milli takm alan siteyi gezen bir taraftar olsanz ve site imkan verse, takma baar dileklerinizi sunmak yada ma iin taktik vermek istemezmiydiniz ? Yada imkan olsa oyuncularlar web sitesi zerinden bilgi alveriinde bulunmak istemezmiydiniz. te web de bu ilemler iin FORM denilen bilgi giri sistemi kullanlr. Formlarn be ana paras vardr; Bilgi giri kutular Action ile gsterilen tasarlanan hedef ve bilgileri ilemesi iin

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">

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

GET

Snrsz bilgi gnderir

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.

Form Etiketinin Alt Seenekleri


Yukardaki rneklerden kolayla anlalabilir ama yinede formun alt etiketlerini detaylca yeniden grelim. 106

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Form Elemanlar izelgesi


Kontrol TextBo x ekli Yazl <INPUT TYPE="text"> Aklama Kullancnn tek satrdan oluan metin girmesi iin kullanlr. Yukardaki gibi string ifade girii

Passwo

<INPUT TYPE="password"

107

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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">

<INPUT TYPE="FILE"> File

CheckB ox

<INPUT TYPE="checkbox" >

<INPUT TYPE="radio"> RadioB utton

108

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

snflandrlabilir. <INPUT TYPE="submit"> Submit


Submit

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

<INPUT TYPE="reset"> Reset


Reset

<INPUT TYPE="image"> Image

Button

<INPUT TYPE="button">

109

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Kullancnn klavyeden metin girmesi iin:


TYPE=TEXT NAME="..." VALUE="..." SIZE="..." MAXLENGTH="..." TABINDEX="X" Size" bu kutunun kullancnn ekrannda gsterilecei genilii karakter olarak belirler; Maxlength" ise kullancnn girebilecei metnin uzunluunu karakter olarak belirler. Bu deer verilmez ise varsaylan deer olan 21 hane snr kullanlr. Form ekrana geldiinde bir kutunun varsaylan olarak bir deerle gelmesini istiyorsanz bu deer VALUE parametre ile verilmelidir. Forma bilgi girii yaplrken tab tuuna baslacak olursa kutular arasnda hareket etmek iin kullanlacak srann girilmesini salar. rnein tabindex deeri 1 olan kutuda tab tuuna baslr ise tabindex deeri 2 olan kutuya gei yaplr.

Parola Girii iin:


TYPE=PASSWORD NAME="..." VALUE="..." SIZE="..." MAXLENGTH="..." Metin girme kutusu ile ayn zelliklere sahiptir; fakat bu kutunun iine kullancnn girecei bilgiler ekranda gsterilmez yerine yldz simgesi gsterilir. Bankalardaki ifre giri ekran gibidir.

Onay Kutusu iin (Check iareti):


TYPE=CHECKBOX NAME="..." VALUE="..." [CHECKED] Bu kutucua harf vs girilemez. Sadece fare ile tklanabilir yada boluk tuu ile iine check iareti konulur. Gene ayn ekilde bu iaret kaldrlabilir. Bu kutuda iaret 113

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Tekil Seme Kutusu iin (Radyo dmesi):


TYPE=RADIO NAME="..." VALUE="..." [CHECKED] Bu eleman formda oklu seeneklerden birisinin (ama sadece birisinin) seilebilmesine imkan verir.

Listeleme Kutusundan Semek in (SELECT)


Bu etiketi ile, formda bir kutu ve yannda bir aa ok oluturabilirsiniz; kullanc aa oku tklayarak kutudaki elemanlar ap birisini seebilir. Seilen kutu ierine yazlr. stenirse bunlardan birisi otomatik olarak seilmi olarak da gsterilebilir. Bu etiketin kullanm ekli yledir: <SELECT NAME="...." SIZE="..." MULTIPLE]>.....</SELECT> Size hanesine 1, 2, veya 3 vs.. yazarak, ekrandaki kutunun ka seenek gstereceini belirleyebilirsiniz. Bu hane konulmazsa, otomatik 1 seenek varsaylr. Bu kutuda gsterilecek seenekler, <SELECT....>..</SELECT> etiketlerinin arasna <OPTION> etiketiyle yazlr. (<OPTION> etiketi kapatlmaz.) Herhangi bir seenein otomatik olarak 114

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

seilmesi iin nndeki <OPTION> SELECTED kelimesi konulur. rnek: <select name="cinsiyet" size="1"> <option selected>cinsiyetiniz <option value="Erkek">Erkek </option>

etiketinin

iine

<option value="Bayan">Bayan</option> </select>

Uzun Metin Girii in (TEXTAREA)


Metin kutusu, ziyaretiye, Web Servera uzun metin gnderme imkan salar. <TEXTAREA NAME="..." rows=.. cols=..>Otomatik yazlmas istenen metin buraya yazlr </TEXTAREA> Name=...." parametresi ile ile metin kutusuna Servera gelecek metnin ilenmesi ve kullanlmas iin gerekli deiken ad verilebilir. rows=" ve cols=" parametreleri ile ise bilgi girii kutunsun satr says ve kar harf geniliinde olaca bildirilir. Bu iki parametrenin girilecek metnin uzunluu ile ilgisi yoktur.

Gnder ve Sil dmeleri (Submit ve Reset)


Doldurulan bir formun girlilen bilgileri ileyecek programa gnderilmesi iin formlarda GNDEr (Submit), ve forma girilen deerlerin yeniden ilk bataki deerlerine dnderilmesi iin SL(Reset) dmesi kullanlr. Bunun iin INPUT etiketi yle kullanlr: 115

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<INPUT TYPE=SUBMIT VALUE="Gnder">

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

= %FD = %DD = %F0 = %D0 = %FE = %DE = %E7 = %C7 % = %25 & = %26 [ = +%5B ] = %5D { = %7B } = %7D ? = %3F = = %3D

119

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

CSS ile Biimlendirme Teknikleri, Dinamik HTML


CSS Stillerine Neden htiya Duyulur
Etiketleri incelerken grdmz zere biimlendirme ile metin i ie girmekteydi. Bylece hem metnin etiketlerden ayrlmas hemde GOOGLE gibi arama motorlarnn sayfamz indexlemesi zorlamaktadr. Biimlendirme etiketleri kullanarak diyelimki belgenizdeki tablo balklarn hep ayn stilde yazmak istiyorsunuz. O zaman aresiz her tablo baln tek tek biimlendirmek zorundasnz. Oysa CSS teknolojisi Word iinde tanml hazr biimlendirmeler gibi biimlendirme bloklar kullanmaya izin verir. Tablo bal rneine geri dnersek, bu bal bir stil olarak tanmlar rnein 14 punto, Tahoma, Kaln ve ortalanm, mavi zemin renginde- bu stili kaydettiimiz dosyay HTML iinde kullanarak sitemizin (sitenin geneli sadece sayfa deil) genelinde sadece stilin adn vererek ilgili biimlendirmeyi uygulayabiliriz. Dahada gzeli, stiller tek bir dosyadan geldii iin stil dosyasndaki bir deiiklik annda tm sitemizde uygulanacaktr. Tablo bal rneindeki gibi rnei forntu deitirsek yada zemin rengini deitirsek tm sitemizde ne kadar tablo varsa bu stil hepsi iin deitirilmi olacaktr. CSS bu adan byk kolaylktr. Ancak unutmayalm ki tarayclar ierik gibi CSS etiketlerini de kendilerine gre yorumlamaktadrlar. phesiz tek fayda bu deildir. Biimleri sayfa kodlarnda srekli tekrarlamak ayn zamanda gereksiz kod 120

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Cascading Style Sheets -CSS ve Kullanm ekilleri


Web sayfalarn biimlendirme konusunu ilk ele aldmzda yerel biimlendirme yoluna gitmi ve neyi biimlendireceksek o etikete ait kodlar hemen orada yazmtk. CSS etiketleri ise hafzaya yrlr demitik. CSS sayfa iinde ekilde kullanlabilir. 1. Yerel (Inline) 2. Sayfa ii global (Embedded) 121

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

3. Site ii global (Linked)

Yerel Stil ablonu


Yerel Stil ablonlar, uygulanacak etiketi sadece bir kez bulunduu yerde etkiler. rnek: <html> <head> <title>Css</title> </head> <body> <h2>CSS Kullanm</h2><br> <h2 style=font-size:20pt; Kullanm</h2> </body> </html> Grld gibi bu ekilde sadece o an kullanlan etikete etki edilmitir. Dezavantaj : Bu kullanm font taglarnn kullanm arasnda pek bir fark yoktur. Anlk zmdr ve CSS in genel mantna aykrdr. color:blue>CSS

Sayfa i Global Stil ablonu


Global Stil ablonlar bir nceki rnekte yaptmz gibi h2 etiketinin (yada dier bir etiketin) tm sayfada ayn zellikte olmas istendiinde kullanlr. Bunu iin Stil ablon zellikleri sayfann balangcnda (<head></head> etiketleri arasnda) tanmlanr. 122

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Site i Global Stil ablonu


Global stil ablonunu, sitemiz ierisindeki tm sayfalarda kullanmak istediimizde uygulanabilecek bir tekniktir. En ok kullanlan biimde budur. Uygularken, stillerimizi yukarda rneklerini verdiimiz ekilde hazrlarz. Fakat bu stil listesini html dosyamzn ierisinde deil de bo bir sayfaya yazarz ve css uzantl bir ekilde kay dederiz. Ardndan da html dosyamzn ierisine yine <head> </head> etiketleri arasna <link rel="stylesheet" type="text/css" href="dosya_ismi.css"> eklinde ekleriz. rnek h1 {font-size:13pt; color:green} h2 {font:20pt; color:blue} h3 {font-size:15pt; color:red} Yukarda verilen rnekteki dosyay stil.css olarak kaydedip, html dosyamza geelim. Html dosyamzn kodlar: rnek: <html> <head> 124

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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.

Birden fazla stil ablonu verilirse Tarayc ne yapar?


imdi bir Cd raf dnelim. Elimize geen tm CD kutularn buna st ste yyoruz ve kural olarak C D 125

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

HTML iinde blm oluturma (DIV)


DHTMLi bir teknikler demeti olarak ele alrsak, ilk tekniimiz, sayfamza ne metin, ne grafik, ne tablo ve ne de ereve saylmayan, ama iinde bunlarn tmne de yer verebileceiniz blm kavramna dayanan <DIV>..</DIV> etiketidir.

126

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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>

CSS ve Seici(Selector) Kavram ve Seici Tipleri


XHTML ve CSS kullanmnda Selector kavram nemli bir yer tutar. Seici (selector) demek stili belirlenebilen etiket demektir. 4 tipi vardr, isimlendirilmi, snf, karma ve artl.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Karma Seiciler (Pseude Classes)


Bunlara karma denmesinin sebebi: kendi balarna snf gibi grndkleri halde ancak bir etiketin belirli durumlarna uygulanabilmeleridir. HTML dilinde buna uygun imdilik iki etiket vardr. <A> ve <P> etiketleri. A etikeninin durumu olabilir seicilere balamak mmkndr. ve bunlar karma

Link (henz ziyaret edilmemi olan adres) Visited (daha nce ziyaret edilmi adres) ve 129

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

zerine gelindiinde linklerin

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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>

artl Seiciler (Contextual Selectors )


Bir HTML etiketinin her zaman deil de belirli bir koulda belirli stiller almasn istediimizde kullandmz Contextual Selectors (artl Seiciler) grubudur. B (Bold) etiketi, uyguland balk veya paragraf gibi bir etiketi kaln yaparak belirginletirir. Fakat diyelim ki bu etiketi paragraf etiketi ile birlikte kullandmzda iaretlenen yerin siyah, balk etiketiyle kullandmzda gri yapmasn istiyoruz. Bunun iin CSS blmnde bu etiketi P ve H1 bloklarnda tanmlarz: 131

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

P { COLOR: black; FONT-FAMILY: 12pt; TEXT-INDENT: 1cm} P B { COLOR: black} H1 { COLOR: #008080; FONT-FAMILY: 26 pt serif} H1 B { COLOR: pink } Yukardaki 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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Bir Alana Tanml Stillerin Dnda Stil Uygulamak


Herhangi bir <div> blmnde veya paragrafta dierlerinden ayr stile sahip olmas istenen herey <span>...</span> etiketleri ierisine yazlabilir. Bu etiket Basit HTML dersinde kullanlmas artk desteklenmeyen <font> etiketi yerine kullanlabilir. <div style="color:#000000;"><h4>Rastgele bir balk </h4> <p><span style="color:#cccccc">Bir satr.Ancak rengi div iin tanmlanandan farkl </span> </p> </div>

CSS Bloklar ve Denetlenebilir zellikler


CSS Biimlendirme Tablosu

fontfamily

Tahoma, Arial

Yaz tipini belirler.(Arial Verdana gibi.)

133

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

font-style Normal italic oblique fontvariant Normal small-caps

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

Normal bold bolder lighter 100 900

font-size

Absolute-size (xx- Yaznn bykln small | x-small | small | medium | large | x-large | xx-large) relative-size (larger | smaller) px , pt, %

METN Word Spacing normal | Szck aral <boyut:px vb.>

134

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Letter Spacing

normal | Harf aral <boyut:px vb.>

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

Normal | <say> | Satr ykseklii <boyut> | <yzde>

135

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Backgrou url(images/resima nd Image di.gif) Backgrou nd Repeat

repeat | repeat-x | Arka plan repeat-y | no- ynde repeat belirler.

Backgrou scroll | fixed nd Attachme nt Backgrou nd Position KUTU ZELLK 136

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

border-width border-style border-color

| Kenarlk | rengi.

kalnlk,

style

ve

Width Height LSTE ZELLK LER

boyut | yzde | Genilik auto boyut | auto Ykseklik

137

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

List Style disc | circle Type square | decimal lower-roman upper-roman lower-alpha upper-alpha none

| Listenin harflerden mi yoksa | saylardan m oluacan | belirler. | | |

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

list-style-type | list-style-position| adres (list-style: lower-roman inside gibi.)

138

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 zellikleri in CSS Kullanm:


FONT-FAMILY (Yaztipi ailesi):
eklinde kullanlan bu etiketle, uyguladnz stilin font ailesini seebilirsiniz. fadenin karsna font ailesinin adn yazabileceiniz gibi, serif (r. Times), sans-serif (r. Arial), cursive (r. Zapf-Chancery), fantasy (r. Western), monospace (r. Courier) de yazabilirsiniz. Bu satrda birden fazla font ad aralarna virgl koyarak yazlabilir. yi bir uygulama, nce tercih ettiiniz belirli bir fontun, ardndan bu font ailesinin adn ve nihayet 139

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

tr yazmaktr. nk setiiniz bilgisayarnda mevcut olmayabilir. rnek:

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Renk ve Zemin zellikleri:


Renk: COLOR: eklindeki bu parametre ile herhangi bir ieriin renk zelliini belirleyebilirsiniz. Renk adlar veya kodlarn daha nce ele almtk. rnek: H1 { COLOR: blue } H2 { COLOR: #000080 } Zemin Rengi: BACKGROUND-COLOR: eklindeki bu parametre ile herhangi bir ieriin arkasndaki zemin rengini belirleyebilirsiniz. Etiketin rengi ile zemin renginin farkn grebilmek iin daima COLOR ykleminden sonra kullanlmas iyi bir 180 152 24 80 uygulama olur. rnek: H1 { BACKGROUND-COLOR: blue } Zemin grafii: BACKGROUND-IMAGE: eklindeki bu parametre ile herhangi bir ieriin arkasndaki zemine koymak istediiniz grnty belirleyebilirsiniz. eriin kendi zemin rengi ile zemine konacak grntnn birbirini rtmemesi (Perde gibi) iin ardarda kullanlmas doru olur. Zemin grntsnn yerini belirt mek iin url... ifadesi kullanlr. Aadaki rneklere bakalm: H1 { BACKGROUND-IMAGE: url(/images/zemin1.gif } P { BACKGROUND-IMAGE: url(http://www.abc.com/zemin1.gif } BODY { BACKGROUND: white url(/images/zemin1.gif }

142

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

(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>

Konum (Pozisyon) zellikleri


CSS kurallarnn iinde yer almakla birlikte HTML ieriklerinin taraycnn ekrannda, yerletirilecei pozisyonu ve ilk konumun daha sonraki deime tarzn 145

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Web Sitesi Yaparken


1. ncelik ieriktir. ekil sonra gelir. erik olduktan sonra ekil nasl olsa zlr. 153

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Site Tasarm Admlar


1. Siteyi oluturmaya nce kat zerinde balayn. Tasarm olmadan ileme balarsanz o kadar ok baa dnersiniz ki siz bile aarsnz. 2. Sitenin nasl grneceini anahat olarak belirledikten sonra kullanacanz teknikleri belirleyin. Site grafik arlkl m olacak yoksa FLASH m kullanlacak, ierik ynetim sistemi kullanlacak m. 154

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

8. Site kodlarnz oluturun.

155

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Bir Site Tasarlarken


ok kolay gibi grnr ancak web tasarm ok zor bir konudur. Karnzdaki insann ne istediini anlamadan ona istediinizi kabul ettirebileceiniz bir dnemde de deiliz. O yzden ncelikle site sahibinin ne istediini dinlemek, sitede yer verilecek konuyu anlamak gerekir. Bu aamada site sahibinin zevklerini, site irket iinse kurumsal renklerini, i ile ilgili birka bilgiyi edinmek, ayn ii yapan irketlere ait siteleri inceleyip bilgi sahibi olmak kar tarafta iinin ehliyle alyor olduu izlenimi uyandrr. Daha sonra kat zerinde sitenin genel grm izilmeli ve site sahibinin bu konudaki fikri alnmaldr. Bu, birinci sayfadan sonuncuya kadar, sitenizdeki tm sayfalarn ekran grntsn kat zerinde resmetmek demektir. (Bu her zaman gerekmez. nk mteri genel grnme karar verip bilgilerin bu temaya uygun yerletirilmesi yeterlidir diyebilir) Sitede kullanlacak tekniklerin belirlenmesi de nemlidir. Flash animasyon olacak m olmayacak m gibi. Ayrca baz durumlarda baz hazr ierik ynetim sitemlerinin kullanmda dnlebilir. Sitede dinamik bir dil kullanlacaksa hangi dilin kullanlaca veri duyarl olacaksa hangi veritabannn kullanlacann bilinmesi nemlidir. Sitenin oluturulmas iin gerekli grafik programlar, HTML editr, site ynetim program, kelime-ilem program, gelitirme srecinde kullanlacak lokal bir web sunucu tasarmcnn kulland bilgisayarda ykl 156

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Bir Web Etkenler

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Kullanc Dostu Tasarm


Bir sitede ierikten sonra en nemli ey grnmdr. Grnm kt ise ierik iyi bile olsa kullanc sitenize bir daha zor gelecektir. Sitede gerektii kadar resim vs kullanlmal, siteniz hzl yklenmelidir. erii kolay anlalr ekilde dizayn etmelisiniz. Bir sayfadan dierine geerken sitenizin tm sayfa yaps deiiyorsa kullanc takipte zorlanmaya balar.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Php Programlama Dili


Php Dilinin Gemii
Rasmus Lerdorf, adl gen bir mezun i aradn belirtmek zere sitesinde zgemiini yaynlyordu. Bu amala site yapmak zere bir program gelitirdi. Yazd program ounlukla PERL dilinden alnm yordamlar kapsyordu. Buna PHP (Personal Home Page Tool) adn verdi. PHP adl bu programn (Kiisel Ana Sayfa) ok tutulmas zerine Rasmus, bu programa, form yoluyla ziyaretiden gelen bilgileri ilemeyi salayan komut setlerinide ekledi ve programn ad PHP/FI (Form Interpreter/Form Yorumlayc) oldu. Kimileri programn bu srmne PHP2 dedi; ve bu ad, programn ok deimesine ve gelimesine ramen uzun sre deimeden kald. Rasmus Lerdorf, 1995 ortalarnda, Zeev Suraski, Stig Bakken, Shane Caraveo ve Jim Winstead inde katld bir grup ile PHP dilini yeniden tasarlayarak, Perl'den dn alma rutinlerle i yapan bir paket yerine, NesneYnelimli (Object-Oriented Programming) bir programlama dili haline getirdi. PHP dili 3 srmne geldiinde bu defa geniletibilir yani extensible bir dil oldu. Ayrca snrl da olsa nesneye ynelik proglamlama destei kazanmt. Eklenti ve nesneye ynelik destek sayesinde de n daha da ald. yleki 18 ay nce sadece 250.000 civarnda web sunucuya ykl olan PHP, bu sre iinde bu sayy 2.500.000 web sunucuya karmt. 162

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

try/catch XML Mysql Improved Sqlite Yeni bir SOAP eklentisi

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Ekonomik (Bedavadan daha ucuz bir ey varsa bilemeyiz)

Interaktif Web Sayfalar Hazrlamak in Yntemler


Web sayfalarna dinanizm kazandrmann iki yolu vardr. Sunucu tarafndaki interaktif uygulamalar ve Kullanc tarafndaki interaktif uygulamalar. Kullanc tarafndaki uygulamalara rnek olarak Javascript veya VBscript ile yaplan veri dorulama ilemleri ve Java dilinde yazlm appletleri sayabiliriz. Bunun avantajlar; Sunucu tarafna yk bindirmez ve veri dorulama gibi kullanc tarafnda halledilebilecek ilemler iin sunucuyu yormam olur Bant geniliini etkin kullanma yleki sayfa bu dorulama ilemleri iin sunucuya gidip geri dnerken ayn zamanda internet balantsnda kullanm olmaktadr.

165

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Sunucu tarafnda alan uygulamalarnda kendine gre avantajlar vardr

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

PHP ve ASP Karlatrmas


ASP hakkndaki en yanl kan ASP yi bir programlama dili sanmaktr. ASP dil deil (Active Server Pages) Aktif sunucu Sayfalar adnda bir platformdur. Bu platformda destekleyen her dille ASP platformuna ynelik kod yazlabilir. En ok kullanlanlan Vbsciript ve gnmzde ise C# dilidir. ASP maalesef sadece Windows ile alr (baz ticari uygulamalar ASP kodlarn baka sistemlerdede altrmaktadr). IIS web sunucusu doal ASP destei ile gelmektedir. Visual Basic bilen kiilerde ksa srede ASP kodu yazabilirler. Peki neden ASP ye kar PHP derseniz; 1. ASP COM-based architecture ile yaplmtr. ASP programclar VBScript kullandklar zaman aslnda bir COM nesnesi altrlr. Daha sonra tarayc tarafnda bir COM nesnesinin write methodu daha aktif edilir. VTYS ile iletiim iin ayr bir COM nesnesi daha altrlr. Tm COM nesneleri st ste biner bu da sistemin cevabn geciktirir. PHP modullerinde ise herey PHP iin ayrlan hafza blgesinde altrlr. Farkl COM nesnelerinin almas ve COM nesnelerinin arasndaki dnmler engellenmi olur. Tek Process zerinden tm ilemler yrtlr. Bylece PHP nin alma hz ASP den daha yksek olur. 2. ASP de kitlenen bir uygulama web server zerinde negatif etki yapar (ASP son srmde bu hatay gidermitir). PHP nin byle bir derdi yoktur. Her site kendi uzay alannda alr.

167

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 />"; } ?>

PHP ve Cold Fusion Karlatrmas


Cold fusion ok st seviye bir dil olup gerekten iinin ehlidir. Programc olmayanlar bile Cold Fusion ile yazlm gelitirebilirler. Ancak yinede web de snrl sayda yer bulabilmitir. nk Cold Fusion sunucu ve yaynlama anlamnda brakn PHP dilini ASP sitelerden bile ok ok daha masrafldr.

PHP Dilinin Kapasitesi


1. PHP Nesneye ynelik programlamay destekler buna snf ve kaltm zellikleride dahildir. 2. PHP oklu kaltm desteklemez. Bu konuda izledii yol java dili gibidir. 169

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

PHP Nasl alr


PHP iki ekilde altrabilir. Ya bir web sunucu zerinde yada komut satrndan komut verilerek. Birinci yntem ok popler olmasna ramen ikinci yntem gittike yaylmaktadr. nk bu sayede kullancya zel kod yazlmas mkn olmaktadr. Web sunucuda alma konusuna gelince, PHP, bir Script dilidir; yani kodlar dz yaz dosyalar halinde kaydedilir ve PHP kodlarnn altrlmas gerektiinde ise PHP kodlarn yrtme yeteneine sahip bir program ile ilenerek elde edilen sonu geri gnderilir. PHP kodlarn altrmak iin web sunuculara PHP modl kurulur. Bu modl varsa, Web server bir php kodu istendiinde bu PHP modulne bavurur ve PHP modl ilgili kodu altrp sonucu tekrar web sunucuya geri gnderir. Web sunucu ilenmi olan bu HTML eklindeki kayna ise talep etmi olan taraycya gnderir. Bu artlar altnda kullanc hibir zaman PHP dosyasnn gerekte ne ierie sahip olduu gremez. Sadece alma sonucu oluan HTML ktsn grr. 170

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Programlar ile likisi

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

yeterli bir veritaban programdr. Geri network ortamnda oklu kullanm iin uygun deildir ama internet programlarnn ounun buna ihtiyac yoktur.

PHP Dilinin Geniletilebilirlii


PHP dilindeki fonksiyonlar gerekli geniletme ktphanelerinden aranr. rnein siz kodunuzda bir fonksiyon kullandnzda bunu ieren PHP ktphanesi, geniletme dosyalarnn tutulduu klasrde bulunamazsa hata mesaj verilir. PHP dili iin gelitirilen eklentiler PECL ad verilen "PHP Extension Code Library" kelimelerinden oluturulmu bir ktphanede datlmaktadr.

Baz PHP Ktphaneleri ve ilevleri


php_bz2.dll php_zip.dll php_curl.dll Bzip2 dosyalar ile alma. Sktrma ve ama ilemi Zip dosyalar ile alma sktrma ve ama ilemi Deiik tipte protokol kullanan istemci ve sunucular (ftp,http,https,gopher vs) ile balant kurabilmek iin Exif bilgileri ile alma (resim meta verileri)

php_exif.dll

175

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

php_fdf.dll php_gd2.dll php_gettext.dll php_gmp.dll php_imap.dll php_ldap.dll

Form Data Format eklentisi. PDF dosyalarnda formlarla alma Grafik oluturma ve izme Deiik dillerde yazlmlar iin alabilecek

IMAP protokol kurmak iin

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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_ming.dll php_openssl.dll php_snmp.dll php_soap.dll php_sockets.dll php_xmlrpc.dll

php_xsl.dll

php_dbase.dll php_interbase.dll

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

php_msql.dll php_mssql.dll php_mysql.dll php_mysqli.dll php_oci8.dll php_pgsql.dll php_sqlite.dll php_sybase_ct.dll php_pdo.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_firebird.dll php_pdo_mssql.dll php_pdo_mysql.dll php_pdo_oci.dll php_pdo_oci8.dll php_pdo_odbc.dll

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

php_pdo_pgsql.dll php_pdo_sqlite.dll

Postgres PDO balants Sqlite PDO balants

PEAR (PHP Extension and Application Repository)


PEAR aslnda eitli iler iin yazlm kodlarn bir araya getirilerek dier programclar tarafndanda kullanlmasn salayan hazr kodlar ktphanesidir. En ok bilinen PEAR paketi ise PEAR::DB paketidir. PEAR ile programlama konusu ok derin bir konu olup bu kitapta ounlukla PEAR barndrmayan kodlar kullanlacaktr. Bunun sebebi PEARn zor veya kt bir ey olmas deildir. Burada ilk ama PHP renmek olduu iin belirli bir aamaya gelinceye kadar klasik kodlama teknikleri ile devam edilecektir.

PHP - Web Sunucusu PHP Kurulumu


Web master asndan PHP sunucu tarafndan alan bir programdr. Dolays ile sunucu ile uyumlu olmaldr 5. srm itibariyle, PHP btn Unix-trevi sistemler (rnein Linux, Mac Os, BSD, Solaris) ve Microsoft Windows sistemleri ile uyumludur. Birlikte alabilecei Web sunucu programlar arasnda Apache, IIS, FHTTP, Omni HTTPd, Xitami ve Windows 95/98 iin PWS (Personal Web Server) vardr. Internet ortamnda ortamnda web sunuculara PHP ileme yeteneinin eklenmesi haliyle bizim sorunumuz deildir, (iimiz hosting ise o zaman baka tabii). Bizim iin Hosting firmasnn PHP destei verip vermediini bilmek yeter. Fakat almalarmzn doruluunu, 179

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Php renmek Zormu


Dilin reticilerinden Zeev Suraski, bu yln banda srail'de yaplan ilk uluslararas PHP Konferans'nda "PHP renmek zor mu?" diye soran bir bilgisayar meraklsna u cevab vermitir: "Bir haftadan fazla zaman ayrmanz gerekiyorsa, sizin iin zor demektir!"

lk PHP Programmz Merhaba Dnya


Dnyada neredeyse her programlama dili rnelirken ilk yazlan kod genelde ekrana merhaba dnya kelimelerinin yazdrlmasdr. <?php echo merhaba dnya; ?> Yukarda grdnz gibi kod olduka anlalr sadece ve notasyonu renilmeye msait.

PHP KOD YAZIM KURALLARI


PHP kodlar, oluturacamz HTML sayfalarnda HTML etiketlerinin arasnda kendi zel ayrac iinde yazlr: <html> <?PHP echo ("Merhaba Dnya!"); ?> </html> 182

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

print "Merhaba Dnya!"; ?> </H1> </B> </CENTER> </BODY> </HTML> Sayfamzn grntsnde hi bir deiiklik olmamakla birlikte, Browser'a giden HTML kodlar nemli lde deimi olacaktr.

Aklama (Yorum) Satrlar


Yazlan kodun zerinden zaman getike helede kod bloklar uzun olunca kodu bir anda kavramak ve anlamak zorlar. te bunun iin kod satrlarnn arasna aklama satrlar eklememiz gereklidir. NOT: En iyi yazlm kod en abuk anlalabilen ve dkumante edilmi koddur. PHP ayralar iinde iki trl yorum bulunabilir: oksatrl yorumlar ve tek satrl yorumlar. Birinci grubu, bana "/*" ve sonuna "*/ iaretleri koyarak, ikinci grubu ise sadece bana // veya # iareti koyarak belirtiriz: <HTML> <!- - Bu satr HTML'in yorum satr Buraya istediimiz kadar yorum yazabiliriz.. 187

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

</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 ile Ekrana kt Verme


echo() fonksiyonu-(Ekrana yazdrma)
PHP dilinde ekrana bir ey yazdrmann bir ok yntemi vardr. En ok kullanlan yntem echo fonksiyonudur. imdi belkide dnyann en ok yazlan kodu olan merhaba dnya uygulamasn PHP ile yazalm. ift trnak ile tek trnak kullanm arasnda fark vardr. Tek trnak yazlrsa ekrana yazlacak metin iinde deiken kullanlamaz. Daha dorusu deikenlerin deeri yerine ad ekrana yazdrlr. <?php echo merhaba dnya; 189

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

?> <?php echo merhaba dnya; echo merhaba dnya // bu rnek doru // bu rnek doru // bu rnek doru

echo merhaba dnya $adi;

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.

print() fonksiyonu (Ekrana Veri Yazma)


Print fonksiyonuda ekrana echo gibi kt vermek amacyla yazlm bir fonksiyondur. Genel kullanmda ayndr. <?php print merhaba dnya; ?>

190

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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;

Alfanmerik Deikenlerin eriine Dizi Olarak Erime


Alfanmerik deikenlerin PHPde zel bir kullanm ekli daha vardr. Bu notasyon Pascal ve C dilindede olan bir kullanm eklidir. Geri Pascalda 0. byte uzunluk ifade eder ama nemli olan kullanm mantdr. Bu yntemler bir alfanmerik deikenin ieriine harf harf erimek mmkndr. 196

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?php $str1 $str1{0} $str1{14} print ?>

"Kelam, = =

brahim?"; "S"; "!"; $str1;

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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 ?>

Dizi Tanmlama Kurallar


Diziler tanmlanrken ssl parantez deil, normal parantez kullanlr Herbir elemann konulur. deerlerinin sonunda virgl

Dizi ok boyutlu ise bunlar trnak iine alarak yazmak gerekir.

<?php $a[0] = "abc"; $a[1] = "def"; $a[1] $a[1][0] ?> = $f; = $f; # tek boyutlu tanmlama # iki boyutlu tanmlama

199

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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.

Sabit Deerler - Constants


ster Web, ister Web-d amal olsun, bir programn bazen bandan sonuna kadar ayn deeri tamas istenen bir deere ihtiyacnz olabilir. Tabi ki bu ilem iin bir deiken kullanmakta mkndr. Ama yanllkla deikene deer atarsanz lmcl hatalar yapabilrsiniz. rnein liste kodu yazdmz dnelim; matbu forma bask yaptracaz, form 20 satrlk ve yine 20 satrdan oluan bir sr baka formumuzda var. Programn iinde bir deiken tutup bu say 20 olunca yeni form taklmasn isteyebiliriz. Ama ilerde formlar 30 satr olursa tm o 20 saylarn bulup 30 yapmamz gerekir. Bu ilem iin $satirsayisi diye bir deiken kullanp, ieriini 20 olaak kullanmay dnrsek eer ilerde sadece bu saynn 30 yaplmas yetecektir. Bu daha aklc bir ilemdir. Ancak buradada bir sorun var. Ya bu deiiklii yanllkla kod iinde yaparsak ? Sonuta bu 201

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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:

define ("SABIT_ADI", deeri);


Burada SABIT_ADI yerine, tanmlamak istediimiz sabit deere vereceimiz isim, deeri yerine de sabitin tamasn istediimiz deeri yazarz. rnek: <?php $tutar = 125; define ( "KDV", 18); $TL_Tutar = $tutar+(($tutar * KDV)/100); print ($TL_Tutar); ?> Burada tanmladmz KDV sabit-deeri, tpk bir deiken gibi kullanlabilir. Ticari bir kod iinde bu KDV deeri yzlerce ilemde geebilir. Bunun deerinin elle kodlanmas yerine bu ekilde kullanlmas bizi hatalardan koruyacaktr. Diyelimki KDV 18 den 10 a dt. Yapmamz gereken sadece DEFINE satrndaki 18 202

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

__FILE__ : O anda almakta olan PHP dosyasnn ad 203

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

__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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?php print ("lim inde bile olsa; " . "..." . "arayp bulunuz..! ") ?>

Birleik Atama Operatrleri


Bu kodlama sistemi PHP diline C dilinde alnm kodlama tekniklerindendir. Normalde bir ok dilde rnein A deikeninin deerini 10 artr denildiinde A=A+10 eklinde kodlanr. phesiz bu kod PHP iindede geerlidir. Ancak istenirse aadaki tabloda grld gibi birleik-atama ilemide yaplabilir.

lem ci += -= /= *= %= .=

rnek $a += 25 $a -= 25 $a /=25 $a *= 25 $a %= 25 $a "metin"

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Bir Arttrmak veya Azaltmak iin


Deerleri sadece 1 arttrmak veya azaltmak iin PHP, bir kolaylk salar: $sayi++ veya ++$sayi: $sayinin deerini 1 arttrr; $sayi-eksiltir. ++ veya -- iaretinin deiken adndan nce veya sonra olmasna gre artrma yada eksiltme ileminin ncelii deiir. aretler deikenin adndan nce ise PHP nce deikenin deerini bir arttrr veya eksiltir, sonra bu yeni deeri ileme katar; iaretler deiken adndan sonra ise, PHP deikenin o andaki deerini ileme kadar, sonra deeri bir arttrr veya eksiltir. veya --$sayi: $sayinin deerini 1

Kontrol Bloklar ve Karlatrma Operatrleri


Kontrol bloklar programlama dilleri asndan olmazsa olmaz gelerdendir. nk bir programn koullara uygun olara deiik iler yapabilmesi iin kod yazlabilmesini salarlar. PHP dilinde kontrol bloklar oluturmak iin if ve switch kullanlr. Ancak if ve switch iin olmazsa olmazarn anda karlatrma operatrleri gelir. imdi bunlar grelim.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

$a != 25 Doru/True $a === Yanl/False 25 $a > 25 $a < 25 veya $a 25 veya $a 25 Douru/True Yanl/False

<= Yanl/False >= Doru/True

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Motor 70 (yanl/false)

Trafik

70

lkyardm

69

kalr

Motor 79 - Trafik 80 (doru/true)

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

Sadece sol Doru veya sa doru yanl 210

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

doru ! Deil sol veya yanl sa Doru yanl doru || =

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.

lem ncelii Sralamas


1. ! 211

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

else { print ("Kald!"); }

if-endif Kullanm ve PHP ile HTML Kodunu Ayrma


PHP dilinde if kullanmn baka bir ekilde if-endif eklindeki kullanmdr. Bu ekilde bir kullanmla kod bloklar bibirinden ayrlr. Bu zellikle grup almalarnda nemlidir. nk bir kii HTML kodu yazarken dier PHP zerinde alabilir. Aadaki rnei ifendif.php adyla kaydedelim ve kodu deneyelim. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>if endif Form deneme</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> <? $islem=$_POST[islem]; $ad=$_POST[ad]; $soyad=$_POST[soyad]; if ($islem == 1): ?> 215

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Tek Koula Gre ki Sonu - l Operatr (Ternary Operatr)


Bir deikenin deerini sadece tek bir koul iin kontrol etmek iin switch blokunu uzun uzadya kodlamak gerekmez. Bu ilemi soru ve iki nokta stste iaretleri (? ... :) olarak yazlan operatr ile yapabiliriz. rnein, sayfadaki ziyareti parolasn girdiyse bir ho geldin mesaj girmediyse bir uyar grntlemek istiyoruz. $ikaz = ($sifre == "" ) ? "Parolanz giriniz ltfen" : "Sayfamza hogeldiniz " ; echo ($ikaz); Burada ikaz deikeninin ierii sifre deikenine bal olarak atanacaktr. ifre bo ise ilk ksm, deilse teekkr mesaj atanacaktr. Zaten bu operatre Ternary denmesinin sebebi parametre birden almasdr. Koul, doru ise sonu, yanl ise sonu deerleri. <?php $yasstr 'yetikin; ?> = ($yas < 18) ? 'ocuk :

Dng Kavram
Dngler bir kod yada kod blokunun belirli artlara gre tekrar edilmesini salayan program paralardr. yle 220

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

For .. Each Dngs


Bir dizi yada kme deikeninin sahip olduu indisler boyunca dng kurulmasn salar. rnein ; <?php // for each dizi elemanlar boyunca tekrarlar aslnda dizideki sayy bulup for ilede bu ilemi yapabiliriz $adlar = array ( 1=>"Ali", 2=>"mer", 3=>"Mehmet", 4=>"ihsan", 5=>"Ahmet", 6=>"brahim"); foreach ($adlar as $deger) {echo $deger . "<br>";} ?> Burada dng dizinin elemanlarn srasyla ekrana yazacaktr. Eer isteseydik count() fonksiyonu ile dizinin eleman saysn bulup bu say kadar alacak for dngs de kurabilirdik <?php

225

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

// 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>";} ?>

Dngy Krmak iin Break Komutu


Bazen durumun gerektirdii zere dngnn almasn krmak gerekir. Bu durumlarda break komutu kullanlmaldr. Break komutunu daha nce switch blokundada incelemitik. Buradaki ilevi ise dngnn artk tekrarlanmadan krlmasdr. Dng krlnca, program dngnn bir sonraki satrndan devam eder. <?php for ($sayac = 1; $sayac <= 100 ; $sayac++ ) { // 1 den balayarak 7 olana dek artr print ("<font size= $sayac >"); print ("<b><p>Fenerbahe byyor!</b></p>"); 226 gittike

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Dngy Devam Ettirme : Continue


Baz durumlarda dngy krmak yerine bir sonraki duruma gemek gerekir. rnein yle bir problem dnn. Srayla notlar alacaz ve notlar 100 den bykse ilem yapmadan bir sonraki ileme geeceiz. <?php for ($sayi=1; $sayi <= ogrenci says; $sayi++ ) { if ( $puan >100 ) continue; // 100 den buyuk not olmaz. Bir sonraki notu soracak print ("$sayi,$puan"); 227

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

print ("<br>"); } ?>

Dng inde Dng Kullanm


Kodlamaya dikkat edilirse dngler birbiri iinde kullanlabilir. Dikkat edilmesi gereken konu gereksiz ilemlerin dng iine sokulmamasdr. Ayrca bu dngleri inde Break komutunun kullanmda biraz daha detayldr. Break burada kullanlrsa sadece en yakndaki gngy krar. 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"; } }

} 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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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; } }

} Ekran kts yle olacaktr: I:1,J:1,K:1 I:1,J:2,K:1 I:2,J:1,K:1 I:2,J:2,K:1

Dng ve Kontrol Bloklarnda PHP ve HTML ie Kullanm


PHP dili bizlere ekrana kt verme imkan tanmtr ancak bunu gereksiz yere kullanmak sadece balyozla sinek avlamaya benzer. rnei incelediimizde durum daha iyi anlalacaktr; <?php if ($a print "Devam print "Devam print "Devam ...[devam]... print "Devam print "Devam print "Devam == edip giden edip giden edip giden edip edip edip 229 giden giden giden $b) kod satrlar kod satrlar kod satrlar kod kod kod satrlar satrlar satrlar { "; "; "; "; "; ";

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

} ?> 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) {

Baka Bir Dosyay thal Etme


PHP dilinde kod ithalini salayan drt fonsiyon vardr. Bu fonksiyonlarla baka dosyalarda bulunan kodlar o an 230

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

alan dosyaya bakalm;

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';

Buda ikinci dosyann kodu: 231

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?php print ?>

'Kontrol

ikinci

dosyada

\n';

<?php print require print ?>

'Birinci 'Birinci

dosya dosya

foo\n'; 'iki.php'; bitti\n';

<?php print 'Birinci include_once print 'Birinci ?>

dosya dosya

foo\n'; 'iki.php'; bitti\n';

<?php print 'Birinci require_once print 'Birinci ?>

dosya dosya

foo\n'; 'iki.php'; bitti\n';

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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) {

include() ve trevlerindeki gvenlik a


include kullanrken dosya uzantlarna dikkat etmek gerekir. rnein include edilecek dosya adn adres satrndan parametre olarak geirdiimizi farzedelim. Dosya uzants da txt olarak verilmi olsun. Bu 233

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

include() ile Kodun Yeniden Kullanm


Mysql ile ilgili fonksionlar daha sonra grlecektir ancak bu arada sadece mantn anlalmas asnda bir rnek vermekte gerek var. Bir okul program dnelim. retmenler kaydedilir, listelenir, silinir. Keza renciler, dersler, okul bilgileri, notlar, devamszlklar iinde ayn ilemler yaplacaktr. Bu ilemler iin veritabanna eriip ilem yaplacak yzlerce ayr programck gereklidir. Bu kod paralarnn her birinde en az bir defa mecburen Mysqle balanmak, daha sonra veritabann semek iin gerekli kodlarda yazlmaldr. nclude olmadan tek are bu kodlar gerekli her yerde tek tek yazmaktr. include() kullanlr ise bu kod bir kere yazlr ve her yerde arlr. imdi unu diyebilirsiniz bu sonuta iletilen kod satrn drmez. Bu konuda haklsnz evet include sonuta kodu orda imi gibi alp ilgili yere ekler. Ancak dnk ifre deiti bu durumda ne olacak ? include kullanan kii sadece ilgili dosyay ap deitirecek ve tm deiiklii bitirecek, kodu here yere giren kii ise tm kodlar dolap deiiklikleri elle yapacak daha sonra acaba unutulan bir yer varm diye birde kontrol edecektir. Oysa include ile sadece bir yerde balant yeniden kuruluyor ise ilem bitmi demektir.

234

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Fonksiyon Kavram ve Kategorilere Gre PHP Fonksiyonlar


Fonksiyonlar bir kod blokunu otomatik olarak yazmak zere tasarlanm program paracklardr. Bir dilin fonksiyon saysnn fazla olmas yannda bunlarn iyi organize edilmi olmasda nemlidir. Programlama dillerinde normalde fonksiyonlar derleyici iine kodlanm olurdu. lk olarak PASCAL dili ile bir yenilik geldi. Dilin sadece sintaks yapsn tanmlayp fonksiyonlar harici ktphanelerden kullanmak. Bylece dillerin komut setlerini geniletme olana getirilmi oldu. rnein dilin kendisinde olmayan bir fonksiyonu kendiniz yazp bunu PHP nin iinde hep varm gibi kullanabiliriz. arlan bir fonksiyon ya kendisinden beklenen ii yapar, ya da kendisini aran ileme veya fonksiyona bir deer sunar. Buna fonksiyondan dnen deer denir. rnein bir dosyann var olup olmadn test eden bir fonksiyon yazdmz dnelim, dnen sonu TRUE ise dosyann zaten var olduunu gsterecek ekilde kodlayabiliriz. False ise dosya yok anlamna gelecektir. (iin asl bu fonksiyonu yazmamza gerek yoktur nk PHP dilinde bu ii yapan hazr bir fonksiyon zaten vardr). Fonksiyonlar eitli balklarda ele alacaz.

Deikenlerle ilem yapan fonksiyonlar Program kodunu durduruma fonksiyonlar Tarih Zaman bilgisiyle ilem yapan fonksiyonlar Matematiksel fonksiyonlar 236

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Metin leme fonksiyonlar Veri ifreleme fonksiyonlar Dzenli fade (Regular expressions) fonksiyonlar Uzant ynetimi Kendi fonksiyonlarmz yazmak Kendisini aran, fonksiyonlar deiken, ve geri arml

Deikenlerle lem Yapan Fonksiyonlar


PHP dilinde deikenler istenildii anda tanmlanabilmektedir. te yanda PHP dilinin byk kk harf ayrm yapmasada deiken tanmlanrken dikkatli olunmasn gerektirir. Yine ayn ekilde eer ok byk dizilerle alyorsak bu dizilerin ii bitince hafzadan atlmas gerekir ki web sunucu hafza bo yere dolup hz dmesin.

isset() fonksiyonu (deikene deer atanm m kontrol etmek)


isset() fonksiyonu, PHP'nin bir deikenin iinde deer bulunup bulunmadn kontrol etmesini salar. Eer geri dnen deer true ise bu deikene bir deer atanm demektir. <?php if (isset($sayi)) { print( $sayi ); } 237

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

else { print (sayi degiskeni bir deer iermiyor); } ?>

unset() fonksiyonu (deikeni hafzadan atmak-yok etmek)


unset() fonksiyonu varolan bir deikeni yok eder. Bylece bu deikenin kulland alan bo hafza miktarna eklenir. yi bir programlamada unset() ile deikenler yok edilmelidir. nk bu web sunucuya byk rahatlk getirecektir. <?php if (isset($sayi)) { echo ( $sayi ); } else { unset($sayi); } ?>

empty() (Deiken bomu)


Bu fonksiyon isset() fonksiyonunun tersidir. Aadaki artlar oluursa true deer dnderir aksi tatirde ise false sonu retmektedir.

Bir deikene henz deer atanmamsa 238

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Deeri sfr ise Deiken yani bo alfanmerik (null string) ise

empty() fonksiyonu true sonu retmektedir. <? $sayi = 10; echo empty($sayi); $isim = ""; echo empty($isim); ?> // 0 azacak say bo deil 10 // 1 yazacak isim bo

is_string(), is_integer(), is_double() fonksiyonlar ile tip tespiti


Parametreleri olan deikenin tipine gre true yada false sonu dnderirler. is_string string tipi, is_integer() tamsaylar ve is_double fonksiyonuda ondalkl saylar iin true deer retir.
<?php

$a = 3.14; //$a = Ali; //$a = 14; // buras imdilik yorum satr // buras imdilik yorum satr

if (is_double($a)) { print ("A ondalkl saydr<br>"); } 239

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?php $abc=456; print_r($abc); ?> Bu fonksiyon rneklenecektir. diziler konusunda daha detayl

Deiken Tiplerini Dntrme ve Deiken Tipini renme


PHP dili ile bir deikenin deerini referans alarak baka tipte yeni bir deiken tanmlamak mmkndr. Bir deikenin dorudan doruya kendisinin tipini deitirme ilemi ise settype fonksiyonu yaplr. Settype sonraki konularda incelenecektir. Aadaki kod ile type-casting ilemi yaplarak yeni bir deiken tanmlanmtr. <?php $ad = $sayi = (integer)$ad; echo ?> nce bir string deiken tanmlanm daha sonra ise bu deiken referans alnarak sayi adnda tamsay bir deiken dnm yaplmtr. Burada dnm ifadeleri olarak

"brahim"; $sayi;

Deikenin tipinin mantksal olmas iin BOOL Deikenin tipinin alfanmerik olmas iin STRING 241

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

gettype() fonksiyonu (Deiken tipini alma)


Bir deikenin deerinin tr hakknda bilgi almak iin bu fonksiyon kullanlabilir. <?php $sayi1 = 101; print("Birinci deikenin ad: \$sayi1<br>"); print("Deeri : "); print("Tr : "); //tamsayi/integer print "$sayi1<br>"; print gettype( $sayi1 ) ;

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 ) ;

print "<br>"; print "<br>";

settype() fonksiyonu (deiekene bir tip atama)


Bu fonksiyon bir deikenin kendisinin tipini deitirmeye imkan verir. Ancak dnm ilemi istemeyen sonularda retebilir. Bu bakmdan deikenlerin deerlerine dikkat etmek gerekir. 243

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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.

print gettype( $pi )

//alfanmerik/string print "$pi<br>";

print "<br>"; print "<br>";

Ondalk saylar tamsayya evrilirken ondalk ksm atlr (3.14 >3) 244

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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. ?>

Dizilerle lem Yapan Fonksiyonlar


Php dilinde dizilerle ilem yapmak zere gelitirilmi bir ok fonksion hazr gelmektedir. Bu fonksiyonlarla dizileri birletirmek, sralamak veya baz elemanlarn silmek mmkndr. 245

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<? $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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

?> 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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$dizi2=array(a1=>"Ali", ,a4=>"Betl"); ksort ($dizi2); ?>

a2=>"Aye"

a3=>"Bra"

Program Durdurma Fonksiyonlar


exit() fonksiyonu (kodun almasn durdurmak)
Bir PHP fonksiyonunu istediimiz anda durdurabiliriz. Ancak genelde bu ilem belirli koullarn salanmas durumunda yaplr. Kodun bir kontroln sonucuna gre kendisinden beklenen ii yapamamas halinde orackta durdurulmasn exit() fonksiyonu salar. Bu fonksiyona ekranda grntlenmesini istediimiz bir metni parametre olarak verebiliriz. Eer bu ifade bir metinse ekrana baslr.

die() fonksiyonu (kodun almasn durdurmak)


Bu fonksiyon teknik anlamda exit fonksiyonu iin bir alias olduundan ilevleri ayndr. "l!" anlamna gelen bu fonksiyona ekranda grntlenmesini istediimiz bir metni parametre olarak verebiliriz. Eer bu ifade bir metinse ekrana baslr.

eval() fonksiyonu (kodun almasn durdurmak)


Bu fonksiyonda ilk ikisine benzer. Ancak ald parametre PHP kodu ise bu php kodunu altrr.

249

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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!") ; ?

Tarih ve Zamanla lem Yapma


PHP dili tarih zaman bilgilerini Unix EPOCH formatnda kullanr. Bu formata gre 1.1.1970 den beri geen her saniye iin bir rakamsal karlk vardr. Buna Unix Timestampte denilir. Bunun avantajlar ve dezavantajlar vardr.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

time() fonksiyonu (u anki zaman bilgisini alma)


Time fonksiyonu parametre almaz ve epoch formatnda u anki zaman bilgisini saniye olarak verir. Bu bilgiyi ister olduu gibi ekrana basabiliriz, istersek bir deikene alp ilemlere tabi tutabiliriz. <?php print $zaman print ?> time(); time(); $zaman;

Yukardaki kodu altnda ekrana 11843764951184376495 gibi bir say basacaktr. Bu say alt bilgisayarn zamanna gre deiecektir.

microtime() fonksiyonu (u anki zaman bilgisini hassas birimle alma)


Microtime Time fonksiyonu true parametresi alrsa zaman bilgisini milisaniye cinsinden verir. Bu fonksiyonun dn deerinin ondalkl say olduuna dikkat edilmelidir. Bu bilgiyi ister olduu gibi ekrana 251

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

basabiliriz, istersek bir deikene alp ilemlere tabi tutabiliriz. <?php print microtime(true); ?>

strtotime() fonksiyonu (Metni zaman bilgisine evirme)


Strtotime fonksiyonu parametre olarak verilen metni zaman bilgisine evirir rneklerde ngilizce kullandld nk PHP ayarlarnn Trke destekleyip desteklemedii konusunda bilgimiz olmadn varsayyorum. lerde bununla ba etmeyide greceiz. <?php print .<br>; print .<br>; print ?> strtotime("12th strtotime("01 January 2007 1979") 17:30") .<br>;

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Swatch internet zaman

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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.

mktime() fonksiyonu (saylardan tarihi oluturma)


mktime ( [saat [, dakika [, saniye [,ay [, gn [, yl [, yazsaati]]]]]]]) formatnda kullanlan bu fonksiyon kendisine verilen parametrelerden tarih zaman bilgisini oluturur. <?php $zamanpulu = mktime(22, 30, 0, 6, 20, 2007, -1); ?> rnein bir banka iin kod yazdmz varsayalm. Mteri 3 ay vadeli bir hesap atrmay talep ederse 90 gn sonrasnn tarihini bulmak gerekecektir. Bunu elle saymak yerine Mktime ile kendimiz hesaplayabiliriz. 256

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?php mktime(0,0,0,date("m"),date("d")+90, date("Y")) ; ?>

checkdate() fonksiyonu-Tarih geerli mi


PHP dili, devrik yllar fark etmek ve yanl tarihleri dzeltmek iin otomatik denetleme mekanizmasna sahiptir. checkdate() fonksiyonu, bilginin geerli bir tarih olup olmadn, girilen ay, gn ve yl cinsinden denetler. if (checkdate (2, 29, 2008) >0) { echo ("Tarih geerli"); } else { echo ("Tarih GEERSZ"); } programc 2-29-2008 tarihinin doruluunu kontrol eder.

setlocale() fonksiyonu (blgesel ayarlar)


PHP sunucuda gerekli blgesel ayarlar yaplm ise sunucunun deil arzu ettiimiz blgenin tarih zaman bilgisini verebilir. 257

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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.

Tarih Bilgilerini Trke Yazdrmak


<? $gun[0] = "Pazar"; $gun[1] = "Pazartesi"; $gun[2] = "Sal"; $gun[3] = "aramba"; $gun[4] = "Perembe"; $gun[5] = "Cuma"; $gun[6] = "Cumartesi"; $ay[1] = "Ocak"; $ay[2] = "ubat"; $ay[3] = "Mart"; $ay[4] = "Nisan"; $ay[5] = "Mays"; $ay[6] = "Haziran"; $ay[7] = "Temmuz"; $ay[8] = "Austos"; $ay[9] == "Eyll"; $ay[10] = "Ekim"; $ay[11] = "Kasm"; echo date("m")." ".$ay[date("n")]." " 258 //tarihyaz.php

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

.date("Y")."<br>".$gun[date("w")]; ?>

getdate() fonksiyonu (tarih zaman bilgisini alma)


PHP dilinde zaman ve tarih belirleme ileminde en ok getdate() fonksiyonu kullanlr. getdate() fonksiyonu tarih ve saat bilgisini alr ve belirteceiniz bir isimdeki dizi-deikende saklar. Dizi deikeninde srasyla u bilgiler yer alr: 10 45 5 10 1 1 2007 10 Wednesday January 1183046641 zaman bilgisi Unix saniye dakika saat ayn gn says (1-31) haftann gn says (1-7) ayn says (1-12) yl yln kanc gn gnn ad ayn ad sistemlerinde Epoch biiminde

$simdi = getdate()

259

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Matematiksel lemlerde Kullanlan Fonksiyonlar Ve levleri ceil() fonksiyonu (yukar yuvarlama)


Parametre olarak verilen sayy en yakn tamsayya yuvarlar.

floor() fonksiyonu (aa yuvarlama)


Parametre olarak verilen sayy en yakn ve kendisinden kk tamsayya yuvarlar. Bu ilem aslnda type-casting ile ayndr ancak type casting daha hzldr. Ksaca ceil() saynn ondalk ksmn atar.

round () fonksiyonu (matematiksel yuvarlama)


round() fonksiyonu verilen parametredeki deikeni matematiksel kurallara gre yuvarlar. Saynn ondalk ksm 5 veya st ise yukar, 0 ile 5 arasnda ise aa yuvarlama yaplr. round() iki parametre alr. Birinci parametre ilem yaplacak deiken, ikincisi ise yuvarlanacak ondalk hane saysn gsterir. rnek kod; <?php $deger = $ceille = ceil($deger); $floorla = floor($deger); //4 $a $b $c $d $e = round(4.9); = round(4.5); = round(4.4999); round(4.123456, 3); round(4.12345, 4); 260 4.8; //5 // 5 // 5 // 4 // 4.123 // 4.1235

= =

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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.

rand() fonksiyonu (rastgele say retme)


Bu fonksiyon verilen iki paremetre arasnda rastgele bir say retir.

mt_rand() fonksiyonu (rastgele say retme)


Bu fonksiyonda verilen iki paremetre arasnda rastgele bir say retir. Aralarndaki fark ise rand gerekten teme l anlamda kodlanm bir fonksiyondur ve rettii deerler tahmine daha yakndr. mt_rand() ise Mersenne twister kelimelerinden gelir ve zel bir randomize algoritmas kullanldn belirtir. Buradaki retilen say rand fonksiyonuna gre daha rastgele tabiri caizse daha 261

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

kuvvetli sallanm bir saydr. Tabii bu fonksiyon hz olarak biraz daha dk ilem yapmaktadr. <?php $rastgele $randsiniri $mtrandsiniri ?>

= = =

rand(); rand(1,10); mt_rand(1,100);

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;

srand() ve mt_srand() fonksiyonlar (ilk sayy vererek rastgele say retmek)


Bu fonksiyonlar verilen parametreye gre ilk sayy retirler, bu saydan ikinciyi, ikincidende ncy retirler. Ksaca aslnda ayn referanslar verilecek olursa elde edilecek sonuta ayn olacaktr. Tabii buna ne kadar rastgele ilem denir o da ayr bir konu.

262

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?php mt_srand(123456); echo mt_rand(1, echo mt_rand(1, echo mt_rand(1, ?>

100), 100), 100),

"\n"; "\n"; "\n";

getrandmax() ve mt_getrandmax() fonksiyonlar (retilebilecek en yksek say)


Bu iki fonksiyon ile rand ve mt_rand fonksiyonlarndan geriye dnebilecek ne yksek say bulunur.

abs() fonksiyonu (mutlak deer)


Verilen saynn mutlak deerini dnderir. Mutlak deer saynn sfra uzakldr. rnein mutlak -50 deeri mutlak 40dan byktr nk sfr deerinden daha uzaktadr.

sqrt() fonksiyonu (karekk alma)


Bir saynn karekk deerini verir. Bu fonksiyon olduka yava altndan dng iinde vs kullanrken dikkatli olunmaldr.

pow() fonksiyonu (s alma)


Bu fonksiyon iki parametre alr. Birincisi hesaplanacak deer, ikincisi ise s saysdr. Pow(10,2) demek 10 un 2. ssn hesapla demektir.

263

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

hypot() fonksiyonu (hipotens hesaplama)


Bu fonsiyon iki parametre alr ve bu iki saynn kareleri toplamnn karekkn alr. Matematikteki Pisagor teoreminin zmdr. <?php abs(50); abs(-12); abs(50.1); abs(-12.5);

//50 //12 //50.1 // 12.5 // 5 5.0990195135928 // 100 // 1000 // 10000

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 ?>

log() fonksiyonu (logaritma)


e tabanna gre logaritma alr.

log10() fonksiyonu (logaritma)


10 tabanna gre logaritma alr.

base_convert() fonksyionu (saynn tabann deitirme)


Bir sayy istenilen say tabanndan tabanna evirmek iin kullanlr. 264 istenilen say

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$say=base_convert(AA,16,8);// saysn 8lik sayya evirir

16lk

AA

bindec() fonksiyonu (desimal dzene evirme)


Binary (2 lik dzen) dzendeki bir sayy decimal (10 luk dzen) dzene evirir. $sayi=bindec(101010);

decbin() fonksiyonu (Onluk dzenden ikilik dzene evirme)


10luk sistemdeki bir sayy 2lik sayya evirir $sayi=decbin(25);

dechex() fonksiyonu (16 lk dzene evirme)


2lik sayy 16lk sayya evirir $sayi=dechex(101011);

decoct() fonksiyonu (8 lik dzene evirme)


2lik sayy 8lik sayya evirir $sayi=decoct(1010);

hexdec() fonksiyonu (Hex dzeninden ikilik dzene evirme)


16lk sayy 2lie evirir $sayi=hexdec(ff00);

265

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

octdec() fonksiyonu (8lik dzenden 2lik dzene evirme)


8lik saynn 2lik karln verir. echo octdec(45453);

max() fonksiyonu (en byk deeri bulma)


Belirtilen deerlerden en byn bulur. echo max(25,8);//25

min() fonksiyonu (en kk deeri bulma)


Belirtilen deerlerden en kn bulur. echo min (25,8);//8

Trigonometrik fonksiyonlar
sin() fonksiyonu (sins)
Sins deerini dnderir.

cos() fonksiyonu (kosins)


Kosins deerini dnderir.

tan() fonksiyonu (tanjant)


Tanjant deerini dnderir.

asin() fonksiyonu (arcsins)


ArcSins deerini dnderir. 266

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

cos() fonksiyonu (arckosins)


Kosins deerini dnderir.

atan() fonksiyonu (arctanjant)


Arctanjant deerini dnderir. Yukardaki ilk fonsiyon verilen parametrenin radian deerlerini hesaplar kalan dier ise bu radyan deerini parametre olarak alp deeri hesaplarlar. Radyan deeri saynn PI says (3.14) ile arpmnn 180e blmdr.

deg2rad() fonksiyonu (ay radyana dntrme)


Verilen deerin radyann hesaplar.

rad2deg() fonksiyonu (ay radyana dntrme)


Verilen radyan deerini retecek ay elde etmeyi salar. <?php $sinus1 = sin(10); $sinus2 = sin(deg2rad(80)); $cosinus1 = cos(89); $cosinus2 = cos(deg2rad(9)); $sinus1 $asinus1 ?> = = sin(deg2rad(80)); rad2deg(asin($sin1));

267

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Metin leme Fonksiyonlar


Programlama dillerinin en nemli paralarndan biride metinler zerinde ilem yapan fonksiyonlardr. PHP dili bu konuda olduka geni bir ktphaneye sahiptir. imdi baz fonksiyonlar srayla grelim.

substr() fonksiyonu (Metnin bir parasn alma)


substr verilen parametrelere gre metni istenen karakterden itibaren, istenen sayda karakterden oluan bir parasn sonu olarak verir. En az iki parametre gerekir. Ancak en genel kullanm parametreli halidir. Substr(deikenad, alnacak) balang, ka karakter

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$e = substr($string, -5, 4); luay $f = substr($string, -5, -4); l ?>

// //

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

chr() fonksiyonu (ASCII kodun karakter karl)


ASCII kod dzeneinde harfler ve rakamlar birer kod ile numaralandrlmtr. rnein A 65, a 97 koduna sahiptir. Chr fonksiyonu bir saynn ASCII karln verir. rnein chr(65) bize A harfini verecektir.

ord() fonksiyonu (Karakterin ASCII kodunu bulma)


bir nceki chr () fonksiyonun tam tersine ise ord() fonksiyonu bir karakterin ASCII kod numarasn verir. rnein ord(A) bize 65 deerini verecektir.

strlen() fonksiyonu (Metnin uzunluunu bulma)


strlen() fonksiyonu tek parametre alr bu bu parametrde verilen deikenin karakter saysn dndrr. Bu fonksiyondan dnen deer tam say olduundanr; aritmetik ilemlerde kullanlabilir. rnein, ziyaretinin bir form alanna yazd yaznn uzunluunun bizim istediimiz snra uygun olup olmadn test edebiliriz: 270

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?php print strlen("ali") . "\n"; // 3 if (strlen($adi) > 25 { // girilen deer 25 karakterden uzun ise echo ("sim en fazla 25 harf olabilir!); } ?>

count_chars() fonksiyonu (Metin iinde karakterlerin tekrar etme saysn bulma)


count_chars() fonksiyonu metin iindeki karakterlerin kaar defa tekrar edildiklerini verir. kinci parametresi verilirse parametre 1 ise kelimeleri bir dizinin elemanlar olarak, parametre 2 ise kelimeleri ve bu kelimelerin metin iindeki balang pozisyonlarn bir dizi halinde verir.

str_word_count() fonksiyonu (Metin iindeki kelime saysn bulma)


str_word_count() fonksiyonu metin iindeki tekil kelime saysn bulur. kinci parametresi verilirse parametre 1 ise tekrar says 0 dan bykler, parametre 2 ise tekrar says 0 olanlar listelenir. <?php $st = "brahim Halil Kutluay PHP ve HTML Programlama."; $a = count_chars($st, 1); $b = str_word_count($st, 1); $c = str_word_count($st, 2); 271

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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";

strpos() ve stripos() fonksiyonlar (Metnin bulunduu pozisyon)


Bu fonksiyonlarla bir metin iinde bir ifadenin olup olmadn, varsa da hangi pozisyondan itibaren baladn bulabiliriz. Strpos() ve stripos() arasndaki fark ise stripos() fonksiyoun nyk kk harf ayrm yapmamasdr. Bu fonksiyonlar 0 indexlidir. Yani sonu 7 272

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

ise aranan demektir.

metin

aslnda

8.

karakterden

balyor

<?php $str = "brahim Halil kullanm"; print strpos($string, ?>

Kutluay "a") .

strpos() "\n";

Bu rnekte dnen say 3 olmasna ramen grld gibi A karakteri aslnda 4. karaterdir.

strstr () ve stristr () fonksiyonlar (Metnin ilk bulunduu yer)


Bu fonksiyonlarla bir metin iinde bir ifadenin ilk bulunduu yerden itibaren metnin sonuna kadar olan tm ksmn alabiliriz. Stristr() ise kontrol ilemini byk kk harf ayrmadan yapar <?php $str = "http://www.ibrahimkutluay.net/phpdersleri.php"; $yeni = strstr($str, "www"); // www.ibrahimkutluay.net/phpdersleri.php ?> trim(), rtrim(), ltrim() fonksiyonlar (Metinden belli bir karakteri kartma) Normal artlar atnda bu fonksiyonlar metin iindeki white-space dediimiz boluk, sekme (tab) ve yeni satr karakterlerini karr. Ancak ikinci parametresi verilirse bu parametre iindeki karakterleri metinden atar. Bu 273

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 ?>

// // //

wordwrap() fonksiyonu (Metni satrlara ayrma)


HTML kendisi zaten satrlar otomatik olarak ekranda yer kalmaynca aa kaydrmaktadr. Ancak baz durumlarda bu ilemi kendimiz yapmak isteyebiliriz. rnei 90 karakterlik bir adres bilgisini satra blmek isteyebiliriz wordwrap() fonksiyonu bu ii yapar. Hibir parametre verilmez ise metni 75 er karakterlik satrlara bler. Ama ikinci 3. parametreler ile hem satrdaki karakter saysn hemde satr sonu karakterini belirtmek mmkndr. $text = wordwrap($text, 20, "<BR />");

explode() fonksiyonu (Metni blmlere ayrma)


explode fonksiyonu bir metni verilen bir karaktere gre blmlere ayrr.

274

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

implode()fonksiyonu (Metni blmlere ayrma)


implode fonksiyonu ise explode ile blmlere ayrlan metni gene eski haline getirir. <?php $str1=PHP, kolay, bir dildir!; $bolunmus=explode(,,$str1);//virgller alnarak metin paralara ayrlr. $str1=implode(,,$bolunmus); //her blmn arasna virgl metin eski haline getirilir ?> gelecek ekilde esas

strtoupper() fonksiyonu (byk harfe evirme)


Verilen parametredeki metni tamamen byk harfe evirir. Ancak bu fonksiyon Trke karakterleri tanmaz. rnein Ali->ALI, al ->AL, alama-> ALAMA olarak geri dner.

strtolower () fonksiyonu (kk harfe evirme)


Verilen parametredeki metni tamamen kk harfe evirir. Ancak bu fonksiyon Trke karakterleri tanmaz.

ucfirst () fonksiyonu (ilk harfi byk harfe evirme)


Verilen parametredeki metni ilk harfini byk harfe evirir. Ancak bu fonksiyon Trke karakterleri tanmaz.

275

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

ucwords () fonksiyonu (kelimelerin ilk harfini byk harfe evirme)


Verilen parametredeki metni tm kelimelerindeki ilk harfleri byk harf yapar. Ancak bu fonksiyon Trke karakterleri tanmaz. <?php $str $a $b $c $d $e ?>

"ibrahim halil kutluay"; = strtoupper($str); = strtolower($str); = ucfirst($str); = ucwords($str); ucwords(strtolower($str));

number_format() fonksiyonu (Rakamlar ekrana biimlendirerek yazdrmak)


Ekrana rakam yazdrma nemli bir konudur. rnein bir maa listesi yazdrrken altalta gelmemi ksuratlar farkl saylarda rakamlar kullanlrsa kodun ve yazlmn kalitesinden phe edilir. O yzden zellikle ondalkl saylar ekrana yazdrlrken, en uygun ey ondalk hane saysnn fu fonksiyonla snrlandrlmasdr. Ayrca uzun saylarnda er basamak halinde blnerek yazdrlmasda okunurluunu artrr. number_format parametresiz kullanlr ise sayy erli basamaklar ve ondalk haneyi aa ada yukar yuvarlayarak keser. Aadaki ilk rekte bu grnmektedir. kinci paramtre olan ondalk hane says verilirse saynn ondalk hanesine buna uygun hade yuvarlar. 276

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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

echo $a . "<br>" . $b . "<br>" . $c . "<br>" . $d . "<br>" ; ?>

strcmp () fonksiyonu (iki metni karlatrma)


Bu fonksiyon ile iki metni karlatrma ilemine tabi tutmak mmkndr. Aadaki rnekte fonksiyonun ama mant grlebilir. Birinci metin ikinciden ASCII olarak nce geliyorsa -1, iki metin ayn ise 0 ve ilk metin ASCII olarak byk ise 1 deerini geri dnderir. <?php $str1 $str2 $sonuc

= = strcmp($str1,

"ali"; "veli"; $str2);

switch ($sonuc) { case -1: print "ali veliden ncedir "; 277

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 ";

strcasecmp () fonksiyonu (iki metni karlatrma)


Kullanm strcmp ile ayndr ancak byk kk harf ayrm konusunda ayrlrlar.

str_pad () fonksiyonu (metnin etrafn bolukla (yada karakterle) destekleme)


str_pad metin ilerken yararl bir fonksiyondur. En az iki parametre ile alr. lk ikisi zorunlu dierler seimliktir. str_pad ( metin, destek uzunluu [, destek metni [, destek tipi]]) 278

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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');

$str2 = str_pad($str, // "ccccccccccMerhaba!cccccccccc"

$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!----------" ?>

printf() ve sprintf() fonksiyonu (biimlendirerek kt verme)


Bu fonksiyonlar C++ dnyasndan trasfer edilen zelliklerdendir. Normalde ok sk kullanlr zellikler olmasalarda, ok sk biimlendirme yaplan durumlarda daha ksa kod rettikleri iin tercih edilebilirler.

279

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Yzde iareti. Yannda biim parametresi gerekmez.

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");

$sayi2= 123.456; $bicimli= number_format($sayi2, 2) . "\n"; 281

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

print echo "<br>";

"Biimli sayi

say

$bicimli\n"; $sayi2);

printf("Biimli echo "<br>"; ?> 1. printf deiken baarldr.

%.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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

?> 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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 />"; } ?>

Veri ifreleme Fonksiyonlar


cyript() fonksiyonu ifreleme) (Metni verilen bir anahtara gre cyript parametre oan metinleri, ifreli kodlar haline evirir. <? $user=ibrahim; echo cyript($user,deneme); ifrelenir ve deneme anahtar alnr ?> 284 bu //$user ileme esas verilen anahtara gre

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

sha1() fonksiyonu (Metni hash algoritmas ile ifreleme)


sha1() fonksiyonu Secure HASH Algorithm kelmelerinden gelmektedir. HASH algoritmas tek ynl bir ifreleme algoritmasdr. Metni HASHleyerek 40 bytelk bir deer verir. sha1 verilen her parametre iin 40 byte uzunluundan bir deer geri dnderecektir. Verdiiniz parametre 3 harfte olsa, 1000 harfte olsa dnen sonu gene 40 byte olacaktr. Bylece gvenli ifreleme yapar. imdi denilebilir ki madem sha1 tek ynldr ve sha1 ile ifrelen metnin orjinalini yeniden elde etmenin bir yolu yoktur;o halde bu sha1 ne ie yarar ki ? Burada ok derine girmeye gerek yok ama yle dnelim. Kullanc ifreleri mevcut ve bunlar kod iinde parola = benim parolam gibi kodlanm durumda. Bu durumda koda erien herkes parolay grecektir. Parola veritabannda olsa bile yetkisi olan kullanclarn eriim ans vardr. rnein admin kullanc sistem baznda ki herkesin Genel Mdrn bile parolasn grebilmektedir. imdi parolalar akta tutmamak iin sha1 fonksiyonu bize ne gibi bir imkan verir ona bakalm. ifre bilgisi parola olduu takdirde sha1 bunu kendi algoristmas ile ifreleyecek bir sonu elde edecektir. Bu tamamen garbage yani p tabir edilebilecek hibir ie yaramayacak anlamsz bir bilgidir. Ayn HASH sonucunu retmenin tek yoluda ayn parolay girebilmektedir. te mkemmel koruma ; Adminler parola bilgisinin orjinalini PHP ile bile elde edemeyecekler Ancak kullanc parola ile eriim salayabilecek 285

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

md5() fonksiyonu (Metni MD5 algoritmas ile ifrelem)


md5() fonksiyonu Message Digest kelimelerinin ksaltlmasndan oluturulmutur. Buda sha1 gibi tek ynl bir algoritmadr. Farklar ise sha1 40 byte deer dndermesine karn md5 32 byte uzunlukta bir deer geri dnderir. Sonuta sha1 daha uzun olduundan ayn sonucu elde etmeye yarayacak metni bulmak ok dk bir ihtimaldir ve denilebilrki sha1 daha gvenlidir. Ancak md5 buna karn hz gibi bir avantaj sunar. Bu daha az gvenli olmak farazi bir kelimedir. Hesap yapalm ve 286

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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;

Dzenli fadeler (REGEXPS)


Metin ileme fonksiyonlarn ksaca ilemi olduk. Peki daha fazla kontrol ve g istersek ne olacak. Bu durumda devreye Regexps girecektir. Regular expression denen olay anlatmak iin eski gnlerden bir nek vermek yeterli olacaktr. Eski DOS zamanlarn hatrlayanlar olabilir. Joker karakterler vardr. rnein del a.pdf dosyas sadece bu komutu silerken del *.pdf dosyas tm PDF uzantl dosyalar silerdi. Regexp ite bu mantn programcla yansmasdr. rnein kullancdan bir mail adresi alndnda zararl karakterlerin temizlenmesini istenebilir. Bu durumda bu karakterler tek tek temizlenirse belkide 9-10 satr karakter silme kodu olacaktr. Oysa Regexp ile ayn ilemi yapmak tek satrlk bir itir. Regexpler genelde amala kullanlrlar

Bul deitir ilemleri 287

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Temel Seviye Regexpler


Regexp /ali/ ali/ gereklidir Metin ali ali eit hatal eit eit ifade deil. nk / ile balamas kk kk harf harf Sonu

/ali/ ALI ayrm var /ali/i ALI ayrm iptal edilmi

Byk byk

288

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Balang Dzeyi Regexpler


Regexpler [] iinde tanml kme kullanmdana izin verirler. Buradan itibaren Regexp konusu dallanp budaklanmaya balayacaktr. rnein [Aa] eklinde bir set tanmlayabilir ve bununla "A" veya "a harflerinin ayn kabul edilmesini salayabilrsiniz. Ayn ekilde abul edilebilir karakter setleri oluturmanzda mmkndr. [A-Z] tm byk harflerin, [A-Za-z] tm kk harflerin kullanmn salar. [a-z0-9] ise tm kk harfler ve rakamlarn kabul edilebilir olmasn salar. Bu tanmlarn inde kullanlacak ^ karakteri (karet) kontrol bloklarndaki ! iareti gibi tersi anlamna gelir. Yani [^A-Z] seti byk harf olmayan her eyi kabul ederken [^A-Za-z0-9] seti sadece sembolleri kabul eder yani byk harfler, kk harfler ve rakamlar kabul edilmez. Regexp /[Aa]bc/ String Abc Eit Sonu

/[^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]/ Abc99 kk harf sorunu var 289

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

/[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

st Dzey Regexp fadeleri


Regexp ifadeleri iinde +, *, ?, { }, $, ve ^ karakterler i zel bir anlam ifade etmek zere kullanlrlar. lk drt karakter eitlik saysn etkilerken, son ikisi poziyonu etkiler.

? 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

Bu ksa-yollar kullanm rneklerine bakalm: 290

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

^[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

/[A-Z]{3}/i AbC ile ayn ama /i den dolay eit

/[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,5}99/ PAPATYA99 en ok ilk 5 karakter byk harf olabilir

/[A-Z]{1,7}[0-9]{2}/i papatya99 Eit ilk 7 harf byk harf olmal ancak /i ile byk harf art geersiz

291

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

En st Seviye (Guru ) Dzeyi Regexp fadeleri


Tm bu ifadelerin en sonunda yer alan zel karakterler ok st dzey regexp ifadeleri yazlabilir. . \n hari her ey kabul edilir. k.t = kot kat ancak <> kart ^.5$ deyimi yeni satrla balamayan ve 5 ile biten herhangi iki karakterli deeri bulacaktr. \s \S Boluk karakterini bulur Nmerik alfanmerik her eyi kabul eder. Yatay ve dey sekme, kat-kart, yeni satr, satrba ve boluk dndaki herhangi bir karakteri bulur. b kelime ba ve sonu iin ilem yapar. /at\b/ = yat kat ancak <> katarakt. B kelime iinde geen ifadeler (bata ve snda olmayan) iin ilem yapar. nceki rnekten hareketle /at\B/ = katarakt veya yatarak ancak <> yat kat Geri (Backspace) karakterini bulur. X yerine yazacamz kontrol karakterini bulur. rnein, \cA, Ctrl+A'y, \cZ ise Ctrl+Z'yi bulur. 0'dan 9'ya kadar bir rakam bulur: IE\d, her 292

\b \B

[\b] \cX

\d

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

[[:lower:]] [[:punc:]] [[:xdigit:]] |

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() fonksiyonu (metinler eitmi)


Bu fonksiyon ile iki metin eitmi kontrol edilir. Bir desen ve karlatrma metnini parametre olarak alr <?php if } if } if } ?> Yukardaki rnekte 1 ve 3 eitlii salarken 2 byk kk harf ayrmndan dolay eitlii salamaz. Bunlar temel dzeydi imdi balang dzeyine giri yapalm. 294 (preg_match("/php/i", print "php")) { "eit!\n"; (preg_match("/php/", print "PHP")) { "Eit!\n";

(preg_match("/php/", print

"php")) { "eit!\n";

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

ereg() fonksiyonu (dizilim arama)


Arattmz karakter sraan varsa true yoksa false daer retir. Kullanm ise deger = ereg("eletirilecek_karakter_sras,$kaynak , $yeni_deiken);

295

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

eregi() fonksiyonu (dizilim arama)


almas yukardaki fonksiyon gibidir ancak byk kk harf ayrm yapmaz. imdi bir rnekler email adresinin dorulamasn yapalm. inde en az bir @ iareti ile en az bir adet nokta iip iermediine bakmamz yeterli olacaktr. Byle bir snama iin gerekli kod yle olabilir: <?php if (eregi("^.+@.+\\..+$", $adr, $email)) { } else { $hata = "Email adresi hataldr!<br>"; echo $hata; include("hatamesaji.php"); exit; } ?>

ereg_replace() fonksiyonu (dizilim arama ve deitirme)


Dizilim aratma ilevinin yannda bazen bulunan bu deerleri bakas ile deitirmek isteyebiliriz. Bu i iinse ereg_replace fonksiyonu kullanlr. Kullanm ereg_replace("dizilim" , yeni_metin , $kaynak); eklindedir. imdi bu fonksiyonu kullnarak zararl karakter giriine engel olan bir rnek grelim. Genelde email adresi girilen 296

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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); ?>

split() fonksiyonu (metni paralara ayrma)


Verilen dizilimi ayra olarak kullanp bir deeri paralara ayrr ve bu ayrlan paralar birer dizi eleman olarak verir. Kullanm $yenidizi = split("eletirilecek_deerler" $kaynakdeiken, maksimum dnen deer says); ,

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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>"; } ?>

sql _regcase() fonksiyonu (dzenli ifade retme)


eriinde byk harf-kk harf ayrm olan bir deeri byk harf-kk harf ayrm olmayan Dzenli ifade haline evirir. rnek: <?php $str = "Kutluay"; echo(sql_regcase($str); ?> Bu program, Browser penceresine u metni yazdrr: [Kk][Uu[Tt][Ll][Uu][Aa] [Yy]

298

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Kullanc Tanml Fonksiyonlar Gelitirmek


Basit Bir Fonksiyon Yazalm - myecho
Daha nce grdmz gibi ekrana bir eyler yazdrmak iin echo fonksionunu kullanyoruz. imdi rnei inceleyelim <?php $a=1; $b=2; $c=3; $d=4; $e=5; echo $a . <br>; echo $b . <br>; echo $c . <br>; echo $d . <br>; echo $e . <br>; ?> Kodu incelediimizde her deikenden sonra <br> etiketi ile alt satra gemeyi saladn grrz. imdi istiyoruzki ki echo komutu her seferinde bu <br> etiketini otomatik eklesin bizde bu konuda rahat edelim. Php dilinde fonksiyonlar function bildirimi ile yazlar. Fonksiyona ilemesi iin bir takm deerler aktarlacaksa bu deer isimleri fonksiyon adnn yanna parantez iinde yazlr. Birden fazla deer alyorsa aralarna virgl konulur. Der aktarlmayacaksa ii bo iki parantez konulmak zorundadr. Fonksiyon hesap yapp bi deer dndrecekse bu RETURN ile belirtilir. function fonksiyonun_ad (parametre1, parametre2, ... parametreN) { 299

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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>");

GLOBAL ve STATK DEKENLER


Btn st dzey dillerde global ve lokal deiken kavram vardr. PHP dilinde bunlar global ve static olarak belirtilirler. Kod iinde tanmladmz deikenler ile bir fonksiyonun iinde tanmladmz deikenler birbiri ile ayn kapsama alannda deildir. Bir fonksiyon iinde 302

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

count() fonksiyonu (dizinin eleman saysn bulma)


Parametre ald dizi deikenin eleman saysn verir.

print_r () fonksiyonu (deiken ieriini yazdrma)


Bu fonksiyon parametre olarak ald deiken ve ierii hakknda bilgi verir. Bu deiken bir dizi ise dizinin elemanlarda buna dahildir. kici bir parametre olarak true verilirse sonucu yazmak yerine bir deer olarak bir deikene aktarmak mmkn olur. var_dump () fonksiyonu (deiken ieriini yazdrma) print_r () ile aa yukar ayn ileve sahiptir. Ancak var_dump() farkl olarak

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);

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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] )

=> => =>

elma armut ilek

<?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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Dizileri Sra ile lemek


Dizileri eitli tntemlerle ileyebiliriz. rnein for dngsnde dizinin bandan sonuna kadar ilem yapabiliriz. Yada for each dngs ile dizi elemanlar boyunca ilem yapabiliriz. PHP de ayrca bu i gelitirilmi ikide fonksiyon vardr.

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";

For.. Each ile dizileri ilemek


Bu konu daha nce dngler konusunda geilmiti. Burada bir rnek vermekle yetinelim. foreach ($dizi as $anahtar => print "$anahtar = } ksaca

$deger) { $deger\n";

307

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

For ile dizileri ilemek


Bu konu daha nce dngler konusunda geilmiti. Burada bir rnek vermekle yetinelim. <?php for ($i = print } ?> 0; $i < ksaca

count($dizi); ++$i) { $dizi [$i];

308

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Form Dizaynnda Altn Kurallar


1. Form okunuu basit, doldurmas skc olmamaldr 2. Kullanc bilgileri neden girmesi gerektiini kavrayabilmelidir. rnein kimlik bilgileri ekrannda tuttuunuz takm nedir gibi bir soru olmamaldr. 3. Formlarda girilen bilgileri dorulanmaldr. Aksi takdirde gvenlik aklar ve zellikle sql injection yntemiyle hackerlera yakalanabiliriz. 4. Formlardaki etiketler ayn yne yaslanmaldr 5. Formlarda istenen bilgilerin sralamas genel dzene uymaldr. rnein kimlik bilgileri ekrannda nce doum yeri sonra baba ad sonra ad sorulursa form tuhaf bir hal alr. Ancak bunlar akla manta uygun bir srada olsa kullanc iin daha ho ve antkl bir grnm oluur. 312

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Formlardan Bilgi Alma


Formlardan bilgi aktarm yaparken iki tipte program kodlayabiliriz. Birinci tipte bir aran, birde arlan dosya vardr ve biz bu ikisini ayr ayr kodlarz. kinci tipte ise kaynak kod tek bir dosyadan oluur ancak dosya kodlamasnda bir if..else yaps ile hem form, hemde bu formu verileri ileyen ksm kodlanr. Bylece kod zerindeki kontrolmz artar ve gereksiz dosya arma zamanlarndan kurtlmu oluruz. kili dosya yntemini grelim.

Form Verilerini leme (ki dosya ile)


Aadaki rnek get metodunu kullanmaktadr. Amacmz ise kullancnn forma girdii bilgileri ikinci dosyada okuyup ekrana gstermek. rnek Gnder dmesine tklaynca ACTION olayna yazlm hedef dosyasn aracaktr. Bilgiler hedef dosyasna adres satrna eklenen bilgilerle olutrulan query_string ile aktarlacaktr. 313

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Form Verilerini leme POST Metodu


Yukardaki rnekte methodu GET yerine POST yapm olsaydk hedef dosyada aada deiiklikleri yapmamz gerekirdi. <?php $adsoyad =$_POST[adsoyad]; $email =$_POST[email]; print ("Merhaba <b>$adsoyad</b>\n\n"); print ("<p>E-mail: <b>$email </b></p>\n\n"); ?>

316

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Form Verilerini leme (Tek dosya ile)


Bu sefer yazacamz kod iinde yle bir mantk gdeceiz. nce $_GET deikenin deerini kontrol edip bo olup olmadna bakacaz. Eer bo ise program ilk defa altn anlayacak ve kod iinde form ksmn ileyip ve ekrana formu gsterip bilgi girii yaplmasn isteyecektir. Eer bu deiken bo deilse demektir ki program daha nce alm ve gnder tuuna baslm ve bu yzden _GET dizisi iinde ilenmek zere bilgi var. Bu seferde kodun else bloku alacak ve bilgileri ileyecektir. Formdan girilen bilgileri gene ayn dosyaya gndermek iin PHP_SELF n tanml deikenini kullanacaz. Bu deiken bize o an alan dosyann adn vermektetir. <html> <head> <title>Tek dosya ile bilgi alma ve isleme</title> <META Http-Equiv="Pragma" Content="no-cache"> <meta http-equiv="content-type" content="text/html; charset=iso-8859-9" /> <meta name="description" content="CSV" /> <meta name="keywords" content="Csv" /> </head> <body> <? 317

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

// 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"

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?} 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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Form Verilerini leme POST Metodu


Yukardaki rnei POST metodunu kullanacak ekilde yazarsak kod u hale gelecektir. <html> <head> <title>Tek dosya ile bilgi alma ve isleme</title> <META Http-Equiv="Pragma" Content="no-cache"> <meta http-equiv="content-type" content="text/html; charset=iso-8859-9" /> <meta name="description" content="CSV" /> <meta name="keywords" content="Csv" /> </head> <body> <? // yukardaki ksmlar html icin gerekli olanlard. // Program u mantkla alyor. nce $_POST 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 POST dolu olduundan bu defa bilgiler gsteriliyor 320

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

</html>

Hesap Makinesi Program


Artimetik operatrleri, switch blokunu ve formlar grdmze gre basit bir hesap makinesi iin gereken her ey elimizin altnda demektir. <html> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9"> <body> <?php if($_POST) { $islem = $_POST['islem']; $sayi1 = $_POST['ilksayi']; $sayi2 = $_POST['ikincisayi']; switch($islem) { case "-": $sonuc = $sayi1-$sayi2; 322

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<input type="text" name="ikincisayi" size="1"> <input type="submit" value="="> <?=$sonuc?> </form> </body> </HTML>

Basit Bir ifreli Giri Sayfas


Web sitelerinde grdmz bir sistem olan ifreli sistemlere basit bir rnek yapalm. <?php //basitparola.php if (!isset($parola) || $parola != "FB") { ?> <FORM ACTION="basitparola.php" METHOD="POST"> Parola: <INPUT NAME="parola" TYPE"password"><BR> <INPUT TYPE="submit"> </FORM> <?php } else { echo"korumal alana hogeldiniz "; } ?> rneimizde parola bilgisi kodun iinde yazlmtr. Bu ekilde olunca kullancnn parolay deiirme imkan yoktur. Ayrca prola kod iinde metin lrak kodlandndan sunucuya dosya eriimi olan herkes kodu grecek ksaca paolay renebilecektir (rnein hostng firmas alanlar). 324

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Birden Fazla Sayfaya Yaylan Formlar


Bazen uramamz gereken formlar tek bir sayfa iin fazla gelebilir. Bunlar birden fazla sayfaya yaylm formlarda toplayp yle kullanmamz icap edebilir. Bu ilem iin alternatifimiz vardr. 1. Form konularnda grdmz gibi Hidden alanlar kullanmak 2. Bilgileri bir tabloya yazmak 3. Bilgileri oturum dekenlerinde tutmak. Kullanm ve hata kontrol asndan en rahat ise birinci yntemdir. Zaten POST metodu kullanacak olursa gnderilen bilgi boyutuda sorun olmadndan bu gayet mantkl bir durumdur. Hidden alan kullanmna rnek olarak ise <INPUT TYPE="HIDDEN" NAME="isim" print $_POST['isim']; ?>"> verilebilir. VALUE="<?php

PHP ile Posta Gnderme


Gerek PHP gerekse HTML iinde form komutlar grld kadar le basit bir geri besleme (feedback) yada iletiim saufas yapmak kolaydr. in asl burada kolaya kap formun action ksmnda <form name="form1" action="mailto:feedback@xx.com.tr"> method="post"

denilmesi bu ilem iin teknik anlamda yeterlidir. Ancak burada formu dolduran kiinin bilgileri size POST formu nasl yollad ise yle gelecektir. Deiken ad, & 325

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

mail() fonksiyonu PHP ile eposta gndermek


Mail fonksiyonu Mail (kime, [ek_balklar]); eklinde kullanlr. konu, mesaj,

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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"

<input type="reset" name="Submit" value="Sil">

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

</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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<?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

print src=\"$url/$gonder_name\"><p>\n\n"); } } ?> </BODY>

<FORM ENCTYPE="multipart/form-data" ACTION="<?php print $PHP_SELF?>" METHOD="POST"> <INPUT TYPE="hidden" VALUE="500000"> NAME="MAX_FILE_SIZE"

<INPUT TYPE="file" NAME="gonder"><BR> <INPUT TYPE="SUBMIT" VALUE="Dosya Ykle!"> </FORM> 334

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

</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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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.

PHP SERVER DEKENLER


PHP sistem baznda yaplacak baz ilemleri kolaylatrma iin n tanml deikenler kullanr. Ancak burada bazr deikenleri her sunucu iin geerli olmadn unutmamalyz. Bu deikenlerin en genel olanlarna bir gz atalm. PHP_SELF: alan PHP programnn bulunduu dizin ve adn verir. zellikler kendi ar yapan formlarda bu deer ok kullanlr. Get metodu ile bilgi taraycnn gnderecei tutulduu deiken alnrken bilgilerin ISS

QUERY_STRING

REMOTE_ADDR REQUEST_METHOD REQUEST_URI

Ziyaretinin bilgisayarna tarafndan atanm IP adresi

Form ile gelen bilgilerin gnderildii metod: GET veya POST O anda almakta olan PHP dosyasnn ad ve varsa bu ada eklenmi Query_String 336

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

SCRIPT_FILENAME SCRIPT_URI

O anda almakta programnn dosya ad

olan

PHP PHP

O anda almakta olan programnn tam URL adresi HTTP

SERVER_PROTOCOL Sunucunun srm SERVER_ADDR

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Kullancnn Girdii Deerlerin Doruluunu Kontrol Etme


Kullancnn girdii deerlerin doruluunu kontrol etmek programn ileyii asndan nemlidir. rnein kullancya listelemek istedii snf semesi iin bir form sunmu olalm. Kullanc hibir snf girmeden gnder butonuna tklarsa ne olacak, ya da snf bilgisinde yer almas imkansz bir kararter girerse ne olacak. Kullanc bir form doldururken drt tr hata oluabilir 1. Hatal girilmi bilgi. rnein 01.01.2007 yerine 01/01/2007 gibi.. Yada saat iin 10.35 yerine 1035 girmek gibi 2. Tehlikeli bilgi. zellikle hacking iin 3. Yanl bilgi. Avantaj salamak iin aldatc verilen bilgiler. 4. Girilmemi bilgi. Dorulama ileminin yaplabilecei iki yer vardr. Kullanc taraf ve sunucu taraf. Kullanc tarafnda Javascript le yazlm kodlar daha girilirken bilginin kontroln salarlar. Kullanc tarafndaki dorulamann avantaj ilem hzlanr ve kontrol annda yaplr. Dezavantaj ise ilave kod ve javascript bilgisi gerektirir. Sunucu taraf dorulama ise form verisi hatal ise veriler git-gel-geri git ilemine tabi tutulacandan sunucuya binen yk artar. Ancak buradaki kontrollerde gerekten daha detayl olabilirler.

338

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Windows ve Unix Dosya Eriim Yetkilendirmesi


Her ne kadar lkemizde ounluk Windows ykl bilgisayarlarda olsada hosting sistemlerinde genelde Linux ykldr. O bakmdan bu konu anlalmaldr. Sadece dosya fonksiyonlar iin deil FTP komutlarn kullanrkende bu bilgiler gerekli olacaktr. Windowsta bu ilem ACL denilen Access Control List ile yaplr. Dosya nitelikleri dosyaya olan yetkilerimizi belirtir. Ancak dosyann altrlabilir bir dosya olup olmadn ise Windows dosyann uzant adndan anlar. Unix bu konuda farkl bir yaklam uygular. Unixte her dosya ve klasr iin kullanclarn ayr ayr yetkileri vardr. rnein bir klasrde duran bir dosya iin her kullancnn okuma, yazma ve altrma anlamnda farkl yetki dereceleri vardr. Ksaca unix yada Linux sistemlerde bir dosyann var olduunu bilmeniz hatta dosya listesinde grmeniz o dosyaya eriebilme yazda dosyaya yazabilme yetkiniz olduu anlamna gelmez. Unix sitemleri iin u : dosya/dizinin sahibi (user) g : dosya/dizinin sahibiyle ayn grupta olanlar (group) o : dier kullanclar (others) a : herkes (all) Bunlarn her biri iin yetkilerin saysal deeri hesaplanr. Okuma yetkisi r, yazma yetkisi w altrma yetkisi ise x ile ifade edilecek olursa r : 4, w : 2, x : 1 saysal deerini tar. Bu hesabn sonucu ise chmod komutu ile dosyaya uygulanr. Bir rnekle durumu inceleyelim. Dosya.txt dosyasnn kullanc yetkilerini sahibi iin, tm ilemler, grup iin 339

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

PHP Klasr Fonksiyonlar


mkdir() fonksiyonu (Klasr oluurmak)
Bu fonksiyonlar eer sunucudaki veriyorsa klasr oluturabiliriz. mkdir ("test", 777); 777 parameresi klasr iin izinleri belirtir ve sadece Unix ve trevlerinde geerlidir. yetkilerimiz izin

rmdir() fonksiyonu (Klasr silmek)


Bu fonksiyonlar eer sunucudaki veriyorsa klasr silebiliriz. rmdir ("test"); yetkilerimiz izin

chdir() fonksiyonu (Klasr deitirmek)


Bu fonksiyonla aktif klasr deitirebiliriz.

is_dir() fonksiyonu (Dizin mi)


yukardaki rnekte grlebilecei gibi bir parametrenin bir klasr olup olmadn test etmek iinse bu fonksiyon kullanlr. sim bir klasre aitse fonksiyon true/doru, deilse false/yanl sonu verir. rnek: <? if ( is_dir ( "/klasor1" ) ) print ("Bu bir klasor!"); ?>

341

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

opendir() fonksiyonu (Klasr amak)


Bir klasr aar. Deyim msaitmi kontrol eder. yerindeyse okumak iin

readdir() fonksiyonu (Klasr okumak-listelemek)


Klasrn iindeki dosya ve alt klasr isimleri sra ile okur.

closedir() fonksiyonu (Klasr kapatmak)


Opendir ile alan klasr kapatr. <?php $klasor_adi = "./"; $klasor = opendir ($klasor_adi); while ( gettype ( $info = boolean ) { readdir( $klasor ) ) !=

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

/*eer dosya adnn sondan itibaren 4 hanesi .php ise yap*/

4hanesinden

echo ("<li><a href=dok.php?ad=$yol/$dosya>$dosya</a><br>"); $i++; 343

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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"

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

/*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.

PHP Dosya Fonksiyonlar


Normalde bu fonksiyonlar da dierleri ile birlikte anlatlabilrdi. Ancak programclk dnyasnda metin dosyalar VTYS sistelerinin kmasndan nce ver depolamak iin kulanldndan bu konunun oradan nce gelmesi daha uygun grnd. PHP dili ile formlar hazrlayarak metin dosyalarn depo olarak kullanan gzel uygulamalar yaplabilir. rnein basit bir saya, ziyareti defteri, szlk gibi. nce fonksiyonlar basit rneklerle grp sonra kompleks kullanmlara bakalm.

file_exits() fonksiyonu (Dosya var m?)


Bir dosyann var olup olmadn denetleyen bu fonksiyon, dosya varsa true(doru), yoksa false(yanl) sonucunu verir. Parametre verilirken klasr adda iletilebilir ancak burada daha nce HTML konusunda nerdiimiz gibi / kullanmna dikkat edilmelidir. <?php if ( file_exits ( "dosya.txt" ) ) 345

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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; ?>

filesize() fonksiyonu (Dosya boyutunu bulma)


Adn verdiimiz dosyann boyutunu byte cinsinden bir deer olarak verir: rnek: <?php print ("Dosyann bykl (byte cinsinden) :"); print filesize( "dosya.txt" ); ?>

346

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

is_file() fonsiyonu (Dosya m )


Klasrlerle dosyalarn isimlendirilmesi ile teknik anlamda bir ayrma gidilmi olmaz. Bunlar temelde nitelikleri ile ayrlrlar. Kullanc verilen parametredeki ismin bir dosya olup olmad test etmek iin bu fonksiyonu kullanabilir. rnek olarak farzedelim kullanc forma dosya adn girecek ve buna mukabil o dosyann ieri ekrana yazdrlacak olsun. Ya girilen isim bir dosya deilde klasre aitse ne olacaktr. Haliyle kodumuz almayacaktr. Oysa okuma ilemine balamadan nce is_file() ile test yaplm olsayd kod artlar doru olduundan alacak, art salanmadysa yani yle bir dosya yok ise bir mesaj verilebilecekti. Parametre olarak verilen isim bir dosyaya ait ise fonksiyon true/doru, deilse false/yanl sonu verir. rnek: <? if ( is_file ( "dosya.txt" ) ) print ("Bu bir dosyadr!"); ?>

is_readable() fonksiyonu (Dosya okunabilir mi?)


Programda kullanmaya kalkmadan nce bir dosyann eriilebilir ve PHP tarafndan okunabilir olup olmadn kontrol etmek isteyebiliriz. Ortalama bir Windows kullancs iseniz bu olay sizin iin bir anlam ifade etmeyebilir. nk Windowsta normal artlar altnda dosya var ise okunabilirdir. Ancak unix ekol sistemlerde dosyann var olmas yetmez birde balandnz kullanc hesabnn o dosyay okuma izni olmas gerekir. Bu 347

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

fonksiyon dosya okunabilir ise false/yanl sonu verir. rnek: <?

true/doru,

deilse

if ( is_readable ( "dosya.txt" ) ) print ("Bu dosya okunabilir bir dosyadr!"); ?>

is_writable() fonksiyonu (Dosya yazlabilir mi? )


Programda kullanmaya kalkmadan nce dosyann eriilebilir ve yazlabilir olduunu kntrol etmeye yarar. Dosya yazlabilir ise true/doru, deilse false/yanl sonu verir. Yukarda ki rnekte akland gibi Unix ekol sistemlerde dosyann eriilebilir olmas yannda balant saladmz hesabn o dosyaya yazma yetkisi olmasda gereklidir. rnek: <? if ( is_writable ( "dosya.txt" ) ) print ("Bu dosyaya yazlabilir!"); ?>

is_executable() fonksiyonu (Dosya altrlabilir mi? )


PHP dili ile iletim sistemi komutlarnnda altrlabileceinden daha nce bahsetmitik. Ancak bu ilemden nce bu komutu altrmaya yetkimiz olup olmadn kontrol etmemiz yerinde olur. letim sisteminin komutlarn altrma olay ok komplez bir konudur ve akas byle bir olay bir dil iinde 348

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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!"); ?>

touch() fonksiyonu (dosya oluturma)


touch fonksiyonu bir metin dosyas oluturmak iin kullanlr. Eer verilen isimde bir dosya zaten varsa ieriine dokunmadan dosya tarihi vs bilgiler deitirilir. <?php $klasor = "/text/"; touch ("$klasor/dosya.txt"); print ("dosya.txt adl bir dosya oluturuldu!"); ?>

349

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

unlink() fonksiyonu (dosya silme)


Unix sistemlerde dosya isimleri dosyann fiziksel haline bir balant kabul edilirler. Dolays ile bu balanty krmak dosyaya eriimide imkansz klar. Ksaca dosya aslnda silinmi olur. PHP ile mevcut bir dosyay silmek iin unlink() fonksiyonu kullanlr. Bu fonksiyon da silinecek dosyann ad ile birlikte yolunu ister. Bu komut Windows sistemlerinde ilemeyebilir. rnek: <?php $klasor = "/files"; unlink ("$klasor/dosya.txt"); print ("dosya.txt adl dosya silinmitir!"); ?>

copy() fonksiyonu (dosya kopyalama)


PHP ile dosyalar kopyalamak iin bu fonksiyon kullanlr. Bu fonksiyon iki parametre alr. Kaynak dosya ve hedef dosya. Ancak hedef dosya iin gerekli oluturma yetkimizin olup olmad, kaynak dosyay grme yetkimizin olup olmad bu komut iin nemlidir. <?php copy("yenidosya.txt","yenidosya2.txt"); ?>

readfile() fonksiyonu (Dosyay satr satr okumak ve ekrana yazmak)


Dosyann tamamen ekrana yazlmas iin kullanlr. readfile(dosyaad); 350

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

fopen () fonksiyonu (dosya ama)


Bir dosyay amak iin kullanlr. Dosyann ne amala alaca ise parametre halinde verilir. w dosyay yazmak iin, r okumak iin ve a ise varolan bir dosyaya ek bilgi girmek iin kullanlr. Bu fonksiyon dosyann baaryla almas halinde bir tamsay deeri sonu olarak verecektir. PHP programlarmzda, alan dosyann mutlaka ona iaret eden bir deikene (file pointer) bal olmas gerekir; daha sonra bu dosya ile ilgili btn ilemleri bu iaret deikeni ile yaparz. rnek: <? $dosya = fopen( "dosya.txt" , 'r' ); // okumak iin $dosya = fopen( "dosya.txt" , 'w' ); // yazmak iin $dosya = fopen( "dosya.txt" , 'a' ); // eklemek iin ?> r modunda PHP, bu dosyay sadece okumak amacyla aacak ve fonksiyondan dnen deeri $dosya deikenine atayacaktr. Olmayan bir dosyay amak istediimiz zaman PHP hata mesaj verir. Olmayan bir dosyay yazmak amacyla amak istediimizde PHP nce bu dosyay oluturur. Bir dosyaya ek yapmak istediimiz zaman ise kodumuz rnein son satrndaki gibi kullanlr. fopen() komutunun parametreleri r : Sadece kullanlr. okuma 351 ilemi yaplaca zaman

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

fgets () fonksiyonu (dosyadan satr satr okuma)


Bir dosyadan bilgi okumak iin kullanlr. Okunacak karakter says parametre olarak verilmi olsada satrn bundan nce sonlanmas veya dosya sonuna gelinmesi bir hataya sebep olmaz. Bu durumda fonksiyon okuyabildii kadar karakteri sonu olarak verir.

fseek () fonksiyonu (dosya iinde bir yere konumlanma)


Bir dosya ald zaman dosya imlei dosyann bana konumlanmtr. Keza fgets kullanmnda her satr bitiminde imle bir sonra ki satra konumlanr. Fseek fonksiyonu imlei parametre olarak verilen bir konuma dorudan konumlandrmak zere kullanlr.

352

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

fread () fonksiyonu (dosyadan belirli sayda karakter okuma)


Bazen bir dosyay satr satr okumak yerine istenen sayda karakter bloklar halinde okutmak dan bilgi okumak iin kullanlr. Okunacak karakter says parametre olarak verilmi olsada dosya sonuna gelinmesi bir hataya sebep olmaz. Bu durumda fonksiyon okuyabildii kadar karakteri sonu olarak verir. Bu fonksiyon genel olarak fseek ile kullanlr.

fgetc () fonksiyonu (dosyadan birer birer okuma)


Bazen bir dosyann satr satr yada blok olarak okumak yerine byte byte okunmas istenebilir. Bu ilem iinse fgetc kullanlr.

feof () fonksiyonu (dosya sonuna gelindi mi)


Bir dosyadan bilgi okuma esnasnda dosya sonuna gelinigelinmediini kontrol etmek nemlidir. Bu fonksiyon bu i iin kullanlr ve eer dosya sonu ise true deerini verir.

fclose () fonksiyonu (dosyay kapat)


Yaplacak ilem bittikten sonra dosyay kapatp balanty kesmek iin kullanlr. Bu aama nemlidir nk gereksiz yere ak duran her dosya sistem kaynaklarn kullanmaktadr. imdi fgets, feof ve fclose kullanan basit ve ilkel bir dosya ierii listeleme rnei grelim <?php if ($dosya = (fopen ("dosya.txt" , 'r') ) ) { 353

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

while ( ! feof ($dosya) ) { $bytebyte = fgetc ( $dosya ) ; print ("$bytebyte"); } fclose ($dosya); ?>

fputs() ve fwrite() fonksiyonu (dosyaya yazma-dosyaya ekleme)


PHP asndan dosyaya ekleme yada yazma teknik anlamda farkl bir ilem deildir. Sadece dosyann alma aamas farkldr. fputs ve fwrite ayn ii yaparlar ve ayn ekilde kullanlrlar. $dosya = fopen( "bir_dosya.txt" , 'w' ) or die ("Dosya alamyor!") ; // yazmak $dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("Dosya alamyor!") ; // eklemek <?php $adi = "dosya.txt"; $dosya = fopen alamad!"); ($adi , 'w') 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" ) ; 356

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

fclose ($dosya); ?>

<?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); ?>

flock() fonksiyonu (Kullanmdaki dosyay kilitleme)


lk bakta kilitleme kelimeside byle bir eye neden ihtiya duyulduuda anlamsz gelebilir ancak dosya kilitleme kesinlikle gereklidir. Metin dosyalar tabiatlar gerei tek kullancldr. Bu bakmdan VTYS tab ir ettiimiz gerek vertban dosyalarndan farkldrlar. rnein bir kullanc metin dosyasn kayt eklemek zere amken hemen bir karklk olabileceini sylemek mmkndr. te bu yzden ilem yaplrken dosyann geici olarak kilitlenmesi en salk l yntem olacaktr. Bu fonksiyona kilitlemek istediimiz dosyann iaret deikeninin adn ve kilit trn belirten sayy 357

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

parametre olarak vermek gerekir. Bu fonksiyon ile kullanabileceimiz kilit tr parametreleri unlardr: 1:Paylam imkan verir Dier proseslerin dosyay paylamalarna proseslerin dosya ile ilem

2:Tam Dier yapmasna engel olur 3:Serbest rnek: <?php

Dosyann 1 veya 2 olan kilidini kaldrr

$adi = "/www/dosya.txt"; $dosya = fopen alamyor!"); ($adi , 'w') or die ("Dosya

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

fileadate() fonksiyonu (Dosyaya son eriim tarihi- file access date )


Bir dosyaya son eriim tarihini Epoch formatnda verir. Date() ile bunu anlaml hale getirmek mmkndr.

filemdate() fonksiyonu (Dosyann son deitirilme tarihi- file modification date)


Bir dosyann en son deitirildii tarihi Epoch formatnda verir. Date() ile bunu anlaml hale getirmek mmkndr. En ok sayfalarn sonuna son deiiklik tarihini yazdrmak iin kullanlr.

filecdate() fonksiyonu (Dosyann oluturulduu tarih file creation date)


Bir dosyann oluturulduu tarihi Epoch formatnda verir. Date() ile bunu anlaml hale getirmek mmkndr. <?php print ("son deiiklik tarihi :"); $islemtarihi = filemdate( "dosya.txt" ); print date("D d M Y G:i:s ); ?> H", $islemtarihi

CSV Dosya Fonksiyonlar


CSV dosyalar (Virglle Ayrlm Deerler- Comma Separated Values) deerlerin belirli bir karakterle ayrld metin dosyalardr. Bu karakter genelde ; yada , (noktal virgl yada virgl) karakteridir. Standart bir format olup veri alverii iin uygundur. Metin dosyada 359

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

fgetcsv() fonksiyonu (CSV dosyasn satr satr okuma)


Metin dosyalar iin bu ilemi fget ile yaparken CSV dosyalar biraz ayr bir ileme ihtiya duyarlar. rnein (brahim;Kutluay;33) bilgilerini ele alrsak grlecei gibi metindeki karakterlerinin karlmas ve ; ile ayrlm deerlerinden ilenmesi gereklidir. fgetcsv() de tam olarak bunu yapar. fget () fonksiyonundan farkl olarak okuduu satr iler ve bilgileri bir dizinin elemanlar olarak dnderir. <?php $satir = 1; $handle = fopen("test.csv", "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $bilgisay = count($data); echo "<p> $satir satrnda $bilgisay alan bulundu: <br /></p>\n"; $satir++; for ($c=0; $c < $bilgisay; $c++) { echo $data[$c] . "<br />\n"; 360

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

} } fclose($handle); ?> Yukardaki kod bir CSV dosyasn satr satr okuyup dng iindeki bilgileri deerlere ayrlm olarak yazmaktadr.

fputcsv() fonksiyonu (Deerleri CSV formatnda yazma)


Metin dosyalar iin bu ilemi fput ile yaplmaktayd. Ancak (brahim;Kutluay;33) bilgilerini ele alrsak grlecei gibi metindeki ifadelerin ilenmesi gereklidir. Split fonksiyonu ilede CSV ayracnn eklenmesi gereklidir. Kendisine parametre olarak geilen dizinin elemanlarn CSV biimine uygun ekilde dzenler ve dosyaya yazar. Geriye yazlan metnin boyutu dner, ilemde bir hata varsa da dnen deer FALSE olur. <?php $liste = array ( 'aaa,bbb,ccc,dddd', '123,456,789', '"aaa","bbb"' ); $dosya = fopen('text.csv', 'w'); 361

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Kullanl Bir rnek Kayt Arama


renci Notlarn Webde Yaynlama
PHP ile birbirine benzer yapda dizayn edilmi ancak gnlk hayatta kullanlabilecek rnekler yapalm. lk rnek renci notlarn web sitesinden yaynlamak olsun. renci notlarnn CSV formatnda bir dosyada tutulduunu ve bu dosyann hazr olduunu varsayarak; aadaki rnek veriler nda 542;62 543;78 544;45 545;52 rnek koda geelim; <html> 362

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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"

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

echo "<b>$satir[0]</b> <b>$satir[1]</b> almtr"; }

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.

Basit Telefon Rehberi


Yukardaki rnekte ufak bir deiiklik yaparak ayn program bu defa basit bir telefon rehberine evirebiliriz. 365

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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> sim giriniz</td> <td><input type="TEXT" name="isim"></td></tr> 366

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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"

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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:

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

?> </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.

Basit Ziyareti Defteri


Ziyareti defterleri kullanc etkileim iin ideal bir yoldur. Kullanc buraya bir not yada soruyu yazar sizde bunu grebilirsiniz. Hatta cevapta yazabilirsiniz... Burada kod olarak bast br ziyareti defteri verilecektir. lk ama alnan bilgileri bir metin dosyada depolamak ve bunlar biimli olarak geri yazdrmak ileri seviye bir ziyareti defterinden beklenenler ise ; Ayp kelime szgeci (Herkes size hayranln ifade etmeyebilir) 372

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Defteri imzalamadan href='zd1mesaj.php'> 373

buray tklayn</a></FONT></P>

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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"

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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,

fputs($baglanti, $metin); } fputs($baglanti, date("D d M Y h:i:s")); fputs($baglanti, "<br>\n"); 375

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

fputs($baglanti, src='nokta.gif' width=100% border=0></center>\n"); fclose($baglanti); ?> <HTML> <HEAD>

"<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%

<center><img src='nokta.gif' height=1 border=0></center>

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

Mesajlar okumak iin<A HREF="zd1mesaj.php"> tklayn</A> </BODY> 376

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

</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.

PHP erez - Cookie Fonksiyonlar


erezler bir sitenin kullanc bilgisayarna bir takm bilgiler ieren paket (dosya) brakp daha sonra bu paketteki bilgilere gre bir takm ilemler yapmasna yarayan dosyalardr. Ksaca erezler yardmya site sahibi ziyareti hakknda bilgiler alp saklayabilir ve bir dahaki ziyarette kullanabilir. rnein bir anket kodu hazrlam olalm; bir ok kii haliyle sonucu etkilemeye alacaktr. Bu durumda ak basit bir tedbir olsada kutlanc bilgisayarna anketei oylad anda bir erez brakmak ve daha sonra tekrar 377

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

setcookie() fonksiyonu (erez brakma)


Bu fonksiyon sre belirterek veya sre belirtmeden kullanc bilgisayarna bir erez brakr. Sre belirtilecek olursa; istenilen sre saniye cinsinden girilir yani 1 saat iin 3600 ve 1 gn iin 6540 gibi. Sadece o pencere ak olduu srece brakma ekli setcookie(erez ad,saklanacak deer); Zaman belirerek erez brakmak iinse setcookie(erez deer,time()+istenilen sure); 379 ad,saklanacak

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Ayn sayfada birden fazla erez brakmak


Bir sayfada birden ok cookie brakmak normal artlarda imkanszdr. kinci bir cookieyi brakmak istediimizde pencerede hata mesaj grntlenecektir. Ayrca cookie brakmak istediimizde bunu hibir header(sayfa bal, meta tanmlama vb) kullanmadan nce yada ekrana hi birey yazdrmadan nce yapmak gereklidir. Eer bu kurala uyulmazsa hata oluacaktr. Buna engel olmak iin cookieler genellikle sayfalarn ilk banda braklr kullanlacak deerler sayfalarn ilerleyen blmlerinde kullanlr. Bunun yannda php dilinde illaki cookie kullanlmas gerekli durumlarda kullanmak iin bir fonksiyon vardr. Eer sayfa banda ob_start(); ile balayp sayfa sonunu ob_end_flush(); ile yaparsak o arada cookieleri istediimiz gibi kullanabiliriz. <?php ob_start(); echo "deneme"; echo "!\n"; setcookie ("birinci", "degeri"); setcookie ("ikinci", "degeri"); ob_end_flush(); ?>

383

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

PHP Dilinde Oturum Kullanm


Oturum ynetimi ksaca sayfalar arasnda bilgi akn salamaktr. Oturum ynetimi ilevleri aslnda erezler ile benzeir ancak gvenlik sebebiyle oturum ynetimi tercih edilir. Bir site kodlanm olsun ve bu sitede yelik sistemi de olsun. Bu sitede kullanc bilgileri erezler ile saklanp paylalabilir ancak bu durumda herkese ak olacaktr. Dier dezavantajlar tekrar saymadan devam edelim. Adres satrndan dier dosyalara aktarlabilir. Bu hem gvelik anlamnda ii kartrr hemdesite ii kodlama daha bir karacaktr. Bu gibi durumlarda gvenlii krumak iinde PHP yazarlar PHP diline session zelliini eklemilerdir. Session olay sadece PHP diline zg bir yetenek deildir. Aslnda bir tekniktir. Sayfalar arasnda veri akn salar. lgili kullanc ad ve ifre bir sayfadan dier sayfaya tanarak kullancnn tekrar tekrar ifre girmesine gerek kalmaz. Bu oturum denetimi web penceresini kapatana kadar devam edecektir. Ksaca zetlersek, Session'lar bize sayfalar arasnda verilerin tanmasna olanak salar. Bu veriler herzaman yelik sayfalarndaki kullanc ad ve ifreler olmayabilir. yelik sistemleri Session'larn kullanld en yaygn sistemlerdir.

384

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

PHP ve MYSQL Kullanm


Bugn dnyada aa yukar tm programlar bir takm verileri ilemek iin yazlrlar. Vei ilemek demek veri depolamak demektir. Veri depolamak demek ise veritaban ynetim sistemleri demektir. Veritaban ynetim sistemi demek ise SQL dili gelir akla. Bugn nerdeyse bilinen btn diller bir ok veritaban ile alabilirler. Aslnda yaptklar ise kullancdan verileri alp bunu SQL kodlarna evirip veritabanna gndermek, yada verileri SQL ile sorgulayp dnen sonular uygun grnme getirip ekrana yazmaktr. Bu bakmdan unu sylemek ok yanl olmaz. SQL sorgulama dilini bilmeyen programc yarm programcdr. PHP iinde en ok fonksiyon Mysql ve daha sonra Or acle iin yazlmtr. Ancak Mysql iin gelitirilmi olan bir ok fonksiyon gndelik kullanm iinde srekli gerekli deildir. Aslnda bu tm veritaban sistemleri geerlidir. Yani 10 kadar fonksiyon ile veritaban ile alan uygulamalar yazlr. Yalnz bu 10 says toplam yada kesin bir sayy deil her bir veritaban iin gereken bir sayy ifade eder. Mysql veritaban kullanlarak, her trde program yazmak mmkndr. Tabii bunu derken Windows gibi bir iletim sistemi yazlabileceini kastedilmemektedir. Ancak veritaban programcl asndan bilinmesi gereken baz konular vardr. Mysql nedir Veritaban ve Tablo nedir Mysql tablo tipleri 385

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

ikiside Unix tabanl sistemler iin gelitirildii birbirine son derece uyumludur ve hzldr.

iin

Veritaban ve Tablo Nedir


Tablo demek satr ve stunlardan oluan bilgiler yndr. Fiziksel anlamda bir veritaban ise deiik tablolarn bir arada bulunduu alandr. Gznzn nne bir Excel sayfas getirin. Her sayfa bir tablo, Excel dosyasnn kendisi ise Veritabanna karlk gelir. Tablo tasarm ise ok bilgi ve tecrbe gerektiren bir konudur. nk kt tasarlanm bir tablo zerine yazlan kod sonuta bir gn mutlaka kullancy yar yolda brakr. rnek bir tablo
No 1 2 3 Ad brahim smail Tuba Soyad Kutluay Kutluay ahin Snf Doum Tarihi 5 4 2 01.04.1974 02.02.1976 03.05.1980

Mysql Tablo Tipleri


Mysql standart olarak iki tipte tablo kullanr. Myisam ve Innodb. Ancak Oracle Innobase, irketini satn alnca Mysql AB irketide Interbase VTYSnin ilk gelitiricisi Jim Starkeyi ie alarak kendi tablo formatn gelitirme yoluna gitmitir. Ancak u anda hala ilk iki format gnceldir. Mysql Veri Tipleri Veri tipleri sadece Mysql iin deil tm programlama dilleri ve veritaban programlar iin bilinmesi gereken konulardr. Deikenler konusu hatrlanacak olursa bu 387

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

Parantezler kullanlarak alanlarn maksimum uzunluu tanmlanabilir. VARCHAR(20) gibi.

CHAR ve VARCHAR Fark


Bu iki tipteki metin alan en ok kullanlan tiplerdir. Char tabloda sabit genilikte yer tutar. rnein isim char(100) eklinde bir alan tanmlandysa ve bu alana AL bilgisi girilirse veritaban geriye kalan 97 karakteri boluk ile dolduracaktr. Varchar tipi alanda ise alan genilii ne 388

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Saysal Veri Tipleri


Saysal tipleri kullanarak tm saysal alan depolacak tablo alanlar tanmlanr. Ancak bu alan kullanlrken ncelikle alt ve st snrlara ve ondalk durumuna dikkat edilmelidir. 389

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Tarih / Zaman Tipleri


Aadaki tarih zaman tiplerinde Y yl, G gn, A ay, S Saat, D dk N Saniye anlamna gelmektedir. 390

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

DATE DATETIME TIMESTAMP TIME

YYYY-AA-GG YYYY-AA-GG SS:DD:NN YYYYAAGGSSDDNN SS:DD:NN.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Tablo Tasarlama, Key Ve ndex Kullanm


Tablo tasarm yaplrken ncelikle nelerin kayt alnaca , bunlara girilecek bilgilerin tipi ve uzunluu saptanr. Daha sonra yaplacak optimizasyonlar yaplr, anahtar alanlar vs saptanr ve daha sonra tablo oluturulur. rnek bir tablo No 1 3 2 8 4 9 5 Ad brahim smail Tuba brahim smail Azize Trkan ahin ahin ahin ahin ahin 2 Soyad Kutluay 5 Snf Mezuniyet Yksekokul 4 niversite

Kutluay 2 5

Ortaokul Lise 1 Lise 1 Lise Lise

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

MYSQL i Komut Satrndan Ynetmek


PHP dilinin banda PHP ile Mysql arasnda nasl iletiim kurulduundan bahsedilmiti. Ancak MYSQL sadece byle deil komut satrndan da ynetilir. Komut satrndan kast Windows komut noktas deilde bu komutlar anlayacak bir SQL ilemcisinin komut satrdr. Burada greceiniz komutlar komut satrna yazlyor olsalarda aslnda normal SQL dili komutlardr. SQL standartlarna uygun tm VTYS ler iinde geerlidirler. Ksaca renmek lehinize olacaktr. Basit birka komut grelim daha sonra ise SQL dilinin detaylarna girelim.

Mysqli Balatmak
Benim kullandm Uniform paketinde bu i iin komut noktasnda c:\> satrnda iken mysqld-opt.exe komutu verilemektedir. Bylece Mysql alacaktr.

Komut Satrndan Veritaban Oluturmak


Mysqladmin komutu bu ilemi yapacaktr. u parametresi ile kullanc ad belirtilir. mysqladmin -u root create veritabaniadi eklinde kullanlr.

Komut Satrndan Tablo Oluturmak


MySQL'de bir tablo oluturmak iin CREATE TABLE komutu yle kullanlr: CREATE TABLE tablom (id INT , alan1 VARCHAR(10), alan2 VARCHAR(10)) ; 395

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Komut Satrndan Veri Girii


Create table ile oluturulan bir tabloya veri girii iin INSERT INTO komutu kullanlr: INSERT INTO tablom (id, alan1, alan2) VALUES (1,'Ali,'Veli') Bir tablonun oluturulmas ile iine veri yerletirilmesi komutlar ayr ayr zamanlarda, ayr ilemler olarak yaplabilecei gibi, toplu bir metin halinde, otomatik olarak da yaplabilir.

Komut Satrndan Veri Sorgulama


Bir tablodaki bilgileri grmek yada bir tablodan koul yada oullara gre kayt sorgulamak iin SELECT komutu kullanlr. SELECT * FROM tablom ; Bu, MySQL programna, tablom adl tablodaki btn kaytlarn okunmasn bildirir. Buradaki "*" iareti, "btn stunlardaki btn deerler" anlamna gelir. Koul verilmedii iinde zaten tm kayt satrlar okunacaktr. 396

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Komut satrndan Bilgi Deiiklii Yapmak


Bir tablodaki bilgilerin yenileriyle deitirilmesini, yani tablodaki kayt yada kaytlarn gncelletirilmesini UPDATE komutu salar. Veritaban dosyalarn gncelletirme zorunluu bulunmas ise bize veritaban tasarmnn ok nemli olduunu gsterir. rnein: UPDATE tablom SET alan1 = "Ali" ;

397

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Komut Satrndan Kayt Silmek


Bir MySQL tablosundaki kayt yada kaytlar silmek iin DELETE komutu kullanlr: DELETE FROM tablom WHERE id = 1; imdi id alan olmasayd nasl kayt silerdik diye dnmen yeridir sanrm. Tabloda sadece bir kaytta id 1 olaca iin bu komutla sadece bir satr silinecektir.

398

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

SQL Dilinin Tarihesi


Veritaban sistemleri herhangi bir bilgiyi depolayabileceimiz ortamlardr. Geni lekli ulusal bilgi bankalarndan, bir rencinin notlarna varncaya kadar, veritabanlar bilgileri depolayp databilirler. lk bata bu ilemler iin metin formatl dosyalar kullanlm bunlar yetersiz kalnca ise veritaban programlar gelitirilmitir. 15-20 yl ncesine kadar byk veritaban sistemleri yalnzca byk mainframe bilgisayarlarda alabilirlerdi. Haliyle pahal fiyatlara sahiptiler. Gnmzde kullanlan ou ev bilgisayarlar bile o zamann sper bilgisayarlar kadar hzlanm olup verileri daha hzl ve ucuz bir ekilde datmada yardmc olmaktadr. Bilgisayar ortamnda tutulan kaytlar arttka bunlar ilemek, szmek, yedeklemek, aralarndaki ilikileri koruma iin gelitirilen programlarn ortak ad DBMS (Data Base Management System) -ki biz bunu Trkeye VTYS olarak evirelim- programlardr. Bu VTYS sistemlerinde bulunan kaytlarla ilem yapmak ortak bir yntem aranmaya balaynca 1970 yllarn sonunda IBM DB2 VTYS iin SQL dili gelitirildi. SQL (Structured Query Language) Yapsal Sorgulama Dili anlamna gelmektedir. SQL dilinin amac sistemi ynetenler kadar kullanclarnda neredeyse gnlk konuma ngilizcesine yakn bir ekilde verilerle ilem yapabilmesidir. Eer ortaokul dzeyinde ngilizceniz var ise SQL dili size zor gelmeyecektir. SQL prosedrel bir dil deildir. Bunun anlam veritaban operasyonunun nasl yaplacandan ok ne olduudur. Hangi kaytlar ekilecek, eklenecek, silinecek vb. Gnmzde birde RDBMS VTYS diyelimdediimiz ilikisel veritabanlar vardr. DBMS (VTYS) ile 399

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

likisel Bir VTYS in 12 kural


En popler veri depolama modeli olan RDBMS -ilikisel veritaban1970' de Dr.E.F-Codd tarafndan tanmlanmtr. Codd VTYS sistemleri iin olmazsa olmaz 12 kural velirlemitir. Bunlar Coddun 12 kural olarak bilirnirler. Bunlar srasyla; 1. Relational Data Process 2. Informaton rule 3. Guaranteed acces 4. Systematic Null Value Support 5. Active, Online Katolog 6. Comprenhensive Data Sublanguage 7. View updating rule 400

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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-

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

veritaban dili tarafndan sorgulanabilmeli. (bkz.Madde 2)


6-

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

SQL Dilinin Blmleri


SQL dilinde komutlar 3 gruba ayrlr.

DDL (Data komutlar.

Definition

Language):Veri

tanmlama

DML(Data Manupulation Language):Veri dzenleme ve ileme komutlar. DCL (Data Control Language):Veri kontrol komutlar.

403

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

A. DDL (DATA DEFINITION LANGUAGE) KOMUTLARI


DDL deyimleri veritaban zerinde nesne (tablo, yeni veritaban, tablo alanlar) yaratmak iin kullanlrlar. En yaygn kullanlan DDL deyimleri unlardr:

CREATE ALTER DROP

B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI


Veritaban iindeki semek, deitirmek, gncellemek ve silmekle ilgili SQL deyimleridir. SELECT INSERT UPDATE DELETE

C. DCL (DATA CONTROL LANGUAGE) KOMUTLARI


Veritabanndaki kullanc kullanlan deyimlerdir. GRANT DENY REVOKE haklarn dzenlemek iin

404

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

SQL Komutlar ve rnekler


SQL diline ait komutlar kendilerine ait blmlerde inceleyelim. Ancak unu hatrlatmaka fayda var SQL diline ait komutlar byk-kk harf duyarl deildirler. rnein select, Select, SELECT ve SEleCT komtularnn hepsi ayn olarak ele alnr. Ancak bu sadece SQL komutlar iin geerlidir. Metin ifadeler bunun dndadr. rnein ad Ali olan kaytlar listele gib i bir komut yazdnzda varsaylan olarak Ali olan kaytlar gelecektir ama AL ve ali gibi kaytlar gelmezler. nk bu bir komut dei verilen bir arttr ve bilgisayar aslnda siz ne emrederseniz onu yapmaktadr. Ksaca bilgisayar verdiiniz emre bakar aslnda ne kastettiiniz konusunda tahmin yrtmez. Bu arada son kez hatrlatm olalm yazdnz SQL ifadeleri ne kadar kaliteli ve optimize edilmi ise bu sitenizin (veya masast program yazyorsanz programn) hzna birinci dereceden etki eder. rnein bir okuldaki renciler iinde 6-A snfndaki rencilerin listeleneceini farzedelim. Bunu PHP ile iki ekilde yapmak mmkndr.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI


SELECT DEYM
Tablolardan koul belirterek yada belirtmeden verilerin bir ksmna yada tmne erimeyi salayan komuttur. Genellikle bir ya da daha ok tablonun btn alanlar ya da belli alanlar iin SELECT deyimi yazlr. SELECT komutu tartmasz olarak en ok kullanlan SQL komutudur. Temel Kullanm: SELECT [ALL] [DISTINCT] liste [INTO yeni tablo] FROM [tablo] [WHERE ifade] [GROUP BY ifade] [HAVING ifade] [ORDER BY ifade] [COMPUTE ifade] [LIMIT ifade] 408

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 (alan adi) from (tablo ad);

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

AS Deyimi ile Alias Tanmlama


SQL kullanmnda kullancnn iini kolaylatran ilevlerden biride Alia yani Lakap kullanmdr. Lakaplar hem bir tablo, hem alan isimleri hemde sanan stunlar iin kullablabilir. 411

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

And ve Or ile Birden Fazla Koulun Kontrol Edilmesi


Where kalbn kullanrken birden ok kritere gre cmle yazlmas gereken durumlarda kullanlr. Kullanm ekli: ... where kriter1 and kriter2 ... where kriter1 or kriter2 SELECT * FROM ders01a WHERE adi =brahim Halil and soyadi =Kutluay SELECT * from ders01a WHERE yazili1 BETWEEN 50 AND 100 Ayn anlamda: SELECT * from ders01a WHERE yazili1 >= 50 AND yazili1>= 100 SELECT * FROM MUSTERI WHERE borc BETWEEN 1000 AND 5000 AND grup='Kkarti' SELECT * from ogr WHERE adi= Ali and adi=Veli

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

SELECT * from ogr WHERE adi IN (Ali,Veli) 414

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Like ve Not Like Deyimleri:


Where kalb ierisinde kullanlan bu deyim ile regexp benzeri eitlik yada olmama durumlar kontrol edilir. Ksaca, kaytlarda ba harfe veya belli yere kadar olan harf veya harflere gre arama yapmak gibi ilerde iimize yarayabilir. Kullanm ekli: ... where alan_ad like art rnekler: Select * from eleman where adi like A% tablosundaki ad A ile balayanlar Select * from eleman where adi like AL% tablosundaki ad Al ile balayanlar Select * from eleman where adi like %A% adnndaki herhangi bir harf A olanlar Select * from eleman where adi like Ce?al% Son rnek size DOS blgini< varsa wildcaRd olayn hatrlatm olmal. Tabloda ad Ce ile balayan ve 415 // Eleman

// Eleman

// Tabloda

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

SELECT inde Aritmetik lemler


Bu satrlar okurken unu dnebilirsiniz bu PHP dili de aptal bir dil, aritmetik bile toplam yok mu ki SQL ile yapalm. in asl PHP dilinde artimetik ilem fonksiyonlar var. Ancak ncelikle unu anlamalyz. PHP dili iin deil ama masast program yaplan diller iin konuursak; gnmzde orta halli bir web sunucu bile ounlukla evde kullandmz bilgisayardan ok daha fazla RAM ve ilemci gcne sahiptir. Ksaca biz hz gerektiren ilemleri sunucuda yapar ve sadece sonucu alrsak trafii engellemi ve hz kazanm oluruz. 417

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Aritmetik lem Operatrleri


Aritmetik ilemleri gerekletirmek iin belli operatrler kullanlr: + / Blme * arpma 418 Toplama - karma

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

sum() fonksiyonu Bir stunun toplam


Bir stuna gre bir select ifadesinin toplamn alr. SELECT grp, sum(bakiye) FROM taksitler GROUP BY grp Yukardaki rnekte taksitler tablosundaki bakiye alan grp kodu baznda toplanr. SELECT grp, sum(bakiye) FROM taksitler GROUP BY grp HAVING sehir = 'ADANA Yukardaki deyim ile taksitler tablosundaki btn kaytlarn bakiye bilgileri gruplarna gre ara toplam alnr, bir de sehir bilgisine gre filtrelenir. Gruplama yaplmayan her stun GROUP BY deyiminde kullanlmas gerekir: rnek: SELECT urunid, kategoriid, SUM (fiyat) urunler GROUP BY urunid, kategoriid 419 FROM

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

fonksiyonu ile mmkndr.

basit

airtmedik FROM

ilemelerde eleman

yapmak WHERE

SELECT min(maas) bolum=Bilgi lem

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

count() fonksiyonu Bir sorguya gre dnen kayt says


Bir select ifadesinin sonucunda dnen kayt saysn verir. Koul belirtilmezse tablodaki kayt saysn, koul belirtilir ise koula uyan kayt saysn verir. SELECT count (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.

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

SELECT no, personel,dept

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

TABLOYU KENDS LE LKLENDRME (SELF JOIN)


SELECT A.no , A.ad , A.soyad, B .ad , B.soyad , B.dog_tar FROM personel A , personel B WHERE A.yon_no =B .yonno2; 424

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

E SELECT NESTED SELECTS


Baz durumlarda i ie select kullanmanz gerekir. rnei firmanzda ki tm departmanlarn sat toplamn listelemeniz istenmi olsun. Burada yaplmas gereken i nce depertmanlar Select ile semek ve sonra bunlarn her birinin sat toplamn buldurmaktr. 1. Adm Select * from Dept_adi from Departman 2. Adm Select sum(satis_tutari) Dept_adi=xx 3. Adm imdi sorgular birletirelim. Select D.Dept_adi, (Select sum(satis_tutari) from Satislar S Where S.Dept_adi=D.Dept_adi) from Departman D from Satislar Where

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

C. DCL (DATA DEYMLER

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

%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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

TABLOLARDA DEKLK YAPMAK: INSERT Komutu


Bir tabloya bilgi eklemeye yarar. Kullanm ekli: Insert Into Tablo ad (alan1,alan2,..,alanN) (deer1, deer2,.., deerN); Insert Into (ali,rizeli); isim (ad,soyad) values values

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Update [Tablo Ad] Set aranan alan= alan deeri

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

PhpMyAdmin'i altrma ve Tanma


PhpMyAdmin'i altrmak iin tek yaplmas gereken, PhpMyAdminin kurulu olduu adresi taayccnn adres ubuuna yazmaktr. Pma ile Mysql zerindeki her trl sorgulama ilemi yaplabildii gibi veritaban ynetimi ve bakm ilerinde de kullanlabilir. Pma'nn ilk al pencersinde, sol tarafta sistemde tanml olan veritabanlarnn listesi, ortada da MySQL'in hafzadaki aktif ilemleri ve o anda yerine getirilen grevler yer alr. Sol tarafta yer alan mende bulunan veritaban isimleri, 436

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

PhpMyAdmin ile Database Oluturma


Pma caltrldnda gelecek olan sa erevede yer alan create new database blmne oluturulmas istenilen veritaban ad yazlarak create tuuna baslrsa database oluturulacaktr.

PhpMyAdmin ile Tablo Oluturma


Eer veritaban sorunsuz olarak oluturulursa sa erevede bir sql sorgu metin kutusu bir de manual olarak table oluturmamza yarayacak olan Create new table on database ... blm yer alacaktr. Eer dorudan sql olarak tablo oluturulacak ise Create Table ile Run sql query blmnden tablo oluturmak mmkndr. Yada Create new table on database... 438

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Mesela run sql query blmnde bir tablo oluturalm. 439

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

Bir Veritabannn Modelini karmak


Buradaki balkta kastedilen aslnda yukarda bahsedien veritaban iin gereken SQL kodlarnn bir blok halinde elde edilmesidir. ki ekilde karlabilir. Pmada herhangi bir databasei sol menden seip sa tarafta View dump (schema) of database blmn kullanabiliriz. Burada 3 seenek vardr. 440

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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:

PHP Dili Mysql Fonksiyonlar Tablosu


Aadaki fonksiyonlar basite ve topluca verilmitir. En yukarda tanml olanlar daha sk kullanlan fonksiyonlardr. Aslnda bu tablo ok daha uzundur ancak dierleri dahada ender kullanlan fonksiyonlardr. Bu tablonun ardndan nemli fonksiyonlar detaylca aklanp rneklerle incelenecektir.

mysql_connect : mysql_close : mysql_fetch_row:

Sunucuya balants aar Belirtilen kapatr MySQL

veritaban balantsn dizi

Sonu tablosundan deikeni olur 443

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

mysql_fetch_array : mysql_num_rows : mysql_query : mysql_result : mysql_select_db :

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

mysql_fetch_object : mysql_field_name : mysql_field_seek : mysql_field_table : mysql_field_type : mysql_field_flags :

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

mysql_field_len : mysql_free_result : mysql_insert_id : mysql_list_fields : mysql_list_dbs :

Bir nceki veri yerletirmede oluan otomatik veri deerini verir Sonutaki listeler Sunucudaki listeler 445 tm tm tablo alanlarn

veritabanlarn

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

mysql_list_tables : mysql_num_fields : mysql_pconnect : mysql_tablename :

Veritabanndaki listeler

tm

tablolar

Sonutaki alan saysn verir Sunucuya tanmlar kalc bir balant

Verilen alann ait olduu tablo adn verir

mysql_connect() deyimi(Database balants)


Php ile mysql ile balanty salayan komuttur. Kullanm ekli ise mysql_connect(adres,kullanici,ifre); genel olarak mysql kurulduunda kullanc tanmlanmam ise tek kullanc vardr. Bu kullanc rootdur. Ve ifresi bo geilecektir. Adres blmne ise eer kendi makinemizde kullanyorsak localhost yazarz. Buna gre balant iin: mysql_connect(localhost,root,); eklinde bir cmlecik eer mysql alyor ise balant iin yeterlidir. Peki ya almyor ise ne olacak; mysql_connect() fonksiyonunun baarl olup olmadn bu deikenin durumunu test ederek anlayabiliriz. rnein: 446

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

mysql_query() fonksiyonu- Mysqle sorgu gndermek


PHP dilinde MySQL'e sorgu gndermek iin mysql_query() komutu kullanlr. Parantez iinde trnak arasnda sql sorgusu veya daha nce sql olarak hazrlanm deiken yazlabilir. rnein: $sorgu=select * from deneme; $islem=mysql_query($sorgu); veya $islem=mysql_query(select * from deneme); ayn ilemi yapar.

mysql_numrows() fonksiyonu-Sorgudan Dnen Kayt Saysn Bulmak


Sorgu sonucu ka tane kayt dndrldn renmek iin mysql_numrows() komutu kullanlr. Bu say daha sonra sorgudan gelen kaytlar deikenlere almak yada sra ile ilemek zere iimize yarayacaktr. $kac_tane=mysql_numrows($islem); yukardaki sorgudan verecektir. ka tane kayt geldiini bize

448

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

echo $ad[j]. endfor;

.$soyad[j].<br>;

eklinde ksa bir dng kullanlabilir. Tabii ki bunu html kullanarak daha grsel hale getirmek mmkndr.

Deikenleri Sorgularn inde Kullanmak


Phpden gelen deikenleri de sorgularda kullanmamz mmkndr. Mesela $isim diye bir deiken deeri alnp ve bu deikenin ad, soyad ,maas ve eposta bilgileri ekrana yazlacak olsun. Burada deikenin deerini ekrandan akmak iin gerekli formla uramadan sorgu ile ilgileneceiz. nk birincil ama sorguyu deiken ile yapmak. Kullanlan database personel olsun eleman adl bir tablo kullanalm:
<? $host $user $password $db =localhost; =root; =; =personel;

mysql_connect($host,$user,$password) mysql_select_db($db); $sorgum = select eleman where isim=$isim; $kactane isim,soyad,maas,email from

$sonuc =mysql_query($sorgu); =mysql_numrows($islem);

450

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

mysql_fetch_assoc() fonksiyonu- sorgu sonucundan bir satr almak


Bu fonksiyonlar bir sorgu sonucunda dnet kaytlar satr bazl olarak deikene aktarlabilir. <? while ($listele=mysql_fetch_assoc($sorgu)): echo "$listele[Database]"; endWhile; ?> Yukardaki rnek kod yarm bir koddur. Sadece kullanm amacyla burada verilmitir. alan bir kod daha sonra grlecektir.

mysql_error() fonksiyonu- MySQL hatalarn konrol etmek


Kullancnn MySQL'de oluabilecek hatalar PHP iinde n fark edebilmesi iin, PHP'de zel komutlar vardr. Bu komutlar sayesinde veritaban sorgulamasnda oluan sonular hata numarasyla birlikte yakalanabilir. Hata gsterge komutlar kullanlmadan PHP, MySQL'e dair hibir hata mesaj vermeden ileme devam eder. if (mysql_error()) { echo echo } ("MySQL hatas olutu. mysql_error() Hata: "); ;

452

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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");

PHP ile Veritaban Oluturma Listeleme ve Silme


Aslnda bu komutlar ok sk kullanlan komutlar deildir. nk elimizin alnda bulunan Phpmyadmin bir ok konuda eksiklii kapatan bir yardmcdr. Bu ilemler iin bildiimiz Mysql komutlari SQL sorgular halinde mysql_query() fonksiyonu ile altrlr. Ancak bu ilem iin yetki verilmi olmas gereklidir. zellikle gerek web sunucularnda bu yetkilerin salanm olduundan emin olmak gereklidir. Sunucu zerinde genellikle veritaban 453

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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.

PHP ile Tablo Oluturma, Listeleme, Gncelleme ve Silme


Bu ilemleri yaparkende yukarda grld gibi aslnda gerekli SQL komutlar PHP kodlar iinde Mysqle yollanp gerekli ilemler yaplacaktr.

<? @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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

echo $sorgu=mysql_query("SHOW TABLES");

$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.

//

<? @mysql_connect("localhost","root",""); @mysql_select_db("Deneme"); $sorgu=mysql_query("ALTER 456 TABLE Tablo

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

DROP DROP echo ?>

`user`, `pass`"); $sorgu;

Sorgudaki farka dikkat ettiyseniz Alter komutu ile ilem yaplmakta ve kaldrlacak stunlar DROP ile birlikte verilmektedir. Bu komutlarla tablodan user ve pass alanlar kaldrlacaktr.

PHP ile Tablolara Veri Girii, Listeleme, Gncelleme ve Silme


PHP ile veritaban yada tablo oluturma ilemi normal artlarda sk sk kullanacanz komutlar deildir. normalde bu ilemler hosting irketine ait bir panelden yaplr ve daha sonra bu hazr tablolar ileyecek kodlar yazlr. PHP ile ilgili yazlan bu kitapta en ok nem verilmesi gereken ksm burasdr. nk veri ileme gereksinimi olmasayd programlama dillerinede gerek olmazd. Ancak Mysql in komut satr ksmnda da SQL ksmndada gerekli komutlar grlmtr. Aslnda burada da veritaban oluturmak tablo listelemek ilemlerindeki mantk kullanlacaktr. PHP ile gerekli veriler ilenecek ve bu verilere uygun SQL ifadeleri hazrlanp Mysql komutlar halinde veritabanna gnderilecek ve ilem yaplm olacaktr. imdi basit bir rnekle balayalm. Burada bilgi girileri kullancdan istenmeyecek ve bir kayd kod iinden kaydetmek, deitirmek, silmek, listelemek gibi ilemlerin hangi fonksiyonlar ile yapld grlm olacaktr. 457

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<? @mysql_connect("localhost","root",""); // Balant kuruluyor @mysql_select_db("Deneme"); // Veritaban seiliyor

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

// 1 nolu kayt siliniyor echo $sorgu; ?>

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

"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.

rnek Uygulama: PHP ile ifreli Giri Sayfas Yaplmas


Web sitelerinde sk sk grdnz ifreli giri sayfalarndan bir tanede yapmak istenirse aadaki kodlar ie yarayabilir. Kodlar geliirmeye msaittir. Ayrca iinde ie yarayacak bir Javascript koduda mevcuttur. nce bu ilem iin kullanmak zere bir tablo oluurmak gereklidir. Bunu ister PMA ile ister PHP kodu yazarak oluturmak mmkndr. CREATE TABLE `kisi` ( `kullanici` varchar(8) NOT NULL default '', 460

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

`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"; ?>

/******************************************** *************************/ index.php


<? include "kontrol.php"; if($kontrol==1): header("Location: sayfa.php"); else: ?> <html>

461

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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() ?>

/******************************************** *************************/ kaydet.php

463

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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">&nbsp; </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">&nbsp; </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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Tekrar</font></b></div> </td> <td width="25" height="17">&nbsp; </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">&nbsp; </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">&nbsp; </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">&nbsp; </td> <td width="209"><font size="2">

465

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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">&nbsp; </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>&nbsp; </p> </center> </body> </html>

/******************************************** *************************/ kayit.php


<? include"sabit.php";

466

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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; ?>

/******************************************** *************************/ gir.php


<? if( $kullanici && $sifre ): include "sabit.php";

467

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

/******************************************** *************************/ logout.php


<? if( $kullanici && $sifre ): include "sabit.php"; 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;

469

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

else: @header("Location: sayfa.php"); endif; ?>

/******************************************** *************************/ sayfa.php


<? include "kontrol.php"; if ( $kontrol == 1 ): echo "<center>Gizli blm</center>"; echo "<br><br><a href=logout.php><center>logout</center> </a>"; echo "<br><a href=sil.php><center>sil</center></a>"; else: include "hata.php"; endif; mysql_close() ?>

/******************************************** *************************/ sil.php


<? include "kontrol.php"; if ( $kontrol == 1 ): echo $ok; $sorgu="delete from kisi where kullanici='$ok'";

470

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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() ?>

/******************************************** *************************/ kontrol.php


<? include"sabit.php"; $ok = $HTTP_COOKIE_VARS["kim"]; $hata = 3; mysql_connect($server,$user,$pass); mysql_select_db($database); $sorgu = "select * from kisi where kullanici='$ok' and suan='1'"; $bul = mysql_query($sorgu); $dogru = mysql_numrows($bul); if ($dogru == 1): $kontrol = 1; else: $kontrol = 0; endif; ?>

471

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

/******************************************** *************************/ hata.php


<? if($hata==1): echo"<Center><Font Face=Verdana Size=1 Color=Red><b>Ha tal ifre...</b></font></center><br><br>"; include "index.php"; exit ; endif ; if($hata==2): echo"<Center><Font Face=Verdana Size=1 Color=Red><b>Ku llanc Kaytl Deil...</b></font></center><br><br>"; include "index.php"; exit ; endif ; if($hata==3): echo"<Center><Font Face=Verdana Size=1 Color=Red><b>Lo gin olmalsn...</b></font></center><br><br>"; include "index.php"; exit ; endif ; if(!($hata) or ($hata<1 or $hata>3)): echo"<Center><Font Face=Verdana Size=1 Color=Red><b>Ha ta...</b></font></center><br><br>"; include "index.php"; exit ; endif ; ?>

472

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

addslashes() fonksiyonu (metindeki karakterleri etkisiz yapmak)

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

stripslashes () fonksiyonu (etkisizletirilmi kodlar ilk haline dndrmek)


addslashes fonksiyonu ile metinde hacking gibi etkilere ak kap brakabilecek (tektrnak), (ift trnak), \ (ters slash) iaretleri etkisiz hale getirildii belirtilmiti. Daha nce escape karakterlerinde grdmz gibi bu karakterlerin nne \ karakteri eklenir ve etkisiz hale getirilmi olur. Ancak daha sonra bu bilgi tekrar ekrana yazldnda i karr. Ekrana Tuncay\'n transferi yazldnda haliyle kullanc bunu tuhaf bulacaktr. Sonuta yaplmas gereken bu bilgiyi ilk haline getirmektir. Bunu da stripslashes kullanarak yapmak mmkndr. <?php $str = "tuncay'n $a = addslashes($str); transferi 476 transferi"; // Tuncay\'n

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$b = stripslashes($str); transferi ?>

// Tuncay'n

strip_tags () fonksiyonu (HTML etiketlerini metinden karmak)


Bu fonksiyon ile istenmeyen HTML etketlerini bir metinden atmak mmkndr. Peki bu ne zaman kullanl olur denilire; bir ziyareti defteri dnelim. Kullanc site hakkndaki dncelerini yazaca ekrana gelip <H1>Bu site 5 para etmez. Bouna zaman harcamayn!</H1> yazarsa, bu bilgi site dizaynn bozacak ekilde byk balk olarak grntlenecektir. (Olumsuz reklam zelliini saymyoruz). Bu durumda en uygun olay strip_tags ile etiketleri kartmaktr. Ancak strip_tags istenirse ikinci bir paramete ile baz etikelerin braklmasnada izin verir. <?php $str= "<MARQUEE><B>Selam!</B></MARQUEE>"; $a = strip_tags($str); $b = strip_tags($str, "<B><I>"); echo $a . <br>. $b; ?> Yukardaki kod altrldnda ilk echo metindeki tm etiketleri karlm halde grntledii halde ikinci echo komutunda <b> etiketinin etkisi devam etmektedir. 477

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

nk stripslashes kullanlrken bu etiketin karlmamas istenmitir

PHP ile Header Kullanm


Bir web tarayc bir web sunucuya bir dkman istedii gnderdiinde web sunucu istenilen dkmann yansra header(balk) ad verilen baz aklayc ve ynlendirici bilgiler de gnderir. Bunar aslnda http protokol ile tanmlanm eitli parametreler ve bunlara ait bilgilerdir. rnein kredi kart ilemlerinin olduu bir sayfann taracnn nbelleine alnmasi demek kredi kart numarasnnda saklanmas demektir. Bu durumda header bilgileri kullanlarak sayfann n bellee alnmamas salanabilir. Http doas gerei header bilgileri kullanlaca zaman kod iinde bu fonksiyondan daha nce ekrana kt yaplmam olmaldr.

header() fonksiyonu-(Balk bilgilerini kullanmak)


Yukarda tanmland zere balk bilgilerinin kullanmn salar. Komut aadaki paramerelerden birini ierebilir. Location Pragma Cache-Control Content-Encoding Content-Language 478

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Content-Type Expires Referrer Last-Modified User-Agent Accept-Encoding Accept-Language

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

rnein

echo "ylesine header(Location : "deneme.html");

bir

: kt";

Kod parac beklendii gibi deneme.html dosyasn armayacaktr. Bu kstlama PHP' nin zayflndan deil HTTP protokolnn tanmlarndan kaynaklanmaktadr.

482

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

$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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

} } $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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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>&nbsp;| &nbsp;<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;

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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}

Giri sayfas yapmak


Sayfa tanmlanan sre kadar ekranda grnr ve daha sonra belli bir adrese gidilmesini salar. sitenizin nitelii hakknda fikir verir ve ilgi eken bir zellii vardr: <META HTTP-EQUIV="Refresh" CONTENT="5;URL=hedefurl.HTML"> <BODY> <IMG width="300" resmi"SCR="enter.jpg"> <BODY> Bu konuda en ok dikkat edilecek konu yksek bekleme srelerinden kanmaktr. Yada byle durumlarda hedefe sayfa iinde de link verilmelidir. Bylece ziyareti sabrl kp beklesede linke tklasada ayn yere gider. height="200" alt="Giri

490

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

Sayfada Tarih Yazdrma


Konuyu banda beri okuyupta PHP tarih fonksiyonlarn grd iseniz o da bir eymi PHP ile bunun alasn yapabiliriz diyebilirsiniz. Ancak bazen PHP eriimi olmadan bunu yapmak gerekebilir. Bu durumda mecburen aadaki kod gibi Javascript gerektiren bir blok parasn kodunuza eklemeniz gerekir. Biraz uzun grnebilir ama, hereyi bir tablo iinde gsteren bu kodu, istediiniz sayfaya dahil ederek, her sitede tekrar tekrar kullanmanz mmkn. Ancak dikkat etmeniz gereken konu; bu kod ziyaretinin sistem saatini grntler. PHP dilindeki gibi sunucu saatini deil. Bu kodu, yazarnn adn belirten satra yer vermek artyla, istediiniz gibi kullanabilir ve deitirebilirsiniz. Kod iindede grebileceiniz gibi orijinal gelitirici Caroly B. Allard adl bir webmasterdr. Aadaki hali ise bir baka webaster tarafndan biraz deitirilmi halidir. Bununla birlikte ben ahsen ekrana kullancnn sistem saatini grntlemek iin bunca kod eklemeye ve zahmete girermiyim diye sorulursa cevabm hayr olur. nk kullanc cidden saati renmek isterse, sa alt keye sistem bildirim alanna bakar olur biter, o zaman bunun iin zahmete girmeye deermi dnmek lazm. Ancak yinede el altnda olmas iin kod aada grlmektedir. <TABLE WIDTH="75%" BORDER="0" CELLSPACING="5" CELLPADDING="5"> <tr><td WIDTH="100%"> 491

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

<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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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 += 'CELLPADDING="0" HEIGHT="34">';

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

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

HTML-CSSPHPMYSQL ve SQL Derleme : brahim Halil Kutluay- 2007-2013

DER SRME DAR NOTLAR


Bir sonraki srmde Allah izin verirse daha ok rnek kod ekleyerek kitab daha ie yarar hale getirmeyi planlyorum. Kitaptaki hatalar ulaabilirler. bildirecekler web sitemden bana

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

You might also like