Top Banner
İbrahim Halil Kutluay Nisan 2013 HTML-CSS-PHP MYSQL-SQL
498

HTML Css Php SQL Mysql Rehberi

Apr 25, 2015

Download

Documents

ikutluay

HTML, CSS, PHP, Temel SQL komutları ve MYSQL komutları, DBMS mantığı ve Veritabanı Tasarımı, PHP myadmin kullanımını anlatan kitaptır
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: HTML Css Php SQL Mysql Rehberi

İbrahim Halil Kutluay

Nisan 2013

HTML-CSS-PHP MYSQL-SQL

Page 2: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

2

Ġçindekiler

Ġçindekiler ............................................................... 2

GĠRĠġ .................................................................... 21

Kullanım Kuralları ................................................... 23

HTML DĠLĠ ............................................................. 24

Bir Web Sitesi Bilinmesi Gereken Temel Bilgiler ........ 26

Bir web sitesi için .................................................... 26

Domain Uzantı Adları ............................................ 28

TCP / IP .............................................................. 29

PORT .................................................................. 30

Web Server ......................................................... 30

Apache ............................................................ 32

IIS .................................................................. 32

Bir Web Server yazılım paketi seçerken dikkat edilmesi gereken bir kaç ilkeyi sıralayalım: ........... 32

Web‘de Gezme ĠĢlemine Genel Bir BakıĢ ................. 35

HTML‘in baĢlıca özelliklerini Ģöyle sıralayabiliriz: .......... 36

Web Tarayıcıları ...................................................... 39

Microsoft Internet Explorer ................................. 39

Netscape Navigator ........................................... 40

Firefox ............................................................. 40

Opera .............................................................. 40

Google Chrome ................................................. 40

Yandex Browser ................................................ 40

Tarayıcılar Ġçin Yardımcı Programlar ve Ek Birimler .. 40

HTML Editörleri ....................................................... 42

Expression Web ................................................... 42

Dreamweaver ...................................................... 42

Word .................................................................. 42

NVU ................................................................... 43

HTML‘in Temel BileĢenleri ........................................ 44

Page 3: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

3

Etiketler (Tag) ..................................................... 44

HTML Yazım Kuralları ............................................ 45

HTML Dosyasının Bölümleri.................................... 45

Türkçe bilgi içeren bir sayfa örneği ise; ...................... 46

<html>...</html> ............................................... 47

<head>...</head> .............................................. 47

<title>...</title> ................................................. 47

<body>...</body> .............................................. 47

Meta Etiketleri Arama Motorları Ġçin Sitemize

Eklememiz Gereken Bilgiler ................................ 48

Meta Tağlarının GeliĢmiĢ Kullanımı ......................... 50

Sayfanın Süre AĢımını Belirtmek .......................... 50

Bir Sayfanın Belirli Bir süre Ekranda Kalıp

Otomatikman BaĢka Bir Adrese Yönlenmesini Sağlamak ......................................................... 50

Türkçe Karakterleri Görüntülemek-Kod Sayfası ........ 51

<BODY> Etiketinin Parametreleri ........................... 52

TrueType Fontlar-Harf GeniĢliği Serif ve Sans Serif

Harfler ............................................................. 52

H1,H2,H3,H4,H5,H6 BaĢlık Etiketleri .................... 53

<br> etiketi...................................................... 54

<p>…</p> etiketi ............................................. 55

Genel Biçimlendirme Etiketleri .................................. 57

Metni Koyu, veya Ġtalik Yazdırma ........................ 58

HTML Dilinde Renk Kodlaması ............................. 59

Güvenilir 216 Renk ............................................ 62

Sıralı Listeler..................................................... 65

Sırasız Listeler .................................................. 67

<HR> Etiketi ile Çizgi OluĢturma ......................... 68

Resim ve Multimedya Dosyalarını Kullanmak ........... 69

Marquee ile Resim Ve Metin Kaydırma .................... 71

Resimleri Kullanırken Dikkat Edilecekler; .............. 73

Page 4: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

4

Video ve Ses Dosyalarının Kullanımı ....................... 74

Tablolar ................................................................. 75

BaĢlık, Satır ve Veri Etiketleri................................. 75

Sütun ve Satır BirleĢtirme – Colspan- Rowspan ........ 78

Zemin - Bgcolor ................................................ 78

Tablonun geniĢliği- Width ................................... 78

Tablonun Çerçevesi - Border ............................... 79

Hücre içindeki boĢluk miktarı CELLPADDING ......... 79

Hücreler arası boĢluk miktarı CELLSPACING .......... 80

Sembol ĠĢaretlerinin HTML Dilindeki KarĢılıkları ........ 80

Genel Sayfa Kullanım ġekilleri .................................. 82

Çerçeveler -Frames ................................................. 86

Avantajları ........................................................... 86

Dezavantajları...................................................... 86

Frame Parametreleri ............................................. 88

Frame Satırları ve Sütunları ................................ 89

Yatay Dikey KarıĢık Frame OluĢturmak ................. 91

HTML‘de Bağlantı‘ya (LINK) GiriĢ.............................. 93

HTML‘de Bağlantı Türleri .......................................... 97

HTTP bağlantıları: .............................................. 97

FTP bağlantıları: ................................................ 97

Haber Grupları: ................................................. 97

Elektronik Posta Bağlantısı: ................................ 98

Dosya Bağlantıları: ............................................ 98

Diğer bağlantılar: .............................................. 98

Resimleri Link BaĢlığı Vermek Ġçin Kullanmak .......... 99

Resim Haritası (Image Map) ile Link Kullanımı ....... 100

Link Verirken Relative (göreceli) ve Absolute (mutlak)

Adreslemelerin Farkları ....................................... 101

KULLANICI ĠLE ETKĠLEġĠM VE FORMLAR .................. 103

Form Etiketinin Alt Seçenekleri ............................ 106

Form Elemanları Çizelgesi ................................... 107

Page 5: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

5

INPUT ............................................................... 110

Kullanıcının klavyeden metin girmesi için: ............. 113

Parola GiriĢi için: ............................................. 113

Onay Kutusu için (Check iĢareti): ...................... 113

Tekil Seçme Kutusu için (Radyo düğmesi): ......... 114

Listeleme Kutusundan SeĢmek Ġçin (SELECT)...... 114

Uzun Metin GiriĢi Ġçin (TEXTAREA) ..................... 115

Gönder ve Sil düğmeleri (Submit ve Reset) ........ 115

Tabindex ........................................................ 116

URL Kodları .................................................... 118

CSS ile Biçimlendirme Teknikleri, Dinamik HTML ....... 120

CSS Stillerine Neden Ġhtiyaç Duyulur .................... 120

Cascading Style Sheets -CSS ve Kullanım ġekilleri . 121

Yerel Stil ġablonu ........................................... 122

Sayfa Ġçi Global Stil ġablonu ............................ 122

Site Ġçi Global Stil ġablonu ............................... 124

Birden fazla stil Ģablonu verilirse Tarayıcı ne yapar? 125

HTML içinde bölüm oluĢturma (DIV) ........................ 126

CSS ve Seçici(Selector) Kavramı ve Seçici Tipleri ... 127

ĠsimlendirilmiĢ Seçiciler .................................... 127

Sınıf Seçiciler .................................................. 128

Karma Seçiciler (Pseude Classes) ...................... 129

ġartlı Seçiciler (Contextual Selectors ) ............... 131

Bir Alana Tanımlı Stillerin DıĢında Stil Uygulamak .. 133

CSS Blokları ve Denetlenebilir Özellikler ................... 133

CSS Biçimlendirme Tablosu ................................. 133

Font Özellikleri Ġçin CSS Kullanımı: .......................... 139

FONT-FAMILY (Yazıtipi ailesi): .............................. 139

FONT-STYLE(YazılıĢ ġekli): .................................. 140

FONT-VARIANT (Yazıtipi türü):............................. 140

FONT-WEIGHT (Yazıtipi Koyuluğu): ...................... 140

FONT-SIZE (Yazıtipi boyutu): .............................. 141

Page 6: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

6

Renk ve Zemin Özellikleri: ................................... 142

Metin Özellikleri: ............................................. 143

Konum (Pozisyon) Özellikleri ............................... 145

Konum ―POSITION:‖ Değerleri ......................... 146

CSS ve Katman (Layer) Kavramı .......................... 147

Katman Ġndeksi – (Z-index): ............................ 149

BoĢluk bırakma, Margin : .................................... 150

Xhtml BELGE TÜRÜ ............................................ 151

Sonuç .................................................................. 152

Altın Öğütler ......................................................... 153

Hosting Hizmeti Alırken ...................................... 153

Web Sitesi Yaparken ........................................... 153

Site Tasarımı Adımları ......................................... 154

Bir Site Tasarlarken ............................................... 156

Bir Web Sitesinin Tutulmasını Sağlayan Etkenler ....... 158

Tanıtım ............................................................. 159

Kullanıcı Dostu Tasarım ....................................... 160

EriĢilebilirlik ....................................................... 160

Kaliteli Ġçerik ..................................................... 161

Geri Besleme ..................................................... 161

Php Programlama Dili ............................................ 162

Php Programlama Dili ............................................ 162

Php Dilinin GeçmiĢi ............................................. 162

Neden PHP ........................................................ 164

Interaktif Web Sayfaları Hazırlamak Ġçin Yöntemler 165

PHP ve ASP KarĢılaĢtırması .................................. 167

PHP ve Cold Fusion KarĢılaĢtırması ....................... 169

PHP Dilinin Kapasitesi ......................................... 169

PHP Nasıl ÇalıĢır ................................................. 170

PHP Dili ve Veritabanı Programları ile ĠliĢkisi ............. 172

PHP Dilinin GeniĢletilebilirliği .................................. 175

Bazı PHP Kütüphaneleri ve iĢlevleri ....................... 175

Page 7: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

7

PEAR (PHP Extension and Application Repository) .. 179

PHP - Web Sunucusu – PHP Kurulumu ..................... 179

XAMPP .............................................................. 180

APPSERV ........................................................... 180

Uniform Server .................................................. 181

EasyPHP ........................................................... 181

Php Öğrenmek Zormu ........................................... 182

Ġlk PHP Programımız – Merhaba Dünya .................... 182

PHP KOD YAZIM KURALLARI ................................... 182

Açıklama (Yorum) Satırları ..................................... 187

PHP ile Ekrana Çıktı Verme ..................................... 189

echo() fonksiyonu-(Ekrana yazdırma) ................... 189

print() fonksiyonu – (Ekrana Veri Yazma) .............. 190

Escape Kodlar .................................................... 191

DeğiĢken Nedir ? ................................................ 192

DeğiĢken Türleri ................................................. 195

Alfanümerik DeğiĢkenlerin Ġçeriğine Dizi Olarak EriĢme ....................................................................... 196

Diziler (Array) .................................................... 197

Çok Boyutlu Diziler ............................................. 198

Dizi Tanımlama Kuralları ..................................... 199

Nesneler (Objects) ............................................. 200

Sabit Değerler - Constants .................................. 201

define ("SABIT_ADI", değeri); ............................. 202

Operatörler .......................................................... 204

Aritmetik Operatörler: ........................................ 205

BirleĢik Atama Operatörleri .................................. 207

Bir Arttırmak veya Azaltmak için .......................... 208

Kontrol Blokları ve KarĢılatırma Operatörleri ............. 208

KarĢılaĢtırma Operatörleri ...................................... 208

ĠĢlem Önceliği Sıralaması .................................... 211

if komutu ............................................................. 212

Page 8: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

8

if-endif Kullanımı ve PHP ile HTML Kodunu Ayırma .. 215

Endif .............................................................. 217

switch komutu ...................................................... 217

Tek KoĢula Göre Ġki Sonuç - Üçlü Operatör (Ternary Operatör)............................................................. 220

Döngü Kavramı ..................................................... 220

For Döngüsü ...................................................... 221

While Do Döngüsü .............................................. 223

Do While Döngüsü .............................................. 223

For .. Each Döngüsü ........................................... 225

Döngüyü Kırmak için Break Komutu ..................... 226

Döngüyü Devam Ettirme : Continue ..................... 227

Döngü Ġçinde Döngü Kullanımı ................................ 228

Döngü ve Kontrol Bloklarında PHP ve HTML Ġç içe Kullanım .............................................................. 229

BaĢka Bir Dosyayı Ġthal Etme ................................. 230

include() fonsiyonu ............................................. 231

require() fonksiyonu ........................................... 231

include_Once ve require_Once ............................. 231

include() ve türevlerindeki güvenlik açığı .............. 233

include() ile Kodun Yeniden Kullanımı ................... 234

HEREDOC Nedir ................................................. 235

Fonksiyon Kavramı ve Kategorilere Göre PHP Fonksiyonları ........................................................ 236

DeğiĢkenlerle ĠĢlem Yapan Fonksiyonlar ................ 237

isset() fonksiyonu (değiĢkene değer atanmıĢ mı

kontrol etmek) ................................................ 237

unset() fonksiyonu (değiĢkeni hafızadan atmak-yok

etmek) ........................................................... 238

empty() (DeğiĢken boĢmu) ............................... 238

is_string(), is_integer(), is_double() fonksiyonları ile

tip tespiti........................................................ 239

Page 9: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

9

print_r () fonksiyonu ........................................ 240

DeğiĢken Tiplerini DönüĢtürme ve DeğiĢken Tipini Öğrenme ........................................................ 241

gettype() fonksiyonu (DeğiĢken tipini alma)....... 242

settype() fonksiyonu (değiĢekene bir tip atama) . 243

Dizilerle ĠĢlem Yapan Fonksiyonlar ..................... 245

array_merge() fonksiyonu- (Dizileri birleĢtirme) .. 246

array_push() fonksiyonu–(Dizilere değiĢken ekleme) ..................................................................... 246

array_shift() fonksiyonu–(Dizinin ilk elemanını silme) ..................................................................... 247

array_slice() fonksiyonu – (Diziden kopyalama) .. 247

sort() ve rsort() fonksiyonları-(Dizileri sıralama).. 248

asort() ve ksort() fonksiyonları-(ĠliĢkili dizileri sıralama) ....................................................... 248

Program Durdurma Fonksiyonları ............................ 249

exit() fonksiyonu (kodun çalıĢmasını durdurmak) ... 249

die() fonksiyonu (kodun çalıĢmasını durdurmak) .... 249

eval() fonksiyonu (kodun çalıĢmasını durdurmak) .. 249

Tarih ve Zamanla ĠĢlem Yapma ............................... 250

Avantajları ........................................................ 250

Dezavantajı ....................................................... 251

time() fonksiyonu (Ģu anki zaman bilgisini alma) . 251

microtime() fonksiyonu (Ģu anki zaman bilgisini

hassas birimle alma) ........................................ 251

strtotime() fonksiyonu (Metni zaman bilgisine

çevirme) ........................................................ 252

date () fonksiyonu (tarih zaman bilgisini metne

çevirme) ........................................................ 252

mktime() fonksiyonu (sayılardan tarihi oluĢturma)

..................................................................... 256

checkdate() fonksiyonu-Tarih geçerli mi ............. 257

Page 10: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

10

setlocale() fonksiyonu (bölgesel ayarlar) ............ 257

Tarih Bilgilerini Türkçe Yazdırmak ...................... 258

getdate() fonksiyonu (tarih zaman bilgisini alma) 259

Matematiksel ĠĢlemlerde Kullanılan Fonksiyonlar Ve ĠĢlevleri .......................................................... 260

ceil() fonksiyonu (yukarı yuvarlama) .................. 260

floor() fonksiyonu (aĢağı yuvarlama) ................. 260

round () fonksiyonu (matematiksel yuvarlama) ... 260

rand() fonksiyonu (rastgele sayı üretme) ........... 261

mt_rand() fonksiyonu (rastgele sayı üretme) ...... 261

srand() ve mt_srand() fonksiyonları (ilk sayıyı

vererek rastgele sayı üretmek) ......................... 262

getrandmax() ve mt_getrandmax() fonksiyonları

(Üretilebilecek en yüksek sayı) .......................... 263

abs() fonksiyonu (mutlak değer) ....................... 263

sqrt() fonksiyonu (karekök alma) ...................... 263

pow() fonksiyonu (üs alma) .............................. 263

hypot() fonksiyonu (hipotenüs hesaplama) ......... 264

log() fonksiyonu (logaritma) ............................. 264

log10() fonksiyonu (logaritma) .......................... 264

base_convert() fonksyionu (sayının tabanını değiĢtirme) ..................................................... 264

bindec() fonksiyonu (desimal düzene çevirme) .... 265

decbin() fonksiyonu (Onluk düzenden ikilik düzene

çevirme) ........................................................ 265

dechex() fonksiyonu (16 lık düzene çevirme) ...... 265

decoct() fonksiyonu (8 lik düzene çevirme)......... 265

hexdec() fonksiyonu (Hex düzeninden ikilik düzene

çevirme) ........................................................ 265

octdec() fonksiyonu (8‘lik düzenden 2‘lik düzene

çevirme) ........................................................ 266

max() fonksiyonu (en büyük değeri bulma) ........ 266

Page 11: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

11

min() fonksiyonu (en küçük değeri bulma) ......... 266

Trigonometrik fonksiyonlar ..................................... 266

sin() fonksiyonu (sinüs) ................................... 266

cos() fonksiyonu (kosinüs) ............................... 266

tan() fonksiyonu (tanjant) ................................ 266

asin() fonksiyonu (arcsinüs) ............................. 266

cos() fonksiyonu (arckosinüs) ........................... 267

atan() fonksiyonu (arctanjant) .......................... 267

deg2rad() fonksiyonu (açıyı radyana dönüĢtürme)

..................................................................... 267

rad2deg() fonksiyonu (açıyı radyana dönüĢtürme)

..................................................................... 267

Metin ĠĢleme Fonksiyonları ............................... 268

substr() fonksiyonu (Metnin bir parçasını alma) ... 268

chr() fonksiyonu (ASCII kodun karakter karĢılığı) 270

ord() fonksiyonu (Karakterin ASCII kodunu bulma)

..................................................................... 270

strlen() fonksiyonu (Metnin uzunluğunu bulma) .. 270

count_chars() fonksiyonu (Metin içinde karakterlerin tekrar etme sayısını bulma) .............................. 271

str_word_count() fonksiyonu (Metin içindeki kelime sayısını bulma)................................................ 271

strpos() ve stripos() fonksiyonları (Metnin bulunduğu pozisyon) ....................................................... 272

strstr () ve stristr () fonksiyonları (Metnin ilk bulunduğu yer) ............................................... 273

wordwrap() fonksiyonu (Metni satırlara ayırma) .. 274

explode() fonksiyonu (Metni bölümlere ayırma) ... 274

implode()fonksiyonu (Metni bölümlere ayırma) ... 275

strtoupper() fonksiyonu (büyük harfe çevirme) .. 275

strtolower () fonksiyonu (küçük harfe çevirme) .. 275

Page 12: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

12

ucfirst () fonksiyonu (ilk harfi büyük harfe çevirme)

..................................................................... 275

ucwords () fonksiyonu (kelimelerin ilk harfini büyük

harfe çevirme) ................................................ 276

number_format() fonksiyonu (Rakamları ekrana

biçimlendirerek yazdırmak) ............................... 276

strcmp () fonksiyonu (iki metni karĢılaĢtırma) ..... 277

strcasecmp () fonksiyonu (iki metni karĢılaĢtırma) ..................................................................... 278

str_pad () fonksiyonu (metnin etrafını boĢlukla (yada karakterle) destekleme) ................................... 278

printf() ve sprintf() fonksiyonu (biçimlendirerek çıktı verme)........................................................... 279

parse_str() fonksiyonu (get ile alınan değiĢkenleri parçalayarak bir diziye atma) ............................ 283

Veri ġifreleme Fonksiyonları ................................... 284

cyript() fonksiyonu (Metni verilen bir anahtara göre Ģifreleme) ....................................................... 284

sha1() fonksiyonu (Metni hash algoritması ile Ģifreleme) ....................................................... 285

md5() fonksiyonu (Metni MD5 algoritması ile Ģifrelem) ........................................................ 286

Düzenli Ġfadeler (REGEXPS) .................................... 287

Temel Seviye Regexpler ...................................... 288

BaĢlangıç Düzeyi Regexpler ................................. 289

Üst Düzey Regexp Ġfadeleri ................................. 290

En Üst Seviye (Guru ) Düzeyi Regexp Ġfadeleri....... 292

preg_match() fonksiyonu (metinler eĢitmi) ......... 294

preg_match_all() fonksiyonu ............................ 295

ereg() fonksiyonu (dizilim arama) ..................... 295

eregi() fonksiyonu (dizilim arama) ..................... 296

Page 13: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

13

ereg_replace() fonksiyonu (dizilim arama ve

değiĢtirme) ..................................................... 296

split() fonksiyonu (metni parçalara ayırma) ........ 297

sql _regcase() fonksiyonu (düzenli ifade üretme) 298

Kullanıcı Tanımlı Fonksiyonlar GeliĢtirmek ................ 299

Basit Bir Fonksiyon Yazalım - myecho ................... 299

GLOBAL ve STATĠK DEĞĠġKENLER .......................... 302

Dizi Fonksiyonları .................................................. 305

array() fonksiyonu (değerleri diziye çevirme) ...... 305

count() fonksiyonu (dizinin eleman sayısını bulma) ..................................................................... 305

print_r () fonksiyonu (değiĢken içeriğini yazdırma) ..................................................................... 305

var_dump () fonksiyonu (değiĢken içeriğini yazdırma) ....................................................... 305

Dizileri Sıra ile ĠĢlemek .......................................... 307

list() fonksiyonu .............................................. 307

each() fonksiyonu ........................................... 307

For.. Each ile dizileri iĢlemek .................................. 307

For ile dizileri iĢlemek ............................................ 308

PHP ve Formlar ..................................................... 309

Süper Globaller (Superglobals) ............................ 309

Form Dizaynında Altın Kurallar ................................ 312

Formlardan Bilgi Alma ........................................... 313

Form Verilerini ĠĢleme (Ġki dosya ile) ....................... 313

Form Verilerini ĠĢleme POST Metodu ........................ 316

Form Verilerini ĠĢleme (Tek dosya ile) ..................... 317

Form Verilerini ĠĢleme POST Metodu ........................ 320

Hesap Makinesi Programı ....................................... 322

Basit Bir ġifreli GiriĢ Sayfası ................................... 324

Birden Fazla Sayfaya Yayılan Formlar ...................... 325

PHP ile Posta Gönderme......................................... 325

Page 14: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

14

mail() fonksiyonu – PHP ile eposta göndermek ....... 326

Web Sayfasından Bir Siteye Dosya Yükleme (Upload) 333

PHP SERVER DEĞĠġKENLERĠ .................................. 336

Kullanıcının Girdiği Değerlerin Doğruluğunu Kontrol Etme ................................................................ 338

Windows ve Unix Dosya EriĢim Yetkilendirmesi ...... 339

PHP Klasör Fonksiyonları ........................................ 341

mkdir() fonksiyonu (Klasör oluĢurmak) .............. 341

rmdir() fonksiyonu (Klasör silmek) .................... 341

chdir() fonksiyonu (Klasör değiĢtirmek) .............. 341

is_dir() fonksiyonu (Dizin mi) ............................ 341

opendir() fonksiyonu (Klasörü açmak) ............... 342

readdir() fonksiyonu (Klasörü okumak-listelemek)

..................................................................... 342

closedir() fonksiyonu (Klasörü kapatmak) ........... 342

PHP Dosya Fonksiyonları ........................................ 345

file_exits() fonksiyonu (Dosya var mı?) .............. 345

filesize() fonksiyonu (Dosya boyutunu bulma) ..... 346

is_file() fonsiyonu (Dosya mı ) ......................... 347

is_readable() fonksiyonu (Dosya okunabilir mi?) . 347

is_writable() fonksiyonu (Dosya yazılabilir mi? ) .. 348

is_executable() fonksiyonu (Dosya çalıĢtırılabilir mi?

) ................................................................... 348

touch() fonksiyonu (dosya oluĢturma) ................ 349

unlink() fonksiyonu (dosya silme) ...................... 350

copy() fonksiyonu (dosya kopyalama) ................ 350

readfile() fonksiyonu (Dosyayı satır satır okumak ve ekrana yazmak) .............................................. 350

fopen () fonksiyonu (dosya açma) ..................... 351

fgets () fonksiyonu (dosyadan satır satır okuma) . 352

fseek () fonksiyonu (dosya içinde bir yere

konumlanma) ................................................. 352

Page 15: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

15

fread () fonksiyonu (dosyadan belirli sayıda karakter

okuma) .......................................................... 353

fgetc () fonksiyonu (dosyadan birer birer okuma) 353

feof () fonksiyonu (dosya sonuna gelindi mi) ...... 353

fclose () fonksiyonu (dosyayı kapat) .................. 353

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

flock() fonksiyonu (Kullanımdaki dosyayı kilitleme) ..................................................................... 357

fileadate() fonksiyonu (Dosyaya son eriĢim tarihi- file access date ) .................................................. 359

filemdate() fonksiyonu (Dosyanın son değiĢtirilme tarihi- file modification date) ............................. 359

filecdate() fonksiyonu (Dosyanın oluĢturulduğu tarih - file creation date) .......................................... 359

CSV Dosya Fonksiyonları ........................................ 359

fgetcsv() fonksiyonu (CSV dosyasını satır satır okuma) .......................................................... 360

fputcsv() fonksiyonu (Değerleri CSV formatında yazma) .......................................................... 361

KullanıĢlı Bir Örnek Kayıt Arama ............................. 362

Öğrenci Notlarını Webde Yayınlama ...................... 362

Basit Telefon Rehberi ............................................ 365

Basit Sözlük ......................................................... 369

Basit Ziyaretçi Defteri ............................................ 372

PHP Çerez - Cookie Fonksiyonları ............................ 377

setcookie() fonksiyonu – (Çerez bırakma) .......... 379

Aynı sayfada birden fazla çerez bırakmak .............. 383

PHP Dilinde Oturum – Kullanımı .............................. 384

PHP ve MYSQL Kullanımı ........................................ 385

MySQL Nedir ? ...................................................... 386

Veritabanı ve Tablo Nedir ....................................... 387

Page 16: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

16

Mysql Tablo Tipleri ................................................ 387

Mysql Veri Tipleri ............................................... 387

Metin tipleri .......................................................... 388

CHAR ve VARCHAR Farkı ........................................ 388

BLOB ve TEXT Alanlar ...................................... 389

Sayısal Veri Tipleri ................................................ 389

Tarih / Zaman Tipleri ............................................. 390

Küme Tipi ............................................................ 391

Tablo Tasarlama, Key Ve Ġndex Kullanımı ................. 392

MYSQL ‗i Komut Satırından Yönetmek ................... 395

Mysql‘i BaĢlatmak .............................................. 395

Komut Satırından Veritabanı OluĢturmak .............. 395

Komut Satırından Tablo OluĢturmak ..................... 395

Komut Satırından Veri GiriĢi ................................ 396

Komut Satırından Veri Sorgulama ........................ 396

Komut satırından Bilgi DeğiĢikliği Yapmak ................ 397

Komut Satırından Kayıt Silmek ............................... 398

SQL Dilinin Tarihçesi.............................................. 399

ĠliĢkisel Bir VTYS Ġçin 12 kural ................................ 400

SQL Dilinin Bölümleri ............................................. 403

A. DDL (DATA DEFINITION LANGUAGE) KOMUTLARI ....................................................................... 404

B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI ....................................................... 404

Veritabanı içindeki seçmek, değiĢtirmek, güncellemek ve silmekle ilgili SQL deyimleridir. ............................... 404

C. DCL (DATA CONTROL LANGUAGE) KOMUTLARI .. 404

SQL Komutları ve Örnekler ..................................... 405

A. DDL KOMUTLARI ............................................ 406

CREATE Komutu .............................................. 406

Page 17: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

17

CREATE komutu tablo ve view gibi bir veritabanı nesnesi

yaratmayı sağlar. (Create ayrıca yeni veritabanıda oluĢturabilir.) ....................................................... 406

Mysql‘de sütun adlarını sınırlamak için ― ` ‖ karakteri kullanılır. Normalde bu verilmedende iĢlem yapılır.

normal SQL nostasyonlarında bu karaktere gerek yoktur. .......................................................................... 406

Kullanım Yapısı: ................................................. 406

ALTER DEYĠMĠ................................................. 407

Daha önce yaratılmıĢ nesnenin değiĢtirilmesini sağlar. Örneği bir tablonun tasarımını değiĢtirmek gibi. ........ 407

ALTER TABLE ders01a ADD msn VARCHAR( 40 ) NOT NULL ; ................................................................. 407

DROP DEYĠMĠ ................................................. 407

Bir nesnesin silinmesini sağlar. ............................... 407

DROP TABLE ders01a ............................................ 408

B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI ....................................................... 408

SELECT DEYĠMĠ ............................................... 408

Temel Kullanımı: ................................................... 408

Parametrelerin Anlamları: ................................. 409

AS Deyimi ile Alias Tanımlama ................................ 411

Where Deyimi ....................................................... 412

And ve Or ile Birden Fazla KoĢulun Kontrol Edilmesi 414

In ve Not In Deyimleri ........................................ 414

Like ve Not Like Deyimleri: .................................... 415

Group By Deyimi .................................................. 416

Order By Deyimi: .................................................. 416

SELECT Ġçinde Aritmetik ĠĢlemler ............................ 417

Aritmetik ĠĢlem Operatörleri ................................... 418

Aggregerate fonksiyonları ...................................... 419

sum() fonksiyonu – Bir sütunun toplamı ................ 419

Page 18: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

18

Bir sütuna göre bir select ifadesinin toplamını alır. .... 419

avg() fonksiyonu – Bir sütunun ortalaması ......... 420

min() fonksiyonu – Bir sütundaki en küçük değer 420

max() fonksiyonu – Bir sütundaki en büyük değer ..................................................................... 421

count() fonksiyonu – Bir sorguya göre dönen kayıt sayısı ................................................................ 422

JOIN ĠġLEMĠ ......................................................... 422

INNER JOIN ....................................................... 423

LEFT JOIN ......................................................... 424

RIGHT JOIN ...................................................... 424

TABLOYU KENDĠSĠ ĠLE ĠLĠġKĠLENDĠRME (SELF JOIN) ....................................................................... 424

ĠÇĠÇE SELECT NESTED SELECTS .......................... 425

UNION KULLANIMI ................................................ 425

EXISTS KULLANIMI ............................................ 426

C. DCL (DATA CONTROL LANGUAGE) DEYĠMLERĠ ...... 426

GRANT DEYİMİ .................................................. 426

GRANT CREATE DATABASE, CREATE TABLE .............. 426

TO ayĢe ............................................................... 426

SQL FONKSĠYONLARI ............................................ 427

Metinlerle ĠĢlem Yapan SQL Fonksiyonları .............. 427

ascii() fonksiyonu ................................................. 427

char() fonksiyonu ............................................ 427

concat() fonksiyonu ......................................... 428

length() fonksiyonu ......................................... 428

DönüĢtürme Fonksiyonları ...................................... 428

conv() fonksiyonu ........................................... 428

bin() fonksiyonu .............................................. 428

oct() fonksiyonu .............................................. 428

hex() fonksiyonu ............................................. 428

Tarihlerle ĠĢlem Yapan SQL Fonksiyonları .............. 429

Page 19: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

19

TABLOLARDA DEĞĠġĠKLĠK YAPMAK: ........................ 431

INSERT Komutu .................................................... 431

UPDATE Komutu: .................................................. 431

DELETE DEYĠMĠ .................................................... 432

Kullanım biçimi: .................................................... 432

DELETE FROM tablo ............................................. 432

PHPMYADMIN ....................................................... 434

PhpMyAdmin Kurulumu ....................................... 435

PhpMyAdmin'i ÇalıĢtırma ve Tanıma ..................... 436

PhpMyAdmin ile Database OluĢturma .................... 438

PhpMyAdmin ile Tablo OluĢturma ......................... 438

Bir Veritabanının Modelini Çıkarmak ..................... 440

MySQL ve PHP ...................................................... 442

PHP Dili Mysql Fonksiyonları Tablosu ..................... 443

mysql_connect() deyimi(Database bağlantısı) ..... 446

mysql_select_db() deyimi ................................. 447

mysql_query() fonksiyonu- Mysql‘e sorgu göndermek ..................................................................... 448

mysql_numrows() fonksiyonu-Sorgudan Dönen Kayıt Sayısını Bulmak............................................... 448

mysql_result()-Sorgudan Dönen Kayıtları ĠĢlemek449

Kayıtları Ekrana Listelemek ............................... 449

DeğiĢkenleri Sorguların Ġçinde Kullanmak ........... 450

mysql_fetch_assoc() fonksiyonu- sorgu sonucundan

bir satır almak ................................................ 452

mysql_error() fonksiyonu- MySQL hatalarını konrol

etmek ............................................................ 452

PHP ile Veritabanı OluĢturma Listeleme ve Silme . 453

PHP ile Tablo OluĢturma, Listeleme, Güncelleme ve Silme ................................................................ 455

PHP ile Tablolara Veri GiriĢi, Listeleme, Güncelleme ve

Silme ................................................................ 457

Page 20: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

20

Örnek Uygulama: PHP ile ġifreli GiriĢ Sayfası Yapılması

.......................................................................... 460

PHP ve GÜVENLĠK ................................................. 473

addslashes() fonksiyonu (metindeki zararlı olabilecek karakterleri etkisiz yapmak) ............................. 476

stripslashes () fonksiyonu (etkisizleĢtirilmiĢ kodları ilk haline döndürmek) ............................................. 476

strip_tags () fonksiyonu (HTML etiketlerini metinden çıkarmak) ......................................................... 477

PHP ile Header Kullanımı ........................................ 478

header() fonksiyonu-(BaĢlık bilgilerini kullanmak) .. 478

Bir Nesne OluĢturalım ............................................ 483

PRATĠK BĠLGĠLER .................................................. 487

Resim Albümü: .................................................. 487

GiriĢ sayfası yapmak .......................................... 490

Sayfada Tarih Yazdırma ......................................... 491

CMS Sistemleri ..................................................... 495

DĠĞER SÜRÜME DAĠR NOTLAR ................................ 498

Page 21: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

21

GĠRĠġ

Son yıllarda internet denen olgu hayatımızın içine öyle

bir girdi ki artık çıkması mümkün olmayacak noktayı bile çoktan geçti. Önceleri fantazi yada prestij olsun diye web

sitesi yaptıran Ģirketler artık bunu zorunluluk olarak görmeye baĢladılar. Bir çok firma teklif mektuplarını

elden yada kağıda baskılı gönderen Ģirketleri doğrudan

elemeye baĢladı.

Internet denen Ģeyle 1992 de tanıĢtım. Daha doğrusu

internet denen sanal dünya ilk tanıĢmamızda sanal olarak gerçekleĢti. ArkadaĢlarla bazı üniversitelerin yurt

dıĢına doğrudan bağlanabildiğini konuĢmuĢtuk yani hepsi bu.

1995 yılında Çukurova Üniversitesinin internet kursuna katıldım. Ftp, ls, sz gibi komutları öğrenmiĢ ne de çok

sevinmiĢtim. Ardından sürekli takip ettiğim dergilerde, her Ģey internet, web tarayıcı, Netscape, Frontpage,

Outlook, ICQ, IRC gibi baĢlıklara çıkmaya baĢladı.

1998 yılında ilk resmi iĢime baĢladıktan bir süre sonra

Ģirketin ilk internet sitesi için benimde HTML öğrenmem gerekmiĢti. Bende Joe Barta‘nın yazdığı ücretsiz HTML

öğrenme setinden faydalanarak bugünkü Ģartlarda

yüzüne bile bakmayacağım ilk sitemi yapmıĢtım.

Derken Hakkı Öcal üstadın kitapçıkları çıkmaya baĢladı. HTML, Javascript, PHP… Hatta kendisi ile yazıĢan Daphne

rumuzlu arkadaĢım sayesinde birkaç kez e-mail gönderip yazıĢmıĢlığımızda oldu. Bu vesile ile bugünlerde çok sık

kullanılan ―web sitesi olmayana kız vermiyorlar”

Page 22: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

22

lafını ilk kez ben bir –emailimde yazdım Hakkı Hocama.

Patenti bana ait olsa gerektir ama kimse takmaz sanırım.

Etrafta yığınla Ġngilizce kaynak varken neden Türkçe bir

kaynak sorusu beni hep üzmüĢtü. Hakkı Öcal üstadın kitapçıkları bir açığı doldurmuĢtu evet ama onlarda

yüzeyseldi sonuçta. ĠĢin asıl kötü tarafı kaynak yerinde sayarken PHP çok yol katetmiĢti. Ġsim zikretmek

istemiyorum ancak para verip aldığım orijinal kitaplarda son derece yüzeysel konular, son derece yetersiz bir

anlatımla verilmiĢti.

Yabancılara baktığımda kendimize kızmaya baĢlıyordum.

Mesela Paul Hudson‘un online kitabı bizde yazılmıĢ bütün kitaplardan kat be kat iyiyken, web sitesinde bedava

yayınlanmaktaydı. Bruce Perens‘in kitapları da ilk yılda parayla satıldıktan sonra PDF halinde bedava veriliyordu.

Bense para verip aldığım Türkçe kitaplarda merak

ettiğim basit Ģeyleri bile bulamıyordum.

Sonuçta iĢ baĢa düĢtü ve 2007 yılında yazmaya

baĢladığım notlar, 2008 yılında bu kitabın ilk taslağına dönüĢtü. Ancak uzun bir süre ilgilenme Ģansım olmadı.

Artık daha fazla öyle kalmasına gönlüm razı olmadı ve sıkı bir çalıĢma ile yayınlamaya karar verdim.

ÇeĢitli kaynaklardan esinlenmeler olduğunu ilk baĢta yazmıĢtım. BaĢta dediğim gibi bu materyaller için maddi

beklenti içinde değilim, ancak kullanımı konusunda çeĢitli sınırlar da getirmek zorundayım. Çünkü onca emek

harcadıktan sonra bazılarının bunları kaynak bile göstermeden kendilerinmiĢ gibi sahiplenmesi ayıp ötesi

bir durum olurdu.

Page 23: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

23

Kullanım Kuralları

1. Bu çalıĢmanın tamamı veya bir kısmını kaynak

belirtmeden yayınlamanız, çalıĢmamımı sahiplenerek kendinizinmiĢ gibi sunmanız yasaktır.

Kaynak belirterek yaptığınız alıntıları bir e-mail ile bildirirseniz sevinirim.

2. ÇalıĢmamızdaki yazı ve örnek kodları ticari amaçla

satılan bir kitap için kullanamazsınız. Ticari olmayan çalıĢmalarınızda ise alıntı yapma

kurallarına uymanız gereklidir.

3. Bu çalıĢmayı tamamen öğrenciler ve öğrenmek

isteyenler bir Ģeyleri araĢtırmak istediklerinde bir kaynak bulabilsinler diye, maddi bir beklenti

olmadan hazırladım. Beni teĢvik edecek bir mail, bir teĢekkür, siteme verilmiĢ bir link bu konudaki

Ģevkimi artıracaktır.

4. Bu çalıĢma için harcağım emek hakkı için; Ģunu da

hatırlatırım ki: Koyduğum kurallar haricinde davranıp emek hırsızlığı yapanlardan hakkımı, öbür

dünyadaki hesaplaĢmada talep edeceğim.

5. Emek hırsızlarına karĢı yasal haklarım saklıdır. Bu

yasal müeyyideler konusunda sizi önceden

uyarmak gibi bir zorunluluğum yada lüksüm yoktur.

Umarım yararlı bir Ģeyler ortaya çıkarmıĢımdır.

Page 24: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

24

HTML DĠLĠ

Atası olan ARPA-NET ve daha sonra adeta çağı

değiĢtiren Internet çağımızın en büyük kütüphanesidir. Bu bilgiler değiĢ tokuĢ edilirken herkesin ortak bir dilden

konuĢması gerektiğinden buna bir çare arayan uzmanlar, 1986‘da, Standart GenelleĢtirilmiĢ ĠĢaretleme Dili

(Standart Generalized Markup Language, SGML) adıyla

bir protokol –dili- ortaya çıkardılar. Daha sonra ise günümüzde hala geliĢtirilen HTML protokolu üzeri bir

standart oldu.

Burada dil derken bir ayrıma dikkat etmek gerekir. HTML

bir dildir ancak bu dil makineye komut veren değil sadece bilgiyi görüntüleyecek olan bilgisayar programına

―yazının şurasını kalın yap, burada tablo yapılacak, kenarlıklı olacak, bu kısım bir pragraf” gibi komutlar

veren bir dildir. Bu bakımdan HTML‘nin bir betik dili olduğu hatırlanmalıdır.

HTML, önceleri Macintosh, ardından IBM uyumlu bilgisayarların yardım dosyalarının oluĢturulmasında

kullanıldı. Ancak, HTML kısaltmasının açık Ģekli olan Hypertext Markup Language‘de geçen Hypertext terimi,

1950 yılında Ted Nelson adlı bir bilgisayar uzmanı

tarafından içinde “hot” yani baĢka bir metinle veya resimle ilintilendirilmiĢ noktalar bulunan metin anlamına

kullanılmıĢtı. Apple bunu bir metne yada simgeye tıklayınca baĢka bir yere gitme yöntemi olarak kullandı.

Böylece metinler hareketli gibi davranmıĢ oluyordu.

Asıl aĢama ise 1989 yılında yaĢandı. CERN

uzmanlarından Tim Berners-Lee, laboratuvar yönetimini ortak bir yazı biçimlendirme sistemine ikna edebilmek

Page 25: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

25

için, “Enformasyon Yönetimi: Bir Öneri” baĢlıklı bir

rapor hazırlayarak bilgisay Ģebekeleri arasında bilgi alıĢveriĢi için Hypertextin ortak bir dil olmasını önerdi.

Doğrusu imza attığı devrimi kendisi bile hayal edememiĢ olsa gerek.

Bugünkü Internet‘i Internet yapan iki ana baĢlık vardır. Birincisi bilgisayar arası iletiĢimi gerçek zamanlı

olmaktan çıkartan ve iletiĢimi daha sağlam hale getiren HTTP bağlantı protokolünün geliĢtirilmesi; diğeri ise

HTML dilinin çok yalın ancak resim, ses, video gibiher materyali taĢımaya yetecek kadar güçlü olmasıdır.

Ağ teknoloji 1980‘lerin baĢlarında bağlantının gerçek zamanlı olmasını gerektiriyordu. Internet‘in adı da ağlar-

arası ağ anlamına gelen Ġngilizce ―Inter-networks-network: Inter-net kısaltmasından doğmuĢtur. Bir

bilgisayar diğerine bağlandığında iletiĢim gerçek zamanlı

ve birebir olma durumundaydı. Gönderilen ile alınan bilginin aynı olup olmadığını kontrol etmek ancak böyle

mümkündü. HTTP (Hypertext Transmission Protocol-Hyper Metin İletim Kuralları) bunu ortada

kaldırdı. HTTP protokolünü bir otobanın ve yanında uzayıp giden bir otoyol çifti gibi düĢünülebilir. Otoban

bakımda ise otoyoldan iĢinize devam edebilirsiniz.

HTTP‘nin , 1990 yılında kurulan World Wide Web

Konsorsiyomu‘nun (W3C) tarafından resmi standartları kabul edildi. Bu yüzden 1990 bugünkü Internet‘in de

doğum tarihi olarak kabul edilebilir. W3C sürekli olarak http ve HTML içinde bulunan eksiklikler için ortak

standartlar belirlemekte ve bunları duyurmaktadır.

Page 26: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

26

Web ortamında çalıĢan dinamik dillerin, HTML‘in

pabucunu dama attığı söylense de bu doğru değildir. Çünkü dinamik diller kullanıcının tarafında değil sunucu

tarafında çalıĢmaktadır. Yani dinamik dilin ASP veya PHP yahut JSP olması fark etmez çünkü kullanıcı hep HTML

verisi almaktadır.

Bir Web Sitesi Bilinmesi Gereken Temel Bilgiler

Bir web sitesi için

Her web adresi aslında bir numara bloku tarafından temsil edilir. Bu o sitenin IP numarasıdır. Örneğin

212.175.12.43 gibi.

IP numarası hatırlamak kolay olmadığından her

site için bir isim tanımlanmasının hatırlamayı kolay

kılacağı düĢünülmüĢtür. Bu isimlere alan adı (domain name) denir.

Hangi ismin hangi IP tarafından karĢılanacağını tutmak içinse NS (name server) dediğimiz rehber

bilgisayarlar kurulmuĢtur. (9 ana NS bilgisayar vardır ve tamamı ABD ‗dedir). Name server üzeride

kayıt sorgulamak içine DNS denilen servisten yararlanılır. Örneğin IP adresi olarak

194.27.128.101 gibi numaraları akılda tutmak zor olduğundan 1983‘te Wisconsin Üniversitesi DNS‘yi

geliĢtirmiĢtir. DNS isimleri rakamlara çevirir ve bu da daha kolay kullanım sağlar. Bazen Ttnet DNS

sunucuları hata verdiğinden ―internet çalıĢmıyor‖ diyenler olur. Oysa adres çubuğuna IP no yazılırsa

siteye eriĢim sağlanması mümkündür.

Page 27: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

27

Ġsimleri tahsis etmek ve çakıĢmaları önlemek üzere

Domain Register iĢi yapan Ģirketler kurulmuĢtur. Bunların iĢi uygun bir alan adını belirli bir ücret

karĢılığı kullanıcılara kiralamaktır. Kiralama iĢlemi ile birlikte bu alan adının internette hangi IP no

üzerinde olduğuda burada kayıt altına alınır.

Bir sitenin eriĢilebilir olması için DNS bilgisayarında

IP ile ağa bağlı bir bilgisayar olması gerekir. Bu kendi bilgisayarımızda olabilir ancak bu sistemlerin

gerçek sunucu olması iĢlemlerin aksamasını engelleyeceğinden ve bu sunucularda bizim için

hayli masraflı olacağından yeni bir iĢkolu doğmuĢtur. HOSTING dediğimiz bu iĢ kolunun ana

amacı kullanıcıların web sitelerini kendi sistemlerinde yayınlamak ve bunun karĢılığında

ücret almaktır.

Hosting Ģirketleri sunucu bilgisayarlarına Web server adı verilen bir program kurarlar. Bu

program ise 80 nolu portu dinleyere kendisine bağlanan kiĢilere istedikleri dosyaları iletir.

Web server ile kullanıcı TCP/IP iletiĢim protokolü üzerinden konuĢurlar.

Kullanıcı Web Server programına kendisine kurulu olan ve Browser (Web tarayıcı, Gezgin) adı verilen

programlar ile 80 nolu http portundan bağlanır.

Kullanıcıları ile Web server arasında köprü olarak

ise internete çıkarmak üzere Internet Servis Sağlayıcı (ISS- Ingilizcesi ISP – Internet Service

Provider) yer almaktadır. Zaten gerçek zamanlı iletiĢimi gereksiz kılanda bu iĢlemdir bir nevi.

Page 28: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

28

Kullanıcı örneğin www.tcmb.gov.tr yazdığında

browser bu talebi ISS‘ te bağlandığı bilgisayara iletmekte, o da gerekli arama iĢleminden sonra

bilgiyi talep etmektedir. ĠĢte bu aĢamada kullanıcı bağlantıyı kesse bile web server bunu

bilmemektedir. Zaten bilmesine de gerek yoktur.

Web sunucu HTML metni ( içerik ve o içeriğin

ekranda nasıl gösterileceğine dair biçimlendirme bilgileri) gönderir ancak metni biçimlendirme iĢlemi

kullanıcı tarafından yer alan browser tarafından yerine getirilir. Browserlar iĢte bu yüzden HTML

yorumlama motoru denilen engine barındırırılar.

Her yorumlayıcı farklı mantıkla ve ayrı firmalar

tarafından yazıldığından bazı metinlerin ekranda görüntüleme iĢleminde farklılıklar oluĢabilir. Ayrıca

bazen Ģirketler sadece kendi tarayıcısına yönelik

etiketleri üstelik W3C tarafından onaylanmadan motoruna ekleyebilir.

Örneğin BLINK etiketi NETSCAPE O yüzden site tasarımında ne çok bu konuya dikkat edilmelidir.

Dolayısı ile BLINK kullanılan bir sayfa Netscape ile normal görünürken, Safari ile farklı görünecektir.

En büyük Ģansımız ise tarayıcılar hatalı bir etikete rastlayınca bunu göz ardı ederek geri kalanları

çalıĢtırmaya devam etmesidir.

Domain Uzantı Adları

Günümüzde alan adları yaĢanan sıkıntıların ardından

çeĢitlendirilmiĢ ve alternatifler artmıĢtır. Ancak biz temel

standartlar üzerinden anlamlarını belirtelim.

Page 29: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

29

.com -Ticari Ģirketlere ait alan adını belirtir

.edu -Eğitim kurumlarına ait alan adını belirtir

.gov -Hükümet ve devlete ait alan adını belirtir

.mil -Askeri alan adını belirtir

.net -Ağ servis sağlayıcılarına ait alan adını belirtir

.org -Dernek, spor kulübü gibi organizasyonlara ait alan adını belitir

TCP / IP

Transmission Control Protocol / Internet Protocol Kelimelerinin baĢ harflerinden oluĢan Paul Baran

tarafından düĢünülmüĢ bir sistemdir. Paul Baran‘dan talep edilen Ģey Ģuydu. ―A,B,C Ģehirlerinde

bilgisayarlarımız var, A,B,C birbirleriyle konuĢabilsin,

bilgi gönderebilsin, ama A devre dıĢı kalsa bile B ve C konuĢmaya devam edebilsin, bu diğerleride içinde geçerli

olsun‖. Paul Baran bu iĢ için paket anahtarlamalı ağ iletiĢimi tekniğini düĢündü. Çünkü istenen Ģey verinin

iletilmesiydi. Her koşul ve şart altında bile verinin iletilmesi birinci öncelikti. (İlk öncelik güvenlik

olmadığı içinde bu gün güvenlik anlamında bir sürü ekstra yatırıma vs gerek duyulmakta). Veriler

paketlere bölünecek ve hedef yerde bu paketler birleĢince verinin kendisi oluĢmuĢ olacaktı.

Paul Baran daha sonra A,B,C lokasyonlarının nükleer füze merkezleri olduğunu öğrendiğinde

aslında geliştirdiği şeyin ne olduğunu anlamıştı anlamasına da bilmeden de olsa internetin ilk

öncüsü de olmuştu. Kısaca TCP / IP protokolü de

Page 30: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

30

Ģüphesiz ilk olarak askeri amaçlı geliĢtirilen bir

protokoldü ve temel amacı ―bir nükleer savaĢ anında tüm telefon Ģebekesi yok olsa bile biz iletiĢimi devam

edip karĢı tarafa nükleer saldırı ile cevap verebilelim.―

1983 yılında TCP / IP ye temel hali verildi. TCP / IP

protokolü Unix iĢletim sistemine eklenmiĢ ve 1984 yılında DNS kavramı oluĢturulmuĢtur. Günümüzde

internet hayatın içine öyle girmiĢtir ki, TCP / IP sadece internetin değil tüm ağ protokollerinin arasından en çok

kullanılan durumuna yükselmiĢtir.

PORT

TCP / IP de her bilgi bilgisayarlar arasında portlar üzerinden iletilir. Ġletim için geçilen yol aynı olsada

bilgilerin doğru adrese gitmesi için portların kullanımı Ģarttır. Bir gazete datıcısını düĢünün. Dağıtım kanalı hep

aynıdır. Sokaklar. Ancak gazetelere doğru yerlere

ulaĢtırmasının tek yolu adreslerdir. Yani kapı numaraları.

HTTP iĢlemleri için 80 nolu port kullanılır. Mail alıp

gönderme için 25 ve 110 nolu portlar kullanılır. MSN, ICQ, IRC, FTP vs vsvs tüm yazılımların ayrı bir port

kullanımı vardır.

TCP /IP veriyi iletirken baĢına port‘u da kaydettiğinden, o

paketin hangi yazılım için olduğu bilgisi de otomatikman iletilmiĢ sayılabilir. Böylece bilgisayarda aynı anda bir çok

yazılım ile internet kullanılabilmektedir.

Web Server

Internette tanımlı bir alan adına karĢılık gelen bir numara

(IP numarası) vardır demiĢtik. Bu IP nolu bilgisayar sayfa

Page 31: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

31

gelen kiĢilere istedikleri bilgileri gönderebilmek için hep

açık olmak zorundadır. Ayrıca bu bilgisayarda gelen talepleri toplayıp onlara cevap verecek bir de program

yüklü olmalıdır.

Web server aslında hem bu iĢlere yarayan programlara

hemde bu programların kurulduğu bilgisayarlara verilen bir isimdir. Kafa karıĢtırıcı olabilir ama ama iki tanımda

doğrudur. En çok bilinen Web Server programları Apache, MS Internet Information Server (IIS),

Xitami gibi yaygın sunuculardır.

Bu programların, bilgi alıp-vermenin yanı sıra, elektronik

posta alıp verme ve yönlendirme, veritabanlarına eriĢme ve içinden seçme yapma (Query, SQL, vb. gibi), kendi

sabit diskinde duran bir dosyayı alıp karĢı tarafa aktarma (FTP, Gopher, WAIS) veya karĢı tarafın vereceği dosyayı

alıp kendi sabit diskine kaydetme yeteneği olur.

Ġlk Web Server programı, yukarıda, HTML dilinin geliĢtirilmesindeki öncü konumu nedeniyle sözünü

ettiğimiz, Ġsviçre‘deki CERN kurumu tarafından geliĢtirildi; ama kısa zamanda UNIX platformunda,

anonim bir tarzda ve ücret ödemeden kullanılabilen bir Ģekil aldı. KiĢisel bilgisayarların UNIX gerektiren

bilgisayarlara oranla daha ucuz olması, Microsoft‘un NT, IBM‘in OS/2 iĢletme sistemlerinin UNIX‘e ciddî rakip

haline gelmiĢ bulunmaları nedeniyle, bu sistemlere dayalı Web Server programları da hızla artmaktadır.

Apache Web Server ise bir çok iĢletim sisteminde çalıĢabilmesi ve ücretsiz olması nedeniyle Linux ile

birlikte iyi bir ikili olmuĢ ve Internette en çok kullanılan

Page 32: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

32

Web Server olma özelliğini açık ara ile elinde

tutmaktadır.

Apache

Açık kaynak kodludur

Bir çok iĢletim sisteminde çalıĢabilir (hatta bir çok

sistemde zaten kurulu halde gelir)

Tamamen ücretsizdir

IIS

Kaynak kodu kapalıdır.

Windows iĢletim sisteminde çalıĢır.

Ücretsiz değildir.

Linux ve FreeBSD adlı, ücretsiz dağıtılan UNIX iĢletme sistemleri de, ticarî olanları aratmayacak niteliklere

sahiptir. Ayrıca bu tür ücretsiz programlar, Apache Web

Server‘ın ücretsiz sürümünü de içerdiklerinden sıfır maliyet ve kurulum ile web server edinmek mümkündür.

Bir Web Server yazılım paketi seçerken dikkat edilmesi gereken bir kaç ilkeyi sıralayalım:

1. Yazılım paketi yeterli güvenliği sağlayacak özelliklere sahip olmalıdır. Binalarda bir odadaki yangının yandaki

odaya sıçramasını önleyen ateĢe dayanıklı duvarlardan (Firewall) esinlenerek adlandırılan bir dizi program,

Web Server yazılımının bulunduğu bilgisayarın, kötü niyetli kiĢiler tarafından bozulmasına engel olmaktadır.

Ancak Web Server‘ın kendi içinde mevcut güvenlik

Page 33: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

33

önlemlerinin neler olduğunu dikkatle araĢtırmanız

gerekir. Bunuda tarafsız bir gözle yapmak gerekir örneğin çoğu kiĢi için Unix çok güvenli, Windows ise

berbattır yada bunun tersi düĢünülebilir. Oysa bu bir takım tutma olayı değild,r ve önyargılı olmak yanlıĢtır.

Asıl güvensiz olan sistem değil sistemin baĢında oturan sistem yöneticisidir.

Yönetici ne kadar dikkat ederse sistemde o kadar güvende demektir. Burada önemli olan, Internet‘e

açılmanın, iyi niyetli-kötü niyetli herkese açılmak olduğunu unutmamaktır. Özellikle form denilen,

HTML‘in ziyaretçi bilgisayarın evsahibi bilgisayara talepten baĢka Ģeyler göndermesine imkan veren

etiketlerini ve ona bağlı CGI (Common Gateway Interface-Ortak Geçit Arabirimi) adı verilen ziyaretçinin

ev sahibi bilgisayardaki programları harekete

geçirebildiği buluĢma noktasında yer alacak programları tasarlarken, daima kötüniyetli kiĢileri

dikkate alarak hareket etmek gerekir. Internet‘te güvenliğin ne kadar kolay sarsılabildiğine ve ne kadar

kolay önlem alınabileceğini bir örnek verelim.

Sayfanızda, ziyaretçinin doldurması gereken ―Elektronik Posta Adresiniz:‖ diye bir metin kutusu bulunduğunu

düĢünün. Bu kutuya bütün ziyaretçilerin elektronik posta adreslerini yazacaklarını düĢünüyor ve bu bilgiyi

iĢleyecek CGI programında, ziyaretçinin bu kutuya yazacağı bilgiyi, alıp doğruca Web Server‘ın ―Mail‖

programına veriyorsunuz.

Peki, ya kullanıcı adres yerine;

Page 34: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

34

[email protected]; mail [email protected]</etc/passwd”

yazarsa? Bu yaptığınız basit ama ölümcül hata sonucu, forma girilen bu adrese, bilgisayar sisteminizdeki bütün

password-parola dosyaları email ile gönderilecektir.

Oysa, programı yazan kiĢi, elektronik posta adresini Mail

programına gönderirken ―unless ($mail_to = ~/^[\w-.]+\@[\w-.]+$)‖ Ģeklinde bir satırla, girilen bilgideki

karakterleri kontrol etse sorun halledilebilecektir.

2. Özel Bilgilerin Korunması ve Doğrulatma: Web hizmeti sunan kiĢi, sadece baĢkalarının kendi

bilgisayar sisteminde arzu edilmeyen Ģeyler yapmalarını önlemekten değil, aynı zamanda

kendisine emanet edilen baĢkalarına ait bilgileri de saklamak ve baĢkalarından korumak zorundadır. Bu

bilgiler, ziyaretçinin adı, elektronik adresi, hatta kredi

kartı numarası olabilir. Bunlar, sizin Internet‘te çizdiğiniz portreye güvenilerek size verilmiĢ mahrem

bilgilerdir.

Ziyaretçi bu bilgileri size, kötüye kullanılmayacağı

güvencesiyle vermektedir. Aynı bağlamda, Web hizmeti sunan kiĢi olarak, sizin de bu bilgilerin

kolayca ve baĢkalarına açık hale getirilmeden doğrulatılmasına ihtiyacınız olacaktır. Web Server

programınız, örneğin kredi kartı numarasını, yeni programlar edinmeye ihtiyaç kalmadan

doğrulatabilmelidir.

3. Web Server, siteye yapılan ziyareterin kaydını uygun

Ģekle kayıt altına almalıdır? Örneğin sayfanıza kaç kiĢi uğramıĢ, sitenizin en çok hangi sayfası

Page 35: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

35

görüntülenmiĢ, en çok hangi dosya indirilmiĢ, han

gisteden sizin sitenize en çok ziyaretçi gelmiĢ bunların bilinmesi önemlidir.

Özellikle elektronik ticarete dayalı veya mesajını daha çok sayıda kiĢiye iletmek amacıyla hazırlanan Web

alanlarını iĢletenlerin, sayfalarının varlığını duyurmak için, mümkün olan her yoldan yararlanmaları gerekir.

Çok önemsiz gibi görünebilir ama Google içerik ile reklamı birleĢtirmeyi akıl eden reklam yapısı Ģu anda

alanında dünyanın en büyüğü olmayı baĢarmıĢ bir Ģirket. Örneği sitenize gelen ziyaretçi eğer mobilya

hakkında bilgi arıyor ise belkide mobilya almaya niyeti vardır bu durumda ona mobilya reklamı

gösterilmelidir… ĠĢte bu formül Google Ģirketini bir numara yapmıĢtır.

4. Web Server programıyla ilgili teknik destek ve sorun

çözme hizmeti alıp almamak, programın seçiminde belki de en önemli unsur sayılabilir.

Web’de Gezme ĠĢlemine Genel Bir BakıĢ

Internet ve intranet ortak dili, HTML dilidir. Bir Web sayfasında yer alan belgenin içindeki bazı kelimeler,

simgeler, fotoğraflar, grafik unsurlar veya bunların parçaları bir baĢka sayfa ile hiper-link kurularak,

bağlanmıĢtır.

Kullanıcı, hiç bir komut öğrenmek zorunda kalmadan, hiç

bir bağlantının Internet‘teki adresini bilmek zorunluluğu olmadan bu sayfalardaki bağlantıları tıklayarak, yazıdan

yazıya, Ģekilden Ģekilde, gidebilir. Aslında kullanıcı ya da

ziyaretçinin bir HTML sayfasıyla iliĢkisi burada da

Page 36: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

36

bitmemektedir. Çoğumuz ulaĢtığımız bir alanın adresini

Web tarayıcı programında sık sık ziyaret etmek istediği yerlerin arasına koyabilir (bookmark) ve arzu ettiği

zaman doğruca iĢaretlenmiĢ olan bu adreslere gidebilir.

HTML’in baĢlıca özelliklerini Ģöyle sıralayabiliriz:

1. Belge biçimlendirme: HTML, Web tasarımcısına, belgelerini ziyaretçinin ekranında nasıl oluĢmasını

istiyorsa öyle Ģekillendirme imkanı verir.

2. Bununla birlikte tarayıcı programlarının HTML

komutlarını yorumlayıĢlarında az da olsa fark vardır ve bu fark sayfalarınızın bir ziyaretçinin

bilgisayarında baĢta, diğerinin bilgisayarında baĢka

gösterilmesine yol açabilir. Ayrıca ziyaretçileriniz, tarayıcı programlara verdikleri komutlarla, aldıkları

sayfalarda genel değiĢiklik veya kısıtlamalar yapabilirler. Siz sayfanızda ne tür harf türü (font)

kullanmıĢ olursanız olun, ziyaretçiniz tarayıcı programa ―Sadece Times fontları kullan‖ demiĢ ise,

sayfanız bu ziyaretçinin ekranında sizin istediğinizden farklı biçimde görülecektir. Ziyaretçi

tarayıcı programına ―Grafik unsurları gösterme!‖ demiĢ ise, sayfalarınız ve tabiî vermek istediğiniz

görsel mesaj tamamen farklı bir nitelik kazanacaktır. Bu duruma rağmen, bugünkü

Ģekliyle HTML, Web tasarımcısına adeta bir gazete ya da dergi sayfası tasarlarcasına, oluĢturmak

istediği görsel etkiyi sağlamasına yeterli tasarım

araçları sunmaktadır.

Page 37: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

37

3. Ġlk çıktığında web sadece durağan sayfaların

aktarıldığı bir yer iken bugün canlı yayın radyo ve tlevizyonlara varıncaya kadar hayatımıza grmiĢtir.

Bununla birlikte HTML, bir kelime iĢlem ya da masaüstü yayıncılık programının oluĢturabileceği

görsel özelliklere sahip sayfalar oluĢturamaz. Bu kısıtlamalara, Internet‘i tasarlayan uzmanların,

platformlar (Windows 3.x, Windows 95/98, Windows NT, Unix, MacOS), donanımlar

(Macintosh, PC, Sun) ve tarayıcı programların hepsi tarafından doğru Ģekilde anlaĢılabilen bir

platform oluĢturma isteği sebep olmaktadır.

HTML, dililinin hassas ölçmelere ve biçimlendirmelere izin vermemesi HTML için eksiklik değil bilinçli bir tercihtir.

Çünkü bu durumda ancak belirli platformlarda çalıĢır duruma gelecekti. HTML dilinin platformdan bağımsız

olması adına bu yol seçilmiĢtir.

4. HTML ile oluĢturulacak statik alanların içine

dinamik sonuçlar doğuracak programlar konulabilir. Bu dillerle HTML sayfalarını

duraganlıktan çıkartmak ve ziyaretçi ile etkileĢen, ziyaretçinin arzu, beğeni ve özelliklerine göre

içeriğini değiĢtirebilen Web alanları tasarlamak mümkündür

5. Web‘de bulunan aĢağı yukarı bütün içerik yani metin, ses, video türü mer materyal sanat eseri

kabul edilmektedir. Kısaca telif hakkı ve bu hakka sahip birisi vardır. Dolayısı ile telif hakkı size ait

olmayan veya sahibi tarafından size izin verilmeden bir sanat eserini yayınlayamazsınız.

Page 38: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

38

Bir sanat eserini Web sayfanıza koymak ve

kamuoyunun ulaĢabileceği Internet gibi herkese açık bir ortama yerleĢtirmek, yasaların ―yayın‖

saydığı bir fiildir. Ġzinsiz sanat eseri yayınlamak ise, Türk Ceza Yasası‘na göre ağır hapis cezasıyla

cezalandırılan bir suçtur. Ceza yasaları olmasada bu ahlaki bir suçtur.

Page 39: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

39

Web Tarayıcıları

Bir Web tarayıcı kullanıcının yazdığı adresi yada tıkladığı

linki ilgili web serverdan talep eden varsa dönen bilgiyi içinde tanımlı motor ile yorumlayıp ekran görüntüsünü

oluĢturup ekranda gösteren yazılımdır.

Burada çok dikkat edilmesi gereken nokta Ģudur. Her tarayıcının yorumlayıcı motoru farklı kiĢiler tarafından

geliĢtirildiği için haliyle her komutu aynı Ģekilde

yorumlamaları beklenemez. ĠĢte bu yüzden bazı web sayfaları bir tarayıcıda diğerinde olduğundan farklı

görünebilirler. Web sitesini ziyaret edebilecek kiĢilere de illa Ģu tarayıcı kullanılmalıdır gibi bir sınır

konamayacağından sayfa bazı kiĢiler tarafından hatalı olarak görülecektir. ĠĢte bu yüzden web sitesi yaparken

mutlaka sayfanın diğer tarayıcılarda nasıl göründüğü

kontrol edilmelidir.

HTML‘i kullanarak, ticarî amaçlı Web tasarımı yapan kiĢi,

Internet ile bağlantılı bilgisayar kullanıcılarının (Internet kullanıcılarının) hepsinin ekranında aynı Ģekilde

gösterilecek sayfalar yapmaya mecburdur. Buna karĢılık bir firmanın intranet ortamı için Web tasarımı yapan kiĢi,

HTML‘in sadece kendi firmasının standart olarak

benimsediği tarayıcının anlayabileceği özelliklerinden yararlanması mümkündür.

Microsoft Internet Explorer

Windows ortamında tarayıcı piyasasına, diğer

tarayıcılardan sonra girmesine rağmen, Ģu anda pazarda %80 in üzerinde bir oranda kullanıma sahiptir.

Page 40: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

40

Netscape Navigator

Netscape Communications Corporation‘ın (NCC) piyasaya sürdüğü NN, IE‘ın hızlı yükseliĢi sonucu gerilemiĢ ve

sonunda yerini Open Source kardeĢi Firefox‘a bırakmıĢtır.

Firefox

Netscape tarayıcısının kaynak kodu üzerine geliĢtirilmiĢtir. Hızla yaygınlaĢmıĢtır. Firefox Google

tarafından da maddi anlamda desteklenen bir projedir

Opera

Norveçli bir firmanın geliĢtirdiği Opera standartlara en uyan tarayıcı olması ile ünlüdür. Sekmeli arabirimde ilk

defa Operada gelmiĢ bir yeniliktir. Günümüzde eski

günlerini aramakta olsada hala bir ölçekte kullanımdadır.

Google Chrome

Google‘ın çıkardığı tarayıcı olup Google adı üzerinde yaygınlaĢarak epey bir kullanım oranına kavuĢmuĢtur.

Yandex Browser

Rusya menĢeili arama motoru Yandex‘in Google

Chrome‘un açık kaynaklı kısmı üzerine kurulu tarayıcısıdır.

Tarayıcılar Ġçin Yardımcı Programlar ve Ek Birimler

Tarayıcılar eskiden sadece iletilen metni göstermekteydi.

ġimdi hiçbir eklenti gerekmeden bir çok resim dosyayısını gösterebilmekte ve çözücü (CODEC- COder

DECoder) yardımı ile video dosyalarını

Page 41: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

41

oynatabilmektedir. CODEC kullanılması tarayıcıların asıl

alanlarında kalmasına izin verir. Çünkü sürekli yeni görüntü ve ses formatları çıkmaktadır. Haliyle her

tarayıcının buna ayak uydurması mümkün değildir. Plug-In denilen ek birimler tarayıcıya tamamen farklı bir

programı açmak yerine, belirli bir tür dosya türünü ekranda canlandırabilme yeteneği kazandıran eklerdir.

Tarayıcı program bilgisayara kurulurken bu ek birimler olmaksızın (ya da çok yaygın olanları ile) yüklenir.

Page 42: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

42

HTML Editörleri

Genel olarak HTML editörleri iki grupta incelenirler, Metin

editörleri ve WYSIWYG editörler. Normal metin editörlerine en bilinen örnek Windows ile birlikte gelen

notepad programıdır. WYSIWYG editörler ise HTML dosyasını tarayıcı içindeymiĢ gibi göstererek kullanıcının

yazdığı metinlerin geri planda HTML karĢılığını

kaydederler.

Günümüzde editörler öylesine geliĢmiĢtir ki, hata

kontrolü, Mouse ile çizerek sayfa çatısı kurma, hazır temalar, hazır sayaç çeĢitleri, FTP ile sayfayı siteye

upload etme seçeneklerinin hepsini birden içinde barındıran editörler ortaya çıkmıĢtır.

Expression Web

Windows iĢletim sisteminde çalıĢır. Tema, WYSIWYG ve FTP desteği verir.

Dreamweaver

Hem metin hemde WYSIWYG tasarıma izin verir. Ayrıca

PHP, ASP, CF gibi dilerlide kullanmayı sağlar. Sürükle bırak form dizayn etme, veri tabanına otomatik bağlantı

ve sorgu dizayn etme, hazır formlar, FTP ile upload ve en önemlisi Mouse ile çizerek sayfa çatısını CSS formatında

çizebilmesidir.

Word

Word aslında kelime iĢlemcidir ama sayfaları HTML

olarak kaydetmeyede izin verir. En büyük sorunu ise Word ile oluĢturulan bir HTML sayfası, aynı iĢi yapan ve

Page 43: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

43

Notepad ile oluĢturulmuĢ bir sayfadan yakalĢık iki kat

daha büyük olmasıdır. Hele sayfada tablo da bulunuyorsa durum dahada vahimdir.

NVU

Bedava bir editördür. Composer kodu üzerine geliĢtirilmiĢtir. WYSIWYS tasarıma izin verir. Tablo

kullanma yeteneği kısıtlıdır. Frame vs konularda da kullanıcıyı sıkıntıya sokmaktadır.

Page 44: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

44

HTML’in Temel BileĢenleri

Bir web sitesinin temeli içeriktir. Resimde olsa metinde

olsa görüntüde olsa sonuçta hepsi içeriktir. Bu içerikler ise Etiket denilen (TAG) iĢaretleyiciler yardımıyla

biçimlendirilir.

Etiketler (Tag)

HTML komutları içeren ve tarayıcıların tanıyabildiği dosya, aslında içinde ASCII karakterlerden baĢka bir Ģey

olmayan, düz yazı dosyalarıdır. Tarayıcıya, sayfayı ekranda oluĢtururken vermesini istenilen biçimle ilgili

komutlar bir dizi özel etiketler ile belirtilir. Bunları içerikten ayırmak içinse ―<>‖ çifti arasına almak gerekir.

Sayfa tasarımı yaparken örneğin <b> etiketi kullanılırsa tarayıcıya ―ben buraya bu etiketi koydum. Artık benden

ikinci bir komut gelene kadar her Ģeyi ekrana KOYU olarak bastır‖ denilmiĢ olur. Dolayısıyla HTML‘de ilke,

önünde etiketi olmayan herhangi metne yer vermemektir. Önünde etiketi olmayan herhangi bir metin

parçası, tarayıcı tarafından temel paragraf olarak

nitelenir.

HTML, içinde kontrol kodu olmayan metin dosyasıdır.

Yani Wordde bir dosya yazdığınızda içinde HTML etiketleri kullanmıĢ ble olsanız bu dosya metin dosyası

olmadığından HTML dosyası değildir. Böyle bir dosyanın adındaki uzantıyı silerek, yerine ―.html‖ uzantısını

verilirse ekrana gelecek olan dosyadaki metin değil, Çinçe yada Japonca dilini çağrıĢtıran karakterler yığını

olacaktır. HTML düz yazı olduğuna göre, bir HTML dosyası oluĢturmak için, herhangi bir kelime-iĢlem

yazılımı kullanılabilir.

Page 45: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

45

HTML Yazım Kuralları

1. Etiketlerin büyük harfle veya küçük harfle

yazılması arasında fark yoktur. <br> ile <BR> aynı iĢi yapmaktadır.

2. Bir kaç istisna tiket hariç bütün etiketlerin birde sonlandırma çifti vardır. Sonlandırma için aynı

etiketin önüne ―/‖ (bölü) iĢareti konulur. Örneğin <strong>Türkiye</strong> gibi.

3. <!-- ile --> arasındaki metinler yorum olarak ele alınır ve gösterilmez.

İyi bir programcı açtığı etiketi kapatmayı unutmamalıdır. Bunun için en kolay yöntem

önce açma ve sonladırma etiketlerini yazma

sonra içerisini doldurmaktır.

HTML Dosyasının Bölümleri

HTML dosyası iki kısımdan oluĢur.

1. Head denilen baĢlık kısmı.

2. Body denilen metnin kendisi

Web tarayıcılar, HTML etiketini gördükten sonra hemen HEAD ve BODY etiketlerini arar ve ekrandaki sayfayı

buna göre biçimlendirirler.

Basit bir HTML örneği,

<HTML>

<HEAD>

BaĢlık Metni

Page 46: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

46

</HEAD>

<BODY>

Body Metni

</BODY>

</HTML>

<html>

<head>

<title> İlk Sayfam </title>

</head>

<body>

Sayfama Hoş geldiniz

</body>

</html>

Türkçe bilgi içeren bir sayfa örneği ise;

<HTML>

<HEAD>

<meta http-equiv = "Content-Type" content =

"text/html; charset = windows-1254">

</HEAD>

<BODY>

Page 47: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

47

Merhaba. Web Tasarım Rehberi‘ne HoĢ Geldiniz!

</BODY>

</HTML>

<html>...</html>

Örneklerde görüldüğü gibi bu etiket bloku tarayıcıya

HTML dosyasının baĢladığını ve bittiğini belirtir. Tüm diğer kodlar bu iki etiket arasına yazılır.

<head>...</head>

Etiketleri arasında ise sayfa hakkında bilgiler verilir. title gibi etiketler, anahtar kelimeler, sayfanın dili vs

burada yer alır. Bu alandaki bilgiler ekranda görünmezler. Sadece title tarayıcı baĢlığı olarak kullanılır.

<title>...</title>

Title etiketi tarayıcı penceresinin üstüne yazılacak olan baĢlığı belirtir. Yazılan metin penceresinin üstünde

tarayıcı adı ile birlikte yazılır.

<body>...</body>

Bu etiketler ise sayfanın ekranda görüntülenecek olan

kısmını yazdığımız bloktur. Parametreleri ile birlite sayfanın zemin rengini, linklerin rengini, arkaplan

resmini ayarlamak mümkündür.

Page 48: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

48

Meta Etiketleri Arama Motorları Ġçin Sitemize Eklememiz Gereken Bilgiler

Normal olarak oluĢturulan her sayfanın HEAD kısmına

sayfanın açıklamasının yapıldığı, sayfa hakkında anahtar kelimelerin belirtildiği meta etiketler konabilir ve

konulmalıdırda.

Anahtar kelimeler arama motorlarının sayfayı tanımasını

ve tespit etmesini sağlar. Yeni nesil arama motorları (Örn : Google gibi) meta etiketlerinin yanısıra belgenin

Gövde kısmındaki içeriği de dikkate alır. Eskiden sırf ziyaretçi çekmek için popüler metinlere meta

etiketlerinde alakasız yer verilir bir nevi kullanıcı aldatılırdı. Google BODY kısmınıda dikkate alarak bu iĢe

bir önlem almıĢ olmaktadır.

NAME: Sayfanın yazarı, sayfanın yayın tarihi, vb., bilgiler içerir. <META NAME="bilginin türü"

CONTENT="bilgi"> Ģeklinde yazılır.

<META NAME="keywords" CONTENT = "kelime1

kelime2 kelime3">

"keywords" sayfa hakkında bazı anahtar kelimeler

içerir. Böylece arama motorları için index oluĢturmaya yardımcı olur. (Dikkat: bu kısma ilgisiz alakasız Ģeyler

yazarak arama motorları aldatıldığından artık sadece bu alan değil komple içerik indekslenmektedir. Kısaca

kendinizi kandırmayın)

<META NAME ="description" CONTENT

="metin">

"description" etiketi site hakkında tanımlanma bilgisini

içerir. Bu etiketi tanımayan arama motorları ise

Page 49: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

49

sayfanın ilk bir kaç kelimesini tanımlama aracı olarak

kullanır. Örnek:

<META NAME="description" CONTENT ="KiĢisel PHP

sitem.">

<META NAME="author" CONTENT ="Adı

Soyadı">

Arama yapanlara siteler gösterilirken bazı arama

motorları site yazarını bu etiketi tarayarak bulur. Örnek:<META NAME="author" CONTENT="Türkiye"

HTTP-EQUIV: Ġçinde yer aldığı sayfanın, Web Server tarafından ziyaretçiye gönderilmesinde oluĢturulacak

Response Header (KarĢılık BaĢlığı) bölümünde yer alacak bilgiler içerir. <META HTTP-EQUIV="bilginin

türü" CONTENT="bilgi"> Ģeklinde yazılır.

AĢağıda, meta etiketlerinin content bölümünde açıklama

yapılmıĢ ve parantez içinde bu sayfa için uygun örnekler

verilmiĢtir.

<meta name="author" content="Sayfayı düzenleyenin adı">

<meta name = "Description" content = "Sayfanın açıklaması">

<meta name="keywords" content="Arama motorlarına yardımcı olmak için sayfa hakkında anahtar kelimeler (bu

sayfa için HTML,ders,web sayfası,web sitesi, PHP vs) ">

<META name="copyright" content="Telif hakkı ve

tanımları" >

Page 50: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

50

Eğer sayfa içeriği Ġngilizceden farklı ise hazırlanan

sayfada herhangi bir karakter görüntüleme sorunu sorunu yaĢamamak için <head> bölümünde sayfasının

kod sayfasını 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">

Bugünlerde arama motorları için yapılabilecek iĢlemler SEO Uzmanlığı adıyla ayrı bir meslek haline

dönüĢmüĢtür. Bu konuda bazı materyalleri ilerleyen

konularda bulacaksınız.

Meta Tağlarının GeliĢmiĢ Kullanımı

Sayfanın Süre AĢımını Belirtmek

Bu iĢlem için ―expires‖ etiketi kullanılır.

<META HTTP-EQUIV="expires" CONTENT="Wed, 04 Apr 2008 23:59:59 GMT">

Yukardaki örnekte sayfanın 4 Nisan 2008 günü Greenwich saatiyle gece yarısından itibaren arama

motorlarından ve ziyaretçilerin bilgisayarlarında geçici Internet dosyaları klasöründen silinmesini sağlar.

Bir Sayfanın Belirli Bir süre Ekranda Kalıp Otomatikman BaĢka Bir Adrese Yönlenmesini Sağlamak

Bu iĢlem için ―refresh‖ etiketi kullanılır. Böylece tanımlı süre sonunda hedef URL otomatik açılır.

Page 51: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

51

<meta http-equiv = "refresh" content ="5;

url=http://abc.com/dnm.html">

Bu sayfanın 5 saniye ekranda kalacağını ve daha sonra URL

ile belirtilen adresteki sayfanın yüklenmesini sağlar.

Türkçe Karakterleri Görüntülemek-Kod Sayfası

Yukarda örneğini gördüğümüz meta etiketi sayesinde

sayfa için bir kod sayfası belirtebiliriz. Böylece hazırlanan sayfanın ekranda hangi karakter seti ile

görüntüleneceğinin bilgisini tarayıcıya vermiĢ oluruz. Türkçe için 3 adet karakter seti kullanma imkanımız

vardır.

Windows-1254

Iso-8859-9

UTF

Türkçe bilgilerin görüntülenebilmesi için

<meta http-equiv="Content-Type" content = "text/html; charset=windows-1254">

<meta http-equiv="Content-Type" content = "text/html;

charset=iso-8859-9">

Seçenekleri kullanılabilinirse de en doğrusu UTF-8 kod sayfasının kullanımıdır. UTF evrensel karakter seti olmak

iddiasındadır. Bu konuda da hayli yol katetmiĢtir. Bu

Page 52: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

52

nedenle artık UTF kodlamasının kullnaılması kesinlikle

önerilir.

<meta http-equiv="Content-Type" content = "text/html; charset=utf-8">

<BODY> Etiketinin Parametreleri

Body etiketi çeĢitli parametreler ilede kullanılabilir. Bunlar

Bgcolor : Sayfanın zemin rengini belirtir

Background : Sayfanın zemini için bir resim kullanılmasını sağlar.

Text : Sayfadaki yazıların rengini belirtir. Bu renk belirtilmiĢ ise sayfa içinde renk belirten etiket

görülmediği sürece tüm içerik bu renkte basılır.

Örneğin

<body bgcolor=‖aqua‖ text="red" background=―1.jpg">

Normalde resimler için en boy belirtilebilir ancak <body>

etiketinde bu durum söz konusu değildir. Seçilen resim tarayıcı tarafından tüm sayfayı kaplayacak Ģekilde

sayfaya yerleĢtirilir.

TrueType Fontlar-Harf GeniĢliği Serif ve Sans Serif Harfler

Daktilolarda, kağıdı hareket ettiren mekanizma, her

harfin geniĢliğine göre farklı hareket yeteneğine sahip

Page 53: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

53

olmadığından ―i‖ veya ―k‖ veya hepsinden geniĢ olan ―m‖

harfi de aynı geniĢlikte bir alana yazılırdı. Zamanla teknoloji sayesinde bu sorun aĢıldı. Harfleri

büyüklüklerine göre göreli geniĢlikte olan fontlarla bütün harfleri aynı geniĢlikte olan fontların farkı buradan

kaynaklanır. Günümüzde, teknik gerekçelerle eski tip fontlar hala vardır.

Harflerin genel karakteristiğine göre ayrımda ise fontlar serif, sans serif ve dekoratif olarak üçe ayrılır. Serif

harfler kuyruklu yazılmıĢ, sans serif harfler ise düz olan biçimdir. Web de görsel etki, zıtlıklardan yararlanarak

sağlanır. Bir sayfada yer alacak bir metnin serif diğerinin sans serif harflerle yazılması iyi bir zıtlık oluĢturup

okunulabilirliği artıracaktır Ekranda okuma kolaylığı açısından sans serif harfler tercih edilmelidir. Özellikle

küçük puntolu serif harflerin okunması çok zor olabilir.

Sans serif harfler içeren en bilinen fontlar Arial Verdana ve Tahoma fontlarıdır. Serif için en bilinen örnek ise

times New Roman fontudur.

H1,H2,H3,H4,H5,H6 BaĢlık Etiketleri

HTML bize H1, birinci yani en büyük, H6 sonuncu, yani en küçük olmak üzere altı ayrı büyüklükte baĢlık

kullanma imkanı veriyor. Farklı baĢlık büyüklüklerini daha yakından tanımak için, Ģu sayfayı yazarak, örneğin

baslik.htm adıyla kaydedin:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;

charset=windows-1254">

Page 54: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

54

<title>BaĢlıklar</title>

</head>

<body>

<p><font face="Arial">

<h1>H1: baĢlık 1<h1>

<h2>H2: baĢlık 2 <h2>

<h3>H3: baĢlık 3 <h3>

<h4>H4: baĢlık 4 <h4>

<h5>H5: baĢlık 5 <h5>

<h6>H6: baĢlık 6 <h6>

Normal Metin

</font> </p>

</body>

Paragraf etiketi gibi, baĢlık etiketinin de arkasına koyabileceğiniz tek özellik ALIGN‘dır ve bununla baĢlığın

sola, sağa, ortaya hizalanmasını veya sağ sol marjların

aynı anda hizalanmasını sağlayabilirsiniz.

<br> etiketi

Bu etiket metni iki satıra bölmek için kullanılır. Enter tuĢunun iĢlevini taĢır. HTML metni biçimlendirirken

MSWORD gibi davranır. Yani ―alt satıra geç‖ yada ―yeni paragrafa baĢla‖ iĢaretini görmedikçe metni sağa doğru

yazmaya ve pencere sonuna gelince alta doğru kaydrmaya devam eder. Metni bölmek için HTML

kodunda iken enter tuĢuna basmıĢ olmanız tarayıcı için

Page 55: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

55

bir anlam ifade etmez. Tarayıcı <br> etiketini görünce

bir alt satıra geçer.

<HTML>

<BODY>

Bu satır çok çok çok ama çok uzun bir satır. Ancak HTML

için için bunun için bir önemi yok. Çünkü ne yazarsanız yazın özel etiketi görmedikçe aynı paragraftaymıĢ gibi

ekrana görüntülenmeye devam edilecektir.

Bu satır da bir önceki gibi <br><çok çok çok ama çok <br> uzun bir satır. <br>Ancak HTML için için bunun için

bir <br>önemi yok. <br>Çünkü ne yazarsanız yazın <br> özel etiketi görmedikçe aynı paragraftaymıĢ

<br>gibi ekrana görüntülenmeye devam edilecektir. <br> Bu satırın farkı ise BR etiketi ile bölünmüĢ olması.

</BODY>

</HTML>

<p>…</p> etiketi

ĠĢlev olarak <br>etiketine benzer ancak temelde

farklıdır. <p> etiketi </p> ile sonlandırılır. <br> sadece alt satıra geçerken bu etiket paragraf baĢı yapar.

<HTML>

<BODY>

<br>

Page 56: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

56

Bu satır çok çok çok ama çok uzun bir satır. Ancak HTML için için bunun için bir önemi yok. Çünkü ne yazarsanız

yazın özel etiketi görmedikçe aynı paragraftaymıĢ gibi ekrana görüntülenmeye devam edilecektir.

<p>

Bu satır çok çok çok ama çok uzun bir satır. Ancak HTML

için için bunun için bir önemi yok. Çünkü ne yazarsanız yazın özel etiketi görmedikçe aynı paragraftaymıĢ gibi

ekrana görüntülenmeye devam edilecektir. </p>

</BODY>

</HTML>

Page 57: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

57

Genel Biçimlendirme Etiketleri

Genel Biçimlendirme Etiketlerinin Listesi

Öncelikle Ģunu belirtmek gerekiyorki biçimlendirme etiketlerinin çoğu “obsolete” yani devre dıĢı

bırakılmıĢ durumdadır. Bu yüzden bu listede sadece birkaç temel etiketi bırakıp eski standarda uygun

olanları ise çıkarmak durumunda kaldım. Çünkü bu

etiketleri kullanmak için zaman harcamak yerine en uygunu yeni standart olan CSS kullanımını

öğrenmenizdir.

<strong> Kapatılana kadar her metin koyu

harflerle yazılacaktır

<em> Kapatılana kadar her metin italik olarak

yazılacaktır

N

<OL>..</OL>

Sıralı (Ordered) listeler, liste unsurlarının baĢına, tasarımcının

arzusuna göre, ya rakam, ya harf koyarak, sıralanmıĢ listelerdir.

<LI> Liste elemanlarını belirtir

<UL>..</

UL>

Sırasız (Ordered) listeler, liste

unsurlarının baĢına, tasarımcının

arzusuna göre, ya içi dolu ya da içi boĢ bir yuvarlak, veya dört köĢe nokta

konularak sunulan listelerdir. Listenin baĢladığını ve bittiğini belirten bu iki

Page 58: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

58

etiketin arasına liste unsurları (list item)

<LI> etiketi ile yazılır.

<CODE>..

</CODE>

Ġçindeki metnin bilgisayar programı

veya benzeri bir Script parçası olduğunu gösterir:

<CODE>

// bu bir delphi satırıdır

Showmessage(Mesaj)

</CODE>

HTML‘in metin biçimlendirmekten çok metnin bölümlerini tanımlamakta kullanılan ve özellikle Internet‘in metin

ağırlıklı olduğu ilk dönemlerinden 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 hatırlatmak yeterlidir.

W3C konsorsiyumu artık metinlerin bu Ģekilde değil CSS ile biçimlendirilmesini standart kabul etmektedir.

Dolayısıyla bu tagların çoğu artık obsolete dediğimiz ve sadece geriye dönük uyumluluk açısından varlıklarını

sürdürmektedirler.

Metni Koyu, veya Ġtalik Yazdırma

Bu iĢler için yukardaki tablodada görüleceği gibi <strong> <> ve <em> etiketleri kullanılır.

<html>

<head>

Page 59: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

59

<title>Sayfa baĢlığı </title>

</head>

<body>

<h1> Sayfama hoĢ geldiniz </h1>

<p>HTML etiketleri ile, </p>

Tüm yazıları

<strong>koyu renkte</strong>

<em>italik yönde</em>

yazmak mümkün

</body>

</html>

Burada paragraf etiketini kullandığımıza dikkat edin. <p>..</p> etiketleri, paragraf etiketleridir. Tarayıcı bu

etiketi gördüğü anda, bir sonraki içerik parçasını alt satıra kaydırır.

Paragraf etiketinin nasıl bloklanacağı ALIGN parametresi

ile belirtilir. Örneğin paragraf etiketini <p align=center> Ģeklinde kullanırsanız, </p> etiketine kadar gireceğiniz

bütün metin, bulunduğu yerde ortalanacaktır.

HTML Dilinde Renk Kodlaması

Web tarayıcılar renk belirtmek için, ya Ġngilizce kelimeleri ya HEX karĢılıklarını yada RGB değerlerini kullanırlar.

Aslında bilgisayarda sadece üç renk vardır. Kırmızı yeĢil ve mavi. Diğer renkler bunların karıĢımından ibarettir.

RGB (Red Gren Blue) dediğimiz Ģey aslında o rengi elde

Page 60: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

60

edilmek için hangi renkten ne kadar karıĢtırılacağını

veren sayılar grubudur.

HEX sisteminde sayılar 16 lık sistemde ele alınır. Sayı

sistemini 1‘den 10‘a kadar sayılar normal halleriyle diğerleri 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 yüzde sıfır

oranında, ―FF‖ ise yüzde 100 oranında karıĢtırılması belirtilmiĢ olur. Bilgisayar ve televizyon ekranında beyaz

renk, her üç rengin de yüzde yüz oranında olması halinde, siyah ise her üç rengin de yüzde sıfır oranında

olmasıyla sağlandığına göre #000000 Siyah, #FFFFFF ise Beyaz rengi ifade eder.

Renk Adı HEX

kodu RGB kodu

Black #000000 rgb(0,0,0)

Red #FF0000 rgb(255,0,0)

Gren #00FF00 rgb(0,255,0)

Blue #0000FF rgb(0,0,255)

Yellow #FFFF00 rgb(255,255,0)

Aqua #00FFFF rgb(0,255,255)

Fuchsia #FF00FF rgb(255,0,255)

Page 61: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

61

Gray #C0C0C0 rgb(192,192,192)

White #FFFFFF rgb(255,255,255)

Bunlar 16 renk temel renktir.

Page 62: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

62

Güvenilir 216 Renk

Tüm tarayıcıların hepsinde birden 256 renk paleti kullanıldığında hep aynı renkte gösterilen renk koları

vardır. Bu renkler 216 adettir. Bunlar Güvenilir 216 Renk (216 Web Safe Colors) olarak bilinirler. AĢağıdaki tabloda

kodları verilen renkler her bilgisayarda ve tarayıcıda 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

Page 63: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

63

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

Page 64: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

64

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

Page 65: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

65

Sıralı Listeler

<OL>..</OL>: Sıralı (Ordered) listeler, baĢına, tasarımcının isteğine bağlı olarak, rakam, harf yada özel

bir karakter koyarak, yazılmıĢ listelerdir. Listenin baĢladığını ve bittiğini belirten bu iki etiketin arasına liste

satırları (list item) <LI> </LI> etiketleri arasında yazılır.

TYPE : Etiketi biçimlendirir.

o ―1‖ rakamla;

o ―A‖ büyük harfle;

o ―a‖ küçük harfle;

o ―i‖ küçük Romen rakamları ile;

o ―I‖ büyük Romen rakamları ile sıralanmayı sağlar

COMPACT: listenin mümkün olduğu kadar az satır

aralığı ile verilmesine yarar

START : listenin harf veya rakamdan baĢlayacağını

belirtir) Ģeklinde üç parametresi olabilir.

ġimdi örneğin, milli takım listesini hazırlayalım.

Yanlarındada sırt numaraları olsun.

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">

<title>Web Tasarım Rehberi - Renkler</title>

</head>

Page 66: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

66

<body>

<p><font face="Arial">

<H2>Takım Kadrosu</H2>

<ol type=1 compact>

<LI>RüĢtü</LI>

<LI>Serdar</LI>

<LI>Ümit</LI>

<LI>Önder</LI>

<LI>Emre</LI>

<LI>Yıldıray</LI>

<LI>Tümer</LI>

<LI>Tuncay</LI>

<LI>Hakan ġükür</LI>

<LI>Gökdeniz</LI>

<LI>Semih</LI>

</OL>

</font> </p>

</body>

</html>

TYPE parametresini ―1‖ değil, ―a‖ olarak değiĢtirirseniz

sayfadaki liste, bu defa rakamla değil, küçük harflerle sıralanmıĢ olacaktır:

Page 67: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

67

! Bu tag Türkçe harflerle uyumsuzdur. A,b,c,ç Ģeklinde

devam etmez. A,b,c,d Ģeklinde listeler

Sırasız Listeler

<UL>..</UL>: Sırasız (UnOrdered) listeler. Bu tip liste satırlarının baĢına ya içi dolu ya da içi boĢ bir

yuvarlak, veya dört köĢe nokta konulur.

TYPE : Etiketi biçimlendirir

o DISC, içi dolu daire

o CIRCLE, içi boĢ daire;

o SQUARE dörtköĢe nokta ile sıralanmayı sağlar

COMPACT listenin mümkün olduğu kadar az satır aralığı ile verilmesine yarar.

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">

<title>Web Tasarım Rehberi - Renkler</title>

</head>

<body>

<p><font face="Arial">

<H2>Takım Kadrosu</H2>

<ul type=disc compact>

<LI>RüĢtü</LI>

Page 68: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

68

<LI>Serdar</LI>

<LI>Ümit</LI>

<LI>Önder</LI>

<LI>Emre</LI>

<LI>Yıldıray</LI>

<LI>Tümer</LI>

<LI>Tuncay</LI>

<LI>Hakan ġükür</LI>

<LI>Gökdeniz</LI>

<LI>Semih</LI>

</UL>

</font> </p>

</body>

</html>

<HR> Etiketi ile Çizgi OluĢturma

Yatay Çizgi (horizontal rule) etiketi, bulunduğu yerde,

belirtilen parametrelere göre yatay bir çizgi çizilmesini sağlar. Bu etiketin kapanıĢıĢ çifti yoktur. Pencere

boyunca çizgiyi çizer ve iĢlevi biter. Parametreleri Ģunlardır;

Width : Çizginin geniĢliğini ayarlamak için kullanılır.

Size : Çizginin kalınlığını ayarlamak için kullanılır.

Page 69: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

69

Color : Çizginin rengini ayarlamak için

kullanılır.

Align :Bu parametre right,left ve center değerlerini

alabilir. Çizginin sayfadaki yatay konumunun sola, sağa veya ortaya

hizalanmasını sağlar.

Örnek:

<HR><p> Türk Milli Takımı Kadrosu </p>

<HR width=400><p> Türk Milli Takımı Kadrosu </p>

<HR size =12 color=‖#cccccc‖><p> Türk Milli Takımı

Kadrosu </p>

Resim ve Multimedya Dosyalarını Kullanmak

Belgeye resim, video, ses dosyaları eklemek normal

içerik eklemekle aynı değildir. Örneğin bir tablo içine istediğinizi yazıp; belgeyi açtığınızda bu yazıyı

görebilirsiniz. O metin belge içeriğinin bir parçası durumundadır. Ama iĢ resim, ses ve video dosyalarına

gelince bu aĢamada iĢ değiĢir ve HTML sayfasında dosyanın bulunduğu yeri belirtmeniz gerekir.

Bu iĢlem için URL adreslerinden faydalanılır. Belge metinleri begenin içindeki yer alırken resim vs dosyaların

kendileri değilde sadece URL adresleri HTML sayfasında yer alır. Web server böyle bir bağlantı gördüğü anda ilgili

dosyayı kontrol eder ve bulursa talepte bulanan tarayıcıya iletir. Tarayıcılar, resim formatı olarak JPG,

GIF, PNG türlerini desteklerler.

<HTML>

Page 70: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

70

<HEAD>

<TITLE>ÖRNEK SAYFA</TITLE>

<META http-equiv="Content-Type" content="text/html;charset=windows-1254">

</HEAD>

<BODY text="#0000CC">

<DIV align="center"><IMG src="img/logo1.jpg" alt="Logo resmi"></DIV>

<H1 align="center">Fenerbahe Spor Kulübü<BR>

2006-2007 ġampiyonu</H1>

</BODY>

</HTML>

IMG etiketinin çeĢitli parametreleri vardır. Bunlar

ALT : Resim için alternatif metin belirtir. Eğer kullanıcı tarayıcısını resimleri göstermemeye

ayarlamıĢsa, tarayıcı resim gösterme kapasitesine

sahip değilse veya en önemlisi eğer resim verilen adreste yoksa bu metin ekranda görüntülenir.

WIDTH: Resmin ekranda görüntülenecek boyutunu belirtir. Belirtilmez ise orijinal boyutunda

gösterilir. Farklı boyut verilirse resim fiziksel olarak etkilenmez sadece ekranda gösterilirken

yeniden boyutlandırılır

HEIGHT: Resmin ekranda gösterilecek yüksekliğini

belirtir. Belirtilmez ise orijinal boyutunda gösterilir. Farklı boyut verilirse resim fiziksel olarak

Page 71: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

71

etkilenmez sadece ekranda gösterilirken yeniden

boyutlandırılır

BORDER: Resim için bir çerçeve çizilmesini sağlar.

ALIGN = Resmin hizalamasını belirtir. LEFT ile sola, RIGHt ile sağa, CENTER ile ortaya hizalanır.

<IMG src="img/logo1.jpg" alt="Logo resmi">

img klasörü içindeki logo1.jpg dosyasını sola hizalı olarak

görüntüle. 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 iĢlemi için

kullanılabilirler.Bu konu ilerleyen kısımlarda iĢlenmiĢtir.

Marquee ile Resim Ve Metin Kaydırma

Marque etiketi verilen parametrelere göre bir metnin

yada resmin bir yerden bir yere verilen yönde ve hızda

hareket ettirilmesi için kullanılır. Parametreleri;

Direction : Bu parametre right,up,down

değerlerinden birisini alır ve buna göre içerğin hangi yöne kayacağı belirlenir. Up yukarı, right

sağdan, down ise aĢağı doğru kaymayı gerçekleĢtirir.

Behavior : DavranıĢla ilgili bir parametredir. Alternate değeri verilirse yazılar kaybolmadan

pencere içinde gider gelir. YaĢı yetenler Kara ĢimĢek filmindeki arabanın önünde sağa sola giden

Page 72: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

72

ıĢığı hatırlayacaktır. Bu iĢlem aynı etkiyi

vermektedir.

Bgcolor : Kayan yazıların arka plan rengini

belirler.

Height : Yazının kayacağı alanın yüksekliği

Width : Yazının kayacağı alanın geniĢliği

Loop : Yazının kaç kez kayacağı belirlenir.

Daha sonra da yazı durur.

Scrolldelay : Kaydırma hızı, iki hareket

arasındaki süreyi ms cinsinden belirtir

Srollamount: Kayan yazının bir defada kaç piksel

hareket edeceğini belirtir.

Marquee aslında Internet explorer‘a özgü bir etiket olup diğer tarayıcılar tarafından kerhen desteklenmektedir.

KiĢisel tecrübelerime göre marquee etiketi çok dikkatli kullanılmalıdır. Mutlaka diğer tarayıcılar ilede

denenmelidir. Özelikle alternate parametresi farklı

tarayıcılarda farklı davranmaktadır. Bu bakımdan dikkatli olup tarayıcı uyumunu maksimumda

tutulmasında fayda vardır.

Marquee en çok haber baĢlıklarının dar bir alanda geçiĢ

yapması için alandan tasarruf ve vurucu etki açısından kullanılır. Sayfaya bir nebze olsun hareket katar. Ancak

ne olursa olsun sayfada 4-5 tane her biri ayrı yöne kayan

marquee etiketi çok berbat bir dizayna sebep olur.

<MARQUEE BEHAVIOR=tip BGCOLOR=renk

DIRECTION=yön HEIGHT=n HSPACE=n LOOP=n

Page 73: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

73

SCROLLAMOUNT=n SCROLLDELAY=n VSPACE=n

WIDTH=n>

Resimleri Kullanırken Dikkat Edilecekler;

1. ĠĢin durumuna göre PNG, GIF KPG kullanımına karar verilmelidir. GIF dosyaları sadece 256 renge

kadar desteklerler. Ama daha keskin görünürler. JPG resimler isedaha az yer kaplarlar ancak kayıplı

bir format olduğundan resimde hassasiyet kaybı olacaktır. PNG ise GIF formatının lisans sorunlarına

çare olarak geliĢtirilmiĢ gir formattır. Ancak IE6 sürümü transparan PNG resimlerle sorunludur.

2. Büyük resimleri kullanmaktan gerekli olmadıkça kaçınmalıdır. Hiç kimse dakikalarca bir resmin

yüklenmesini beklemez. Resim kendisi için çok

önemli ise ayrı tabii. ĠĢte bu yüzden her zaman resimlerin boyutunun küçük, miktarının az

utulması tavsiye edilir.

3. Eğer büyük resimler kullanmak zorunlu ise,

bunların JPEG formatına çevrilip ve kalitesinin düĢürülmesi tavsiye edilir. JPEG resimler daha hızlı

yüklenirler.

4. Siteye her girenin en son tarayıcı ve Windows

kullandığı düĢünülmeden, herkes için kod yazılmalıdır.Resimlere her zaman ALT tagı

kullanılarak alternatif metinler verilmelidir. Böylece resim özelliğini kapatanlar yada metin bazlı tarayıcı

kullananlarda o ekranda resim olduğunu görebilsinler.

Page 74: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

74

5. GIF ve PNG dosyaları kullanıken "Interlaced" haline

getirilmeleri daha uygun olacaktır. Interlace tipli resimler kademe kademe yüklenir ve yavaĢ yavaĢ

netleĢerek resmi daha hızlı yükleniyormuĢ gibi gösterir. Aksi tadirde resmin tamamı yüklenmeden

görüntülenmeyecektir.

Video ve Ses Dosyalarının Kullanımı

Eğer sayfa yüklendiğinde bir ses dosyasının çalınması

istenirse <BGSOUND> etiketi kullanılabilir.

<BGSOUND SRC='ses.wav.mid' LOOP=5>

Bu Ģekilde yüklene ses sürekli aynı olacak ve durdurulması istendiğinde bir iĢlem yapılamayacaktır.

ĠĢte bu yüzden bu yöntem çok önerilmez. Ama dinamik

bir dil yardımı ile ses dosyası rastgee değiĢecek Ģekilde bir iĢlem yapılırsa daha iyi bir etki bırakabilir.

Video dosyası göstermek içinse <Object> etiketinin kullanımı gerekir.

Dikkat edilecek nokta desteklenen uzantılardır. Ayrıca kullanıcı tarafında gerekli codeclerin yüklü

olup olmadığınıda hesap etmek ve çok nadir bulunan formatlardan kaçınmak gerekir.

Page 75: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

75

Tablolar

HTML sayfalarında veriyi çizelge halinde sunmak için

tablolar düĢünülmüĢtü. Ancak tasarımcılar birden bire bunu sayfanın iskeletini kumak içinde kullanmaya

baĢladılar. Böylece tablolar sayfalar için içerikten sonra temel öge haline geldiler. Ancak günümüzde sürekli

yaygınlaĢan CSS kullanımı, table ve frame (çerçeve)

gerektiren durumları çok daha pratik çözmeye imkan verdiğinden eski önemleri azalmaktadır. Buna rağmen

Table veri çizelgeleri için sürekli kullanım alanı bulacaktır. Div etiketleri ile table etiketi kullanmadan

tablo oluĢturabilemektedir ancak bu henüz yaygınlaĢmamıĢtır.

Bir tabloyu bir Excel sayfasına benzetebilrsiniz. En genel hali ile ise mutfak dolabına benzetebilrsiniz. Çatal, kaĢık,

baharat, tabak, tava her Ģey kendine ait çekmecelerde durmaktadır.

BaĢlık, Satır ve Veri Etiketleri

HTML‘de bir tablonun baĢlangıcı ve bitiĢi <TABLE>..</TABLE> etiketiyle iĢaretlenir. Tablonun

sütun baĢlıkları <TH>..</TH>; gövdesi <TBODY>..</TBODY> etiketiyle belirtilir. Sütun

baĢlıkları veya gövde etiketinin hemen altında tarayıcıya bir tablo satırı baĢladığını söylemeniz gerekir. Bunu

<TR>..</TR> etiketiyle yaparız. Bu iki etiketin arasında Tablonun değerleri, yani içinde bilgiler bulunan hücreleri

oluĢturan etiket, <TD>..</TD> yer alır. Bu iki etiketin arasında tablonuzun ilgili hücresinde yer alacak bilgi

bulunur.

Page 76: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

76

<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 tablomuzun BaĢlığı (thead)</thead>

<thead><tr><th>Birinci sütun baĢlığı (th)</th><th>Ġkinci sütun baĢlığı(th)</th><th>Üçüncü

sütun baĢlığı(th)</th><th>Dördüncü sütun baĢlığı(th)</th><th>

<tbody>

<tr><td>Satır 1 Sütun 1</td><td>Satır 1 Sütun 2</td><td>Satır 1 Sütun 3</td><td>Satır 1 Sütun

4</td></tr>

<tr><td>Satır 2 Sütun 1</td><td>Satır 2 Sütun

2</td><td>Satır 2 Sütun 3</td><td>Satır 2 Sütun 4</td></tr>

<tr><td>Satır 3 Sütun 1</td><td>Satır 3 Sütun 2</td><td>Satır 3 Sütun 3</td><td>Satır 3 Sütun

4</td></tr>

Page 77: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

77

<tr><td>Satır 4 Sütun 1</td><td>Satır 4 Sütun 2</td><td>Satır 4 Sütun 3</td><td>Satır 4 Sütun

4</td></tr>

</tbody>

</table>

</body>

</html>

Kullanılan parametreler

<td> için :

Bgcolor :Hücrenin Zemin rengini ayarlar

Background:Hücre arkaplanına bir resim yerleĢtirmekte

kullanılır

Width :Hücre geniĢliği

Height :Hücre yükselekliği

Align :Metin yaslama yönü. Left, Right ve Center

olabilir.

Her zamanki gibi yine tekrarlayalım tabloları biçimlendirmek için artık en genel olan CSS

kullanılmalıdır. Buradaki biçimlendirme etiketlerini sadece bilgi olarak bilmeniz yeterlidir. Bu nedenle

aĢağıdaki etiketleri tasaramlarınızda kullanmanız önerilmez.

Page 78: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

78

Sütun ve Satır BirleĢtirme – Colspan- Rowspan

Bir tablonun baĢlığında ve gövdesinde yer alan hücreler

yatak ve dikey olarak komĢuları ile birleĢtirilebilirler. Bunun için COLSPAN ve ROWSPAN etiketlerini kullanırız.

Zemin - Bgcolor

Bir tablonun, her bir satırın, her bir sütunun ve her bir

hücrenin ortak veya ayrı zemini olabilir. Bu zemin düz renk olabileceği gibi bir resimde olabilir. Bu imkandan,

uzun ve çoğu zaman gözle takibi zor rakamlar içeren tablolar oluĢturduğunuz zaman, satırlara biri açık, diğeri

renkli zemin vererek, izleme kolaylığı sağlamak için

yararlanabilirsiniz.

Tablonun geniĢliği- Width

Bir tablo, tarayıcı penceresindeki alan kullanımı tamamen tasarlayan kiĢiye bağlıdır. Tablo sayfanın tümüne, belli

bir yüzdesine veya belli bir ölçüsüne yerleĢtirilebilir. Tabloyu oluĢtururken TABLE etiketine ölçü birimi ve

miktarını eklemeniz gerekir. Örneğin, <TABLE WIDTH=50%> ile tablonun ekranın yarısını kullanacağını

belirtmiĢ oluruz. Yüzde yerine pixel olarak mutlak ölçü de verilebilir.

Altın kuralı hatırlayalım. Herkesin ekran geniĢliği farklıdır. Örneği tablonuza 600 pixel geniĢlik verip sola hizaladınız. 800x600 pixel geniĢlikteki bir ekranda tablo

güzel durabilir. Peki 19 inç ekranında 2048 geniĢlikte

çalıĢan kiĢi ne görecektir ? Solda duran ekrana göre çok küçük bir tablo. Tablonun ortaya hizalı olması bu sorunu

bir nebze çözer ama ama width ölçüsünün yüzde olarak

Page 79: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

79

verilmesi bu sorunun temel çözümüdür. Böylece ekran

büyüdükçe tablo büyür, küçüldükçede küçülür.

Tablonun Çerçevesi - Border

Bir tablonun bütün sütun ve satırları içine alan en dıĢ

çerçevesinin kalınlığını belirlemek için BORDER=xx (xx, pixel cinsinden çerçeve kalınlığı) kullanılır. ―FRAME=x‖ ile

tablonun dıĢ ve hücreler arası çerçeve çizgilerini kontrol edebilir ―x‖ yerine VOID yazarak tüm dıĢ çerçeveyi

kaldırabilirsiniz; ABOVE sadece tablonun üst tarafına; BELOW sadece alt tarafına; HSIDES sadece alt ve üst

taraflara; LHS sadece sol tarafa, RHS sadece sağ tarafa, VSIDES sadece sağ ve sol taraflara çerçeve konulmasını

sağlar.

<TABLE BORDER="1" WIDTH="100"

BGCOLOR="#C0C0C0">

<TR> <TD WIDTH="50"> </TD> <TD WIDTH= "50"> &nbsp;

</TD>

</TR>

</TABLE>

Not: Yukarda bazı hücrelere neden &nbsp;

yazıldığın gelince bunun sebebi tarayıcıların boş olan hücreleri göstermemesi ve sayfa dizaynının

ekranda tuhaf durmasıdır.

Hücre içindeki boĢluk miktarı CELLPADDING

Cellpadding değeri bir hücredeki metnin hücrenin

kenarlık çizgisine olan uzaklığını gösterir.

Page 80: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

80

Hücreler arası boĢluk miktarı CELLSPACING

Cellsacing değeri ise hücreler arasında bırakılacak boĢluk

miktarını gösterir.

<TABLE BORDER=X CELLPADDING=X CELLSPACING=X

WIDTH=[%veya X] HEIGHT=[% veya X] BGCOLOR=X BACKGROUND="X"

Sembol ĠĢaretlerinin HTML Dilindeki KarĢılıkları

HTML kodlanırken bazen sembollerin kodlanması gerekir. Örneğin ekrana ―a<c‖ yazdırmak istiyorsunuz. Tarayıcı

bu kısmı yorumlamakta sıkıntıya girecektir. Çünkü ―<‖ iĢareti tarayıcı komutlarınında baĢlangıcıdır. Böyle

durumlarda tarayıcının kafası karıĢmakta ve çoğunlukla bu bölüm hatalı etiket olarak ele alınıp yoksayılmaktadır.

Böyle durumlarda tarayıcıya sembol karakterleri ile bu

sembolün karĢılığını ekrana yaz dememiz gerekir.

Kod Tanım Sonuç

&nbsp; BoĢluk

&lt; Küçük <

&gt; Büyük >

&quot; Çift tırnak "

&amp; Ve &

Page 81: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

81

&copy; Copyright ©

&reg; Kayıtlı ®

&para; Paragraf ¶

&cent; Sent ¢

&sup2; Üst simge ²

&frac14; Bölü (örnek ¼) ¼

&pound; Pound £

&deg; Derece °

&yen; Yen ¥

Buradaki &nbsp; sembolü HTML için önemli bir semboldür. Tablo dizaynları açısından çok önemi vardır. Hücre içeriği boĢ ise tarayıcı bunu göstermekte sıkıntı

yaĢar. <td> tagları arasına yazdığınız teb bir boĢlukta dikkate alınmayacaktır. Oysa her hücreye bir &nbsp;

koyarsak HTML bunu hücre içine mecburen koyacak ve

tablomuz düzgün görüntülenecektir.

Page 82: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

82

Genel Sayfa Kullanım ġekilleri

Sayfalar genelde belirli sayfa düzenlerinde tasarlanırlar.

Örneğin menü solda içerik sağda, üstte banner, yada sağda kayan haber gibi alanlar vardır. Genel olarak

sayfalar 2 li yada 3 lü sütun halinde tasalarnır. ÇeĢitli sayfa çatısı örnekleri aĢağıda verilmiĢtir.

Üst Banner alanı

Menü

alanı

Ġçerik alanı

Alt bilgi telif vs alanı

Menü alanı

Ġçerik alanı

Alt bilgi telif vs alanı

Page 83: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

83

Üst Banner alanı

Ġçerik alanı

Menü

alanı

Alt bilgi telif vs alanı

Üst Banner alanı

Menü

alanı

Ġçerik alanı

Kayan

Haber

Sağ menü

alanı

Page 84: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

84

Alt bilgi telif vs alanı

Üst Banner alanı

Menü alanı

Ġçerik alanı

Alt bilgi telif vs alanı

Üst Banner alanı

Menü alanı

Kayan

Page 85: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

85

Ġçerik alanı

haber yada

Sağ Menü alanı

Alt bilgi telif vs alanı

ġüphesiz bunları karıĢtırarak daha farklı dizaynlarda yapılabilir ama bunlar ilk etapta size bir fikir verebilir.

Page 86: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

86

Çerçeveler -Frames

HTML ilk çıktığında frame teknolojisi yoktu. Ġlk olarak

lanse edildiğinde bir yandan tarayıcı firmaları frame desteğiyle övündüler diğer yandan ise site tasarımcıları

bundan nefret ettiler. Hatta bu tepki yüzünden, Netscape ve Internet Explorer‘ yazılımcıları programlarında frame

seçeneklerini devre dıĢı bırakma kolaylığı bile getirdiler.

Frame düĢmanlığı, mantıksız ancak teknik açıdan çeĢitli açılardan haklıdır. Aslında site iskeleti için frame

kullanımı tablo kullanımından daha esnek ve güzel sonuçlar verir ancak framelerin bir çok dezavantajıda

vardır.

Tablodan farklı olarak frame teknolojisi, bize sayfamızın

bir tarafı sabit kalırken, diğer tarafının içeriğini, kullanıcının tercihine göre değiĢtirme imkanı verir.

Böylece bir tarafta menü dururken diğer tarafta içeriğin değiĢtirilmesi sağlanabilir. Bu sayade menü kodlaması

için tek bir dosya kullanılmıĢ olur.

Avantajları

Ġçeriği kontrol etmek kolaydır. Bir taraf menü diğeri içerik sunmak için kullanılabilir.

Frame hedef değiĢmediği sürece görüntüleniyor

olacaktır.

Dezavantajları

Eski tarayıcılar desteklemezler

Ekranda ilave yer tutarlar

Her bir frame için ayrı bir sayfa oluĢturulması gerekir.

Page 87: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

87

Sayfanın kaydedilmesi ve yazdırılması sorun olur

Frame kullanılan sitelerde link vermek zor olur (En önemli sorunlar son üçüdür)

Arama motorları (Google, Yahoo vb) Frameleri sevmezler.

Bir frame de aslında tablo gibi satır sütun mantığı ile oluĢturulur. Ancak tablonun sütun ve satırları ancak

komĢu hücrelerle birleĢtiribilirken frameler tüm ekran üzerinde özgürce konumlandırılabilirler.

AĢağıdaki sayfa düzenini frameler ile kurduğumuzu varsayalım.

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

Page 88: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

88

Kullanıcı sol taraftaki menüden bir sayfayı seçtiği taktirde

_target=content (içerik frame‘nin adı) denildiğinde, üst , alt ve sol frameler yerlerinde sabit dururken orta sağdaki

içerik frame değiĢecektir. Dolayısı ile bu yapı sayesinde her sayfada menüyü ve ana isketlet tablosunu yeniden

kullanmak zorunda kalmamıĢ oluruz. Üstelik menüde değiĢiklik gerektiğinde sadece menü alanında bulunan

frame kodunun bulunduğu sayfayı değiĢtirdiğimiz anda bu kod tüm sayfalara yansımıĢ olacaktır.

ġimdi madem bu kadar üstün neden insanlar kullanmıyor ve kullanmak istemiyor denilebilir. Gerçektende ilk yaptığım site (1998) hariç hiçbir sitede frame kullanmıĢ

değilim. Üstelik ilerde göreceğimiz CSS ve PHP yardımı ile zaten bir menü kodunu her yerden çağırabilme

imkanımız baĢka Ģekillerdede mevcut. Dahası frame kullanılan bir sayfaya link vermek sanıldığı gibi kolay

değildir. Çünkü adres satırında bir Ģey yazarken sayfa

aslında baĢka bir içeriği gösteriyor olabilir. Üstelik arama motorlarıda frame sayfalardan pek hoĢlanmazlar. Ve

linkler direkt alındığında ise frameli bir sayfa frame

olmadan açılabilmektedir.

Frame Parametreleri

marginwidth="..." (sayı) :Soldan boĢluk

miktarını belirtir.

marginheight="..." (sayı) :Sağdan boĢluk

miktarını belirtir

scrolling=".." (yes, no, auto) :Kaydırma

çubuklarının gösterilip gösterilmyeceğini belirtir.

noresize :Pencere boyutlarının sabit

Page 89: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

89

kalır ve Fare ile boyutlandırma yapılamaz

frameborder="..." (yes, no) :Çerçeveler arasındaki sınır çizgisinin olup olmayacağını

belirler.

border="..." (sayı) :Sınır çizgisinin kalınlığını

(veya çerçeveler arası mesafeyi) belirler

Frame Satırları ve Sütunları

Frame kullanan bir HTML sayfası oluĢturmak, aslında, çerçeve sayısı kadar HTML sayfası oluĢturmaktır

demiĢtik. Tablo ile frame arasındaki en önemli farkta budur.

Frame oluĢturma kodu olan <frameset cols="">...</frameset> Ģeklindedir. Burada frame sayı

belirtilmez, verilen ölçü sayısına göre tarayıcı bunu

kendisi hesaplar. ―cols=‖ ifadesinden sonra sayfamızda kaç çerçeve olması isteniyorsa o kadar ölçü yazılır.

<frameset cols="20%,60%,20%>

Bu komuttaki ―col‖ ifadesiyle dikey frame oluĢturuyoruz

bu çerçeve setinde solda ve sağda ekranın %20‘si eninde

birer alan bırakıp kalan /60 ı ise içerik için kullanacağız. Bu framelerin içine ne konulacağını ise, FRAMESET

etiketinin içine yazacağımız kaynak gösteren satırlarla bildirmemiz gerekir;

ġimdi bunları yazalım. </frame> kodunun önüne Ģunları yazın:

<frameset cols="20%,60%,20%>

Page 90: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

90

<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 içindeki <noframes>..</noframes> koduna

dikkat ettiyseniz içindeki <body> etiketleride ne diyebilirsiniz. BaĢtada dediğimiz gibi eski tip tarayıcı

kullananlar yada frame özelliğini kapatmıĢ kullanıcılar

sayfanın sadece <noframe> blokunu göreceklerdir. Setleri oluĢturacak sayfalara örnek ise

<html>

<head>

<title>Çerçeve 1</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">

</head>

<body bgcolor="#C0C0C0">

Page 91: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

91

<p align="center">Çerçeve: 1</p>

</body>

</html>

Bu sayfayı, örnekten anlaĢılabileceği gibi ―cer01.htm‖ adıyla kaydedilmeli. Zemin rengi metinler değiĢtirmek

üzere, cer02 ve cer03 adıyla iki kopyası daha gerekli olacaktır. Ayrıca tüm dosyaların aynı klasörde durması

gerektiğinide unutmamak gerekir. Ana set dosyasındaki frameset içinde bulunan cols ifadesini rows yaptığımız

anda dikey olan frame kolonları bu sefer yatay olarak yerleĢecektir.

Yatay Dikey KarıĢık Frame OluĢturmak

Frameler teknik olarak birbirleriyle birleĢtirilemez ancak

aynı görüntüyü elde etmek mümkündür. Sadece

kodlama Ģekli biraz farklı olacaktır. Frame kullanımında ne kadar frame isteniyorsa belirtilir demiĢtik. Bu

belirtilen frameler için <FRAME SRC> ile kaynak belirtilmediği anda tarayıcı o alanda bir sütun oluĢturur.

Buraya diğer frameler yeleĢtirilebilir. EĢit olmayan sayıda sütun ve sıra içeren frame iĢlevi için bu olay kullanılır.

Birinci sütun tek sıralı, ikinci sütun iki sıralı bir çerçeve sayfası için kodumuz Ģöyle olmalıdır:

<FRAMESET COLS="25%,75%">

<FRAME SRC="cer01.htm" NORESIZE SCROLLING="auto">

<FRAMESET ROWS="20%,80%">

<FRAME SRC="cer02.htm" NORESIZE

SCROLLING="auto">

Page 92: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

92

<FRAME SRC="cer03.htm" NORESIZE SCROLLING="auto">

</FRAMESET>

Page 93: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

93

HTML’de Bağlantı’ya (LINK) GiriĢ

Buraya kadar gördüklerimiz metini biçimlendiren ve

gösterimi ile ilgili etiketlerdi. Oysa web ile biraz ilgili birisi bile linkler olmadan web ortamından hiçbir Ģey

yapılamayacağını bilir. Çünkü linkler yardımı ile kullanıcılar bir web adresinden diğerine özgürce

gezebilirler. Ancak tabiî ki verilen bağlantının hedefindeki

resim, ses, vide yada web adresi doğru olmalıdır. Aksi taktirde ―kırık link‖ (dead link, broken link) dediğimiz

adeta çıkmaz sokak sayılacak bir kopukluk oluĢur. Örneğin link verirken ―c:\belgelerim\cv.doc‖ linkini

verdiniz ve amacınız kullanıcıların cv dosyanıza eriĢebilmesi. Peki sizin sabit diskinizde kendi halinde

duran bir dosyaya, sabit diskiniz Internet‘e açık değilse, kullanıcı nasıl eriĢecek.. Tabii bu traj komik örnekte asıl

sorun Ģu, hardiskinizi internete açtınız diyelim, bu sefer özel bilgilerinizi nasıl koruyacaksınız?

<A>..</A> etiketi HTML‘e hareket kazandıran ve link vermeyi sağlayan etikettir. HTML etiketleri arasında

Anchor (A) etiketinin yanı sıra, <BASE> ve <LINK> etiketleri de, bir noktadan bir diğerine gitmemizi sağlar.

<PRE></PRE>: Önceden düzenlenmiĢ (preformatted)

metin blokları için kullanılır. Normalde, HTML birden çok whitespace'i tek bir boĢluk karakteriyle değiĢtirdiği için,

görüntülenmesi baĢka türlü mümkün olmayan metin blokları bu tag yardımıyla görüntülenebili

<A>..</A> etiketine özellik kazandıran parametreler Ģunlardır:

ACCESSKEY=‖metin‖: Bu parametre ile, bağlantının fare ile tıklamak yerine, klavyede bir veya birden fazla tuĢa

Page 94: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

94

basarak yapılmasını sağlayabilirsiniz. ―Metin‖ kelimesinin

yerine yazacağınız karakterler, klavye kestirmesi olur.

CHARSET=‖metin‖: Bağlantı sağlanan Web kaynağının,

tarayıcıda hangi dil kodlamasıyla gösterileceğini belirler. Verilmediği takdirde, kullanıcının tarayıcı programı ISO-

8859-1 olan ASCII kodunu seçer.

COORDS=‖X1, Y1, X2, Y2... Xn, Yn‖: Bu parametre,

bağlantının metinde değil, bir grafik üzerinde oluĢturulması halinde, resmin hangi koordinatları arası

tıklanırsa, bağlantının sağlanacağını gösterir. Bu etiket, SHAPE ile birlikte kullanılır. (Bu sayede bir resmin çeĢitli

kısımlarına basıldığından farklı adreslere gidilmesi mümkün olur. Buna image map denilir)

HREF=‖url‖: URL, (Uniform Recourse Locator) Internet‘te bulunan bir adres demektir.Bu adres, HTTP,

FTP veya elektronik posta yoluyla ulaĢılabilecek bir Web

alanı ve o alanın içindeki bir dosya olabilir. UlaĢılacak dosya, HTML dosyası olabileceği gibi bir Word , Excel

dosyasıda olabilir, grafik, ses, video ya da sıkıĢtırılmıĢ ZIP dosyası da olabilir. Tarayıcılar genellikle, bir bağlantı

ile kendisine gelen dosyayı ne yapacağını bilemezse (örneğin bir zip dosyası), kullanıcıya bu dosyayı yerel

sabit diske kaydetmeyi önerirler.

NAME=‖metin‖: Anchor‘a isim vererek, daha sonra bu

noktaya atıfta bulunma imkanı kazandırır. Bunu, bir sayfanın kendi içinde, link vermek için kullanabilirsiniz.

Çok uzun bir sayfanın baĢtarafına <a name="top"> Ģeklinde bir ―isimlendirilmiĢ Anchor‖ noktası koyarsanız

ve aĢağıda baĢtarafa dönüĢü kolaylaĢtırmak için Ģöyle bir

Page 95: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

95

bağlantı yapabilirsiniz: <A HREF="ust‖>Sayfa baĢına git

</A>

REL=‖metin‖: Kurulacak iliĢkinin niteliğini belirtir.

Tarayıcılar, çoğu zaman bu ifadeye bakarak, bağlantı kurulunca ne yapabileceklerini bilirler. Örneğin ―metin‖

yerine ―stylesheet‖ yazarak, tarayıcıya alacağı dosyanın, daha sonra metinleri biçimlendirmekte kullanılacağını

söyleyebiliriz.

SHAPE=(RECT/CIRCLE/POLY/DEFAULT): Bu etiketin

karĢısına yazacağınız ifade ile, tarayıcıya bir resim dosyasının üzerine konmuĢ bağlantı noktasının biçimini

tanımlarsınız.

Rect Ģeklin dörtgen,

circle daire,

poly çok kenarlı

default ise arayıcının varsayılan bağlantı Ģekli

olduğunu ifade eder.

Bu parametreyi COORDS parametresi ile birlikte

kullanmak gerekir. Bu durumda COORDS etiketinin önüne yazacağınız ―X1, Y1, X2, Y2, Xn, Yn‖ Ģeklindeki

koordinatların da anlamı farklı olur. SHAPE etiketini ―rect‖ olarak bildirirseniz, X1 ve Y1 Ģekin sol üst

köĢesinin, tarayıcı penceresinin sol üst köĢesinden itibaren kaç pixel sağa ve aĢağı konulacağını; X2 ve Y2

ise Ģeklin sağ alt köĢesinin koordinatlarını gösterir (Örnek: SHAPE=rect, COORDS=‖0,0,9,9‖). SHAPE‘i

―circle‖ olarak tanımlarsanız, koordinatlar dairenin merkezini ve çapını gösterir (Örnek: SHAPE=circle

COORDS=‖10,10,5). Çok kenarlı bir Ģekil tanımlamanız

Page 96: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

96

halinde, her bir koordinat diğerine, son koordinat da

birinciye bağlanır (Örnek SHAPE=poly COORDS=‖10,50,25,20,20,50‖).

TARGET=‖pencere‖: Bu etiketle linkin sayfa içindeki hangi frame (yada boĢ bir yeni sayfaya) yükleneceği

belirtilir. FRAMESET etiketi bulunan bir sayfada kullanılması halinde, alınacak sayfanın hangi frame içine

konulacağını gösterir. Burada ―pencere‖ kelimesinin yerine Ģu değerler yazılabilir:

―çerçeve adı‖: OluĢturulan çerçevelere önceden isim verilmiĢ ise, o isimler buraya yazılarak, sayfa frame içine

yüklenir. Çerçeve isimleri mutlaka rakam veya harfle baĢlamalıdır.

_blank: Linkin hedefi yeni bir tarayıcı penceresinde açılır. Frameler içinde baĢka bir

siteye link vermek için bu önemlidir.

_parent: Alınacak unsur, o anda açık sayfayı oluĢturmuĢ bir ana sayfa varsa, onun yerine

konulur.

_self: Alınacak sayfa mevcut sayfanın bulunduğu

tarayıcı perceresine konulur.

_top: Alınacak sayfa mevcut pencereye en üstten

itibaren konulur.

Frame kullanan bir sayfada baĢka bir siteye link verildiğinde _blank kullanılmadığında sayfada bulunan

mevcut sabit frameler duracağından diğer site sizin sayfanızın içine gömülecektir. Hele birde link verilen

sitede frame ise iĢte o zaman az yağlı az piĢmiĢ

Page 97: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

97

bulgur çorbası tarzı birbirine geçmiĢ bir ekran

görüntümüz olacaktır.

HTML’de Bağlantı Türleri

HTTP bağlantıları:

Link, tarayıcının HTTP protokolünü kullanarak

ulaĢabileceği bir alanda ise, bunun gönderme ifadesi, <A

HREF="http://site adresi/sayfa adi.htm">Link metni </A> Ģeklinde yazılır. BaĢka bir Web alanında belirli

dosyaya değil de, alanın birinci sayfasına (home page, index page, vs.) bağlantı veriyorsak, bağlantıyı <A

HREF="http://www.hedefsite.com.tr/"> olarak yazmak gerekir. Web server anasayfa hangi dosya ise onu

gönderecektir.

FTP bağlantıları:

Kimi zaman, HTTP protolünü değil de FTP (File Transfer Protocol) yöntemini kullanarak, bir dosyayı kendi

bilgisayarına indirmesini sağlamamız gerekebilir. Bunun için link ifademiz, örneğin Ģöyle olur: <A

HREF="ftp://download.com/pub/">Bedava programlar</A>

Haber Grupları:

Internet‘in bilgi paylaĢımı amacına yönelik bu kullanımında, tartıĢma gruplarına yer verilen Usenet

servisi için prtokol belirtilmez. Usenet‘ için örnek olarak:

<A HREF="news:comp.ibm.www.developers.html">

GeliĢtiriciler grubu </A>

Page 98: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

98

Elektronik Posta Bağlantısı:

Bazen kullanıcın bir linke tıkladığından hemen o linkteki bir adrese e-mail atmak üzere kullanıcının varsayılan e-

mail programının açılması istenebilir. Örnek olarak

<A HREF="mailto:[email protected]‖>e-mail

gönder </A>

Dosya Bağlantıları:

Sabit bir dosyaya link vermek için kullanılır. En çok intranet ortamlarında kullanılır. Örnek olarak,

<A HREF="file://server/yazılımlar/kulanım.html">Kullanım

rehberi </A> gibi

Diğer bağlantılar:

Internet‘in ilk günlerinde daha sık kullanılmıĢ olsalarda

Gopher, ve çok geniĢ bir alana yayılmıĢ ağlarda veri tabanı araĢtırması yapmaya imkan veren WAIS, çok

yaygın olmamakla birlikte, HREF ifadesi olarak kullanılabilir.

Linkler hakkında detaylı bilgi için http://www.w3.org/addressing/schemes.html adresine

bakabilirsiniz.

Neden “\” değilde “/” kullanılıyor?

HREF ile kullanılan düz bölü ―/‖ iĢareti dikkatinizi çekmiĢ

olmalı. ĠĢin aslı Ģu Unix türevi sistemlerde klasör hiyerarĢisi ―/‖ ile ifade edilirken Windows içinde bu iĢem

―\‖ ile ifade edilemektedir. Aslında ―\‖ iĢareti ile ―‖/‖ arasında hiçbir fark yok ve iĢlevleri de aynı. Yani

Page 99: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

99

Windows altında link verirken ―\‖ ilede link verirseniz link

çalıĢır ancak unutmayın ki sayfa bir de hosting bilgisayarına yüklenecektir. Peki web server iĢletim

sistemi Windows değilse ne olacak. Tabiî ki link kırılılacak. Windows altında ―\‖ yazılsada web server

programı bunu normal karĢılığna çevirerek iĢlem yapar. Ancak Linux server içinse bu sorundur.

―\dosyalar\sayfa.html‖ yazdığınızda Linux sizin dosyalr klasörü içinde bulunan sayfam dosyasını kastettiğinizi

bilemez.

Resimleri Link BaĢlığı Vermek Ġçin Kullanmak

Link verirken yazdığımız bir kodu ele alalım.

<A HREF="http://site adresi/sayfa adi.htm">Link metni </A>

Burada ―Link metni‖ yazısı link olduğunu belirtmek üzere altı çizili yazılacaktır ve buraya tıklandığı andada hedef

linke gidilecektir. Burada link metni yerine bir resim

dosyası kullanılırsa, resim linkin simgesi olacak ve resme tıklandığında link açılacaktır. Örneğin

<A HREF="http://site adresi/sayfa adi.htm"><img src=‖dugme.jpg> </A>

gibi. Tabii istenirse </A> metninden önce metin

yazmakta mümkündür.

<A HREF="http://site adresi/sayfa adi.htm"><img

src=‖dugme.jpg> <br>Link metni</A> gibi

Page 100: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

100

Resim Haritası (Image Map) ile Link Kullanımı

Resimlerin farklı kısımlarından farklı yerlere link vermek

isterseniz resim haritalarından faydalabilirsiniz. Örneğin ilk anda aklınıza gelebileceği gibi Türkiye haritası

üzerinde tıklanacak ile göre ilgili ilin sayfasına geçiĢ yaptırılabilir.

Resim haritası bir resim üzerindeki tanımlanmıĢ etkin noktaları (hotspots) link olarak belirler. Etkin noktalar

dikdörtgen veya yuvarlak olabileceği gibi düzensiz Ģekiller de olabilir. Bunlar için uygun koordinatlar

belirtilmelidir.

Dikdörtgen etkin noktanın konumu iki noktayla

tanımlanır: sol üst ve sağ alt köĢeler. Her nokta resmin

sol-üst köĢesinden yatay ve dikey uzaklığını piksel cinsinden belirten bir sayı çiftiyle tanımlanır. AĢağıdaki

örnekte 0,0 etkin noktanın sol üst köĢesinin 50,50 de sağ alt köĢesinin resmin sol üst köĢesine olan uzaklığıdır.

<map name="haritaadi" id="haritaadi"> <area shape="rect" coords="0,0,150,150" href="adana.htm" />

</map>

Yuvarlak etkin noktanın konumunu tanımlamak için üç adet koordinat kullanılır: ikisi (yatay ve dikey değerler)

dairenin merkezini tanımlamak için, üçüncüsü dairenin yarı çapı içindir.

<map name="haritaadi" id="haritaadi"> <area shape="circle" coords="100,150,60"

href="adana.htm" />

</map>

Page 101: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

101

Çok köĢeli etkin noktanın konumunu tanımlamak için

Ģeklin tüm köĢelerinin koordinatları kullanılır. Çok köĢeli etkin noktalar tanımlanan noktaları birleĢtiren düz

çizgilerden oluĢur. AĢağıda beĢ köĢeli bir etkin nokta için gereken kod verilmiĢtir:

<map name="haritaadi" id="haritaadi"> <area shape="poly" coords="310,14,559,195,274,356,5,118,126,411"

href="ankara.htm" />

</map>

AĢağıdaki resimde 4 adet geometrik Ģekle de link

verilmiĢtir. <img> etiketine usemap="#haritaismi" eklendiğinde haritaismi adlı resim haritasına göre resim

içerisinde linkler belirir.

Link Verirken Relative (göreceli) ve Absolute (mutlak) Adreslemelerin Farkları

www.abc.com sitesinin tasarlandığını, www.abc.com/yazilar adresinde ise makaleler

yayınlanacağını varsayalım.

“yazi1.html” dosyasına link verirken

“yazilar/yazi1.html” adresi kullanılabilir. Ancak istenirse “http://www.abc.com/yazilar/yazi1.html”

adreside kullanılabilir. Bunların birincisi göreceli ikincisi

ise mutlak adreslemedir.

Her ikisinin de hem avantajı hem de dezavantajları

vardır:

Relative adreslenerek oluĢturulan sayfaların bir

makineden diğerine taĢınması kolaydır

Page 102: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

102

Relative linkler bir üst seviyedeki sayfa taĢındığı

zaman kırılırlar. (Örneğimizde ―yazilar‖ kladörü kalkarsa tüm linkler bu ısımdaki tüm linkler

kırılacaktır)

Relative linkleri local serverlarda çalıĢtırıp denemek

daha kolaydır.

Absolute adreslemede yazılan linkler daha uzundur

ve bakımı daha zordur

Bazı dosyaların mutlaka sunucudan yüklenmesini

istiyorsanız (bir kullanıcının sayfanın bir kopyasını kendi makinesine indirmesi durumunda) kesin

sonuç verir.

Bu iki adresleme arasındaki farkları bilerek hazırlanan bir

sitede normalde göreceli ve mutlak adresleme beraber kullanılır, ve göreceli adreslerin sayısı genelde daha çok

olur. Ġyi bir sitede yapılabilecek bir düzenleme,

bütünlüğünün bozulmaması gereken sayfalarda, göreceli adresleme kullanmak, ve her yüklendiğinde değiĢen

sayfalara da mutlak link vermektir, örneğin saatbaĢı değiĢen istatistikler gibi.

Page 103: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

103

KULLANICI ĠLE ETKĠLEġĠM VE FORMLAR

HTML içinde ne sunarsak sunalım kullanıcılar bir

noktadan sonra gezdikleri sayfada kendilerinden bir Ģeyler görmek isteyecektir. Örneğin milli takım açılan

siteyi gezen bir taraftar olsanız ve site imkan verse, takıma baĢarı dileklerinizi sunmak yada maç için taktik

vermek istemezmiydiniz ? Yada imkan olsa oyuncularlar

web sitesi üzerinden bilgi alıĢveriĢinde bulunmak istemezmiydiniz. ĠĢte web de bu iĢlemler için FORM

denilen bilgi giriĢ sistemi kullanılır. Formların beĢ ana parçası vardır;

Bilgi giriĢ kutuları

Action ile gösterilen ve bilgileri iĢlemesi için

tasarlanan hedef

Submit tıklandığından ne iĢlem yapılacağını

gösteren hedef dosya ve bilgilerin iletilmesini istediğimiz yöntem (POST yada GET).

Bilgileri bu hedefe gönderecek SUBMIT düğmesi

Formu ilk haline getirecek olan RESET düğmesi

Form etiketinin kodlanması FORM ACTION="url" METHOD=POST veya GET> Ģeklinde olur.

<form name="forma verdiğimiz ad"

action="isle.php" method="post">

Adınız Soyadınız: <input type="text" name="isim"

size="40">

<input type="submit" value="Gönder">

<input type="reset" value="Temizle"> <form>

Page 104: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

104

Formun name parametresi ile forma bir isim verilebilir.

<FORM> etiketi, içeriğinde kullanılan ACTION parametresi ile kullanıcı SUBMIT butonuna tıkladığında

forma girilmiĢ olan bilgilerin hangi adresteki hangi programa teslim edileceğinin belirtilmesine imkan verir.

Ġsterseniz formu bir sayfada kodlayıp baĢka bir sayfada bu değerleri iĢleyebilirsiniz. Öte yandan parametrik

yöntemle bir sayfadan hem formu gönderip, action içinde aynı sayfayı tanımlayıp, kayıtları aynı sayfa içindede

iĢleyebilirsiniz.

Formun method parametresi ise verilerin, onu iĢleyecek

olan yere nasıl iletileceğini belirtir. Form verileri HTML içinde iki Ģekilde iletilirler.

GET

POST

Get metodu ile iletilen bilgiler diğer programa tarayıcının

adres satırından iletilirler. Örneğin içeriğinde ―ALĠ‖ bilgisi olan ―isim‖ ve içeriği ―ATMACA‖ olan soyisim değerini

―isle.php‖ dosyasına GET ile teslim edecek olursak tarayıcının adres satırı

www.alanadi.com/isle.php?isim=ALĠ&soyisim=ATMACA

Ģeklinde olacaktır. Get yönteminde bilgiler Web Server‘da

―query_string" denen değiĢkenin içine yazılıp diğer programa iletilirken, Post yönteminde bu bilgiler ―stdin"

değiĢkenine yerleĢtirilir ve Ģifrelenerek iletilir.

Buradaki handikap (ve tabiî ki avantaj) adres satırının

herkes tarafından görüntülenebilmesi ve formun hiç çağrılmadan adres çubuğundan bilgilerin verilerek hedef

dosyaya iĢlem yaptırılabilecek oluĢudur. Örneğin isle.php

Page 105: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

105

dosyası bu bilgileri MYSQL veritabanına kayıt ediyor

olsaydı ve bizde adres çubuğundan

www.alanadi.com/isle.php?isim=MEHMET&soyisim=ATM

ACA

bilgisini göndersek bu bilgilerde veritabanına kayıt

edilmiĢ olacaktı. Haliyle bu iĢlem parola vs iĢlemlerde tercih edilmez. GET yöntemi benim kiĢisel tecrübelerime

göre ekranda listeleme sırasında sayfalama yaparken, resim galerisinde resim adı gönderilirken, dosya adı

gönderilirken yada doğrudan adres satırından bilgi göndermek için uygun bir yöntemdir. Parola vs ekranları

içinse uygun değildir.

GET yönteminin handikapı dediğimiz olayda bir de

avantaj gizlidir. POST yöntemi için form dizayn etmek gerekir ancak GET yöntemi için form dizayn etmeden

doğrudan diğer programa bilgi geçiĢi yapılabilmesidir.

www.alanadi.com/dildegis.php?dil=ENGLISH bilgisi hedef dosyaya yeni dil için bir parametre değieri iletmektedir.

Diğer program ortada bir form olmamasına rağmen bunu GET ile gönderilmiĢ gibi kullanabilir. Oysa bu iĢlem POST

ile yapılamaz.

Ayrıca GET için kullanılan ―query string‖ uzunluğu belli

bir değeri geçemez. POST yönteminde böyle bir sıkıntı yoktur. Özetle

POST

YavaĢ

Güvenli

http header‘ı kullanır.

Page 106: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

106

Sınırsız bilgi gönderir

GET

Hızlı

Güvenlik daha zayıf

Taracının adres satırı kullanır.

Max 2048 karakter gönderebilir.

Form olmadan adres satırı ile Veri alınıp gönderilebilir

Formda ayrıca giriĢ kutuları vardır ve bunların her birinin de name parametresi vardır. Bu name parametreleri son

derece önemlidir. Bir INPUT etiketinin name değeri formu iĢleyecek olan dilin (PHP, JSP veya baĢka bir dil) o

kutunun içindeki değere eriĢmek için kullanacağı değiĢken adıdır. Kısaca Input etiketlerinin name

özelliklerini verirken değiĢken tanımlama kurallarına

uygun davranılmalıdır. Örneğin ―adsoyad‖ uygun bir isimdir ama ―ad soyad‖ uygun bir isim değildir. Bu

iĢlemde uygun olmayan isimlerin kulanılması HTML tarafını enterese etmez. Ancak bu değerleri iĢleyecek

olan program bunlarn değerlerine eriĢemez.

Formun Submit seçeneği onu hedefe gönderecek butonu,

RESET parametresi ise formu ilk anki değerlerine geri dönderecek butonu temsil eder.

Form Etiketinin Alt Seçenekleri

Yukardaki örneklerden kolayla anlaĢılabilir ama yinede formun alt etiketlerini detaylıca yeniden görelim.

Page 107: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

107

ACTION=url

Formun gönderildiğinde hangi program tarafından değerlendirileceğini belirtir.

METHOD=get-post Bilgilerin sunucuya hangi yolla gönderileceğini

belirtir. GET değeri verildiğinde kontrollere girilen içerik o anda bulunulan adrese eklenip

değerlendiriciye gönderilir. POST değeri ise form içeriğini direkt olarak derleyici programa

yönlendirir.

TARGET=window

Netscape tarafından getirilen bu tag form değerlendirici tarafından kullanıcıya geri gönderilen

yanıtın hangi pencerede belireceğini gösterir. Pencere isimleri FRAME konumuzu iĢlerken

gösterdiğimiz " _blank" , " _top" gibi değerlerden

biri olabilir.

Submit ve Reset Düğmeleri

Bu düğmeler formun hedefe iletilmesini yada içeriğinin temilenmesini salayan ögelerdir.

Form Elemanları Çizelgesi

Kontrol ġekli YazılıĢı Açıklama

TextBox

<INPUT TYPE="text">

Kullanıcının tek satırdan oluĢan metin girmesi

için kullanılır.

Passwo <INPUT

TYPE="password"

Yukarıdaki gibi

string ifade giriĢi

Page 108: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

108

rd > yapılır. Bununla

birlikte yazılan karakterler yerine *

karakteri gösterilir.

Hidden ** (görünmez)

<INPUT TYPE="hidden">

Formla birlikte taĢınan bu

alandaki bilgi kullanıcıdan gizlenir.

File

<INPUT TYPE="FILE">

Forma kullanıcının bir

dosyasının ismini girmesine izin

verir.

CheckBox

<INPUT

TYPE="checkbox">

Kullanıcının

doğru/yanlıĢ (true/false) Ģeklinde

mantıksal değer girmesinde

kullanılır.

RadioB

utton

<INPUT

TYPE="radio">

Özel bir seçenek

listesinden seçim yapma imkanı verir.

Radibuttonların name özelliğine

aynı değerler verilerek

Page 109: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

109

sınıflandırılabilir.

Submit

Submit

<INPUT TYPE="submit">

FORM etiketinin ACTION

özelliğinde belirtilen URL ye form bilgilerini

göndermede kullanılır.

Reset

Reset

<INPUT TYPE="reset">

Bütün form kontrollerini

sıfırlamada kullanılır. Formun sayfa ilk

yüklendiğindeki eski halini

almasını sağlar.

Image

<INPUT

TYPE="image">

Tıklandığında

Mouse imlecinin X ve Y koordinatlarını

göndererek grafiksel onay

buttonu yapmada kullanılır.

Button

<INPUT TYPE="button">

Ġstemci-tarafı (Client-Side)

scriptlerinden JavaScript ya da

VBScript i tetikleyebilecek

Page 110: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

110

komut düğmesi

oluĢturur

TextArea

<TEXTAREA> Çok satırlı

metinlerin girilmesine

imkan sağlayan bir kontroldür.

ComboBox

<SELECT size="1">

Kullanıcıya açılan bir listeden hazır seçenekler

sunar.

ListBox

<SELECT size="n">

Kullanıcıya liste

Ģeklinde hazır seçenekler

sunar. Buradaki "n" ListBox ın kaç satırlı

olacağını belitir.

INPUT

INPUT etiketi ile ziyaretçiye, forma klavyeden yazarak bilgi girme imkanı verilir. Bu etiketi kullanmanın genel

kodlanıĢı Ģöyledir:

<INPUT TYPE="..." NAME="..." VALUE="..." SIZE="..."

MAXLENGTH=".." SCR="..." CHECKED"...." TABINDEX="X">

ALIGN=tip TYPE değeri bir resim olarak atandığında bir

sonraki satırın resme göre nasıl yerleĢtirileceğini

Page 111: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

111

belirtir. TOP, MIDDLE veya BOTTOM değerlerinden

birini alabilir.

CHECKED

Kontrol olarak bir iĢaretleme veya seçim kutusu kullanıldığında CHECKED değeri bu kutuların

iĢaretlenmiĢ olarak karĢımıza gelmesini sağlar.

MAXLENGTH=uzunluk

Metin kutusuna kullanıcının maksimum kaç karakter girebileceğini belirler.

NAME=isim Kontrole bir isim verir

SIZE=boyut Kontrolün boyutlarını karakter cinsinden

belirlemenizi sağlar. TEXTAREA kontrolü kullanıldığında en,boy' gibi bir ifade kullanılarak

kontrolün hem eni hem de yüksekliği belirtilebilir.

SRC=adres Kontrol olarak resim seçildiğinde resmin bulunduğu

adresi taĢır.

TYPE=tip

Kontrolün cinsini belirler ve Ģu değerlerden biri olabilir. Checkbox, Hidden, Image, Password,

Radio, Reset, Submit

o CHECKBOX: Bir onay kutusu görüntüler ve

sadece doğru veya yanlıĢ değerlerini alabilir.

o HIDDEN: Web tarayıcısının penceresinde

görünmez fakat içerdiği değer gönderilen form ile web sunucusuna ulaĢır.

Page 112: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

112

o IMAGE Bir resmi ifade eder ve üzerine

tıklandığında form değerlerini sunucuya yollar. Genellikle bu amaçla kullanılsa da

istenilirse kullanıcının resmin hangi x ve y noktalarına dokunduğu öğrenilebilir. Bu tag

SRC ile birlikte kullanılır ve SRC komutu resmin bulunduğu URL'yi göstermelidir.

o PASSWORD TEXT kontrolü ile aynı özellikleri taĢır fakat kullanıcının girdiği karakterler bu

kontrolde yıldız olarak görülür. ġifre giriĢi için uygundur.

o RADIO Kullanıcının bir çok seçenek içerisinden bir tanesini seçebilmesine olanak

tanır. Grup içindeki RADIO kontrolleri her zaman aynı ismi taĢımalı kontrollerin

değerleri VALUE değerine atanmalıdır.

o RESET Tıklandığında form içeriğini temizler. Kullanıcının form'u tekrar doldurmasını

sağlar.

o SUBMIT Form içeriğini sunucuya yollar.

VALUE değeri kullanılarak üzerindeki yazı değiĢtirilebilir.

o TEXT Kullanıcıdan tek satırlık veri alınmasına olanak tanır. SIZE ve MAXLENGTH

takıları, bu kontrolle birlikte kullanılabilir

ġimdi Input etiketinin kullanım ilkelerini kullanıcının

yapabileceği iĢlere göre ayırarak detaylıca inceleyelim

Page 113: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

113

Kullanıcının klavyeden metin girmesi için:

TYPE=TEXT NAME="..." VALUE="..." SIZE="..."

MAXLENGTH="..." TABINDEX="X"

―Size" bu kutunun kullanıcının ekranında gösterileceği

geniĢliği karakter olarak belirler; ―Maxlength" ise kullanıcının girebileceği metnin uzunluğunu karakter

olarak belirler. Bu değer verilmez ise varsayılan değer olan 21 hane sınırı kullanılır. Form ekrana geldiğinde bir

kutunun varsayılan olarak bir değerle gelmesini istiyorsanız bu değer VALUE parametre ile verilmelidir.

Forma bilgi giriĢi yapılırken tab tuĢuna basılacak olursa kutular arasında hareket etmek için kullanılacak sıranın

girilmesini sağlar. Örneğin tabindex değeri 1 olan kutuda

tab tuĢuna basılır ise tabindex değeri 2 olan kutuya geçiĢ yapılır.

Parola GiriĢi için:

TYPE=PASSWORD NAME="..." VALUE="..." SIZE="..."

MAXLENGTH="..."

Metin girme kutusu ile aynı özelliklere sahiptir; fakat bu

kutunun içine kullanıcının gireceği bilgiler ekranda gösterilmez yerine yıldız simgesi gösterilir. Bankalardaki

Ģifre giriĢ ekranı gibidir.

Onay Kutusu için (Check iĢareti):

TYPE=CHECKBOX NAME="..." VALUE="..." [CHECKED]

Bu kutucuğa harf vs girilemez. Sadece fare ile tıklanabilir yada boĢluk tuĢu ile içine check iĢareti konulur. Gene

aynı Ģekilde bu iĢaret kaldırılabilir. Bu kutuda iĢaret

Page 114: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

114

varsa, tarayıcı ―Value=" hanesine yazacağınız bilgiler ve

kutunun adını bir çift olarak Server‘a gönderir. Kutuda iĢaret yoksa kutunun adı ve değeri Server‘a gönderilmez.

Böylece içinin boĢ olduğu varsayılır. Kutunun ekrana iĢaretlenmiĢ olarak gelmesi için, CHECKED parametrei

kullanılır.

Tekil Seçme Kutusu için (Radyo düğmesi):

TYPE=RADIO NAME="..." VALUE="..." [CHECKED]

Bu eleman formda çoklu seçeneklerden birisinin (ama sadece birisinin) seçilebilmesine imkan verir.

Listeleme Kutusundan SeĢmek Ġçin (SELECT)

Bu etiketi ile, formda bir kutu ve yanında bir aĢağı ok

oluĢturabilirsiniz; kullanıcı aĢağı oku tıklayarak kutudaki elemanları açıp birisini seçebilir. Seçilen kutu içerğine

yazılır. Ġstenirse bunlardan birisi otomatik olarak seçilmiĢ olarak da gösterilebilir. Bu etiketin kullanım Ģekli

Ģöyledir:

<SELECT NAME="...." SIZE="..."

MULTIPLE]>.....</SELECT>

Size hanesine 1, 2, veya 3 vs.. yazarak, ekrandaki kutunun kaç seçenek göstereceğini belirleyebilirsiniz. Bu

hane konulmazsa, otomatik 1 seçenek varsayılır. Bu kutuda gösterilecek seçenekler,

<SELECT....>..</SELECT> etiketlerinin arasına

<OPTION> etiketiyle yazılır. (<OPTION> etiketi kapatılmaz.) Herhangi bir seçeneğin otomatik olarak

Page 115: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

115

seçilmesi için önündeki <OPTION> etiketinin içine

SELECTED kelimesi konulur. Örnek:

<select name="cinsiyet" size="1">

<option selected>cinsiyetiniz

<option value="Erkek">Erkek </option>

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

</select>

Uzun Metin GiriĢi Ġçin (TEXTAREA)

Metin kutusu, ziyaretçiye, Web Server‘a uzun metin

gönderme imkanı sağlar.

<TEXTAREA NAME="..." rows=.. cols=..>Otomatik

yazılması istenen metin buraya yazılır </TEXTAREA>

―Name=...." parametresi ile ile metin kutusuna Server‘a

gelecek metnin iĢlenmesi ve kullanılması için gerekli

değiĢken adı verilebilir.

―rows=" ve ―cols=" parametreleri ile ise bilgi giriĢi

kutunsun satır sayısı ve karç harf geniĢliğinde olacağı bildirilir. Bu iki parametrenin girilecek metnin uzunluğu

ile ilgisi yoktur.

Gönder ve Sil düğmeleri (Submit ve Reset)

Doldurulan bir formun girlilen bilgileri iĢleyecek programa gönderilmesi için formlarda GÖNDEr (Submit),

ve forma girilen değerlerin yeniden ilk baĢtaki değerlerine dönderilmesi için SĠL(Reset) düğmesi

kullanılır.

Bunun için INPUT etiketi Ģöyle kullanılır:

Page 116: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

116

<INPUT TYPE=SUBMIT NAME=Gonder

VALUE="Gönder">

<INPUT TYPE=RESET NAME=Sil VALUE="Sil">

Tarayıcının otomatik düğme Ģekli yerine kendi düğme grafiklerimizi kullanabileceğimiz gibi sayfaya birden fazla

ve değiĢik maksatlarla düğme koymakta mümkündür. Ancak her düğmenin ayrı ismi ve ayrı değeri olması

gerekir (aksi takdirde gönderilen bilgilerin ilenmesinde karıĢıklık çıkar). Bu kodu Ģöyle yazabiliriz:

<BUTTON TYPE=SUBMIT NAME=‖Gonder‖ VALUE="Kaydet"><IMG SRC="kaydet.jpg></BUTTON>

<BUTTON TYPE=RESET NAME=‖Sil‖ VALUE="Sıfırla"><IMG SRC="sil.jpg></BUTTON>

Not: Formlarda HTML içindeyken çok önemli olmasa da işin içine PHP ASP vs diller girdikçe

önem kazananan bir konu vardır. O da form

elemanlarına NAME ile isim verirken kullanılan değerlerdir. NAME bu bilgilerin gönderildiği adreste

temsil edilecek olan ismidir.

Bilgiyi işleyecek olan program bilgilerin içeriğine

bu isimlerle erişecektir. Kısaca NAME ile verilecek isimlerde değişken tanımlama kurallarına uyulması

uygun olacaktır. Aksi taktirde PHP ile bunların içeriğini okuyamayız. (Aynı durum ASP ve diğer

diller içinde geçerlidir)

Tabindex

Forma bilgi giriĢi yapılırken tab tuĢuna basılacak olursa kutular arasında hareket etmek için kullanılacak sıranın

Page 117: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

117

girilmesini sağlar. Örneğin tabindex değeri 1 olan kutuda

tab tuĢuna basılır ise tabindex değeri 2 olan kutuya geçiĢ yapılır.

Burada formlar konusunda çok detaylı durmaya gerek yoktur. Çünkü standart HTML formdan gelen verileri

iĢleme yeteneğine sahip değildir. Bu iĢlem için CGI, PERL, JSP, ASP yada PHP gibi dinamik diller kullanılır.

Form içeren basit bir sayfa kodu ise:

<HTML> <HEAD>

<TITLE>Üye Kayıt Formu</TITLE> </HEAD>

<BODY bgcolor=gray text="blue"> <H2><FONT color="#FF0001">Üye Kayıt

Formu</FONT></H2> <FORM method="post" name="formKayit"

action="mailto:[email protected]?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

Gönder"> <INPUT type="reset" name="temizle"

value="Temizle"> </FORM></H3>

</BODY>

</HTML>

Page 118: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

118

Dikkat ettiyseniz kodu yazmak için table vs kullanmadık.

Bilgi giriĢ kutularının uzunluklarının farklı olacağınıda varsayarsak, buna TEXTAREA giriĢleride eklenirse

düzgün ve güzel görünen bir giriĢ ekranı yapmanın imkansız olduğunu görürüz. Bu yüzden en uygun

seçenek form elemanlarını tablo içine yerleĢtirmektir. Sol taraftaki hücreler tanıtıcı metinler ―adı giriniz‖ gibi yazılır,

bunların karĢılarındaki hücreye ise giriĢin yapıalacağı form elemanı konulur. Haliyle bu tasarım daha düzgün

bir görüntü üretecektir.

URL Kodları

Bazen adres satırında % iĢaretlerine boğulmuĢ anlamsız gibi görünen bilgiler yer alır. Bunlar URL Ģemasındaki

karĢılığına göre kodlanmıĢ bilgilerdir. Amaçları bilgileri

kakter seti sorunu olmadan aktabilmektir. HTTP protokolüne göre, ASCII karakter seti içinde yer almayan

karakterler(sadece Türkçe'de yada sadece bazı diğer alfabelerde bulunan harfler), bir Form'da yer aldığı

taktirde, tarayıcı tarafından karĢılıklarına göre kodlanarak gönderilir. Gerçi bir çok HTTP sunucu

programı bu karakterlere tanıyabilir ve bir dosyaya yazarken doğru Ģekilde yazabilirler; ama bu çevirme

iĢleminin bazen program yardımıyla yapılması gerekebilir. Önemli olanların listesi aĢağıda verilmiĢtir.

ü = %FC

Ü = %DC

ö = %F6

Ö = %D6

Page 119: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

119

ı = %FD

Ġ = %DD

ğ = %F0

Ğ = %D0

Ģ = %FE

ġ = %DE

ç = %E7

Ç = %C7

% = %25

& = %26

[ = +%5B

] = %5D

{ = %7B

} = %7D

? = %3F

= = %3D

Page 120: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

120

CSS ile Biçimlendirme Teknikleri, Dinamik HTML

CSS Stillerine Neden Ġhtiyaç Duyulur

Etiketleri incelerken gördüğümüz üzere biçimlendirme ile metin iç içe girmekteydi. Böylece hem metnin

etiketlerden ayrılması hemde GOOGLE gibi arama motorlarının sayfamızı indexlemesi zorlaĢmaktadır.

Biçimlendirme etiketleri kullanarak diyelimki belgenizdeki tablo baĢlıklarını hep aynı stilde yazmak istiyorsunuz. O

zaman çaresiz her tablo baĢlığını tek tek biçimlendirmek

zorundasınız. Oysa CSS teknolojisi Word içinde tanımlı hazır biçimlendirmeler gibi biçimlendirme blokları

kullanmaya izin verir. Tablo baĢlığı örneğine geri dönersek, bu baĢlığı bir stil olarak tanımlar –örneğin 14

punto, Tahoma, Kalın ve ortalanmıĢ, mavi zemin renginde- bu stili kaydettiğimiz dosyayı HTML içinde

kullanarak sitemizin (sitenin geneli sadece sayfa değil) genelinde sadece stilin adını vererek ilgili biçimlendirmeyi

uygulayabiliriz. Dahada güzeli, stiller tek bir dosyadan geldiği için stil dosyasındaki bir değiĢiklik anında tüm

sitemizde uygulanacaktır. Tablo baĢlığı örneğindeki gibi örneği forntu değiĢtirsek yada zemin rengini değiĢtirsek

tüm sitemizde ne kadar tablo varsa bu stil hepsi için değiĢtirilmiĢ olacaktır.

CSS bu açıdan büyük kolaylıktır. Ancak unutmayalım ki tarayıcılar içerik gibi CSS etiketlerini de kendilerine göre

yorumlamaktadırlar.

ġüphesiz tek fayda bu değildir. Biçimleri sayfa kodlarında sürekli tekrarlamak aynı zamanda gereksiz kod

Page 121: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

121

yığınlarına yol açacak sayafaların kod uzunlukları

gereksiz yere artmıĢ olacaktır. Bu yüzden sayfalarımız azda olsa daha geç açılacaktır. Bu ―az da olsa‖

görecelidir. Örneğin tabloda çok fazla satır sütun varsa ve bunlar biçimlendirme içeriyorsa sayfanın açılması

normalden çok daha uzun sürecektir. Bunun alternatifi olarak CSS stilleri genel olarak tek bir dosyadan

çağrılırlar ve kullanım için hafızaya yığılır, adı geçtikçe çağrılarak kullanılır.

CSS web sayfasını biçimlendirmede HTML den daha geniĢ imkânlar sunar. Örneğin div etiketiyle bir katman

oluĢturabiliriz ama hizalama dıĢında baĢka bir özelliğini değiĢtiremeyiz. Ancak CSS ile katmanın sayfa içindeki

konumu, arka plan rengi, kenarlık tipi, yazı rengi, kanlınlığı vb. pek çok özelliğini belirleyebiliriz.

CSS sadece biçimlendime iĢlemi için değil sayfanın

iskeletini tanımlamaktada kullanılır. Bunun için için ekranın ayrılan her bir parçası ayrı bir katman gibi ele

alınır ve bu sayede tablo kullanmadan üstelik framesetler lede uğraĢmadan sayfanın çatısını oluĢturabiliriz.

Cascading Style Sheets -CSS ve Kullanım ġekilleri

Web sayfalarını biçimlendirme konusunu ilk ele aldığımızda yerel biçimlendirme yoluna gitmiĢ ve neyi

biçimlendireceksek o etikete ait kodları hemen orada yazmıĢtık. CSS etiketleri ise hafızaya yığırlır demiĢtik.

CSS sayfa içinde üç Ģekilde kullanılabilir.

1. Yerel (Inline)

2. Sayfa içi global (Embedded)

Page 122: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

122

3. Site içi global (Linked)

Yerel Stil ġablonu

Yerel Stil ġablonlar, uygulanacak etiketi sadece bir kez

bulunduğu yerde etkiler.

Örnek:

<html>

<head> <title>Css</title>

</head> <body>

<h2>CSS Kullanımı</h2><br>

<h2 style=font-size:20pt; color:blue>CSS

Kullanımı</h2>

</body>

</html>

Görüldüğü gibi bu Ģekilde sadece o an kullanılan etikete

etki edilmiĢtir.

Dezavantajı : Bu kullanımı font taglarının kullanımı

arasında pek bir fark yoktur. Anlık çözümdür ve CSS in

genel mantığına aykırıdır.

Sayfa Ġçi Global Stil ġablonu

Global Stil Ģablonları bir önceki örnekte yaptığımız gibi h2 etiketinin (yada diğer bir etiketin) tüm sayfada aynı

özellikte olması istendiğinde kullanılır. Bunu için Stil

Ģablon özellikleri sayfanın baĢlangıcında (<head></head> etiketleri arasında) tanımlanır.

Page 123: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

123

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

Yukarıdaki örnekte sayfa içerisinde kullanacağımız tüm

h2 etiketlerinin özellikleri sabitlenmiĢtir. Yani sayfa içerisinde nerede kullanırsanız kullanın h2 etiketinin stil

özellikleri hep aynı kullanılacaktır. Stil Ģablon

tanımlamaları <head> </head> etiketleri arasında <style type="text/css"> ile baĢlayıp </style> ile

bitmelidir.

Dezavantajı : Tanımlanan stiller her sayfada tekrarlanmıĢ olur. Diyelim ki stillerinin toplamda 5 kb yer tutuyor olsun 500 de sayfanız olsun. Stiller 2500 KB yer

tutuyor demektir. Ayrıca her sayfa için CSS stilleri de tarayıcıya yeniden gönderilecek ve gereksiz trafik

oluĢacaktır. Hepsinden beteri ise bir stilde değiĢiklik

Page 124: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

124

yaparsanız diğer sayfaları da değiĢtirmeniz gerekir. 3-5

sayfa için bu kolaydır belki ama binlerce sayfadan oluĢan bir portal düĢünürseniz bu iĢin ne derece zahmetli

olacağı açıktır. Ayrıca bir sayfada farklı diğerinde farklı biçimlere yer verilmiĢ olabilir. Buda sitenin tutarlılığını

düĢürür.

Site Ġçi Global Stil ġablonu

Global stil Ģablonunu, sitemiz içerisindeki tüm sayfalarda

kullanmak istediğimizde uygulanabilecek bir tekniktir. En çok kullanılan biçimde budur. Uygularken, stillerimizi

yukarıda örneklerini verdiğimiz Ģekilde hazırlarız. Fakat bu stil listesini html dosyamızın içerisinde değil de boĢ

bir sayfaya yazarız ve css uzantılı bir Ģekilde kaydederiz. Ardından da html dosyamızın içerisine yine <head>

</head> etiketleri arasına <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}

Yukarıda verilen örnekteki dosyayı stil.css olarak

kaydedip, html dosyamıza geçelim. Html dosyamızın kodları:

Örnek:

<html>

<head>

Page 125: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

125

<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 dosyasının kodları arasında geçen <link rel="stylesheet" type="text/css" href="stil.css"> kodu

stil.css dosyasındaki stil özelliklerini kullanmamızı sağlar.

Avantajları :

1. CSS dosyası hafızada durduğundan CSS her seferinde web serverdan yeniden istenmez.

2. CSS dosyası bir tane olduğundan sayfalar küçülür.

Böylece bu iki madde siteyi daha hızlı hale getirir

ve gereksiz trafiği önler.

3. CSS dosyasında yapılacak bir değiĢiklik anında tüm

siteye yansıyacaktır.

4. Sitenin tamamı biçimlendirme açısından tutarlı hale

gelir.

Birden fazla stil Ģablonu verilirse Tarayıcı ne yapar?

ġimdi bir Cd rafı düĢünelim. Elimize geçen tüm CD kutularını buna üst üste yığıyoruz ve kural olarak CD

Page 126: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

126

aramamız gerektiğinden hep rafın üstünden altına doğru

aramaya baĢlayacağımızı varsayıyoruz. Peki aynı stil Ģablonu iki yada daha fazla sayıda tanımlanırsa ne olacak

? Bu durumda olacak olan Ģudur. Rafın üstünden altına doğru arama yapılır bulunan ilk eĢitlikte iĢe arama biter.

Kısaca öncelik hep en son tanımalanan stilin olur. Özetle

1. Bir HTML sayfaya iki LINK komutu ile ardarda iki

ayrı CSS dosyası bağlarsanız, ikisinde de aynı ada stil Ģablonu içeriyorsa, ikincisindeki, yani Cd rafının

en üstündeki komutlar geçerli olur.

2. Bir HTML‘e biri LINK, diğeri EMBED iki ayrı stil

bilgisi verilirse ve ikisinde de aynı ada sahip stil Ģablonu var ise, ikincisi, yani HTML‘in içinde

EMBED olanı geçerli olur; çünkü HTML önce dıĢ dosyayı okuyacak, onun üstüne kendi içindeki

stilleri koyacaktır.

3. Son olarak, bir sayfada hem LINK, hem EMBED stil bağlantısı olsa ve diyelim ki bir HTML etiketinin

önünde onu biçimlendiren bir yerel stil komutu (INLINE stil) bulunsa, en son okunan yerel stil

komutu olacağı için, tarayıcı ilk iki stili bir kenara bırakıp, INLINE stili uygulayacaktır.

HTML içinde bölüm oluĢturma (DIV)

DHTML‘i bir teknikler demeti olarak ele alırsak, ilk

tekniğimiz, sayfamıza ne metin, ne grafik, ne tablo ve ne de çerçeve sayılmayan, ama içinde bunların tümüne de

yer verebileceğiniz bölüm kavramına dayanan <DIV>..</DIV> etiketidir.

Page 127: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

127

<DIV>..</DIV> etiketleri arasında yer alan her Ģey, yani

yazılar, resimler, grafikler, tablolar, video vs içerikler, bu etikete vereceğiniz yerleĢtirme ve değiĢme özelliklerine

uygun hareket ederler.

<div> etiketi ile belgede bölümler oluĢturulabilir. <div>

etiketi için herhangi bir stil özelliği belirlendiğinde <div>..</div> arasına yazılan tüm etiketler bu stilden

etkilenir. AĢağıda oluĢturulan bölümde <div> etiketine style="color:#FFCC66;" stili uygulandığında <div>

içindeki paragraf ve baĢlık da ilgili renkte (turuncuya yakın bir renk) görüntülenecektir.

<div style="color:#FF0000;"> <h4>Bölüm içinde bir baĢlık</h4>

<p>Bölüm içinde herhangi bir paragraf</p></div>

CSS ve Seçici(Selector) Kavramı ve Seçici Tipleri

XHTML ve CSS kullanımında Selector kavramı önemli bir

yer tutar. Seçici (selector) demek ―stili belirlenebilen etiket‖ demektir. 4 tipi vardır, isimlendirilmiĢ, sınıf,

karma ve Ģartlı.

ĠsimlendirilmiĢ Seçiciler

Bu tip seçicilerin kullanımında html içinde etiketten sonra ID=‖xxx‖ kodlaması yapılır. Bu tip seçici kodlaması # ile

baĢlar.

#mavi { COLOR: blue }

#icerden { text-indent: 2cm }

Page 128: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

128

isimlendirilmiĢ seçicilerdir. BaĢlarındaki ―#‖ iĢareti

onların diğerlerinden farkını göstermektedir. (Bu iĢaretten sonraki isim bölümü mutlaka harfle

baĢlamalıdır; ama içinde rakam ve kesme çizgisi kullanılabilir.) Bu seçicilerden HTML‘de yararlanmak için,

adlarıyla çağrılması gerekir. Böylece tanımlı olan isimleri ile kodlanmıĢ olan biçimlerin uygulanmasını sağlarlar.

<P ID=icerden>Bu paragraf diğerlerine oranla 2 sm içerden baĢlar<-p>

<P ID=mavi>Bu paragraf mavi olarak gösterilir</p>

Bu seçiciyi kullanırken, aynı etikete iki ayrı kimlik

verilemeyeceğine dikkat edilmelidir. Bunun bize ne getirip götüreceği konu sonunda detaylıca

anlatılacaktır.

Sınıf Seçiciler

Bunların kodlaması ise . ile baĢlar ve istenildiği takdirde

bir sınıf tanımlanıp bu sınıfın biçimlendirme özelliklerinin birleĢtirildiği standart html etiketine de

uygulanabilmesini sağlar.

Ġstenildiği kadar Sınıf Seçici oluĢturmak mümkündür.

Örneğin ―kırmızı‖ diye bir sınıf oluĢturup, bu sınıfın font rengini kırmızı yapıp, dikkat çekmesi gereken kelimeyi,

cümleyi veya paragrafın etiketini bu sınıfa bağlamak mümkündür. Bu stilin komutu Ģöyle yazılır:

.kirmizi { COLOR: red }

Page 129: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

129

―Kirmizi‖ kelimesinin baĢındaki nokta iĢaretine dikkat

edilmelidir. Bu iĢaret su sınıfı isimlendirilmiĢ seçicilerden ayırmaktadır. HTML sayfasında diyelim ki bir baĢlığı

kırmızı yapmak gerekmekte olsun:

<h1 class="kirmizi">Bu baĢlık kırmızı olacak</h1>

Ya da bir paragrafın tümünü kırmızı renkte olacak denirse:

<P class=.kirmizi>Bu paragrafın tümü kırmızı gösterilerek, dikkati hemen çekecektir.</p>

Yukardaki kullanım sınıf seçici türünün bağımsız kullanımına bir örnektir. Diğer bir kullanımıda bir etikete

bağlı olarak kodlandığı aĢağıdaki kullanım Ģeklidir.

h1.kirmizi { COLOR: red }

Yukardaki Ģekilde tanımlanmıĢ bir sınıf seçici görüldüğü üzere sınırlı kullanıma sahiptir. Bu durumda ―kırmızı‖

sınıfını sadece H1 etiketi ile kullanmak mümkündür.

Sınıf seçiciler HTML içinde bir etiket için birden fazla olmak üzere kullanılabilirler.

Karma Seçiciler (Pseude Classes)

Bunlara karma denmesinin sebebi: kendi baĢlarına sınıf

gibi göründükleri halde ancak bir etiketin belirli durumlarına uygulanabilmeleridir. HTML dilinde buna

uygun Ģimdilik iki etiket vardır. <A> ve <P> etiketleri.

A etikeninin üç durumu olabilir ve bunları karma

seçicilere bağlamak mümkündür.

Link (henüz ziyaret edilmemiĢ olan adres)

Visited (daha önce ziyaret edilmiĢ adres) ve

Page 130: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

130

Active (üzeri tıklandığı anda). ġimdi bu durumlara

uygun üç CSS etiketi yazalım:

A:link { COLOR: Black }

A:active { COLOR: red }

A:visited { COLOR: Gray }

Bu durumda ziyaretçinin ekranında A etiketleri siyah olarak gösterilecek, kullanıcı herhangi bir bağlantıyı

tıkladığında link metni kırmızı rengini alacak; daha sonra ilgili sayfaya bir daha gelirse bu kelimeler gri olarak

gösterilecektir.

a:link {

font-family:arial;

font-size:11pt; color:blue;

text-decoration:none; }

Sayfamdaki linklerin Yazıtipi arial, boyutu 11 punto, rengi

mavi olsun ve altı çizili olmasın.

a:hover{

font-family:arial; font-size:11pt;

color:red; text-decoration:none;

}

Üzerine gelindiğinde linklerin

Yazıtipi arial,boyutu 11 punto, rengi kırmızı olsun ve Altı çizili

olmasın.

a:visited{

font-family: arial;

font-size:11pt; color:grey;

Ziyaret edilen linklerin ise Yazıtipi arial, boyutu 11 punto,

rengi gri olsun ayrıca altı çizili olsun.

Page 131: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

131

text-

decoration:underline; }

Karma etiketin kullanılabileceği bir diğer durum ise baĢlık

veya metin gibi bir etiketin ilk satırı veya ilk kelimesinin özelliklerini kontrol eden seçicidir. Örneğin:

P:first-line

{ font-variant: small-caps; font-weight: bold }

P:first-letter

{ font-size: 300%; float: left }

Bu seçicilerle oluĢturulan etiketlere HTML‘in içinde Ģöyle

gönderme yapılır:

<P><P:first-line><P:first-letter>B</P:first-

letter>Bir ağaçta ne kadar çok yaprak varsa o kadar az meyve olur </P:first-line> Arap

atasözü..... </P>

ġartlı Seçiciler (Contextual Selectors )

Bir HTML etiketinin her zaman değil de belirli bir koĢulda belirli stiller almasını istediğimizde kullandığımız

Contextual Selectors (ġartlı Seçiciler) grubudur. B (Bold)

etiketi, uygulandığı baĢlık veya paragraf gibi bir etiketi kalın yaparak belirginleĢtirir. Fakat diyelim ki bu etiketi

paragraf etiketi ile birlikte kullandığımızda iĢaretlenen yerin siyah, baĢlık etiketiyle kullandığımızda gri

yapmasını istiyoruz. Bunun için CSS bölümünde bu etiketi P ve H1 bloklarında tanımlarız:

Page 132: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

132

P { COLOR: black; FONT-FAMILY: 12pt; TEXT-INDENT:

1cm}

P B { COLOR: black}

H1 { COLOR: #008080; FONT-FAMILY: 26 pt serif}

H1 B { COLOR: pink }

Yukardaki tanımlamalara göre HTML kodlanırken H1 etiketi içinde B etiketi kullanılırsa iĢaretlenen kelimeler

pembe, paragraf etiketi içinde B etiketi kullanılır ise iĢaretlenen kelimeler siyah olacaktır.

Not:

CSS kullanımında isimlendirilmiĢ seçiciler daha çok

<DIV> yada <SPAN> gibi yapılar için, sınıf seçiciler ise biçimlendirmeler için kullanılırlar. ĠsimlendirilmiĢ

seçicileri etiket baĢına biden fazla kullanmak mümkün olmadığından bunlarla biçimlendirme yapmak sadece

ekstra iĢ demektir. Bunu basit bir örnekle izah etmeden

farkı anlamak zordur. Biçimlendirme için koyu, italik ve altı çizili biçimlerine ihtiyacımız olsun. Ancak yazı hem

italik hemde altı çizili olursa diye düĢününerek çok daha fazla sınıf tanımlamak gerekecektir. Önce bunu

isimlendirilmiĢ seçiciler için düĢünelim.

1. koyu

2. italik

3. altıçizili

4. koyu italik

5. koyu altı çizili

6. italik alt çizili

Page 133: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

133

7. koyu italik altı çizili

7 seçici olmadan bu iĢi yapmak zor görünüyor çünkü her etiket için sadece bir isimlendirilmiĢ seçici kullanımına

izin verilmekte. ġimdi ĢimĢekler çaktı sanırım.

Örneği sınıf seçicilerle yapmak için ilk üçü yeterlidir.

Çünkü sınıf seçicileri bir arada kullanmak mümkündür.

Bir Alana Tanımlı Stillerin DıĢında Stil Uygulamak

Herhangi bir <div> bölümünde veya paragrafta

diğerlerinden ayrı stile sahip olması istenen herĢey <span>...</span> etiketleri içerisine yazılabilir. Bu

etiket Basit HTML dersinde kullanılması artık desteklenmeyen <font> etiketi yerine kullanılabilir.

<div style="color:#000000;"><h4>Rastgele bir baĢlık </h4>

<p><span style="color:#cccccc">Bir satır.Ancak rengi

div için tanımlanandan farklı </span> </p>

</div>

CSS Blokları ve Denetlenebilir Özellikler

CSS Biçimlendirme Tablosu

font-

family

Tahoma, Arial Yazı tipini belirler.(Arial ,

Verdana gibi.)

Page 134: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

134

font-style Normal

italic oblique

Yazının normal veya sağa

eğik olmasını sağlar.

font-variant

Normal small-caps

Yazının, yazıldığı gibi veya tümünün büyük harflerden

oluĢmuĢ gibi görünmesini

sağlar. Ġkinci durumda metnin ilk harfi de boyut

olarak büyük gözükür.

font-

weight

Normal

bold bolder

lighter 100 – 900

Yazının kalınlık-inceliğini

belirler.

font-size Absolute-size (xx-

small | x-small | small | medium |

large | x-large

| xx-large)

relative-size (larger | smaller)

px , pt, %

Yazının büyüklüğünü

METĠN

Word

Spacing

normal |

<boyut:px vb.>

Sözcük aralığı

Page 135: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

135

Letter

Spacing

normal |

<boyut:px vb.>

Harf aralığı

Text

Decoration

None | underline |

overline | line-through | blink

Metin süsleme

Vertical

Alignment

baseline | sub |

super | top | text-top | middle |

bottom | text-bottom |

Yüzde:200% vb.

Dikey hizalama

Text Transfor

mation

none | capitalize | uppercase |

lowercase

Metin dönüĢtürme

Text

Alignment

Left | right |

center | justify

Metin hizalama

Text

Indentation

Boyut | Yüzde Metin girintisi

Line Height

Normal | <sayı> | <boyut> |

<yüzde>

Satır yüksekliği

RENK VE ARKAPLA

Page 136: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

136

N

Color Renk adı veya RGB değeri (red

veya #FF0000 gibi)

Renk

Backgrou

nd Color

Renk adı | RGB

değeri (red veya #FF0000 gibi) |

transparent

Arka plan rengi

Backgrou

nd Image

url(images/resima

di.gif)

Arka plana yerleĢtirilecek

resmin adresi

Background

Repeat

repeat | repeat-x | repeat-y | no-

repeat

Arka plan resminin hangi yönde tekrarlanacağını

belirler.

Backgrou

nd Attachme

nt

scroll | fixed Sayfa kaydırma çubuğuyla

hareket ettirildiğinde zeminin de hareket edip

etmeyeceğini belirler.

Background

Position

yüzde | boyut | top | center |

bottom| left | center | right

Zemindeki resmin sayfa üzerinde istenilen yere

yerleĢtirilmesini sağlar.

KUTU ÖZELLĠK

Page 137: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

137

LERĠ

Magrin Sayısal değer. Nesnenin dıĢındaki nesnelere

olan aralığını belirler.

Padding Sayısal değer. Doldurma

Border Width

Sayısal değer. Kenarlık geniĢliği (kalınlığı)

Border Color

Renk adı | RGB değeri

Kenarlık rengi

Border

Style

none | dotted |

dashed | solid | double

| groove | ridge | inset | outset

Kenarlık stili

Border border-width |

border-style | border-color

Kenarlık kalınlık, style ve

rengi.

Width boyut | yüzde | auto

GeniĢlik

Height boyut | auto Yükseklik

LĠSTE

ÖZELLĠKLERĠ

Page 138: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

138

List Style

Type

disc | circle |

square | decimal | lower-roman |

upper-roman | lower-alpha |

upper-alpha | none

Listenin harflerden mi yoksa

sayılardan mı oluĢacağını belirler.

List Style

Image

adres | none (list-

style-image: url(images/maddei

mi.gif) gibi.)

Liste simgesi olarak resim

kullanılmasını sağlar.

List Style

Position

inside | outside Listenin ilk satırının diğer

satırlar aynı hizada olup olmayacağını belirler.

List Style list-style-type |

list-style-position| adres (list-style:

lower-roman inside gibi.)

disc (Liste biçiminin disk

(içi dolu daire) Ģeklinde olmasını sağlar.)

circle (Liste biçiminin çember Ģeklinde olmasını

sağlar.)

square (Liste biçiminin

kare olmasını sağlar.)

decimal (Liste biçiminin

rakamlardan oluĢmasını sağlar.)

lower-roman (Liste

biçiminin i,ii,iii gibi küçük

Page 139: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

139

roma rakamlarından

oluĢmasını sağlar.)

upper-roman (Liste

biçiminin I,II,II gibi büyük roma

rakamlarından oluĢmasını sağlar.)

lower-alpha (Liste biçiminin a,b,c Ģeklinde

küçük harf olmasını sağlar.)

upper-alpha (Liste

biçiminin A,B,C Ģeklinde büyük harf olmasını

sağlar.)

none (Listenin simgesiz

olmasını sağlar.)

Font Özellikleri Ġçin CSS Kullanımı:

FONT-FAMILY (Yazıtipi ailesi):

Ģeklinde kullanılan bu etiketle, uyguladığınız stilin font ailesini seçebilirsiniz. Ġfadenin karĢısına font ailesinin

adını yazabileceğiniz gibi, ―serif‖ (ör. Times), ―sans-serif‖ (ör. Arial), ―cursive‖ (ör. Zapf-Chancery), ―fantasy‖ (ör.

Western), ―monospace‖ (ör. Courier) de yazabilirsiniz.

Bu satırda birden fazla font adı aralarına virgül koyarak yazılabilir. Ġyi bir uygulama, önce tercih ettiğiniz belirli

bir fontun, ardından bu font ailesinin adını ve nihayet

Page 140: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

140

türü yazmaktır. Çünkü seçtiğiniz font kullanıcının

bilgisayarında mevcut olmayabilir.

Örnek:

P { FONT-FAMILY: "New Century School Book", Times,

serif }

P { FONT-FAMILY: "Arial Black", Helvetica, sans-serif }

FONT-STYLE(Yazılış Şekli):

Bu etiketle harfin normal, italik veya yatık olmasını

sağlayabilirsiniz. (Ġtalik harflerin mutlaka öne yatık olması gerekmez! Ama çoğu italik harf, öne yatıktır.)

Örnek:

H1 { FONT-STYLE: normal }

H2 { FONT-STYLE: italic }

H3 { FONT-STYLE: oblique }

FONT-VARIANT (Yazıtipi türü):

Bu etiketle harfin normal veya küçük harf boyunda ama büyük harf biçiminde olması sağlanabilir:

H1 { FONT-VARIANT: normal }

H2 { FONT-VARIANT: small-caps }

FONT-WEIGHT (Yazıtipi Koyuluğu):

Bu etiketle, fontun normal, siyah, koyu, daha koyu, daha

açık olması sağlanabilir. Verilebilecek değerler, ―normal,‖ ―bold,‖ ―bolder,‖ ―lighter‖ olabileceği gibi, 100, 200, 300,

400, 500, 600, 700, 800 veya 900 olabilir. Burada 100-

Page 141: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

141

300 ince çizgili harf, 400-500 kalın çizgili harf, 600-900

çok kalın çizgili harf sayılır.

Örnek:

H1 { FONT-WEIGHT: normal }

H2 { FONT-WEIGHT: bold }

FONT-SIZE (Yazıtipi boyutu):

Bu etiketle, fontun büyüklüğünü belirleyebilirsiniz. Bu,

mutlak veya göreli olabilir. Mutlak büyüklük ya punto, santimetre veya inç cinsinden belirli bir rakam (ör. 12

pt, 1cm) veya en küçükten en büyüğe doğru olmak üzere, ―xx-small,‖ ―x-small,‖ ―small,‖ ―medium,‖ ―large,‖

―x-large,‖ ―xx-large‖ olabilir. Göreli büyüklükler ise bir önceki fonta göre daha büyük anlamına ―larger‖ veya

daha küçük anlamına ―smaller‖ olabileceği gibi, bir önceki harf büyüklüğünün yüzdesi olarak verilebilir.

Tarayıcı farklarını düĢünecek olursak en uygun seçenek

punto kullanmaktır Örnek:

H1 { FONT-SIZE: 12pt }

H2 { FONT-SIZE: 90% }

(Yüzde iĢaretinin rakamın önünde değil, arkasında

olduğuna dikkat ediniz.)

Yazıtipi : “FONT:” Ģeklindeki bu parametre ile bir çok

font özelliği birden verilebilir. Bu ifadenin karĢısına harf stili, türü, ağırlığı, ölçüsü ve ailesi ile bu harfin

kullanıldığı satırın satır yüksekliği toplu olarak belirtilebilir. Örnek:

P { FONT: italic bold 12pt/14pt Times, serif }

Page 142: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

142

Renk ve Zemin Özellikleri:

Renk: “COLOR:” Ģeklindeki bu parametre ile herhangi

bir içeriğin renk özelliğini belirleyebilirsiniz. Renk adları veya kodlarını daha önce ele almıĢtık. Örnek:

H1 { COLOR: blue }

H2 { COLOR: #000080 }

Zemin Rengi: “BACKGROUND-COLOR:” Ģeklindeki bu parametre ile herhangi bir içeriğin arkasındaki zemin

rengini belirleyebilirsiniz. Etiketin rengi ile zemin renginin farkını görebilmek için daima COLOR yükleminden sonra

kullanılması iyi bir 180 152 24 80 uygulama olur. Örnek:

H1 { BACKGROUND-COLOR: blue }

Zemin grafiği: “BACKGROUND-IMAGE:” Ģeklindeki bu

parametre ile herhangi bir içeriğin arkasındaki zemine koymak istediğiniz görüntüyü belirleyebilirsiniz. Ġçeriğin

kendi zemin rengi ile zemine konacak görüntünün birbirini örtmemesi (Perde gibi) için ardarda kullanılması

doğru olur. Zemin görüntüsünün yerini belirtmek için

―url...‖ ifadesi kullanılır. AĢadaki örneklere bakalım:

H1 { BACKGROUND-IMAGE: url(/images/zemin1.gif }

P { BACKGROUND-IMAGE: url(http://www.abc.com/zemin1.gif }

BODY { BACKGROUND: white url(/images/zemin1.gif }

Page 143: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

143

P { BACKGROUND: black url(/images/zemin1.gif no-

repeat bottom right}

Pozisyon değerleri, üstte solda (left top), üstte ortada (top center), üstte sağda (top right) olabileceği gibi,

ortada ortalanmıĢ (center center), ortada sağda (center right) veya ortada solda (center left), ya da altta solda

(bottom left), altta ortada (bottom center) ve altta sağda (bottom right) olabilir.

Metin Özellikleri:

Kelime aralıkları: “WORD-SPACING:” parametresi ile kelimelerinin arasına konulmasını istediğiniz ilave

boĢlukları belirtebilirsiniz. Burada kullanılan ölçü kullanılan fontun en geniĢ harfi olan ―m‖ harfinin ondalık

bölümüdür.

Örnek:

P { WORD-SPACING: normal }

H1 { WORD-SPACING: 0.2em }

H2 { WORD-SPACING: -0.4em }

Harf aralıkları: “LETTER-SPACING:” parametresi ile

harflerin arasına konulmasını istediğiniz ilave boĢlukları belirtebilirsiniz. Burada kullanılan ölçü de ―m‖ harfinin

ondalık bölümüdür. Örnek:

P { LETTER-SPACING: normal }

H1 { LETTER-SPACING: 0.2em }

H2 { LETTER-SPACING: -0.3EM }

Page 144: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

144

Metin süsleme: “TEXT-DECORATION” parametresi ile

bir metnin altını çizdirebilir (underline), üstünü çizdirebilir (overline), veya ortasına çizgi

koydurabilirsiniz (line-through), veya bir görünüp, bir kaybolmasını sağlayabilirsiniz (blink). Bunu, altı normal

olarak çizilen A (Anchor) etiketiyle verdiğiniz bağlantı kelimelerinin altının çizilmemesi için de kullanabilirsiniz.

Örnek:

H3 { TEXT-DECORATION: blink }

A:link, A:visited, A:active { TEXT-DECORATION: none }

Metnin bloklanması: TEXT-ALIGN parametresi ile ile

bir metni sağa (right), sola (left) veya ortaya (center) bloklayabilirsiniz. Örnek:

H3 { TEXT-ALIGN: left }

H1 { TEXT-ALIGN: center }

Birinci satırın içerden başlaması: “TEXT-INDENT”

parametresi ile ile bir metnin birinci satırını vereceğiniz ölçüde içerden baĢlatabilirsiniz. Örnek:

H3 { TEXT-INDENT: 1cm }

Satır Yüksekliği: “LINE-HEIGHT” parametresi ile bir

metnin satırları arasına konacak boĢluğu vereceğiniz

yüzde ölçüsü ile normal satır yüksekliğine göre belirleyebilirsiniz. Örnek:

H3 { LINE-HEIGHT: 200% }

H1 { LINE-HEIGHT: 350% }

Page 145: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

145

(Bu ölçü yüzde 100‘ün altına düĢerse, satırlar birbirinin

üzerine bineceği için okunamaz hale gelir.)

İlk Harf Büyütme : “First-Letter”

Gazete ve dergi yazılarında bazı paragrafların ilk harfi, diğer harflerden çok büyük ve aĢağı doğru iki, hatta üç

satır yüksekliğinde olur. Gazetecilik dilinde buna Gömme Harf denir. Yazılı basının favori masaüstü yayıncılık

programı QuarkExpress'te bile bunu otomatik yapmak için programın beĢinci sürümü beklenmiĢtir. Ġlk HTML

sürümlerinde bu olay olmadığından bu iĢlem hep <FONT> etiketleri ile yapılırdı. ġimdi ise bu parametre ile

yapmak mümkündür.

P.first-letter {font-size: 200%;}

Büyüte oranı tamamen kodlayan kiĢiye bağlıdır. Ġlk harfi

yüzde 200 yerine yüzde 400 de büyütmek mümkündür.

Bunu kod içinde kullanırken ise

<p>Bu paragraf deneme paragrafıdır. Bu paragraf

deneme paragrafıdır. Bu paragraf deneme paragrafıdır. Bu paragraf deneme paragrafıdır. Bu paragraf deneme

paragrafıdır. Bu paragraf deneme paragrafıdır. </p>

Konum (Pozisyon) Özellikleri

CSS kurallarının içinde yer almakla birlikte HTML

içeriklerinin tarayıcının ekranında, yerleĢtirileceği pozisyonu ve ilk konumun daha sonraki değiĢme tarzını

Page 146: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

146

belirleyen parametreler, son zamanlarda CSS-P

(Cascading Style Sheets-Positioning) Ģeklinde anılmaya baĢladı. Gerçekten pozisyon iĢlemi CSS içinde önemli bir

yere sahiptir ve dikkatlice incelenmelidir.

Konum “POSITION:” Değerleri

Position parametresi ile belirlenen konum,

sabit (static)

mutlak (absolute)

göreli (relative)

değerlerini alabilir.

Mutlak (absolute) konum verilmiĢ bir içerik (paragraf, resim, tablo), HTML‘in diğer içeriği nedeniyle asla yer

değiĢtirmez; kendisine verilen üst (top) ve sol (left) değerlere göre mutlak bir yerde kalır. Buradaki ölçü pixel

cinsindendin ve tarayıcının HTML sayfasını gösterdiği alanın sol üst köĢesi 0-0 kabul edilerek verilir. Örneğin

―top: 20 px; left: 20px‖ Ģeklindeki bir ölçü, bu içeriğin tarayıcının penceresinde sol üst köĢesinden 20 pixel

aĢağı ve sol kenarından 20 pixel sağa doğru yerleĢmesini sağlar.

Sabit (Static) konum, yeri belirlenmek istenen içeriğin, HTML‘in diğer içeriğine göre, nereye geliyorsa, oraya

yerleĢmesini sağlar. Bir anlamda bu içeriğin durumu diğer içeriğe bağlıdır.

Göreli (Relative) konum ise verilecek ölçülere göre

belirlenecek yer, bir önceki içeriğin konumunun bittiği yerden itibaren hesaplanır. Örnek:

Page 147: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

147

<SPAN STYLE="position:static; background-

color:#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

içerden.</SPAN>

Görünürlük: “Visibility”

―VISIBILITY:‖ parametresi ile, biçimlendirilen içeriğin ekranda görünmesi yada gizlenmesi sağlanabilir. Ġçerik

gizlenmiĢ (hidden), veya görünür (visible) olabilir. Eğer istenirse (inherit) parametresi ile görünürlük değeri

içinde bulunduğu nesneden miras yolu ile alınmasıda sağlanabilir. Yani ata olan içerik görünüyorsa içinde yer

alan bu kısımda da görünür, aksi takdirde görünmez. Örnek

<div id="kanal01" style="position:absolute; left:10px; top:10x; width:200px; height:200px; z-index:1;

visibility: visible; background-color: #cccccc">Bu içerik Mutlak konuma sahiptir, zemini siyahtır. Div adı kanal01

olan bu alan her koĢuldagrünür </div>

CSS ve Katman (Layer) Kavramı

Photoshop ve Gimp tarzı programları kullananlar bu kavrama yabancı değildirler ancak burada katmanın ne

olduğunu izah etmek gerekecek. Katman kavramını anlamak için aĢağıdaki Ģekle bakalım:

Page 148: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

148

ġekilde görüleceği gibi 4. katman en üstteki kavram ve

tamamı görünmekte. Onun altındaki katman 3. katman çünkü bu katman 2 nolu katmanın bir kısmını

gizlemekte. Yani her Ģart altında 3 nolu katman 2. katmanın üstündedir. Buna göre tabiî ki 2. katman da 1.

katmanın üzerindedir.

Normal Ģartlarda web sayfalarında içerik yan yana

gelecektir. Dolayısıyla katmana ihtiyaç yoktur diye düĢünülebilir. Ama CSS ve DIV etiketleri için durum

bundan ibaret değildir. DIV ile tanımlanan alanlara boyut vermek mümkün olduğundan bu alanların üst üste

gelmesi de pekala mümkündür. Bunu Ģözmek içinse CSS içinde katman indeksi denilen z-index paraetresi

kullanılır.

Page 149: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

149

Katman Ġndeksi – (Z-index):

―Z-INDEX:‖ parametresi, bir içeriğin tarayıcı tarafından

hangi katmanda gösterileceğinin belirtilebilmesini sağlar. Bir sayfada, DIV veya SPAN etiketi ile oluĢturulmuĢ

nesne varsa, onların katman endeksine bakarak, hepsini belirli bir kata koyar. Yanyana gelen nesnelerin kaçıncı

katta olduğu önemli olmayabilir; ancak nesneler üst üste geliyorlarsa, hangisinin hangi altta, hangisinin ortada,

hangisinin üstte duracağı önem taĢıyabilir. Verilecek değer 1, 2, 3 Ģeklinde bir sıra numarasıdır. 1, en alttaki

katmandır; diğerleri sırayla onun üzerindeki katları gösterir. Örnek

<div id="kanal01" style="position:absolute; left:10px; top:10x; width:200px; height:200px; z-index:1; visibility: visible; background-color: #cccccc">Gri

çerçeveli 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 arasında eni boyu belirlenmiĢ bir nesneye koyduğunuz metnin taĢması

halinde taĢan yazının gösterilip gösterilmeyeceği, veya bir nesnenin içine konulan içeriğin hangi bölümlerinin

gösterilip, hangi bölümlerinin kesileceğini belirleyen diğer iki kontrol parametresi daha vardır. Bunların tarayıcı

yorumları sürümden sürüme değiĢmektedir.

Position: Katmanın yerinin neye göre belirleneceğini (absolute, relative) pencere esas alınarak belirlensin

Page 150: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

150

Top: Pencereye göre kaç piksel aĢağıda olacağını,

Left: Pencereye göre kaç piksel solda olacağını,

Width: Katmanın geniĢliğini,

Height: Katmanın yüksekliğini,

Background-color: Arkaplan rengini,

Overflow: TaĢan metnin durumunun ne olacağını (hidden, gizli kalsın, gösterilmesin),

Z-index: Üstüste geldiğinde hangi sıra ile yerleĢtirileceğini (1. katmana 1 değeri verilmiĢtir,

dolayısıyla en altta o gösterilecektir),

Padding: Katmanın kenar çizgileri ile içindeki nesneler

arasında bırakılacak boĢluğu,

Border: Kenar çizgilerinin kalınlık, kenarlık türü ve

rengini belirtmektedir.

Boşluk bırakma, Margin :

Ġ.eriğin dört bir yanında bırakılacak boĢluk miktarları

toplu olarak yada üstünde (MARGIN-TOP), sağında (MARGIN-RIGHT), solunda (MARGIN-LEFT) ve altında

(MARGIN-BOTTOM) olacak Ģekilde ayrı ayrı belirtilebilir. Tanım tek bir defada yapılacak ise parametrelerin iĢleniĢ

sırası üst, sağ, sol, ve alt olarak okunacaktır. Örnek:

P { MARGIN-TOP: 10px }

P { MARGIN-RIGHT: 20px }

P { MARGIN-LEFT: 20px }

P { MARGIN-BOTTOM: 10px }

Page 151: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

151

P { MARGIN: 10px 20px 20px 10px}

Bir etiketin içinde yer alabilecek ―<!—― ve ―-->‖ Ģeklindeki etiketler HTML dilinin yorum etiketleridir; bu

etiketlerin arasındaki Ģeyler, tarayıcılar tarafından

dikkate alınmaz.

Xhtml BELGE TÜRÜ

XHTML aslında bir HTML kodlama standardıdır. <html>

etiketinden önce belge tipi, DOCTYPE ifadesi ile belirlenebilir. XHTML'de üç tip belge türü seçeneği vardır.

Bunlar Transitional (GeçiĢli), Strict (Katı), Frameset (Çerçeve Kümeleri) 'dir.

Transitional (Geçişli): Bu belge türü standart HTML üzerine kurulmuĢ olup artık geçerli olmayan

HTML etiketleri ile de uyumludur. Genelde kullanılan belge türüdür. Belgeye <html>

etiketinden önce aĢağıdaki kod eklenir. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML

4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Strict (Katı) : Uygunluğu kabul edilmemiĢ etiketleri kabul etmeyen bir belge türüdür. Belgeye

<html> etiketinden önce aĢağıdaki kod eklenir. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML

4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Page 152: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

152

Frameset (Çerçeve Kümeleri) : Bu belge tipi

sayfada çerçeve kullanımına izin verir. Çerçeveler fazla kullanıĢlı olmadıkları için tavsiye edilmezler.

Belgeye <html> etiketinden önce aĢağıdaki kod eklenir.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"

"http://www.w3.org/TR/html4/frameset.dtd">

Bir editör kullanırken editörün kodu renkledirme yapabilmesinin yanında XHTM etiketini gördüğü anda

renklendirme Ģemasınıda buna uygun değiĢtirebilmesine dikkat etmek gerekir.

Sonuç

ġu ana kadar genel olarak statik HTML yapımı ile

etiketleri görmüĢ olduk. Her ne kadar burada adı geçmeyen bazı etiketler olsada en genel olanlar burada

ele alınmıĢtır. Üstelik hiç etiket bilmeden Frontpage ile sayfa yapan birisi ele alındığında siz en azından iĢin geri

planı hakkında fikir sahibi oldunuz ve bir avantaj elde ettiniz. Üstelik bir çok iĢyerinde iĢe alırken aday

kiĢilerden sadece notepad kullanarak tasarım yapmaları

beklendiği bilinmektedir. Etiketleri biliyor olmasaysınızz bunu nasıl yapacaktınız ? ġu anda belki size az gelebilir

ama rahatlıkla normal görünümlü bir sitesi tasarlayabilecek kadar bilgi edinmiĢ durumdasınız…

Page 153: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

153

Altın Öğütler

Hosting Hizmeti Alırken

1. ġirket ne kadar güvenilir. Referansları ne durumda

kontrol edilmelidir.

2. Host referans sitelerinden Ģirket hakkındaki olumlu-yada olumsuz bilgiler kontrol edilmelidir.

3. ġirketin UP-time vaadi kontrol edilmelidir. %100 up time oranını kimse sağlayamaz ama ne kadar

yüksekse o kadar iyidir.

4. Ġhtiyacınız olan hizmete iyi karar vermeliniz.

Örneğin sadece Ģiirlerini yaınlayacağınız bir site için IIS üzerinde hizmet veren bir paket daha pahalı

olacaktır. Oysa Linux+Apache ikili ile çok daha ucuz bir çözüm bulabilirsiniz.

5. ġirketlerin hizmet paketlerini detaylıca karĢılaĢtırın. Paketlerde kaç Mb alan verileceği, ne kadar Bant

GeniĢliği tanındığını, Veritabanı dahil olup olmadığını, ilave mail hesabı verip verilmediğini

kontrol etmelisiniz.

6. Kontrol panelinin ne olduğu da önemlidir. Genel itibari hepsi kolay kullanımlıdır ama bazı paneller

site sahipleri için hayatı inanılmaz derecede kolaylaĢtırırlar.

Web Sitesi Yaparken

1. Öncelik içeriktir. ġekil sonra gelir. Ġçerik olduktan sonra Ģekil nasıl olsa çözülür.

Page 154: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

154

2. Sade olun. Abartıdan kaçının. Bir arap Ģairin dediği

gibi bir ağaçta ne kadar çok yaprak varsa o kadar az meyve olur.

3. Gereksiz resim, hareketli gif, animasyon ve film dosyalarından kaçının. Kullanıcılar anlamsız bir

resim için sayfanızın geciken yüklemesini beklemek zorunda değildirler.

4. Kullanıcılar sayfaya ne için geldilerse onu en kısa yoldan bulsunlar. Kimseyi oradan oraya linklerle

süründürmeyin.

5. Sayfanızda meta tag kullanımına özen gösterin ki

arama motorlarındaki aramalarda müstakbel ziyaretçilerin sizden haberi olsun.

6. Renk uyumuna dikkat edin. Erkek Giyim mağazasına Pembe, Genç kızlar için Fan sitesine

Gece mavisi renk uymaz. Renk kontratsıda önemli

bir konudur.

7. Siteniz genel bir Ģablonu takip etsin ve

biçimlendirmeler genel itibarı ile aynı olsun.

Site Tasarımı Adımları

1. Siteyi oluĢturmaya önce kağıt üzerinde baĢlayın.

Tasarım olmadan iĢleme baĢlarsanız o kadar çok baĢa dönersiniz ki siz bile ĢaĢarsınız.

2. Sitenin nasıl görüneceğini anahat olarak belirledikten sonra kullanacağınız teknikleri

belirleyin. Site grafik ağırlıklı mı olacak yoksa FLASH mı kullanılacak, içerik yönetim sistemi

kullanılacak mı.

Page 155: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

155

3. Bu iĢ için uygun donanım ve yazılıma sahip olup

olmadığınızı kontrol edin

4. Yapacağız site tasarımlarını test etmek için

sisteminize birkaç ayrı web tarayıcısı kurun. Benim kiĢisel tercihim Internet Explorer, Firefox ve Opera

ilk anda yeterlidir. (IE için 5.5,6 ve 7 sürümleri arasında dağlar kadar fark olduğunu unutmamakta

fayda var)

5. ĠĢ için gerekeceğini düĢündüğünüz Javascript

dosyalarını elinizin altında bulundurun eğer yoksa bulmak için Open source arĢivlerden tarama yapın.

6. Sitenin ana teması tablo yada CSS olarak kodlayın

7. Sitede kullanılacak resimleri ve yazı stillerini

belirleyin

8. Site kodlarınızı oluĢturun.

9. Sitenizi test edin.

Diğer tarayıcılarda nasıl görünüyor

Stillerde düzeltilmesi gereken yerler varmı

DeğiĢik ekran çözünürlüklerinde nasıl görünüyor

Baskı önizleme yaptığınızda kağıt üstündeki hali

normalmi

Dikkatten kaçan bir nokta varmı

Yazım hataları varmı

Page 156: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

156

Bir Site Tasarlarken

Çok kolay gibi görünür ancak web tasarımı çok zor bir

konudur. KarĢınızdaki insanın ne istediğini anlamadan ona istediğinizi kabul ettirebileceğiniz bir dönemde de

değiliz. O yüzden öncelikle site sahibinin ne istediğini dinlemek, sitede yer verilecek konuyu anlamak gerekir.

Bu aĢamada site sahibinin zevklerini, site Ģirket içinse

kurumsal renklerini, iĢ ile ilgili birkaç bilgiyi edinmek, aynı iĢi yapan Ģirketlere ait siteleri inceleyip bilgi sahibi

olmak karĢı tarafta iĢinin ehliyle çalıĢıyor olduğu izlenimi uyandırır.

Daha sonra kağıt üzerinde sitenin genel görümü çizilmeli ve site sahibinin bu konudaki fikri alınmalıdır. Bu, birinci

sayfadan sonuncuya kadar, sitenizdeki tüm sayfaların ekran görüntüsünü kağıt üzerinde resmetmek demektir.

(Bu her zaman gerekmez. Çünkü müĢteri genel görünüme karar verip bilgilerin bu temaya uygun

yerleĢtirilmesi yeterlidir diyebilir)

Sitede kullanılacak tekniklerin belirlenmesi de önemlidir.

Flash animasyon olacak mı olmayacak mı gibi. Ayrıca bazı durumlarda bazı hazır içerik yönetim sitemlerinin

kullanımıda düĢünülebilir. Sitede dinamik bir dil

kullanılacaksa hangi dilin kullanılacağı veri duyarlı olacaksa hangi veritabanının kullanılacağının bilinmesi

önemlidir.

Sitenin oluĢturulması için gerekli grafik programları,

HTML editörü, site yönetim programı, kelime-iĢlem programı, geliĢtirme sürecinde kullanılacak lokal bir web

sunucu tasarımcının kullandığı bilgisayarda yüklü

Page 157: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

157

olmalıdır. Tabii birde tasarımcı bunları çalıĢtıracak uygun

bir bilgisayara sahip olmalıdır.

Tabii burada Ģu da unutulmamalıdır. Web sitesi yapmak

için illa 1000 $ verip Photoshop, 500 $ verip Dreamweaver almaya gerek yoktur. Bunların daha ucuz

alternatifleri olduğu gibi Open source programlarda mevcuttur. Önerim Gimp, Nvu, Open Lazslo, Notepad++,

Pogrammers Editor gibi programların indirilip denenmesidir. Ben Ģu ana kadar Gimp kullandım ve

tıkandığını hatırlamıyorum.

Normal bir web kullanıcısı için bir tarayıcı yeterlidir ama

tasarımcı için değil. Çünkü tasarımcı, yaptığı tasarımın en azından en popüler tarayıcılarda düzgün göründüğünden

emin olmalıdır.

Site tasarımı yapan bir kiĢi internette gezerken gördüğü

güzel tasarım stillerini, menü stillerini, javascriptleri ve

geliĢmiĢ teknikleri bir köĢede tasnifleyerek tutmak gibi bir özlliğe sahip olmalıdır. Bunu söylerken kesinlikle

baĢkalarına ait bir Ģeyin aynen alıp kullanılması değil, nasıl yapıldığının öğrenilmesi kastedilmiĢtir. Tabii bazı

kodlar open source olduğundan aynen kullanmakta bir beis yoktur.

Kağıda çizilen temayı tablo yada CSS olarak oluĢturmakla iĢleme baĢlanır. Ġlgili linkler, grafikler vs

yerleĢtirilir ve site sahibinin genel düĢünceleri alınır. Gerekli ise değiĢiklikler yapılır ve daha sonra diğer

sayfaların kodlanmasına geçilir.

Daha sonra test aĢamasına geçilmeli ve yukarda anılan

tüm hatalar kontrol edilip gerekli düzenleler yapılmalıdır. Özellikle tarayıcı testi çok önemlidir. Çünkü müĢteri siteyi

Page 158: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

158

tasarımcının bilgisayarında ayrı, kendi bilgisayarında ayrı

Ģekillerde görürse, iĢin kalitesinden Ģüphe eder. Ufak tefek farklar izah edilebilir ancak birbirine giren

katmanlar, ekranda adeta zıplayan menü CSS menüleri (benim baĢıma geldi site 7 sürümünde normaldi ancak IE

6 kullanan biri tam o anda denk gelip sitenin karizmasını bozmuĢtu) izah edilemez.

Sitede kullanılan dosyaların isimlerini, klasörleri vs kontrol edip hepsini aynı notasona getirmekte fayda

vardır. Genel olarak tüm web sitelerinde tüm dosya isimleri küçük harf kullanılırlar. Çünkü hosting iĢleminin

olacağı sistemde Windows mu Linux mu kurulu olmasına göre bu isimlerin durumu önem kazanır.

Bu aĢamada hosting için uygun yer belirlenir ve gerekli FTP ayarları yapılıp site web üzerine kopyalanır. Site son

bir kez kontrol edilip, telim edilir.

Bir Web Sitesinin Tutulmasını Sağlayan Etkenler

Internette tek tıklama uzağımızda miyonlarca ve hatta

milyarlarca site varken neden sadece bazıları çok büyük hit sayılarına ulaĢırken bazıları unutulup gider diye

düĢündünüzmü ? Örneğin bir zamanların gözde arama motoru www.excite.com nerdeyse adı bile unutulmuĢ

durumda, ilk arama motoru www.yahoo.com aĢırı kan kaybına devam edip durmakta.

Yine aynı Ģekilde nerdeyse unutulan Altavista motorunun araĢtırma ekibi lideri, Google‘ın yerinde bir olabilrdik

derken, bir gerçeği ifade etmektedir. Ġfadesine göre

arama motoruna gömülü reklam fikri çok daha

Page 159: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

159

öncesinde onların gündemine zaten gelmiĢ ancak,

―kullanıcılar bundan hoĢlanmaz‖ diye Ģanslarını denemedikleri için Ģans kapıyı iki kere çalmamıĢ ve

altavista eski teknolojili bir arama motoru olarak kalmaya devam etmiĢ. Bu gün itibariyle söyledikleri ise

―en iyi teknolojiye ahip olmak yetmez, bunu uygun giriĢimlerlede desteklemelisiniz.‖

Bunlar olurken nasıl olupta birkaç yıllık www.google.com inanılmaz karlara, eriĢim rekorlarına sahip olmaktadır.

Öyle ki ABD baĢkan yardımcı ―dünyanın yuvarlar olduğuna artık inandım‖ dedikten sonra kendisine

yöneltilen ―nasıl‖ sorusuna ―Google sayesinde‖ demekte. Internette arama anlamına gelen ―Googling‖ kelimesi

nerdeyse sözlüklere girmek üzere. Peki bunlar nasıl oluyor…

Bu olayı 5 ana baĢlıkta incelemek mümkün

1. Tanıtım

2. Kullanıcı dostu tasarım

3. EriĢilebilirlik

4. Kaliteli içerik

5. Geri Besleme

Bu baĢlıkları biraz açarak inceleyelim

Tanıtım

Günümüzde web ortamına hergün milyonlarca sayfa, binlerce site katılmaktadır. Durum bu iken insanların

sitenizi ziyaret etmesi için haliyle iyi bir sebepleri olmalıdır. Sebep olsa bile en basitinden insanların

Page 160: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

160

bundan haberi olması için Google robotlarının sayfanıza

uğraması gerekmektedir. Bunu çabuklaĢtırmal ve sürekli kılmak için bütçeniz uygun ise web sitelerine ve arama

motorlarına reklam verebilrsiniz. Google reklam veren siteleri aramalarda en üst sıralarda göstermektedir.

Ayrıca kardeĢ site dediğimiz siteler edinmeli, onlara link vermeli ve onlarında size link vermelerini sağlamalısınız.

Örneğin Google indekslerini oluĢtururken diğer sitelerden sizin sitenize belirli bir sayıda bağlantı erilmemiĢse sizin

sitenizi ciddi anlamda bir referans olarak kabul etmemektedir. Tanıtım bu yüzden önemli bir adımdır.

Kullanıcı Dostu Tasarım

Bir sitede içerikten sonra en önemli Ģey görünümdür.

Görünüm kötü ise içerik iyi bile olsa kullanıcı sitenize bir daha zor gelecektir. Sitede gerektiği kadar resim vs

kullanılmalı, siteniz hızlı yüklenmelidir. Ġçeriği kolay anlaĢılır Ģekilde dizayn etmelisiniz. Bir sayfadan diğerine

geçerken sitenizin tüm sayfa yapısı değiĢiyorsa kullanıcı takipte zorlanmaya baĢlar.

EriĢilebilirlik

Google yada baĢka bir arama motorunun altında ―bu site en iyi x tarayıcı ile çalıĢır‖ diye bir ifade gören birisi

olmuĢmudur acaba. Ben göremedim ve göreceğimide hiç

sanmıyorum. O halde site içeriği ve görünümü nasıl olursa olsun her Ģekilde siteniz ortalama bir görüntü

kalitesi yakalamalıdır. Ziyaretçiler sitenize hangi tarayıcı ile bakarsa baksın içeriğinizi doğru Ģekilde

görüntüleyebilmelidir. Site tasarlanırken sadece tek bir tarayıcıda çalıĢan etiketlerden kaçınılmalıdır.

Page 161: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

161

Kaliteli Ġçerik

Örneğin tarih konulu bir siteniz var ve Ankara SavaĢı

hakkında araĢtırma yapan birisi sitenize girdiğinde sadece ―Ankara SavaĢı sonucu Fetret devrine girildi‖

bilgisini buluyorsa içerikle ilgili sorununuz var demektir. Kullanıcılar en çok arama sitelerini kullanırlar ve buradan

sitelere bakmaya baĢlarlar. Kalite içeriğiniz yok ise kimse sitenize link vermez. Yeterince link alamazsanız, google

ve diğer arama motorları sizi alt sıralara atarlar. Kullanıcıyı mümkün mertebe sitenizde tutmanız gerekir.

Örneğin bu sayfanın yanında ―KurtuluĢ SavaĢı, Preveze Deniz SavaĢı‖ gibi linkler olur ise ziyaretçiniz belki bu

linklerede tıklayacaktır.

Geri Besleme

Sitenizin tasarımı ve içeriği size tamamen doyurucu gelebilir ancak kullanıcıların hataları, isteklerini ve

önerilerini size bildirebilmeleri için geri besleme olanağı sunmalısınız. Örneğin Tuncay ġanlı için bir fan sitesi

hazırlıyorsunuz. Ġçerik sizce gayet yeterli ama bir kullanısınız, bir maç sonrası ilgili Ģahsın UEFA‘da haftanın

golcüsü seçildiğini ama bunun sizin içerikte olmadığını fark etti. Kullanıcı bunu size bildirebilmeli ve sizde bunu

en kısa sürede düzeltebilmelisiniz. Böylece hem içerik

güzelleĢir, çoğalır, hemde kullanıcı kendisi ile site arasında bir bağ kurar. Çünkü site sahibi ona değer

vermiĢ ve önerisini hemen yerine getirmiĢtir.

Page 162: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

162

Php Programlama Dili

Php Dilinin GeçmiĢi

Rasmus Lerdorf, adlı genç bir mezun iĢ aradığını

belirtmek üzere sitesinde özgeçmiĢini yayınlıyordu. Bu

amaçla site yapmak üzere bir program geliĢtirdi. Yazdığı program çoğunlukla PERL dilinden alınmıĢ yordamları

kapsıyordu. Buna PHP (Personal Home Page Tool) adını verdi.

PHP adlı bu programın (KiĢisel Ana Sayfa) çok tutulması üzerine Rasmus, bu programa, form yoluyla ziyaretçiden

gelen bilgileri iĢlemeyi sağlayan komut setlerinide ekledi ve programın adı PHP/FI (Form Interpreter/Form

Yorumlayıcı) oldu. Kimileri programın bu sürümüne PHP2 dedi; ve bu ad, programın çok değiĢmesine ve

geliĢmesine rağmen uzun süre değiĢmeden kaldı.

Rasmus Lerdorf, 1995 ortalarında, Zeev Suraski, Stig

Bakken, Shane Caraveo ve Jim Winstead ‗inde katıldığı bir grup ile PHP dilini yeniden tasarlayarak, Perl'den

ödünç alma rutinlerle iĢ yapan bir paket yerine, Nesne-

Yönelimli (Object-Oriented Programming) bir programlama dili haline getirdi. PHP dili 3 sürümüne

geldiğinde bu defa geniĢletibilir yani extensible bir dil oldu. Ayrıca sınırlı da olsa nesneye yönelik proglamlama

desteği kazanmıĢtı. Eklenti ve nesneye yönelik destek sayesinde de önü daha da açıldı. Öyleki 18 ay önce

sadece 250.000 civarında web sunucuya yüklü olan PHP, bu süre içinde bu sayıyı 2.500.000 web sunucuya

çıkarmıĢtı.

Page 163: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

163

PHP 4 sürümüne geldiğinde ise çeĢitli geliĢtirmeler

resmen bariyerleri yerle bir etmiĢtir. Bunlar

Zend Engine

Sunucudan bağımsız çalıĢma

Önce derle sonra çalıĢtır mantığı ile hız kazanma

Nesneye yönelik programlama

Multithreading

Zeev ve Andi ZEND adlı Ģirketi kurup PHP dilini kurumsal ölçeğe taĢıdılar. GeliĢtilen Zend Engine ile PHP artık

referans sayma, hafıza yönetimi ve sunucudan bağımsız çalıĢma yeteneği de kazanmıĢtı. Tabi veritabanı

bağlantılarının, dosyaların, hafıza boĢluklarının bu engine ile kontrol edilebilir hale gelmeside cabası. Sunucudan

bağımsız çalıĢma derken PHP dilinin neredeyse bilinen bütün web sunucularla ortak çalıĢabilir hale gelmesi

kastedilmektedir.

Ayrıca derleyici önceki sürümlerdeki ―bir satır oku, yorumla, çalıĢtır, diğer satıra geç‖ mantığını bırakmıĢ,

önce tüm kodu okuyup, ardından derleme ve çalıĢtırma yeteneğine kavuĢmuĢtur. Buda tabiî ki çeĢitli hızlandırma

mekanizmalarınıda beraberinde getirmiĢtir. Tabiî ki bu çabalar sonuçsuz kalmamıĢ PHP bu sürümde kurulu

olduğu sunucu sayısını 9.500.000 ‗a taĢımıĢtır. En çok kullanılan Apache sunucu modülü olma özelliği uzun

zamandır PHP‘dedir.

PHP 5 sürümünde artık dilin olgunlaĢma aĢamasına

gelinmiĢtir. Çünkü önceki PHP sürümleri büyük çaplı projeler için biraz basit kalmakta idi. PHP 5, ile gelen

yenilikler ise

Page 164: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

164

try/catch

XML

Mysql Improved

Sqlite

Yeni bir SOAP eklentisi

olmuĢtur. PHP, Linux gibi, Açık Sistem (Open source) kurallarına tabidir; isteyen programda istediği değiĢikliği

yapabilir; ancak bu değiĢiklikten para kazanamaz ve yaptığı değiĢiklikleri isteyen herkese açıklamak

zorundadır. Dilin resmî adı "PHP: Hypertext Preprocessor" (Hiper-metin ön-iĢleyici) olarak değiĢtirildi,

ve çeĢitli Web Server'ların PHP dili anlaması için gerekli eklentiler yeniden üretildi.

PHP arkasında ASP yada JSP gibi kurumsal bir destek olmamasına rağmen gerek performans gerek destek

açısından diğer Web yazılım geliĢtirme dilleri ile kolayca

yarıĢabilecek kapasitedir. Hemen her türlü iĢletim sistemiyle çalıĢabilir olması ve yine açık kaynak

geliĢtirilen MYSQL ile birlikte gösterdikleri ikili performans onları bir anda yazılım dünyasının gözdeleri

arasına sokmuĢtur.

Neden PHP

PHP dilinin web ortamında çok tercih ediliyor olmasının

sebepleri Ģunlardır.

Platform ÇeĢitliliği (PHP nerdeyse bütün web server

ve iĢletim sistemleri ile çalıĢbilir)

Page 165: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

165

Yüksek Performans (PHP + Apache bir çok ortamda

oldukça hızlı çalıĢmaktadır)

Veritabanı Uygulamaları Ġçin Ġdeal ve Birçok VTYS

ile ÇalıĢabilme Yeteneği

Internet Standartlarına Uyum

GeniĢletilmeye Müsait Yapı (PHP komut setine eklenti yapabilme)

GeliĢmiĢ Özellikler (Oturum yönetimi, çerez kullanımı, PaylaĢımlı hafıza yönetimi

Ekonomik (Bedavadan daha ucuz bir Ģey varsa bilemeyiz)

Interaktif Web Sayfaları Hazırlamak Ġçin Yöntemler

Web sayfalarına dinanizm kazandırmanın iki yolu vardır.

Sunucu tarafındaki interaktif uygulamalar ve Kullanıcı tarafındaki interaktif uygulamalar. Kullanıcı tarafındaki

uygulamalara örnek olarak Javascript veya VBscript ile yapılan veri doğrulama iĢlemleri ve Java dilinde yazılmıĢ

appletleri sayabiliriz. Bunun avantajları;

Sunucu tarafına yük bindirmez ve veri doğrulama

gibi kullanıcı tarafında halledilebilecek iĢlemler için sunucuyu yormamıĢ olur

Bant geniĢliğini etkin kullanma Ģöyleki sayfa bu doğrulama iĢlemleri için sunucuya gidip geri

dönerken aynı zamanda internet bağlantısınıda kullanmıĢ olmaktadır.

Page 166: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

166

Sunucu tarafında çalıĢan uygulamalarında tabiî ki

kendine göre avantajları vardır…

Web tarayıcılarında % 100 bir standart

olmadığından scritplerin her tarayıcıda çalıĢacağı garanti değildir. Örneğin Vbscript sadece Internet

Explorer ile çalıĢır.

Kullanıcı güvenlik gerekçesiyle script çalıĢtırmayı

tamamen iptal etmiĢ olabilir.

Kullanıcıda yüklü JRE sürümü alt sürüm ise bazı

appletleri çalıĢtıramayabilir.

Bazı iĢlemler mutlaka sunucu tabanlı olmak

zorundadır. Örneğin iĢletim sistemine ait bir komut karĢıda çalıĢtırılmak zorundadır. Yine aynı Ģekilde

veritabanı iĢlemleride sunucuda mantıken çalıĢmak zorundadır.

Sunucuda çalıĢan bir uygulamayı güncellemek

daha kolaydır.

Sunucuda çalıĢmakta bazen bant geniĢliğine

faydalıdır. Örneğin siz sunucuya sadece bir sorgu gönderirsiniz. Sonucu size buna uygun kayıtları

gönderir. Tüm kayıtları gönderip, kullanıcı tarafındaki bir uygulama bu süzme iĢlemini

yapacak olursa çok daha fazla bant geniĢliği kullanılır.

Günümüzde yazılım geliĢtiren kiĢilerin rotası genel olarak

istemci-sunucu modeline doğru gitmektedir. Böylece Ģirketler veri bütünlüğünü kontrol etme konusunda gücü

ellerinde tutmaktalar.

Page 167: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

167

PHP ve ASP KarĢılaĢtırması

ASP hakkındaki en yanlıĢ kanı ASP ‗yi bir programlama

dili sanmaktır. ASP dil değil (Active Server Pages) Aktif sunucu Sayfaları adında bir platformdur. Bu platformda

destekleyen her dille ASP platformuna yönelik kod yazılabilir. En çok kullanılanılan Vbsciript ve günümüzde

ise C# dilidir. ASP maalesef sadece Windows ile çalıĢır (bazı ticari uygulamalar ASP kodlarını baĢka

sistemlerdede çalıĢtırmaktadır). IIS web sunucusu doğal ASP desteği ile gelmektedir. Visual Basic bilen kiĢilerde

kısa sürede ASP kodu yazabilirler. Peki neden ASP ye karĢı PHP derseniz;

1. ASP COM-based architecture ile yapılmıĢtır. ASP

programcıları VBScript kullandıkları zaman aslında bir COM nesnesi çalıĢtırılır. Daha sonra tarayıcı

tarafında bir COM nesnesinin write methodu daha aktif edilir. VTYS ile iletiĢim için ayrı bir COM

nesnesi daha çalıĢtırılır. Tüm COM nesneleri üst üste biner bu da sistemin cevabını geciktirir. PHP

modullerinde ise herĢey PHP için ayrılan hafıza bölgesinde çalıĢtırılır. Farklı COM nesnelerinin

açılması ve COM nesnelerinin arasındaki dönüĢümler engellenmiĢ olur. Tek Process

üzerinden tüm iĢlemler yürütülür. Böylece PHP nin çalıĢma hızı ASP ‗den daha yüksek olur.

2. ASP de kitlenen bir uygulama web server üzerinde negatif etki yapar (ASP son sürümde bu hatayı

gidermiĢtir). PHP nin böyle bir derdi yoktur. Her

site kendi uzay alanında çalıĢır.

Page 168: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

168

3. ASP açık olan her dosya için hafızada yer ayırır.

Gerçi ASP 5 bu sörünü çözmüĢtür ama ASP 5‘te NT 4 ile çalıĢmadığından sorunlu olan bir çok sunucu

vardır denebilir. PHP ise sadece gereken dosyaları hafızaya yükler.

4. ASP ile gelen componentler sınırlı ve yetersiz olduğundan 3. parti component desteğine ihtiyaç

vardır. ĠĢ bununla bitmez bu componente göre kod geliĢtirdiğinizde bunun sayfayı yayınladığınız web

sunucuya da kurulması gerekir.

5. ASP için için gerekli yazılımlar lisans maliyeti

getirdiğinden, PHP sitelerini yayınlamak daha ucuza gelmektedir.

6. PHP dilinde daha az komutla daha çok iĢ yapılabilmektedir. Örneğin aĢağıdaki kodlara bir

bakalım. Her ikiside bir cümledeki kelimeleri alt

alta satırlara yazmak için iĢlem yapacaktır.

<%@ Language=VBScript %>

<% Option Explicit %>

<%

Dim strcumle, arrWords, strWord

strSentence = "ASP PHP dilinden çok daha fazla komut

kullanır "

arrWords = Split(strcumle, " ", -1, 1)

For Each strWord in arrWords

Response.Write(strWord)

Page 169: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

169

Response.Write("<br />")

Next

%>

ġimdi bu programın PHP dilindeki karĢılığına bakalım.

<?php

$sentence = ‗ASP PHP dilinden çok daha fazla komut

kullanır ‗;

$words = explode(' ', $sentence);

foreach ($words as $word) {

echo "$word<br />";

}

?>

PHP ve Cold Fusion KarĢılaĢtırması

Cold fusion çok üst seviye bir dil olup gerçekten iĢinin ehlidir. Programcı olmayanlar bile Cold Fusion ile yazılım

geliĢtirebilirler. Ancak yinede web de sınırlı sayıda yer bulabilmiĢtir. Çünkü Cold Fusion sunucu ve yayınlama

anlamında bırakın PHP dilini ASP sitelerden bile çok çok daha masraflıdır.

PHP Dilinin Kapasitesi

1. PHP Nesneye yönelik programlamayı destekler buna sınıf ve kalıtım özellikleride dahildir.

2. PHP çoklu kalıtımı desteklemez. Bu konuda izlediği

yol java dili gibidir.

Page 170: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

170

3. GeliĢmiĢ kontrol blokları ve hata yönetimi desteği

vardır.

4. Operatör ve fonksiyonlar arasında Ezme

(overloading) iĢlemine destek vermez.

5. GeliĢmiĢ bir eklenti sistemi vardır. Eğer C diline

yeterince aĢna iseniz rahatlıkla sizde eklenti yazabilirsiniz.

Bunlar genel olarak PHP 5 ‗ten itibaren gelen özelliklerdir ve bazıların PHP 4 için geçeri değildir.

PHP Nasıl ÇalıĢır

PHP iki Ģekilde çalıĢtırabilir. Ya bir web sunucu üzerinde yada komut satırından komut verilerek. Birinci yöntem

çok popüler olmasına rağmen ikinci yöntem gittikçe

yayılmaktadır. Çünkü bu sayede kullanıcıya özel kod yazılması mükün olmaktadır.

Web sunucuda çalıĢma konusuna gelince, PHP, bir Script dilidir; yani kodları düz yazı dosyaları halinde kaydedilir

ve PHP kodlarının çalıĢtırılması gerektiğinde ise PHP kodlarını yürütme yeteneğine sahip bir program ile

iĢlenerek elde edilen sonuç geri gönderilir. PHP kodlarını çalıĢtırmak için web sunuculara PHP modülü kurulur. Bu

modül varsa, Web server bir php kodu istendiğinde bu PHP modulüne baĢvurur ve PHP modülü ilgili kodu

çalıĢtırıp sonucu tekrar web sunucuya geri gönderir. Web sunucu iĢlenmiĢ olan bu HTML Ģeklindeki kaynağı ise

talep etmiĢ olan tarayıcıya gönderir.

Bu Ģartlar altında kullanıcı hiçbir zaman PHP dosyasının

gerçekte ne içeriğe sahip olduğu göremez. Sadece

çalıĢma sonucu oluĢan HTML çıktısını görür.

Page 171: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

171

Buradan bir sonuç daha çıkıyor ki; PHP kodlarını

çalıĢtırmak için bir web tarayıcımızın olması yeterli değildir. Çünkü Web tarayıcısı sadece HTML için gerekli

olan yürütme yeteneğini barındırmaktadır. O yüzden bir web server kurulu olması ve bu web server üzerine PHP

modülünün yüklenip gerekli ayarların yapılmıĢ olması gerekir. Modül yoksa ne olur derseniz; yazdığınız kodun

orjinalini halka açmıĢ olursunuz hepsi bu.

2 HTML

4 HTML

2 PHP

6 HTML

5 HTML 4 PHP

Yukarda gördüğünüz Ģekildende anlaĢılabileceği gibi PHP sonuç olarak hep sunucu tarafında çalıĢmaktadır.

Dolayısı ile ile PHP ile tarih göstermek isterseniz eğer gördüğünüz tarih sizin bilgisayarın değil web sitenizin

bulunduğu sunucunun tarih bilgisidir. PHP bu anlamda JSP, ASP gibi dillerle aynı iĢleve sahiptir!

3 Sunucu

1 Tarayıcı

3 Sunucu

1 Tarayıcı

3 Sunucu

Page 172: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

172

HTML için sadece verilerin ekranda nasıl

görüntüleneceğini gösteren biçiçlendirme dilidir demiĢtik. Dolaysıyla HTML ile web sunucusunda bir iĢlem

yaptıramayız örneğin web sunucusu'ndaki bir veritabanı dosyasını açıp, içindeki kayıtları okuyamayız, yada web

serverda bir metin dosyası oluĢturup ziyatretçilerin notlarını vs buraya kayıt edemeyiz. HTML ile Web

ziyaretçimizden bilgi toplayabilirz, bunu sunucuya gönderebiliriz ama hepsi bu. Sonuçta bu verileri iĢlemek

için bize mutlaka bu yeteneğe sahip bir program gerekir.

PHP Dili ve Veritabanı Programları ile ĠliĢkisi

Günümüzde neredeyse tüm programlama dilleri ile en çok veritabanına yönelik programlar yazılmaktadır.

Kısaca programların çoğu hep bir Ģeyleri kayıt altına almak üzere yazılmaktadır. Zaman içinde bu kayıt altına

alınan bilgilerin yönetilmesi ve hızlı iĢlenmesi bir sorun olarak ortaya çıktı ve bu defada ortaya bu verilerin

iĢlenmesi konusunda teknikler içeren DBMS olarak kısaltılmıĢ haliyle Data Base Management System

programları çıktı. Türkçe olarak VTYS yani Veri Tabanı Yönetim Sistemi ifadesi kullanılmaktadır. Veritabanı

programları kendisine gönderilen verileri istenen

ortamlarda tutar, talep edilmiĢ ise bunları aramada kolaylık sağkayacak indeks dosyalarını güncelleĢtirir,

gelen talebe göre aranan Ģartlara uygun kayıtları bulur ve telp eden programa gönderir. VTYS geliĢtiren Ģirketler

ise kendi sistemlerinin kullanımını artırmak için kendi sistemlerinin kullanımında yardımcı olmak üzere çeĢitli

sürücüleri geliĢtirip bunları yazılım dünyasına sunmaktadır. Bu bakımdan günümüzde VTYS ile iliĢki

kurmak isteyen diller sadece bu VTYS ile iletiĢim kuran

Page 173: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

173

bir sürücü dosyası kullanmak durumundadır. PHP

geliĢtiricileri ise neredeyse bilinen bütün VTYS sistemleri için bu sürücülere eriĢimde kullanmak üzere bağlantı

dosyaları hazırlamıĢlardır. Örneğin MYSQL için gerekli olan LIBMYSQL.DLL dosyası (Mysql tarafından

geliĢtirilmiĢtir.) PHP ile hazır gelmektedir. PHP ise bu LIBMYSQL.DLL dosyasını kendisi için geliĢtirilmiĢ bir

bağlantı kütüphanesi ile yönetir. PHP geliĢtiricileri aĢağı yukarı bütün VTYS sistemleri için sürücüler geliĢtirmiĢtir

(Adabas, dBase, FilePro, Informix, InterBase, mSQL, Oracle, Solid, Sybase, Sqlite, Firebird ve bir çok Unix

veritabanı). PHP ayrıca, ODBC sürücüleri ile de çalıĢabilir; ve ODBC'nin okuduğu bütün veritabanlarından

veri çekebilir. (ODBC'nin Unix-Linux sürümü de vardır.)

PHP dilinin detaylarından önce PHP ile kullanılabilen

veritabanlarından üçünden bahsedelim. PHP'nin varolma

sebeplerinin baĢında, ticarî Unix veya Microsoft Windows iĢletim sistemlerinden ayrı, kar kaygısı olmayan, her

türlü platformda çalıĢabilen Script dili ile bu dille kullanılabilecek yine Açık Sistem ürünü bir VTYS aracına

sahip olmak gelir. Perl, PHP'den çok önce de bu platformda mevcuttu ama PERL VTYS yönetmekten çok

sadece metin dosyalarını okuyup ve sonucu biçimlendirerek rapor haline getirmek amacıyla

tasarlanmıĢtı. Bu bakımdan PERL veritabanına dayalı iĢlemlerde programcıya çok güçlük çıkartıyordu.

GeliĢtirilmeside sıkıntılı bir süreçti. PERL açılım olarak ―Practical Extraction and Report Language‖

kelimelerinden oluĢyor dendiği zaman zaten PERL dinin amacı ve yapmak üzere tasarlandığı Ģey kendiliğinden

ortaya çıkmıĢ olmaktadır. ASP ise sadece Windows

üzerinde çalıĢabilir olması sebebiyle hosting konusunda

Page 174: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

174

masraflı bir dildi. Üstelik Open source felsefesine uygun

değildi. PHP, tasarımcılarının MySQL ve PostgreSQL teknolojilerini geliĢtiren kurum ve firmalarla yaptığı yakın

iĢbirliği sonucu ikinci sürümünden itibaren veri-yönlendirmeli (Data-Driven) Web uygulaması alanında

önemli bir araç olarak belirdi. PHP ile, Web Server'a sayfanızı Internet ziyaretçisine göndermeden önce bir

takım komutları yürütmesini, bir takım veri dosyalarını açıp içindeki kayıtları okuyup örneğin bir tablo içine

yerleĢtirmesini söyleyebiliriz.

MySQL, PostgreSQL ve SQLite ise, açık Kaynak Ģeklinde

geliĢtirilen Veri Tabanı Yönetim Sistemi – VTYS (Data Base Management System –DBMS) dediğimiz türden

programlardır. En çok bilinen VTYS programları ticari olarak Oracle, MSSQL, Informix, DB2 ve açık kaynak

tarafında ise MYSQL, PostgreSQL, Firebird ve Sqlite‘dır.

MySQL, çok-kanallı (multi-threaded), çok kullanılıcılı çalıĢabilen (multi-user), hızlı ve sağlam (robust) bir

veritabanı yönetim sistemidir. Mysql veri tablolarını iki formatta tutabilmekteydi. InnoDB ve MYisam.

Veritabanları arasında kızıĢan rekabet sonucu pabucu pahalı gören Oracle, Innobase Ģirketini satın alarak bir

anlamda MYsql ‗in elini kolunu bağladı. Çünkü dilediği anda Innobase‘i lisanslı hale geçirip MySql ürünlerini

tartıĢmalı duruma getirebilecekti. MYsql ‗in buna cevabı ise farklı oldu. Onlarda InnoDb yerine yıllar önce

Interbase‘i geliĢtiren Jim Starkey‘ i iĢe alarak, kendi tablo formatlarını entegre etme yoluna gittiler.

PHP geliĢtiricileri ise 5. sürümden itibaren doğal MYSQL desteği yerine, SQLite veritabanını öne çıkarmaya

baĢladılar. SQLlite, basit veritabanı iĢlemleri için olduça

Page 175: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

175

yeterli bir veritabanı programıdır. Gerçi network

ortamında çoklu kullanım için uygun değildir ama internet programlarının çoğunun buna ihtiyacı yoktur.

PHP Dilinin GeniĢletilebilirliği

PHP dilindeki fonksiyonlar gerekli geniĢletme kütüphanelerinden aranır. Örneğin siz kodunuzda bir

fonksiyon kullandığınızda bunu içeren PHP kütüphanesi,

geniĢletme dosyalarının tutulduğu klasörde bulunamazsa hata mesajı verilir.

PHP dili için geliĢtirilen eklentiler PECL adı verilen "PHP Extension Code Library" kelimelerinden oluĢturulmuĢ bir

kütüphanede dağıtılmaktadır.

Bazı PHP Kütüphaneleri ve iĢlevleri

php_bz2.dll Bzip2 dosyaları ile çalıĢma.

SıkıĢtırma ve açma iĢlemi

php_zip.dll Zip dosyaları ile çalıĢmaç

sıkıĢtırma ve açma iĢlemi

php_curl.dll DeğiĢik tipte protokol kullanan istemci ve sunucular

(ftp,http,https,gopher vs) ile bağlantı kurabilmek için

php_exif.dll Exif bilgileri ile çalıĢma (resim meta verileri)

Page 176: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

176

php_fdf.dll Form Data Format eklentisi. PDF

dosyalarında formlarla çalıĢma

php_gd2.dll Grafik oluĢturma ve çizme

php_gettext.dll DeğiĢik dillerde çalıĢabilecek

yazılımlar için

php_gmp.dll

php_imap.dll IMAP protokolü ile iletiĢim

kurmak için

php_ldap.dll LDAP (Lightweight Directory

Access Protocol) protokolü ile iletiĢim kurmak için gerekli

fonksiyonlar

php_mbstring.dll MultiByte String iĢleme fonksiyonları

php_mcrypt.dll DES, TripleDES, Blowfish (varsayılan), 3-WAY, SAFER-

SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC,

OFB, CFB, ECB cipher, RC6 ve IDEA algoritmaları ile Ģifreleme

yapmak için gerekli kütüphane

(son iki free algoritma değildir)

php_mhash.dll HASH Ģifreleme fonksiyonları

Page 177: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

177

php_mime_magic.dll Dosya içeriğine bakıp dosya türü

hakkında tahminde bulunan kütüphane dosyası. (Bu eklenti

yerine artık Fileinfo eklentisi geçmektedir. Bu eklenti geri

dönük uyumluluk için korunmaktadır)

php_ming.dll Flash animasyon dosyaları

üretmek için gerekli fonksiyonlar

php_openssl.dll SSL protolü için

php_snmp.dll SNMP protokolü (Simple Network

Managemet Protocol)

php_soap.dll Web servisleri için

php_sockets.dll Soket bağlantılar için

php_xmlrpc.dll XML ve RPC kütüphanesi. XML-RPC sunucu ve istemcileri

geliĢtirmek için gerekli fonksiyonlar

php_xsl.dll XML dosyalarına çıkıĢ formatı tanımlamak için gerekli

fonksiyonlar

php_dbase.dll Dbase VTYS bağlantısı

php_interbase.dll Interbase VTYS bağlantısı

Page 178: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

178

php_msql.dll Msql VTYS bağlantısı

php_mssql.dll Mssql VTYS bağlantısı

php_mysql.dll Mysql VTYS bağlantısı

php_mysqli.dll Mysql VTYS bağlantısı (Nesne

eriĢimlidir)

php_oci8.dll Oracle VTYS bağlantısı (Oracle

Call Interface 8)

php_pgsql.dll Postgresql VTYS bağlantısı

php_sqlite.dll Sqlite VTYS bağlantısı

php_sybase_ct.dll Sybase VTYS bağlantısı

php_pdo.dll PHP Data Object bağlantılarının kullanımı için (Database

Abstraction Layer kütüphanesi)

php_pdo_firebird.dll Firebird PDO bağlantısı

php_pdo_mssql.dll Mssql PDO bağlantısı

php_pdo_mysql.dll Mysql PDO bağlantısı

php_pdo_oci.dll Oracle PDO bağlantısı

php_pdo_oci8.dll Oracle PDO bağlantısı

php_pdo_odbc.dll ODBC PDO bağlantısı

Page 179: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

179

php_pdo_pgsql.dll Postgres PDO bağlantısı

php_pdo_sqlite.dll Sqlite PDO bağlantısı

PEAR (PHP Extension and Application Repository)

PEAR aslında çeĢitli iĢler için yazılmıĢ kodların bir araya getirilerek diğer programcılar tarafındanda kullanılmasını

sağlayan hazır kodlar kütüphanesidir. En çok bilinen PEAR paketi ise PEAR::DB paketidir. PEAR ile

programlama konusu çok derin bir konu olup bu kitapta çoğunlukla PEAR barındırmayan kodlar kullanılacaktır.

Bunun sebebi PEAR‗ın zor veya kötü bir Ģey olması değildir. Burada ilk amaç PHP öğrenmek olduğu için

belirli bir aĢamaya gelinceye kadar klasik kodlama

teknikleri ile devam edilecektir.

PHP - Web Sunucusu – PHP Kurulumu

Web master açısından PHP sunucu tarafından çalıĢan bir

programdır. Dolayısı ile sunucu ile uyumlu olmalıdır 5. sürümü itibariyle, PHP bütün Unix-türevi sistemler

(örneğin Linux, Mac Os, BSD, Solaris) ve Microsoft

Windows sistemleri ile uyumludur. Birlikte çalıĢabileceği Web sunucu programları arasında Apache, IIS, FHTTP,

Omni HTTPd, Xitami ve Windows 95/98 için PWS (Personal Web Server) vardır.

Internet ortamında ortamında web sunuculara PHP iĢleme yeteneğinin eklenmesi haliyle bizim sorunumuz

değildir, (iĢimiz hosting ise o zaman baĢka tabii). Bizim için Hosting firmasının PHP desteği verip vermediğini

bilmek yeter. Fakat çalıĢmalarımızın doğruluğunu,

Page 180: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

180

hataların kontrolünü yapabilmek için (hatta site

tasarımını gerçek ortamdaki gibi müĢteri test edebilsin diye) kendi bilgisayarımıza bir kiĢisel Web Server kurmak

ve bu programı PHP-uyumlu hale getirmek gerekir.

Normal Ģartlar altında Apache, PHP, MYSQL kurulumu

detaylı bir iĢlemdir. Merak edenler için kitabın sonlarında yinede yer verilecektir. Ama benim önerim bu yöntemi

takip etmeyip, hazır WAMP paketlerinden birini kullanmanız olacaktır.

WAMP Windows+Apache+Mysql+PHP kelimelerinin kısaltılmıĢıdır. WAMP paketleri tüm bu programların

sisteminize otomatik kurulumunu sağlarlar. Böylece ayarlarla uğraĢmadan doğrudan iĢinize bakabilirsiniz.

Linux için tasarlanan bu paketler ise LAMP olarak bilinirler.

XAMPP

En çok tutulan WAMP paketlerinden birisi

www.apachefriends.org adresinden bulabileceğiniz XAMMP paketidir. Linus sürümüde vardır. PHP varsayılan

olarak desteklenmiĢtir. Ayrıca istenirse JSP çalıĢtırmak için TOMCAT eklentiside vardır. Paket bir çok ögeyi

barındırdığı için biraz büyük, download edilmesi daha uzun ve dosya sayısı çok fazlaolduğu için kopyala yapıĢtır

vs iĢlemlerde belirgin bir yavaĢlık sözkonusu olmakta.

APPSERV

Yine aynı Ģekilde APPSERV paketide iyi bir pakettir. Kendine özgü bir kullanıcı kitlesi olup Flash disk üzerinde

çalıĢmasını sağlayan betikleride vardır.

Page 181: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

181

Uniform Server

Benim kiĢisel olarak tercih ettiğim WAMP paketi budur.

www.uniformserver.com adresinde yayınlanan bu paket, küçük ve sadece amaca yönelik bir paket. Üstelik bir

flash disk üzerinde tüm tasarımları (MYSQL verileri ve veri ayarları ilede birlikte) taĢıabilme avantajı vermekte.

Bu iĢlemi XAMMP ilede yapmak mümkün ama Uniform açık halde iken sadece 40 mb civarı yer tutarken XAMPP

250 mb civarında yer kaplıyor. Fakat Uniform Server içinede PEAR ve diğer bir çok eklentinin elle kurulması

gerekebiliyor. Uniform varsayılan olarak sadece MYSQL eklentisi hazır halde geliyor ve PEAR kütüphaneleride

dahil değil.

EasyPHP

EasyPHP oldukça tutulan bir WAMP paketidir. www.easyphp.org adresinde ki sitesinde güncel

sürümleri bulunmaktadır.

Bunlar dıĢında Saint WAMP, Php Triad, LWS, WD Studio

vs uzayıp giden bir liste Ģeklinde bir sürü WAMP paketi var.

Benim seçim yapma kritelerim ise

1. TaĢınabilir olmalı

2. Admin Paneli basit olmalı

3. Sık sık güncellenmeli

4. Fazla yer kaplamamalı

5. Ayarları mümkün olduğunca hazır gelmeli ve ilave ayarlar için yormamalı.

Page 182: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

182

Php Öğrenmek Zormu

Dilin üreticilerinden Zeev Suraski, bu yılın baĢında

Ġsrail'de yapılan ilk uluslararası PHP Konferansı'nda "PHP öğrenmek zor mu?" diye soran bir bilgisayar meraklısına

Ģu cevabı vermiĢtir: "Bir haftadan fazla zaman ayırmanız gerekiyorsa, sizin için zor demektir!"

Ġlk PHP Programımız – Merhaba Dünya

Dünyada neredeyse her programlama dili örnelirken ilk

yazılan kod genelde ekrana ―merhaba‖ dünya kelimelerinin yazdırılmasıdır.

<?php

echo ―merhaba dünya‖;

?>

Yukarda gördüğünüz gibi kod oldukça anlaĢılır sadece ve

notasyonu öğrenilmeye müsait.

PHP KOD YAZIM KURALLARI

PHP kodları, oluĢturacağımız HTML sayfalarında HTML

etiketlerinin arasında kendi özel ayracı içinde yazılır:

<html>

<?PHP

echo ("Merhaba Dünya!");

?>

</html>

Page 183: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

183

Php kodlama sintaksı bir çok dilden gelenler için çeĢitli

kolaylıklar içermektedir. Kodlamada akılda bulundurulması gerekenler

1. Php kodları <?PHP .... ?> veya <? .... ?> arasında yazılırlar.

2. Her komut satırından sonra ―;‖ noktalı birgül ile komut sonlandırılır. Ancak istisna durumlar vardır.

3. Php‘de açıklama satırı eklemek için /* ------ */, # veya // tagları kullanılır. Bunlar bulundukları yere

göre kodun belli bir kısmını PHP tarafından gözardı edilmesini sağlarlar.

4. PHP değiĢkenleri $iĢareti ifade edilirler. $adi gibi.

5. DeğiĢken isimlerin boĢluk kullanılamaz. Örneğin

$adi doğru bir değiĢkendir ama ―$adı soyadı― Ģeklinde bir değiĢken kullanılamaz.

6. PHP dilinde diğer dillerden farklı olarak Türkçe

harfler kullanılabilir. Örneğin $adı="ali";echo $adı; ġeklinde yazılan bir komut çalıĢır. Ancak bir çok

diller çlaıĢan birisi olarak bunu tavsiye etmiyorum.

7. DeğiĢken isimleri rakamla baĢlayamaz mutlaka

harfle baĢlamalıdır.

8. DeğiĢkenleri isimlendirirken uygun bir notasyonda

isimler kullanılmalıdır. Ayrıca değiĢken isimleri gereksiz yere uzatılmamalı ancak ancak

anlaĢılmayacak Ģekilde kısada olmamalıdır. Örneğin $sayfasonudegiskenikullanimornegi uygun

bir isim degildir. Keza $a,$b değiĢkenler tüm script boyunca kullanılacaksa uygun isimler değildir.

Page 184: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

184

9. PHP dilinin ayrılmıĢ kelimeleri değiĢken adı olarak

kullanılamaz (örneğin Not, if, switch gibi)

10. PHP değiĢken isimlerinde harf duyarlıdır.

Örneğin $adi ve $ADI değiĢkenleri aynı değildir ve iki ayrı değiĢkendir.

11. Metin değerleri ― veya ‗ arasında yazılabilir. Eğer metin içinde çift tırnak kullanılacaksa bu çift

tırnaktan önce \ karakteri (ters slash) yazılmalıdır.

12. Metin değiĢkenlerin içeriğine bir karakter

dizisi gibi eriĢilebilir.

13. ―‖ arasında yazılan değiĢkenlerin içeriği

ekrana basılırken ‗ tırnak kullanılır ise değiĢken isimleri metin gibi ele alınır ve örneğin

$adi=‖Ahmet‖; ile atama bile yapılmıĢ olsa echo ‗$adi‘ ekrana Ahmet değil değiĢkenin adını

yazacaktır.

14. Çift tırnak içindeki özel karakterler iĢlenirken tek tırnak içindekiler metin olarak ele alınır.

15. Kontrol ve döngü bloklarında iĢlenecek komut sayısı birden fazla ise bu komutlar {} içine alınarak

koĢul yada döngüye ait komutların belirtilmesi gerekir. (aksi durumda bir mantık hatası oluĢur)

Örnek değiĢken tanımları

$adi Doğru

$1abc YanlıĢ

$_adi Doğru

$adi soyadi YanlıĢ

Page 185: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

185

$adi‘soyadi YanlıĢ

PHP bir Script dilidir ve dolayısı ile ; PHP ile yazdığınız "programlar" birer düzyazı dosyasıdır. PHP komutları

aĢağıdaki çiftler arasına yazılabilir demiĢtik.

1. <?PHP .... ?>

2. <? .... ?>

Bunlara PHP komut ayracı denir; birinci türü uzun veya

standart ayraç sayılır; ikincisine ise "kısa ayraç" denir. PHP yorumlayıcısının kısa ayraç kullanmasını

istemiyorsak, PHP.ini dosyasındaki, short_open_tag = On: satırını short_open_tag = Off; yapmak yeter.

Bununla birlikte uzun vadede, PHP programlarınızda HTML yerine XML kullanmak istiyorsanız, Ģimdiden elinizi

uzun ayraca alıĢtırmanız yerinde olur; çünkü XML etiketleri "<?xml" Ģeklinde baĢlar ve "?>" Ģeklinde biter.

Eğer siz <??> ile kod yazacak olursanız XML kodlarınızın

PHP den ayrılması güçleĢecektir. (iĢin aslı XML kodlaması için PHP de ilk satır echo komutu ile yaptırılır)

ASP ile çalıĢan Web programcılarının alıĢtığı stil olan "<%" ve "%>" ASP bloğunu kullanmalarından dolayı

hata almalarını önlemek içinde bir kolaylık düĢünülmüĢtür. PHP.ini dosyasını açarak, asp_tags =

Off; satırını ON yaparak ASP açılıĢ kapanıĢ etiketleriylede PHP kodlamak mümkün olur!

PHP komutlarınızı <SCRIPT> etiketiyle de kullanabilirsiniz.

<HTML>

<SCRIPT LANGUAGE="PHP">

Page 186: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

186

print ("Merhaba Dünya!");

</SCRIPT>

</HTML>

Ancak bunlar çok kullanılan durumlar değildir. Daha öncede belirtildiği gibi sadece önceden baĢka dilleri

kullananlar için kolaylık olsun diye eklenmiĢlerdir.

NOT: PHP kodları ne Ģekilde yazılırsa yazılsın sunucuda çalıĢırlar. PHP <SCRIPT> etiketi içinde yazılsa dahi.

Javascript veya VBScript gibi scriptler ise kullanıcı tarafında çalıĢırlar. Bu bakımdan 3. kullanım kafa

karĢıklığına sebep olmamalıdır. PHP daima sunucuda çalıĢtırıldığından dolayı ziyaretçiye asla PHP kodları

gösterilmez.

PHP kodlarımız, oluĢturulmasını istediğimiz sayfanın HTML kodları ile ―kod adacık‖ oluĢturmak üzere içiçe

yazılır. Örnek koda bakarsak bunu görebiliriz:

<HTML>

<HEAD>

<TITLE>PHP ile Merhaba</TITLE>

</HEAD>

<BODY>

<CENTER>

<B>

<H1>

<?PHP

Page 187: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

187

print "Merhaba Dünya!";

?>

</H1>

</B>

</CENTER>

</BODY>

</HTML>

Sayfamızın görüntüsünde hiç bir değiĢiklik olmamakla birlikte, Browser'a giden HTML kodları önemli ölçüde

değiĢmiĢ olacaktır.

Açıklama (Yorum) Satırları

Yazılan kodun üzerinden zaman geçtikçe helede kod blokları uzun olunca kodu bir anda kavramak ve anlamak

zorlaĢır. ĠĢte bunun için kod satırlarının arasına açıklama satırları eklememiz gereklidir.

NOT: En iyi yazılmıĢ kod en çabuk anlaĢılabilen ve

dökumante edilmiĢ koddur.

PHP ayraçları içinde iki türlü yorum bulunabilir: Çok-satırlı yorumlar ve tek satırlı yorumlar. Birinci grubu,

baĢına "/*" ve sonuna "*/‖ iĢaretleri koyarak, ikinci grubu ise sadece baĢına ―//‖ veya # iĢareti koyarak

belirtiriz:

<HTML>

<!- - Bu satır HTML'in yorum satırı

Buraya istediğimiz kadar yorum yazabiliriz..

Page 188: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

188

Browser bu satırları dikkate almaz - - >

<HEAD>

<TITLE>PHP ile Merhaba</TITLE>

</HEAD>

<BODY>

<CENTER>

<B>

<H1>

<?PHP

/*

Bu satır da PHP'nin çok-satırlı yorum bölümü..

Bunu da PHP yorumcusu asla dikkate almaz

Buraya istediğimiz kadar yorum yazabiliriz.

*/

print "Merhaba Dünya!";

// Bu ise PHP'nin tek satırlı yorum bölümü

// Bu satırları da PHP yorumcusu dikkate almayacaktır.

# Bu ise PHP'nin tek satırlı yorum bölümü

# Bu satırları da PHP yorumcusu dikkate almayacaktır.

?>

</H1>

</B>

</CENTER>

Page 189: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

189

</BODY>

</HTML>

<?PHP

# Bu satır da yorum bölümü..

# Bunu da PHP yorumcusu asla dikkate almaz

# Buraya istediğimiz kadar yorum yazabiliriz.

print "Merhaba Dünya!";

?>

Diyez ile yorum haline getirdiğimiz satırların sonuna baĢka iĢaret koymaya gerek yoktur.

PHP ile Ekrana Çıktı Verme

echo() fonksiyonu-(Ekrana yazdırma)

PHP dilinde ekrana bir Ģey yazdırmanın bir çok yöntemi

vardır. En çok kullanılan yöntem echo fonksiyonudur. ġimdi belkide dünyanın en çok yazılan kodu olan

―merhaba dünya‖ uygulamasını PHP ile yazalım. Çift tırnak ile tek tırnak kullanımı arasında fark vardır. Tek

tırnak yazılırsa ekrana yazılacak metin içinde değiĢken

kullanılamaz. Daha doğrusu değiĢkenlerin değeri yerine adı ekrana yazdırılır.

<?php

echo ―merhaba dünya‖;

Page 190: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

190

?>

<?php

echo ‗merhaba dünya‘; // bu örnek doğru

echo ―merhaba dünya‖ // bu örnek doğru

echo ―merhaba dünya $adi‖; // bu örnek doğru

echo ‗merhaba dünya $adi‘; // bu örnek kod olarak doğru ama ekrana adı değiĢkenini değil kendisini

// yazacak

?>

Ekrana tek br değiĢken veya metin yazdırılacaksa sadece ―?‖ de kullanmak mümkündür.

print() fonksiyonu – (Ekrana Veri Yazma)

Print fonksiyonuda ekrana echo gibi çıktı vermek

amacıyla yazılmıĢ bir fonksiyondur. Genel kullanımıda aynıdır.

<?php

print ―merhaba dünya‖;

?>

Page 191: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

191

Doğruluğunu test etme imkanı bulamadım ama echo

fonksiyonun genel olarak print fonksiyonundan daha hızlı çalıĢtığını iddia eden makaleler okudum. Gerçektende

echo daha çok kullanım alanına sahip.

Escape Kodlar

Tek veya çift tırnak içine de alsak, PHP, bir değiĢken adını gördüğü zaman onun yerine o değiĢkenin tuttuğu

değeri yazar. PHP bunu, değiĢken adının baĢındaki $ görerek yaparak. $ iĢareti gibi PHP için özel anlamı olan

iĢaretlerin iĢlenmesini önlemek ve bu iĢaretleri düz metin saymasını sağlamak için bu iĢaretlerin önüne ters-bölü

iĢareti koyarız. Buna o karakteri kurtarma veya ESCaping denir. PHP'nin anlamlı iĢaretleri ve bunların

ESCape-yazılıĢı Ģöyledir:

\' Tek tırnak

\" Çift tırnak

\\ Ters-bölü

\$ Dolar iĢareti

\n Yeni Satır (New Line)

\r Satır BaĢı (Return)

\t Sekme (Tab) karakteri

Bu iĢlemi daha iyi anlatmak için Excelden bir örnek yararlı olur. Bazen Excel‘de bir sayının metin olarak ele

alınması istenir. Excel‘i buna zorlamak içinde o değerin baĢına ‗ karakteri konulur. ESCape kodlar iĢte bu iĢlemi

Page 192: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

192

yaparlar. PHP bu kodları görünce değiĢkeni iĢlemek

yerine metin olarak varsayar.

DeğiĢken Nedir ?

DeğiĢkenler tüm programlama dillerinde karĢımıza

çıkacak bir konudur. Genel olarak tüm dillerde standartlarda aynıdır. Örneğin tüm programlama

dillerinde değiĢken adı rakam ile baĢlayamaz kuralı vardır. Neden değiĢken kullanırız diyecek olursanız cevap

çok basittir; sadece programcının iĢini kolaylaĢtırmak için.

Bilgisayarın RAM hafızasını bir Excel sayfası gibi düĢünebiliriz. Bilindiği gibi orada her satır hücrenin

kesiĢmesine bir hücre denir ve A1 gibi birde hücre adresi

alır. CPU larda buna benzer bir teknikle hafızayı adresleyerek kullanırlar.

Örneğin siz $maas =2000; dediğinizde PHP bilgisayarın RAM hafızasında xxxx:xxxx gibi bir adresi ayırmakta

kendisi için buraya sembolik olarak ―maas‖ adini vermektedir. Aslında xxxx:xxxx değeri sadece bir

ifadedir.

Günümüzde 64 bitlik iĢlemci ile çok daha karıĢık hale

gelmiĢtir. Hele birde binary yani sadece 1 ve 0 lardan oluĢan adresleri düĢünürsek bunların adreslerini ve neyi

temsil ettiğini hatılamak adeta imkansızdır. Dolayısı ile biz ―maas‖ degiskenine bakmak istediğimizde ise

karĢımıza onun temsil ettiği adresteki bilgi gelmektedir. Böylece programı kiĢi adres ezberlemek yada hatırlamak

zorunluluğundan kurtulmaktadır.

DeğiĢkenleri adının önüne $ iĢareti koyarak tanımlarız:

Page 193: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

193

$ad;

$syd;

$Ay1;

DeğiĢkenler, harf, veya alt çizgi (_) ile baĢlayabilirler; bu karakterleri ve rakamları içerebilirler; ama içinde boĢluk

veya diğer iĢaretler bulunamaz. PHP değiĢkenleri her türlü değeri tutabilirler: bir değiĢkenin adının yazılıĢ Ģekli

onun tutabileceği değerin niteliğini belirlemez. Dolayısıyla, "$adi" değiĢkenin değeri "Tuncay" da olabilir,

"1255" de olabilir. PHP'de genellikle değiĢkenleri değerini atayarak belirleriz:

$adi = "Tuncay";

$soyadi = "ġanlı";

$a123 = 123;

DeğiĢkenler, kullanıldıkları yerde, taĢıdıkları değerin

kullanılmasını sağlarlar. Örneğin $adi değeri ―ALĠ‖

bilgisini içeriyor ise PHP bu değiĢkeni gördüğü yerde değiĢkenin içerdiği ―ALĠ‖ bilgisini kullanacaktır:

print $adi;

komutu, eğer değeri "Tuncay" ise tarayıcı penceresine

"Tuncay" kelimesini yazdırır. PHP'de özel bir değiĢkene değiĢken adı olarak kullanılacak değerleri de atayabiliriz:

$adi = "Tuncay";

$degisken = "adi";

print $$degisken;

Burada Browser penceresine yine "Tuncay" kelimesi

yazılacaktır; çünkü PHP $degisken adlı değiĢkenin "adi"

Page 194: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

194

adlı değiĢkeni tuttuğunu bilecek ve iki Dolar iĢaretini

görünce, $degisken'in değerini değil, onun tuttuğu değiĢkenin değerini yazacaktır. Bu, size Ģu anda karıĢık

görünebilir. Daha sonra döngüleri gördüğümüzde bu tekniği bir satırlık kod ile yüzlerce değeri yazdırmakta

kullanacağız. Bu teknik Ģöyle de kullanılabilir:

$degisken = "adi";

$$degisken = "Tuncay";

print "$adi";

print $$degisken;

print "${$degisken}";

print "${'adi'}";

Buradaki dört "print" komutu da Browser'a "Tuncay"

kelimesini yazdıracaktır. PHP'de bir değiĢkenin tuttuğu değer, bir baĢka değiĢkene atanabilir. Bu ya duragan, ya

da dinamik olarak yapılır. Durağan yöntemde:

$birinci_degisken = "Nurcan";

$ikinci_degisken = $birinci_degisken;

$birinci_degisken = "Tülay";

print $ikinci_degisken;

Kimi zaman iki değiĢken arasındaki değer alıĢ-veriĢi sürekli olsun istenebilir. PHP, buna, ilk atama sırasında &

iĢareti kullanırsak izin verir. Aslında bu iĢlem bir hiledir. Çünkü yapılan iĢlem iki değiĢkeninde hafızadaki aynı

adresi göstermesi sağlanmaktadır:

$birinci_degisken = "Nurcan";

Page 195: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

195

$ikinci_degisken = &$birinci_degisken;

$birinci_degisken = "Tülay";

print $ikinci_degisken;

Buradaki "print" komutu ise Browser penceresine "Tülay" kelimesini yazdıracaktır. Çünkü iki değiĢken arasındaki

değer alıĢ-veriĢi birinci değiĢkenin tuttuğu değeri değiĢtirmeden önce halde, ikinci değiĢkene birinci

değiĢkenin değerini dinamik olarak atamıĢ olduk. Atama iĢlemi sırasında & iĢareti kullandığımız için, birinci

değiĢkenin değeri değiĢtiğinde ikinci değiĢkenin de değeri değiĢecektir.

DeğiĢken Türleri

PHP, değiĢkenlere, tiplerine göre farklı miktarda hafıza

alanı ayırır. O yüzden etkin bir programcı için veri tipinin doğru tespiti çok önemlidir. (bu olay Veritabanı

tasarımında çok daha önemlidir). Ayrıca PHP, diğer bütün programlama dilleri gibi belirli veri türleri ile sadece

belirli iĢlemleri yapabilir. Örneğin, ancak iki sayı arasında aritmetik iĢlemler yapılabilir ama iki metin değiĢken

aritmetik olarak toplanamaz; ancak içerdikleri değerler ardarda eklenebilir. Ne var ki, PHP sizin aritmetik

toplama mı, yoksa ardarda ekleme mi yapmak istediğinizi bilmek durumunda değildir. (PHP'ye

'muazzam dil' dedik; içinde yapay zekâ var demedik!) Dolayısyla değerleri 5 ile 6 olan iki değiĢkeni topladığınız

zaman ortaya 11 yerine 56 çıkarsa, kabahati PHP'de değil, değiĢkenlere veri atayan kiĢide (büyük bir ihtimalle

kendinizde) aramalısınız.

PHP açısından yedi tür değer vardır:

Page 196: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

196

Tamsayı (Integer): 5,124, 9834 gibi (-

2147483647 ile 2147483647 arası sayılar)

Çift (Double): 3,567 gibi

Alfanümerik (String): "Deniz" gibi

Mantıksal (Boolean): doğru (true)/yanlıĢ (false)

gibi

Nesne (Object)

Dizi (Array)

Resources (Kaynak)

Kaynaklar aslında PHP değiĢkeni olmayan Sql sorguları, yada bir dosyadan yğklenen resim gibi kaynaklardır.

DeğiĢkenlerden farklı genellikle olarak iĢleri bitince yok edilmeleri gereklidir. Böylece verimli bir hafıza kullanımı

sağlanır.

<?php

$str = "12";

$int = 20;

print $mystring + $myinteger;

?>

Alfanümerik DeğiĢkenlerin Ġçeriğine Dizi Olarak EriĢme

Alfanümerik değiĢkenlerin PHP‘de özel bir kullanım Ģekli

daha vardır. Bu notasyon Pascal ve C dilindede olan bir kullanım Ģeklidir. Gerçi Pascalda 0. byte uzunluk ifade

eder ama önemli olan kullanım mantığıdır. Bu yöntemler bir alfanümerik değiĢkenin içeriğine harf harf eriĢmek

mümkündür.

Page 197: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

197

<?php

$str1 = "Kelam, Ġbrahim?";

$str1{0} = "S";

$str1{14} = "!";

print $str1;

?>

Yukarda gördüğünüz kullanımda öncelikle bir alfanümerik değiĢken oluĢturuluyor. Daha sonra ise bu değiĢkenin ilk

harfi değiĢtiriliyor ve en sonundada metnin en son karakteri değitirilip ekrana yeni hali yazılıyor.

Diziler (Array)

Diziler aynı tipte birden çok değiĢkeni zincirleme olarak

barındıran değiĢkenlerdir. Buna neden ihtiyaç duyulurki derseniz, örneğin meyveleri iĢleyen değiĢkenlere

ihtiyacımız olsun. Yapmamız gereken $elma, $armut gibi her meyveyi sıra ile tanımlamak. Bu iĢe kodlamada

zorluk ve sıkıntı demektir.

1. Bu meyveleri ekrana yazdıralım diyecek olursak

tek tek elle yazmak zorundayız.

2. Bu meyve isimlerini sıralayalım desek yapacak

hiçbir Ģeyimiz yok

3. Meyve isimlerini bir sırada iĢleyelim dersek elimiz

kolumuz bağlı

Dizilerde ise bu konular sıkıntı olmaktan çıkmaktadır.ġimdi bir örnekle hem meyveleri içeren bir

dizi tanımlayalım hemde bu diziyi ekrana yazdıralım.

Page 198: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

198

<?php

// for each dizi elemanları boyunca tekrarlar Ģüphesiz dizideki sayıyı bulup for ilede bu iĢlemi yapabiliriz

$meyve = array (

1=>"elma",

2=>"armut",

3=>"ayva",

4=>"Ģeftali",

5=>"üzüm",

6=>"nar");

foreach ($meyva as $deger) {echo $deger .

"<br>";}

?>

Yukardaki döngüde koyu harflerle yazılan kısım tüm

meyveleri ekrana yazan koddur. Üstelik tek bir fonksiyonlar bu diziyi artan yada azalan Ģekilde

sıralamamızda mümkün. ġimdilik döngünün nasıl çalıĢtığı konusuna girmeyeceğiz. Bu ilerde iĢleyeceğimiz bir konu.

Ancak ilerde bu konuya tekrar geniĢçe yer verilecektir

Çok Boyutlu Diziler

Diziler çok boyutluda olabilir. Örneğin meyvelerin

renginide tutmak isteseydik 2 boyutlu bir dizi tanımlayabilirdik.

Page 199: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

199

<?php $meyve = array ( array ( adi => "elma", renk => "kırmızı"),

array ( adi => "karpuz", renk => "kırmızı"), array ( adi => "ayva", renk => "sarı"),

array ( adi => "nar", renk => "pembe"), );

print $meyve [0][adi]; // meyve dizisinin ilk elemanının adi bilgisini yaz… ―elma‖

?>

Dizi Tanımlama Kuralları

Diziler tanımlanırken süslü parantez değil, normal

parantez kullanılır

Herbir elemanın değerlerinin sonunda virgül

konulur.

Dizi çok boyutlu ise bunları tırnak içine alarak

yazmak gerekir.

<?php

$a[0] = "abc";

$a[1] = "def";

$a[1] = $f; # tek boyutlu tanımlama

$a[1][0] = $f; # iki boyutlu tanımlama

?>

Page 200: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

200

Nesneler (Objects)

NYP yani Nesneye Yönelik Progamlama programlama

dünyasında çığır açan bir tekniktir. Ġngilizce OOP olarak ifade edilir ve Objet Oriented Programming kelimelerinin

baĢ harflerinden oluĢur. Bu teknik ortaya çıktığında geleneksel programlamaya alıĢkın olanlar önce tereddüt

etsede nesneler kısa sürede programcılar için vazgeçilmez oldular. Tanımlarsak, nesne, kendi

değiĢkenleri ve çalıĢtıracağı komutlardan oluĢan fonksiyonları ile bir bütündür. Nesneyi bir kere

tanımladıktan sonra istediğimiz kadar örneğini oluĢturabiliriz. Bir nesnenin yapacağı iĢten, o nesnenin

metodu diye söz ederiz. Nesneler birbirinin atası olabilir.

Birden fazla nesne bir araya gelerek yeni bir nesne oluĢturabilirler.

Windows iĢletim sistemi tamamen NYP ile yazılmıĢtır. Pencereler birer nesnedir. Pencere nesneleri ise, baĢlık çubuğu, pencelere alanı, durum satırı, sol ve sağ üst

köĢelerdeki düğmelerden oluĢmuĢtur. Gene aynı Ģekilde Windows pencelerinde gördüğünüz bilgi giriĢ kutuları

düğmeler vs her Ģey bir nesnedir.

Nesneler Ġleri programlama konusu olduğundan örnekler sonra iĢlenecektir. Ancak bast bir örnek vermek için ;

<? class nyp{ function yazdir($str){

echo "Merhaba\n";

echo "değiĢken : $str\n"; }

}

Page 201: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

201

$deneme= new nyp(); $a="rastgele bir metin değeri";

$deneme -> yazdir($a);

?>

bu programı çalıĢtırdığımızda ekrana

Merhaba

Değişken : rastgele bir metin değeri

yazacaktır.

Konu baĢında belirtildiği gibi bu basit bir örnektir. $a ile

$str farklı olması sizleri ĢaĢırtmasın. Ġleriki konularda bu olay daha net ĢekillenmiĢ olacaktır.

Sabit Değerler - Constants

Ġster Web, ister Web-dıĢı amaçlı olsun, bir programın

bazen baĢından sonuna kadar aynı değeri taĢıması istenen bir değere ihtiyacınız olabilir. Tabiî ki bu iĢlem

için bir değiĢken kullanmakta mükündür. Ama yanlıĢlıkla değiĢkene değer atarsanız ölümcül hatalar yapabilrsiniz.

Örneğin liste kodu yazdığımızı düĢünelim; matbu forma baskı yaptıracağız, form 20 satırlık ve yine 20 satırdan

oluĢan bir sürü baĢka formumuzda var. Programın içinde bir değiĢken tutup bu sayı 20 olunca yeni form

takılmasını isteyebiliriz. Ama ilerde formlar 30 satır olursa tüm o 20 sayılarını bulup 30 yapmamız gerekir.

Bu iĢlem için $satirsayisi diye bir değiĢken kullanıp, içeriğini 20 olaak kullanmayı düĢünürsek eğer ilerde

sadece bu sayının 30 yapılması yetecektir. Bu daha akılcı bir iĢlemdir. Ancak buradada bir sorun var. Ya bu

değiĢikliği yanlıĢlıkla kod içinde yaparsak ? Sonuçta bu

Page 202: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

202

bir deiĢken ve değer atamayada açık durumda. ĠĢte

bunun için satirsayisi diye bir sabit tanımlayıp buna değer atabiliriz. Böylece hem bir değiĢiklikle tüm

satirsayisi değerlerini güncellemiĢ olacağız, hemde kod içinde bu değeri yanlıĢlıkla değiĢtirmenin önüne geçmiĢ

olacağız. Üstelikta yanlıĢlık aynı isimde bir sabit daha oluĢturmaya kalkınca PHP iĢlemi yapmayacaktır.

PHP'de sabit değerler, Script boyunca değiĢmeden kalır. Sabit değerler, değiĢkenlerden farklı Ģekilde oluĢturulur.

Bunun için PHP'nin define() fonksiyonunu kullanırız. Bu fonksiyonun yazım kuralı Ģöyledir:

define ("SABIT_ADI", değeri);

Burada SABIT_ADI yerine, tanımlamak istediğimiz sabit

değere vereceğimiz isim, değeri yerine de sabitin taĢımasını istediğimiz değeri yazarız. Örnek:

<?php $tutar = 125;

define ( "KDV", 18);

$TL_Tutar = $tutar+(($tutar * KDV)/100);

print ($TL_Tutar);

?>

Burada tanımladığımız KDV sabit-değeri, tıpkı bir değiĢken gibi kullanılabilir. Ticari bir kod içinde bu KDV

değeri yüzlerce iĢlemde geçebilir. Bunun değerinin elle kodlanması yerine bu Ģekilde kullanılması bizi hatalardan

koruyacaktır. Diyelimki KDV 18 den 10 ‗a düĢtü. Yapmamız gereken sadece DEFINE satırındaki 18

Page 203: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

203

değerini 10 yapmak olacaktır. Kodun geri kalanı anında

KDV oranını 10 olarak kullanacaktır.

Sabit değer ile aynı ismi taĢıyan değiĢken oluĢturmak

mümkündür; ancak aynı ismi taĢısa da PHP bir sabit ile bir değiĢkeni (birinin adının önünde $ iĢareti bulunduğu

için) karıĢtırmaz. TanımlanmıĢ olan bir sabiti yeniden oluĢturamayız; ama buna teĢebbüs ettiğimizde PHP hata

vermez. Bir sabit değerin oluĢturulmuĢ olup olmadığını defined() fonksiyonu ile anlayabiliriz:

<?php

$tutar = 125;

if (defined( "KDV" )) {

echo ("Sabit değer daha önce tanımlanmıĢtı.<br>");

}

define ( "KDV", 18);

$TL_Tutar = $tutar+(($tutar * KDV)/100);

print ($TL_Tutar);

?>

PHP'nin kullanılmaya hazır bir kaç sabit değeri vardır. True (doğru) değeri 1 olan, False (yanlıĢ) ise değeri sıfır

sayısı veya boĢ alfanümerik olan iki sabittir. Diğer sabitler ise Ģunlardır:

__FILE__ : O anda çalıĢmakta olan PHP dosyasının adı

Page 204: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

204

__LINE__ : Bu ifadenin yer aldığı satırın sayısı

PHP_VERSION: PHP'nin sürümü;

PHP_OS: PHP'nin çalıĢtığı iĢletim sistemi;

PHP_VERSION : PHP'nin sürümü (Ġki kelimenin arasında bir alt-çizgi var);

Bunlara ek olarak, E_ERROR, E_WARNING, E_NOTICE ve E_PARSE Ģeklinde hata durumunda hatanın çeĢitli

özelliklerini bildiren sabit değerleri de kullanabiliriz. PHP hakkında çok daha geniĢ bilgiyi phpinfo() fonksiyonunu

çağırarakk alabilirsiniz.

Buradaki değiĢkenler iĢletim sistemine ve web server

programına görede değiĢirler. Ġlerde bunlar detaylıca incelenecektir.

Operatörler

Operatörler kullanıldıkları dile, atama, aritmetik iĢlemler

ve karıĢılatırma gibi yetenekler kazandıran sembollerdir. PHP dilinde en çok kullanılan operatör ―=‖ operatörüdür.

Değer atamak için kullanılır. PHP getirdiği yazım kolaylıklarından biriside hem atama hem iĢlem

yapılabilmesidir. Örneğin:

print ( $Fiyat = 1000 ) ;

ifadesinde olduğu gibi, bir fonksiyonun içinde de hem

atama iĢlemi yapılabilir; hem de iĢlem yürütülebilir. PHP'nin aritmetik, birleĢik-atama (combined assigment),

birleĢtirme, karĢılaĢtırma ve mantıksal sınama operatörleri vardır.

Page 205: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

205

Aritmetik Operatörler:

+ Toplama 6+5 = 11

- Çıkartma 6-5 = 1 / Bölme 6/5 = 1.2

* Çarpma 6*5 = 30 % Kalan

(Modulus)

6%5 = 1

Aritmetik iĢlemleri gerçek sayılarla yaptığımız gibi,

tuttuğu değer sayı olan değiĢkenlerle de yapabiliriz.

Daha önce, PHP'de değiĢken tanımlarken ve bunlara

değer atarken sayı olan değiĢkenleri tırnak iĢareti kullanmadan, alfanümerik değiĢkenleri ise tırnak içinde

yazdığımızı hatırlayacaksınız. Bu, geleneksel hale gelmiĢ

olan bir programcılık alıĢkanlığıdır. PHP, tırnak kullanmasanız da bir değiĢkenin sayı olup olmadığını

anlar; daha sonra bu değiĢkenlerle aritmetik iĢlem yapabilir. PHP ayrıca rakamla baĢlayan alfanümerik

değiĢkenleri sayı olarak kullanmaya kalktığınızda, bu değerin baĢındaki bütün rakamları sayı olarak kabul

eder. PHP açısından harf veya iĢaretle baĢlayan alfanümerik değiĢkenlerin sayı olarak değeri sıfırdır.

Örnek:

$a = 6;

$b = "22/A"

print ($a + $b)

sonuç olarak 28'i verecektir; veya

$a = 6;

$b = "a/22"

Page 206: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

206

print ($a + $b)

sonuç olarak 6 çıkacaktır. Bu küçük örnekler, PHP ile program yazarken hangi değiĢkenin ne sonuç vermesi

gerektiğini dikkatle düĢünmek zorunda olduğunuzu göstermiĢtir sanırım. Bir kiĢinin maaĢı ile baba adını

toplamak istemezsiniz doğal olarak ama bununla birlikte elimizde bir kiĢinin adı ve soyadı ayrı değiĢkenler halinde

ise, bunları birbirine ekleyerek (concatenation) ortaya yeni bir alfanümerik değiĢken çıkartabiliriz:

<?php $ad = "Ġbrahim Halil";

$soyad = "Kutluay";

$adi_soyadi = $ad . " " . $soyad;

print ("<br>");

print ($adi_soyadi);

print ($ad . "'nın soyadı " . $soyad . "'dir.")

?>

Gördüğünüz gibi alfanümerik değiĢkenleri ekleyerek yeni bir değiĢken elde edebilmenin yanında, değiĢkenlerin

değerlerinide birbirlerinin sonuna eklememizde mümkün. Son satırdaki araya konula nokta iĢaretiyle (.) bu iĢlem

yapılmaktadır. Bu iĢlemciyle sadece değiĢkenlerin değerlerini değil sıradan metin değerlerinide birbirine

ekleyebiliriz:

Page 207: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

207

<?php print ("Ġlim Çinde bile olsa; " . "..." . "arayıp bulunuz..! ")

?>

BirleĢik Atama Operatörleri

Bu kodlama sistemi PHP diline C dilinde alınmıĢ kodlama tekniklerindendir. Normalde bir çok dilde örneğin A

değiĢkeninin değerini 10 artır denildiğinde A=A+10 Ģeklinde kodlanır. ġüphesiz bu kod PHP içindede

geçerlidir. Ancak istenirse aĢağıdaki tabloda görüldüğü gibi birleĢik-atama iĢlemide yapılabilir.

İşlem

ci

Örnek Anlamı

+= $a += 25 $a = $a + 25

-= $a -= 25 $a = $a – 25

/= $a /=25 $a = $a / 25

*= $a *= 25 $a = $a * 25

%= $a %= 25 $a = $a % 25

.= $a .=

"metin"

$a = $a"

metin"

Bu iĢlemi zihnimizde, "A değiĢkeninin mevcut değerine

25 ekle, çıkan sonucu A değiĢkenin yeni değeri yap!" Ģeklinde canlandırabiliriz.

Page 208: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

208

Bir Arttırmak veya Azaltmak için

Değerleri sadece 1 arttırmak veya azaltmak için PHP, bir

kolaylık sağlar:

$sayi++ veya ++$sayi: $sayi‘nin değerini 1

arttırır;

$sayi-- veya --$sayi: $sayi‘nin değerini 1

eksiltir.

++ veya -- iĢaretinin değiĢken adından önce veya sonra

olmasına göre artırma yada eksiltme iĢleminin önceliği değiĢir. ĠĢaretler değiĢkenin adından önce ise PHP önce

değiĢkenin değerini bir arttırır veya eksiltir, sonra bu yeni değeri iĢleme katar; iĢaretler değiĢken adından

sonra ise, PHP değiĢkenin o andaki değerini iĢleme

kadar, sonra değeri bir arttırır veya eksiltir.

Kontrol Blokları ve KarĢılatırma Operatörleri

Kontrol blokları programlama dilleri açısından olmazsa

olmaz ögelerdendir. Çünkü bir programın koĢullara uygun olara değiĢik iĢler yapabilmesi için kod

yazılabilmesini sağlarlar. PHP dilinde kontrol blokları

oluĢturmak için if ve switch kullanılır. Ancak if ve switch için olmazsa olmazĢarn aĢında karĢılaĢtırma operatörleri

gelir. ġimdi bunları görelim.

KarĢılaĢtırma Operatörleri

PHP'nin karĢılaĢtırma yapması için kullandığımız

iĢlemciler iĢlem iĢaretinin sağı ve solundaki değerleri

veya değiĢkenlerin değerlerini iĢaretin belirttiği karĢılaĢtırmayı yaptıktan (öncelik sırasına göre) sonra

ortaya ya doğru (true) ya da yanlıĢ (false) sonucunu

Page 209: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

209

çıkartırlar. Söz gelimi, değeri 26 olan değiĢkenin 25'ten

büyük olup olmadığını sınarsak, sonuç doğru; 25'ten küçük olup olmadığını sınarsak sonuç yanlıĢ çıkacaktır.

PHP'nin karĢılaĢtırma iĢlemcileri Ģunlardır:

İşlemci Örnek Örnek $a=26 ise:

== eĢitse $a == 25

YanlıĢ/False

!= eĢit değilse $a != 25 Doğru/True

=== aynı ise $a ===

25

YanlıĢ/False

> büyükse $a > 25 Doğuru/True

< küçükse $a < 25 YanlıĢ/False

<= küçükse veya

eĢitse

$a <=

25

YanlıĢ/False

>= büyükse veya

eĢitse

$a >=

25

Doğru/True

PHP'nin karĢılaĢtırma iĢlemcileri hem tam ve ondalık sayı türü değerlerle, hem de alfanümerik değerlerle

kullanılabilir. KarĢılatırma ve kontrol ifadeleri hem zaman bu kadar basit olmaz. Örneğin bir kiĢinin ehliyet

alabilmesi için hem Trafik, hem Motor hemde Ġlkyardım derslerinin tümünden 70 veya üzerinde not alması

gerektiği gibi.

Page 210: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

210

Motor 70 - Trafik 70 – Ġlkyardım 69 = kalır

(yanlıĢ/false)

Motor 79 - Trafik 80 – Ġlkyardım 90 = geçer

(doğru/true)

PHP dilinde iki veya daha fazla koĢulu birden kontrol

edeceksek araya aĢağıdaki tablodaki operatörlerden birisini koymak gerekir.

PHP'de bu karĢılaĢtırmayı iki grubun arasına koyduğumuz iĢaretlerle yaparız. Operatörlerin iĢlem önceliği kuralı

burada geçerlidir.

İşlemci Adı Anlamı Örnek

|| Veya sol veya sağ doğru

Doğru || yanlıĢ =

doğru

Or Veya sol veya sağ

doğru

Doğru ||

yanlıĢ =

doğru

&& Ve sol ve sağ

doğru

Doğru ||

yanlıĢ = yanlıĢ

And Ve sol ve sağ doğru

Doğru || yanlıĢ =

yanlıĢ

Xor ġartlı-

veya

Sadece sol

veya sağ doğru

Doğru ||

yanlıĢ =

Page 211: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

211

doğru

! Değil sol veya sağ yanlıĢ

Doğru || yanlıĢ =

doğru

Dikkatinizi çektiyse "veya" ve "ve" sınamaları için tabloda

iki operatör bulunmaktadır. Ve için (and ve &&), Veya için (or ve ||). Yukarıda operatörlerin önceliğinden

bahsetmiĢtik. Bu çiftlerin amacı önceliği değiĢtirmektir. Bu konuyu biraz açmamız gerek. PHP‘ de en yüksek

öncelik her zaman ―!‖ operatörünündür. Daha sonra ise parantez içine alınmıĢ ifadeler gelir. Çünkü öncelikle bu

iĢaretin değeri hesaplanmalıdır ki kontrol edilecek değerler ortaya çıksın. Öte yandan mantığa göre ―and‖

operatörü ―or‖ operatöründen önceliklidir. Yani bir cümlede hem ―and‖ hem ―or‖ kullanılmıĢ ise önce ―and‖

kontrol edilerek ifade iĢlenmeye baĢlanır. Bunun

önceliğini değiĢtirmek için ―or‖ yerine ―||‖ kullanılır ise bu defa ―||‖ ifadesi ―and‖ operatöründen önce kontrol

edilecektir.

Burası biraz karıĢık gibi gelsede iĢlemcinin mantığı bu yöndedir. Onun için en uygun Ģey birden fazla koĢul

olduğu zaman hangi koĢul önce iĢlenecekse o koĢulu parantez için almaktır. Parantez açma kapama sırası çok

önemlidir. O bakımdan geliĢmiĢ bir editör iĢinizi kolaylaĢtırabilir. Çünkü günümüz editörleri parantezleri

uygun sırada ayrı renklerde bile gösterebilir.

ĠĢlem Önceliği Sıralaması

1. !

Page 212: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

212

2. ++ ve --

3. / * %

4. + -

5. < <= => >

6. == === | =

7. &&

8. ||

9. = += -= /= %= .=

10. and

11. xor

12. or

if komutu

Doğadaki her Ģey sebepler – sonuçlar üzerine kuruludur.

Örneğin gök gürlüyorsa - yağmur yağacak, benzin yoksa-araba duracak gibi. Programlarda bunun gibi

koĢullara göre farklı iĢlemler yapmak üzere tasarlanırlar. Örneğin alıĢveriĢ yaptınız, aldığınız Ģey ; ekmek ise KDV

%1, temizlik maddesi ise %18, lüks tüketim ise %25, temel gıda ise %8 olarak hesaplanacaktır. Burada

program mantığıda Ģu olmalıdır.

Kontrole baĢla Eğer alınan ekmek ise KDV %1 hesapla

Eğer ekmek değilse kontrol et

temel gıda ise KDV % 8 hesapla

Eğer temel gıda değilse kontrol et

Page 213: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

213

PHP programında if deyimi bunu sağlar. Kelime anlamı

eğer olan if deyimi ile programımızı karar almaya zorlar ve bu duruma göre değiĢik kısımların yürütülmesini

sağlarız. If PHP dilinin ayrılmıĢ kelimelerinden (reserved words) birisidir. (Nerdeyse tüm dillerde if reserved word

olup karĢılaĢtırma için kullanılır)

if ( koĢullar ) { koĢullar doğru ise yapılacak iĢlere ait komutlar

} elseif (diğer koĢullar) {

diğer koĢullar doğru ise yapılacak iĢlere ait komutlar }

else { diğer her durumda yapılacak iĢlere ait komutlar

}

PHP, if ifadesinde verilen koĢulu doğru olarak hesaplarsa,

ifadeye ait ilk süslü parantezin içindeki komutları çalıĢtırır; bu Ģartlar doğru değilse, elseif deyimi ile

verebileceğimiz baĢka bir grup koĢulun doğru olup olmadığını sınayabiliriz. Bu koĢullar yerine geliyorsa,

PHP, elseif bölümündeki komutları çalıĢtırır. Eğer tüm koĢullar sağlanmadığı takdirde çalıĢtırılmasını istediğimiz

komutlar varsa onlarıda else bölümünde belirtiriz. if koĢulu doğru değilse, koĢula ait komutları es geçer ve

varsa elseif deyiminin koĢullarını test eder; elseif bölümü yok fakat else bölümü varsa bu bölümdeki komutları

çalıĢtırır. Deyimde else bölümü de yoksa, PHP koĢul sağlanmadığında if komutundan bir sonraki komuta

geçerek programı iĢletmeye devam eder.

Page 214: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

214

<?php $yasi = 10; if ( $yasi == 10 ) {

echo ("yaĢınız 10 çocuksunuz. ‖); }

elseif ($yasi == 18 { echo ("yaĢınız 18. gençsiniz");

} elseif ($yasi == 35 {

echo ("yaĢınız 35 yolun yarısındasınız"); }

else { echo ("Bu if blokunda sadece 10,18 ve 35

değerleri kontrol edilmektedir!"); }

?>

if komutundan sonra elseif yada else ifadesi kullanılacak

diye bir zorunluluk yoktur.

if ( $sifre == "" ) { echo ("Parola girmediniz.

Lütfen parola giriniz. ― }

Yukardaki if komutunda sifre değeri boĢ ise program uyarı verecek boĢ değilse hiç bir Ģey yapmadan bir

sonraki komuta geçerek devam edecektir.

$vize1 = 35;

$final1 = 75;

if ($vize1 >= 60 && $final1 >= 60) {

print ("Geçti!");

}

Page 215: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

215

else {

print ("Kaldı!");

}

if-endif Kullanımı ve PHP ile HTML Kodunu Ayırma

PHP dilinde if kullanımın baĢka bir Ģekilde if-endif Ģeklindeki kullanımdır. Bu Ģekilde bir kullanımla kod

blokları bibirinden ayrılır. Bu özellikle grup çalıĢmalarında önemlidir. Çünkü bir kiĢi HTML kodu yazarken diğer PHP

üzerinde çalıĢabilir. AĢağıdaki örneği ―ifendif.php‖ adıyla 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): ?>

Page 216: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

216

Merhaba <b><? echo ucfirst($ad) . " " . ucfirst($soyad) ?></b>,<br>

Siteye hoĢgeldiniz. </body>

</html> <? exit; ?>

<? endif; ?> <form action="ifendif.php" method="post">

<input type="hidden" name="islem" value="1"> Kendinizi tanıtın lütfen ?

<table> <tr><td>Adınız:</td><td><input type="text"

name="ad"></td></tr> <tr> <td>Soyadınız:</td><td><input type="text"

name="soyad"></td></tr> <tr><td colspan=2><input type="submit"

value="Gönder‖></td></tr>

</table> </form>

</body>

</html>

Yukarda örnekte görüldüğü gibi aynı php sayfası iĢlem

değiĢkeni tanımsız ise bir form görüntülemekte ve bu formun submit kısmında ise kod kendini yeniden

çağırmakta. Ancak form kısmında iĢlem değiĢkeni değer aldığından bu defa karĢılama mesajı görünür. Ancak exit

komutu kullanımına özellikle dikkat edilmelidir. Aksi takdirde form görüntülenecektir. Buna benzer bir

kullanımı if else ile de sağlamak tabiî ki mümkündür.

Page 217: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

217

Endif

If blokunun sonlandığını göstermektedir. Yukarıdaki örnekte kullanımı verilmiĢtir.

switch komutu

If komutunun yazılıĢa dikkat ettiyseniz elseif ve else deyimleri kullanıldığı zaman programın ardı ardına birden

çok kontrole girmesi gerekir. Bu tip iĢlemleri

hızlandırmak için PHP‘de birde switch kontrol bloku kullanımı getirilmiĢtir. Switch blokundan çıkıĢ için break

(kır) komutu kullanılır. Örnek kodu bir inceleyelim;

<?php

$Name = "Ahmet"; if ($Name == "Ali") {

print "Adınız Ali \n"; } else {

if ($Name == "Veli") { print "Adınız Veli \n"; } else {

if ($Name == "Ahmet") { print "Adınız Ahmet \n";

} else { if ($Name == "Mehmet") {

print "Adınız Mehmet \n"; } else { print "Adınızı bilmiyorum!\n";

} }

} } ?>

Page 218: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

218

Gördüğünüz gibi gerekirse isim değerini tespit için tüm

kontroller yapılmak zorundadır. ĠĢte bunu önlemek için Switch kullanılırsa hem kodumuz daha okunur hale gelir

hemde kontroller hızlanır.

switch ( değiĢken ) {

case KOġUL-1 ; KoĢul-1 doğru ise yapılacak

iĢlemler

break;

case KOġUL-2 ; KoĢul-2 doğru ise yapılacak iĢlemler

break;

case KOġUL-3 ; KoĢul-3 doğru ise yapılacak

iĢlemler

break;

case KOġUL-4 ; KoĢul-4 doğru ise yapılacak iĢlemler

break;

......................

......................

default:

diğer durumların tümünde yapılacak iĢlemler

}

break komutunu kullanmak zorunlu değildir. Ancak break kullanılmazsa koĢullardan birisi sağlanmıĢ ve iĢletilmiĢ

bile olsa PHP diğer koĢullarıda kontrol etmeye devam edecek daha da garibi varsa default blokunuda

Page 219: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

219

çalıĢtıracaktır. Bu sadece zaman israfı demek

olduğundan break komutunun kullanılması programımıza hız kazandıracaktır.

ġimdi ilk örneğimizi yeniden yazalım;

$Name = 'Ahmet; switch($Name) {

case "Ali": print "Adınız Ali \n"; break; case "Veli": print "Adınız Veli \n"; break;

case "Ahmet": print "Adınız Ahmet \n"; break; case "Mehmet": print "Adınız Mehmet \n"; break;

default: print "Adınızı bilmiyorum!\n"; }

switch ( $KDV ) {

case 1 ; echo ("ekmek <br>") ; break;

case 8 ; echo ("Temel gıda <br>") ; break;

case 18 ;echo ("genel ürünler <br>") ; break;

case 25; echo ("lüks tüketim <br>") ;break;

default: echo ("böyle bir KDV oranı tanımlanmamıĢtır <br>") ;

}

PHP bu kodu yürütürken KDV adlı değiĢkenin değerini kontrol edecektir. Değeri 1 ise ilk koĢul gerçekleĢecek ve

kodumuz ekrana ―ekmek‖ yazacak ve break ifadesini gördüğü için switch blokundan komple çıkarak swicth

blokundan sonraki ilk komutla yoluna devam edecektir.

Break komutu olmasaydır. 8,18, ve 25 olma durumlarıda

Page 220: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

220

gereksiz yere kontrol edilecek, daha sonrada hiç alakası

yokken default blokunu çalıĢtırıp ekrana ekrana birde ―böyle bir KDV oranı tanımlanmamıĢtır‖ yazıp öylece

çıkacaktı. Bu bakımdan switch kullanılırken uygun yerlerde bra komutlarının kullanılması gereklidir

diyebiliriz.

Tek KoĢula Göre Ġki Sonuç - Üçlü Operatör (Ternary Operatör)

Bir değiĢkenin değerini sadece tek bir koĢul için kontrol etmek için switch blokunu uzun uzadıya kodlamak

gerekmez. Bu iĢlemi soru ve iki nokta üstüste iĢaretleri (? ... :) olarak yazılan operatör ile yapabiliriz. Örneğin,

sayfadaki ziyaretçi parolasını girdiyse bir hoĢ geldin

mesajı girmediyse bir uyarı görüntülemek istiyoruz.

$ikaz = ($sifre == "" ) ? "Parolanızı giriniz lütfen" : "Sayfamıza hoĢgeldiniz " ;

echo ($ikaz);

Burada ikaz değiĢkeninin içeriği sifre değiĢkenine bağlı olarak atanacaktır. ġifre boĢ ise ilk kısım, değilse

teĢekkür mesajı atanacaktır. Zaten bu operatöre Ternary denmesinin sebebi üç parametre birden almasıdır. KoĢul,

doğru ise sonuç, yanlıĢ ise sonuç değerleri.

<?php $yasstr = ($yas < 18) ? 'çocuk‟ :

'yetiĢkin‟;

?>

Döngü Kavramı

Döngüler bir kod yada kod blokunun belirli Ģartlara göre

tekrar edilmesini sağlayan program parçalarıdır. ġöyle

Page 221: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

221

düĢünelim. 1 den 100 ‗ e kadar sayıların toplamını

bulmak istiyoruz. Döngüler olmasa sırasıyla sayıları yazıp toplayacaktık. Oysa döngüler ile bu iĢlemi çok daha

basit yapabiliriz. PHP dilinde iki tip döngü vardır. KoĢulun durumuna göre tekrar eden While ve belirli sayıda tekrar

eden FOR döngüleri.

For Döngüsü

Bir kod satırını yada blokunu belirli sayıda tekrar eder.

<?php

for ($i = 1; $i < 100; $i = $i + 1) {

print "Sayı $i\n";

}

?>

Yukardaki örnekte 1 ile 100 arasındaki sayılar ekrana yazdırılmaktadır. Dikat edilecek nokta ise koĢuldur. Bu

döngüle yazdırılan son sayı 99 dur.

<?php

// or dongusu iĢlemleri billi bir sayıda tekrarlar

// sayacı kendi artırıp eksilttiğinden sonsuz döngü riski

yoktur

/*for ( döngü değiĢkeni; koĢul ; artıĢ basamağı ) {

KoĢul doğru ise yapılacak iĢlere iliĢkin komutlar

} */

for ($sayac = 1; $sayac <= 7 ; $sayac++ ) {

// 1 den baĢlayarak 7 olana dek artır

Page 222: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

222

print ("<font size= $sayac >");

print ("<b><p>Milli takım gittikçe

büyüyor!</b></p>");

print ("</font>");

}

?>

Yukardaki döngüde yazının büyüklüğü döngü ile birlite

artacaktır ve 7 olunca döngü sona erecektir. For döngüsü sayıyı kendi artırdığından normal Ģartlar altında While

döngülerinde sonsuz döngü riskini barındırmaz. Ancak kullanıcı adeta sabotaj yapar gibidöngünün içinde iken

döngü sabitine çıkıĢ değerinden küçük bir değer atarsa döngü çıkıĢ değerine hiç gelemez ve sonsuz döngüye

girer. AĢağıdaki örneği deneyecek kadar gözünüz kara ise en azından önce çalıĢmalarınızı kaydedin.

<?php

for ($sayac = 1; $sayac <= 7 ; $sayac++ ) {

// 1 den baĢlayarak 7 olana dek artır

print ("<font size= $sayac >");

print ("<b>Milli takım gittikçe büyüyor!</b><br>");

print ("</font>");

// $sayac=3; // bu satır açıklama satırı

olmasaydı sonsuz döngüye girecekti.

}

?>

Page 223: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

223

While Do Döngüsü

While döngüsü for döngüsünden farklı olarak önce bir

koĢulu kontrol edecek koĢul doğru ise döngü komutlarını çalıĢtıracaktır. Örneğin ;

<?php

$sayac = 1;

while ( $sayac <= 7 ) {

print ("<font size= $sayac >");

print ("<b>Milli takım gittikçe

büyüyor!</b><br>");

print ("</font>");

$sayac ++; // bu iĢlem yapılmazsa program

sonsuz döngüye girer.

} ?>

Yukardaki gibi döngüler kodlanırken dikkat edilmesi

gereken noktalar vardır. Bunlardan en önemlisi ise koĢul bir sayaç ise artırma iĢlemin unutulmamasıdır. Örneğin

yukarda döngüde sayaç değiĢkenini artırmayı unutmuĢ olsaydık, sayaç asla 7 olamayacak ve program sonsuz

döngüye girecekti. Döngü içinde yanlıĢlıkla sayaca koĢuldan büyük değer atasaydık, program döngüden o

anda çıkacaktı.

Do While Döngüsü

Do While döngüsü While döngüsünün tersi mantıkla çalıĢır. Önce döngü blokunu çalıĢtırır daha sonra ise Ģartı

kontrol eder.

Page 224: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

224

<?php

$sayac = 1;

do {

print ("<font size= $sayac >");

print ("<b>Milli takım gittikçe

büyüyor!</b><br>");

print ("</font>");

$sayac ++; // bu iĢlem olmazsa kodumuz sonsuz döngüye girer

}

while ( $sayac <= 7 ) ;

?>

Yukardaki döngüyü incelediğinizde Ģunu göreceksiniz. Sayaç değiĢkenine ilk atanan değer 100 olsa bile döngü

1 defa çalıĢıp daha sonra duracaktır. Do While

döngüsünün çalıĢma prensibi budur. Do while döngüsünde While satırının sonunda noktalı virgül

olduğuna ―;‖ dikkat etmelisiniz. Aksi taktirde derleme hatası alırsınız.

While ve Do While döngüleri özellikle dosyalarla ve veritabanı tabloları ile iĢlem yaparken faydalıdır. Örneğin, ―oku, iĢle, dosya sonuna gelince dur‖ yada

―dosya sonu değilse, oku, iĢle‖ Ģeklinde kullanılırlar ve metin dosyalarının yada veritabanı tablolarının baĢından

sonuna iĢlem yapılacağı durumlarda iĢe yararlar.

Page 225: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

225

For .. Each Döngüsü

Bir dizi yada küme değiĢkeninin sahip olduğu indisler

boyunca döngü kurulmasını sağlar. Örneğin ;

<?php

// for each dizi elemanları boyunca tekrarlar aslında dizideki sayıyı bulup for ilede bu iĢlemi yapabiliriz

$adlar = array (

1=>"Ali",

2=>"Ömer",

3=>"Mehmet",

4=>"ihsan",

5=>"Ahmet",

6=>"Ġbrahim");

foreach ($adlar as $deger)

{echo $deger . "<br>";}

?>

Burada döngü dizinin elemanlarını sırasıyla ekrana yazacaktır. Eğer isteseydik count() fonksiyonu ile dizinin

eleman sayısını bulup bu sayı kadar çalıĢacak for döngüsü de kurabilirdik

<?php

Page 226: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

226

// for each dizi elemanları boyunca tekrarlar Ģüphesiz dizideki sayıyı bulup for ilede bu iĢelmi 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>";}

?>

Döngüyü Kırmak için Break Komutu

Bazen durumun gerektirdiği üzere döngünün çalıĢmasını kırmak gerekir. Bu durumlarda break komutu

kullanılmalıdır. Break komutunu daha önce switch blokundada incelemiĢtik. Buradaki iĢlevi ise döngünün

artık tekrarlanmadan kırılmasıdır. Döngü kırılınca, program döngünün bir sonraki satırından devam eder.

<?php

for ($sayac = 1; $sayac <= 100 ; $sayac++ ) { // 1 den baĢlayarak 7 olana dek artır

print ("<font size= $sayac >");

print ("<b><p>Fenerbahçe gittikçe

büyüyor!</b></p>");

Page 227: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

227

print ("</font>");

if ($sayac== 7){echo "sayac Ģu an 7 bu dongu

burada kırılacak"; break;}

// burada sayı 7 olunca dongu kırılacak kısaca

sayac asla 8 olamayacak

}

?>

Yukardaki döngüde döngü sayacına göre yazı büyüklüğü verilmektedir. Ancak bu HTML de maksimum 7

olduğundan 7 olduğundan döngü kırılması sağlanmıĢtır. Aslında döngüyü sadece 7 ye kadar da kurabilirdik ama

burada break komutunun iĢlevini görmek için bu Ģekilde ayarlandı.

Yine aynı Ģekilde bir döngü boyunca kullanıcıdan bilgi sorulduğunu düĢünün örneğin 200 defa. Kullanıcı sıkıldığı

anda belirli bir sayı girip döngüyü kırabilmelidir.

Döngüyü Devam Ettirme : Continue

Bazı durumlarda döngüyü kırmak yerine bir sonraki duruma geçmek gerekir. Örneğin Ģöyle bir problem

düĢünün. Sırayla notları alacağız ve notlar 100‘ den büyükse iĢlem yapmadan bir sonraki iĢleme geçeceğiz.

<?php

for ($sayi=1; $sayi <= ogrenci sayısı; $sayi++ ) {

if ( $puan >100 ) continue; // 100 den buyuk

not olmaz. Bir sonraki notu soracak

print ("$sayi,$puan");

Page 228: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

228

print ("<br>");

}

?>

Döngü Ġçinde Döngü Kullanımı

Kodlamaya dikkat edilirse döngüler birbiri içinde kullanılabilir. Dikkat edilmesi gereken konu gereksiz

iĢlemlerin döngü içine sokulmamasıdır. Ayrıca bu

döngüleri çinde Break komutunun kullanımda biraz daha detaylıdır. Break burada kullanılırsa sadece en yakındaki

göngüyü kırar.

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 görüntüsü Ģöyle olacaktır.

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 örneğe break komutunu eklersek;

Page 229: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

229

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 çıktısı Ģöyle olacaktır:

I:1,J:1,K:1 I:1,J:2,K:1

I:2,J:1,K:1 I:2,J:2,K:1

Döngü ve Kontrol Bloklarında PHP ve HTML Ġç içe Kullanım

PHP dili bizlere ekrana çıktı verme imkanı tanımıĢtır ancak bunu gereksiz yere kullanmak sadece balyozla

sinek avlamaya benzer. Örneği incelediğimizde durum daha iyi anlaĢılacaktır;

<?php if ($a == $b) { print "Devam edip giden kod satırları ";

print "Devam edip giden kod satırları "; print "Devam edip giden kod satırları ";

...[devam]... print "Devam edip giden kod satırları ";

print "Devam edip giden kod satırları "; print "Devam edip giden kod satırları ";

Page 230: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

230

}

?>

Burada yaptığımız hata Ģu; madem PHP ve HTML iç içe yazılabiliyor o halde koĢul sağlandığından çalıĢan print

komutları yerine koĢul sağlandığından PHP blokundan çıkıp HTML diline geçip ekrana yazıları öyle yazdırsak

nasıl olur ?

<?php

if ($a == $b) {

?>

Devam edip giden kod satırları

Devam edip giden kod satırları

Devam edip giden kod satırları

[….devam…..]

Devam edip giden kod satırları

Devam edip giden kod satırları

Devam edip giden kod satırları

<?php

}

?>

ġimdi hem kodumuz aynı iĢi yapıyor hem kod daha okunur halde üstelikte PHP gereksiz yere ekrana Ģunu

yazdırağım diye uğraĢmıyor.

BaĢka Bir Dosyayı Ġthal Etme

PHP dilinde kod ithalini sağlayan dört fonsiyon vardır. Bu fonksiyonlarla baĢka dosyalarda bulunan kodları o an

Page 231: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

231

çalıĢan dosyaya ekleyebiliriz. Bu fonksiyonlara bir

bakalım;

include() fonsiyonu

Adı verilen dosyayı kodun içine orada imiĢ gibi ekler ve

çalıĢtırır. Dosya yoksa sadece bir uyarı verir ve kodun geri kalanını çalıĢtırmaya devam eder. Include()

fonskyionu geriye bir değer dönderebilir.

require() fonksiyonu

require fonksiyonu iĢlev olarak include() ile temelde aynıdır yani adı verilen dosyayı kodun içine orada imiĢ

gibi ekler ve çalıĢtırır. Include() ile olan farkı ise adı verilen bu dosyanın bulunanaması durumunda görülür.

Require dosyayı bulamazsa programı ―öldürür‖. Require (kelime anlamı gerekli demektir) dosyanın olmasını ―ġart

KoĢar‖ dosya yoksa kod çalıĢtırılmaz ta ki dosya yerine konulana kadar. Require () geriye değer döndürmez.

include_Once ve require_Once

Bir liste oluĢturur ve dahil edilen dosyaların adını bu listede tutarak her dosyanın sadece bir kere dahil

edilmesine izin verirler. AĢağıda ki örneği inceleyelim

<?php

print 'Birinci dosya foo\n';

include 'iki.php';

print 'Birinci dosya bitti\n';

?>

Buda ikinci dosyanın kodu:

Page 232: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

232

<?php

print 'Kontrol ikinci dosyada \n';

?>

<?php

print 'Birinci dosya foo\n';

require 'iki.php';

print 'Birinci dosya bitti\n';

?>

<?php

print 'Birinci dosya foo\n';

include_once 'iki.php';

print 'Birinci dosya bitti\n';

?>

<?php

print 'Birinci dosya foo\n';

require_once 'iki.php';

print 'Birinci dosya bitti\n';

?>

Inclue ve Require kullanırken bu komutların iĢletim sistemine göre değiĢik davrandıklarını unutmamak

gerekir. Çünkü Unix türevi iĢletim sistemleri (Linux, Bsd,Sun solaris) Büyük-küçük harf ayrımı olan

sitemlerdir. Windows gibi davranmazlar. Örneğin

Page 233: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

233

<?php

include 'dosya.php';

include 'Dosya.php';

include 'DoSya.php';

include 'dosYa.php';

?>

Yukardaki kod Windows iĢletim sisteminde adı geçen 4 dosyayıda aynı dosya olarak ele alır çünkü harf ayrımı

yoktur. Oysa Linux bir server üstünde ise bu 4 dosyada ayrı dosyalar olarak aranacak ve bulunamazsa hata

verielcektir. Bu bakımdan altın kural dosya isimlerini her zaman küçük harf olarak kullanmaktır.

Bazen include için parametre olarak döngü değerleride

kullanılabilir. Örneğin aĢağıdaki dosyada 1 den 99‘ a kadar bir döngü ile dosyalar include () ile eklenecektir.

<?php

for ( $i = 1 ; $i <= 99 ; ++$i) {

include ("beniekle" . $i . ".x");

?>

include() ve türevlerindeki güvenlik açığı

include kullanırken dosya uzantılarına dikkat etmek gerekir. Örneğin include edilecek dosya adını adres

satırından parametre olarak geçirdiğimizi farzedelim. Dosya uzantısı da ―txt‖ olarak verilmiĢ olsun. Bu

Page 234: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

234

durumda örneğin ―ekle.php?dosyaadi=beniekle.txt‖

değeri ile iĢlem yaptığımızı farzedelim. Dikkatli bir kullanıcı adres satırına o dosya adını yazacak olursa txt

dosyanın içeriğini görür. Helede bu dosayada parola vs

bilgiler varsa tehlike çok daha büyük olabilir.

include() ile Kodun Yeniden Kullanımı

Mysql ile ilgili fonksionlar daha sonra görülecektir ancak

bu arada sadece mantığın anlaĢılması açısında bir örnek vermekte gerek var. Bir okul programı düĢünelim.

Öğretmenler kaydedilir, listelenir, silinir. Keza öğrenciler, dersler, okul bilgileri, notlar, devamsızlıklar içinde aynı

iĢlemler yaplıacaktır. Bu iĢlemler için veritabanına eriĢip

iĢlem yapılacak yüzlerce ayrı programcık gereklidir. Bu kod parçalarının her birinde en az bir defa mecburen

Mysql‘e bağlanmak, daha sonra veritabanını seçmek için gerekli kodlarda yazılmalıdır. Ġnclude olmadan tek çare

bu kodları gerekli her yerde tek tek yazmaktır. include() kullanılır ise bu kod bir kere yazılır ve her yerde çağrılır.

ġimdi Ģunu diyebilirsiniz bu sonuçta iĢletilen kod satırını düĢürmez. Bu konuda haklısınız evet include sonuçta

kodu orda imiĢ gibi alıp ilgili yere ekler. Ancak düĢünkü Ģifre değiĢti bu durumda ne olacak ? include kullanan kiĢi

sadece ilgili dosyayı açıp değiĢtirecek ve tüm değiĢikliği bitirecek, kodu here yere giren kiĢi ise tüm kodları

dolaĢıp değiĢiklikleri elle yapacak daha sonra acaba unutulan bir yer varmı diye birde kontrol edecektir. Oysa

include ile sadece bir yerde bağlantı yeniden kuruluyor

ise iĢlem bitmiĢ demektir.

Page 235: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

235

HEREDOC Nedir

Heredoc PHP içinde çok uzun metinleri zahmetsizce

yazmaya yarayan bir yetenektir. Heredoc ile uzun metinler oluĢturulabilir, kendi metin sonu etiketimizi

oluĢturabiliriz. ġu kodu inceleyelim;

<?php $metin = <<<son

Burada biraz PHP içinde metin örneği var. Bu alanda tamamen özgürüz

bu alanda ―çift tırnak‖ yada ‗tek tırnak2 kullanmaktada özgürüz

Artı $degiskenler gibi kullanımda cabası

Bu değiĢkenler iĢlem sırasında içerdikleri değeri alacaklardır,

son kelimesini istediğiniz yere yazabilirsiniz. ġu anda sonladırma etiketi o

ancak aĢağıdaki gibi değil: son;

?>

Page 236: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

236

Fonksiyon Kavramı ve Kategorilere Göre PHP Fonksiyonları

Fonksiyonlar bir kod blokunu otomatik olarak yazmak üzere tasarlanmıĢ program parçacıklardır. Bir dilin

fonksiyon sayısının fazla olması yanında bunların iyi organize edilmiĢ olmasıda önemlidir. Programlama

dillerinde normalde fonksiyonlar derleyici içine kodlanmıĢ olurdu.

Ġlk olarak PASCAL dili ile bir yenilik geldi. Dilin sadece sintaks yapısını tanımlayıp fonksiyonları harici

kütüphanelerden kullanmak. Böylece dillerin komut setlerini geniletme olanağı getirilmiĢ oldu. Örneğin dilin

kendisinde olmayan bir fonksiyonu kendiniz yazıp bunu

PHP nin içinde hep varmıĢ gibi kullanabiliriz.

Çağrılan bir fonksiyon ya kendisinden beklenen iĢi yapar,

ya da kendisini çağıran iĢleme veya fonksiyona bir değer sunar. Buna fonksiyondan dönen değer denir. Örneğin

bir dosyanın var olup olmadını test eden bir fonksiyon yazdığımızı düĢünelim, dönen sonuç TRUE ise dosyanın

zaten var olduğunu gösterecek Ģekilde kodlayabiliriz. False ise dosya yok anlamına gelecektir. (iĢin aslı bu

fonksiyonu yazmamıza gerek yoktur çünkü PHP dilinde bu iĢi yapan hazır bir fonksiyon zaten vardır).

Fonksiyonları çeĢitli baĢlıklarda ele alacağız.

DeğiĢkenlerle iĢlem yapan fonksiyonlar

Program kodunu durduruma fonksiyonları

Tarih Zaman bilgisiyle iĢlem yapan fonksiyonlar

Matematiksel fonksiyonlar

Page 237: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

237

Metin ĠĢleme fonksiyonları

Veri ġifreleme fonksiyonları

Düzenli Ġfade (Regular expressions) fonksiyonları

Uzantı yönetimi

Kendi fonksiyonlarımızı yazmak

Kendisini çağıran, değiĢken, ve geri çağırımlı fonksiyonlar

DeğiĢkenlerle ĠĢlem Yapan Fonksiyonlar

PHP dilinde değiĢkenler istenildiği anda tanımlanabilmektedir. Öte yanda PHP dilinin büyük küçük

harf ayrımı yapmasada değiĢken tanımlanırken dikkatli olunmasını gerektirir. Yine aynı Ģekilde eğer çok büyük

dizilerle çalıĢıyorsak bu dizilerin iĢi bitince hafızadan

atılması gerekir ki web sunucu hafıza boĢ yere dolup hızı düĢmesin.

isset() fonksiyonu (değiĢkene değer atanmıĢ mı kontrol etmek)

isset() fonksiyonu, PHP'nin bir değiĢkenin içinde değer bulunup bulunmadığını kontrol etmesini sağlar. Eğer geri

dönen değer true ise bu değiĢkene bir değer atanmıĢ demektir.

<?php

if (isset($sayi)) {

print( $sayi );

}

Page 238: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

238

else {

print (―sayi degiskeni bir değer içermiyor‖);

}

?>

unset() fonksiyonu (değiĢkeni hafızadan atmak-yok etmek)

unset() fonksiyonu varolan bir değiĢkeni yok eder.

Böylece bu değiĢkenin kullandığı alan boĢ hafıza miktarına eklenir. Ġyi bir programlamada unset() ile

değiĢkenler yok edilmelidir. Çünkü bu web sunucuya büyük rahatlık getirecektir.

<?php

if (isset($sayi)) {

echo ( $sayi );

}

else {

unset($sayi);

}

?>

empty() (DeğiĢken boĢmu)

Bu fonksiyon isset() fonksiyonunun tersidir. AĢağıdaki Ģartlar oluĢursa true değer dönderir aksi tatirde ise false

sonuç üretmektedir.

Bir değiĢkene henüz değer atanmamıĢsa

Page 239: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

239

Değeri sıfır ise

DeğiĢken ―‖ yani boĢ alfanümerik (null string) ise

empty() fonksiyonu true sonuç üretmektedir.

<?

$sayi = 10;

echo empty($sayi); // 0 azacak sayı boĢ değil 10

$isim = ""; // 1 yazacak isim boĢ

echo empty($isim);

?>

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

Parametreleri olan değiĢkenin tipine göre true yada false sonuç dönderirler. is_string string tipi, is_integer()

tamsayılar ve is_double fonksiyonuda ondalıklı sayılar

için true değer üretir.

<?php

$a = 3.14;

//$a = ―Ali‖; // burası Ģimdilik yorum satırı

//$a = 14; // burası Ģimdilik yorum satırı

if (is_double($a)) {

print ("A ondalıklı sayıdır<br>");

}

Page 240: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

240

if (is_string ($a)) {

print ("A String'dir<br>");

}

if (is_integer($a)) {

print ("A tamsayıdır<br>");

}

?>

Bu kod, tarayıcı penceresine değiĢkeni tipine göre ilgili print ile tanımlanan metni yazdıracaktır. Bu program

parçası Browser penceresine sadece empty() fonksiyonun doğru sonuç verdiği birinci echo() deyiminde

1 yazdıracaktır.

is_array() ve is_object fonksiyonları ise sırasıyla değiĢkenin tipi dizi yada nesne ise true değer üretirler.

Burada bu konu hakkında detaya girilmeyecektir.

Bu fonksiyonları tümü ilerde göreceğimiz Kullanıcı

Verilerini Doğrulama konusunda iĢe yarayacaktır.

Örneğin kullanıcıya maaĢını soran bir kutucuğa kullanıcı ―bin ytl‖ yazarsa, doru yazması konusunda uyarılarda

bulunmak üzere yapaılacak kontrollerde bu

fonksiyonlardan yararlanılacaktır.

print_r () fonksiyonu

Bu fonksiyon parametre olarak aldığı değiĢken ve içeriği hakkında bilgi verir. Bu değiĢken bir dizi ise dizinin

elemanlarıda buna dahildir.

Page 241: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

241

<?php

$abc=456;

print_r($abc);

?>

Bu fonksiyon diziler konusunda daha detaylı

örneklenecektir.

DeğiĢken Tiplerini DönüĢtürme ve DeğiĢken Tipini Öğrenme

PHP dili ile bir değiĢkenin değerini referans alarak baĢka

tipte yeni bir değiĢken tanımlamak mümkündür. Bir değiĢkenin doğrudan doğruya kendisinin tipini değiĢtirme

iĢlemi ise settype fonksiyonu yapılır. Settype sonraki konularda incelenecektir. AĢağıdaki kod ile type-casting

iĢlemi yapılarak yeni bir değiĢken tanımlanmıĢtır.

<?php

$ad = "Ġbrahim";

$sayi = (integer)$ad;

echo $sayi;

?>

Önce bir string değiĢken tanımlanmıĢ daha sonra ise bu

değiĢken referans alınarak sayi adında tamsayı bir değiĢken dönüĢümü yapılmıĢtır. Burada dönüĢüm

ifadeleri olarak

DeğiĢkenin tipinin mantıksal olması için BOOL

DeğiĢkenin tipinin alfanümerik olması için STRING

Page 242: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

242

DeğiĢkenin tipinin tamsayı olması için INTEGER

DeğiĢkenin tipinin ondalıklı sayı olması için FLOAT ifadeleri kullanılabilir.

Metin değiĢkenleri çevirirken çok dikkat etmek gereklidir.

Metin ifadeler sayıya çevirilirken baĢında sayı varsa bunlar alınır, geri kalanlar yoksayılır. Eğer değiĢken sayı

ile baĢlamıyor ise çevrim sonucu 0 kabul edilir. Örneğin yukardaki örnek kod 0 değerini verecektir.

gettype() fonksiyonu (DeğiĢken tipini alma)

Bir değiĢkenin değerinin türü hakkında bilgi almak için bu

fonksiyon kullanılabilir.

<?php

$sayi1 = 101;

print("Birinci değiĢkenin adı: \$sayi1<br>");

print("Değeri : "); print "$sayi1<br>";

print("Türü : "); print gettype( $sayi1 ) ;

//tamsayi/integer

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

$str1k = "Tuncay";

print "Ġkinci değiĢkenin adı: \$str1<br>";

print "Değeri : "; print "$str1<br>";

print("Türü : "); print gettype( $str1 ) ;

//alfanümerik/string

Page 243: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

243

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

$pi = 3,14;

print "Üçüncü değiĢkenin adı: \$pi<br>";

print "Değeri : "; print "$pi<br>";

print("Türü : "); print gettype( $pi ) ;

//çift,ondalık sayı/double

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

$logical = true;

print "Üçüncü değiĢkenin adı: \$logical<br>";

print "Değeri : "; print "$logical<br>";

print("Türü : "); print gettype( $logical ) ; //mantıksal/boolean

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

?>

PHP için mantıksal olarak doğru anlamına gelen True Değeri 1 olarak varsayılmaktadır. PHP'de bir fonksiyon,

elde ettiği değer doğru ise sonuç olarak 1 değerini verir.

settype() fonksiyonu (değiĢekene bir tip atama)

Bu fonksiyon bir değiĢkenin kendisinin tipini değiĢtirmeye imkan verir. Ancak dönüĢüm iĢlemi istemeyen

sonuçlarda üretebilir. Bu bakımdan değiĢkenlerin değerlerine dikkat etmek gerekir.

Page 244: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

244

<?php

$pi = 3.14;

print("DeğiĢkenin değeri : "); print "$pi<br>";

print("Türü : "); print gettype( $pi ) ; //çift,ondalık/double

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

print "değiĢtirme iĢlemi:<br>";

settype( $pi, string ); //alfanümerik/string

print "Değeri : "; print "$pi<br>";

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

?>

Bu programı çalıĢtırdığımızda, ilk atadığımız değerin ondalık bir sayıdır. Bu değerin türünü alfanümerik/string

olarak değiĢtirdiğimizde içeriğim korunduğunu

görüyoruz. Fakat tamsayıya döndürme iĢlemi yapılsaydı PHP değerin tamsayı bölümünü alıp, ondalıklı kısmını

atacaktır. Daha sonra bu tamsayı değiken yeniden ondalıklı sayıya çevrilese bile bu ondalık kısmı ilk

değeriyle elde etmek mümkün değildir. Mantıksala dönüĢüm yapılır ise içeriği 0 olmayan tüm değerler True

olarak geri döner. 0 olanlar içinse False değerini verir.

Ondalık sayılar tamsayıya çevrilirken ondalık kısmı

atılır (3.14 –>3)

Page 245: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

245

Tamsayılar ondalık sayıya çevrilirken .00 ondalık

eki getirilir. (3->3.00)

Bir ondalıklı sayı tamsayıya çevrildikten sonra

tekrar ondalıklı sayıya çevrilse bile ilk ondalıklı kısım geri getirilemez

Boolean tipe çevrilen ve 0 ve null dıĢında bir değer içeren tüm değerler true olarak dönerler.

<?

$dene=‖selam‖;

$bul=true;

$son=2000;

echo gettype($dene);//tip öğrenme iĢlemi, ekrana string

yazacaktır

settype($bul,string);//tip değiĢtirme iĢlemi, tipi stringe

cevirir

echo gettype($bul);//ekrana string yazacaktır

$tampon=(integer) $dene;//tip kopyalama iĢlemi tipi

integer‘e çevirir.

echo $dene;//ekrana 0 yazacaktır.

?>

Dizilerle ĠĢlem Yapan Fonksiyonlar

Php dilinde dizilerle iĢlem yapmak üzere geliĢtirilmiĢ bir

çok fonksion hazır gelmektedir. Bu fonksiyonlarla dizileri birleĢtirmek, sıralamak veya bazı elemanlarını silmek

mümkündür.

Page 246: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

246

array_merge() fonksiyonu- (Dizileri birleĢtirme)

Ġki veya daha fazla dizinin bütün elemanlarını

birleĢtirerek, ortaya yeni bir dizi çıkartır. array_merge() iĢleminde en çok dikkat edilmesi gereken nokta

birleĢtirilen dizilerin değiĢmeden korunmuĢ olmasıdır. Örnek:

<?

$dizi1 = array ("A" , "B" , "C" , "D");

$dizi2 = array ("E" , "F" , "G" , "H");

$dizison = array_merge ( $dizi1, $dizi2);

// döngü içinde yeni diziyi yazdıralım

foreach ( $dizison as $eleman2 )

{

print (" $eleman2 <br>");

}

?>

Ġkinci dizinin bütün elemanları, birinci dizinin

elemanlarının arkasına eklenmiĢtir. array_merge() iĢlemi, çok-boyutlu iliĢkili dizilere de uygulanabilir; PHP

iki dizideki uyumlu-uyumsuz, yani birinde olan diğerinde olmayan bütün anahtar+değer çiftlerini yeni dizide de

oluĢtur.

array_push() fonksiyonu–(Dizilere değiĢken ekleme)

Bir diziye yeni değiĢkenler eklemek için, array_push() fonksiyonuna eklemenin yapılacağı dizinin adını ve yeni

değerleri yazarız. Örnek:

Page 247: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

247

<?

$dizi1 = array ("A" , "B" , "C" , "D");

$dizison = array_push($dizi1, "E", "F", "G");

// döngü içinde yeni diziyi yazdıralım

foreach ( $dizi1 as $eleman2 )

{

print (" $eleman2 <br>");

}

?>

array_shift() fonksiyonu–(Dizinin ilk elemanını silme)

Dizi tipine sahip bir değiĢkenin ilk elemanını tümüyle

silmek için array_shift() fonksiyonu kullanılır. Bu fonksiyona sadece birinci elemanı silinecek dizinin adını

vermek yeterlidir.

$silinen_deger = array_shift ($diziadi);

array_slice() fonksiyonu – (Diziden kopyalama)

Bir dizi-değiĢkenin bütün elemanları yerine belirli bir bloğunu kullanmak gerekirse bunu array_slice()

fonksiyonu ile almak mümkündür. Bu fonksiyona kaynak dizinin adı, kopyalamanın baĢladığı yer ve kaç adet

değiĢken alınacağı argüman olarak verilir.

<?

$dizi = array ( "A" , "B" , "C" , "D", "E" , "F" , "G" , "H");

$kopya = array_slice ($dizi , 2, 4);

Page 248: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

248

?>

Burada, PHP'ye $kopya adlı yeni oluĢturulacak dizi tipli değiĢkene, $dizi adlı dizinin 2‘nci değerinden itibaren (2

dahil) 4 değeri alıp yerleĢtirmesi bildirilmektedir. Orijinal dizi aynen korunmaktadır. Elemanlar yeni yeni

oluĢturulan diziye kopyalanmaktadır

sort() ve rsort() fonksiyonları-(Dizileri sıralama)

Bir dizinin içindeki değerleri sıralamak için sort() fonksiyonu kullanılır. Bu fonksiyon küçükten büyüğe

sıralama yapar. Bunu tersine çevirmek içinse rsort() fonksiyonu (reverse yada revert) kullanılır.

Sıralama iĢleminde dikkat edilecek konu bu fonksiyonların Türkçe uyumlu sıralama yapmamasıdır.

Ayrıca sıralanacak diziler birden fazla boyutlu ise bu

fonksiyonlar doğru sonuç vermez. Bunların yerine asort() ve ksort () kullanılır.

asort() ve ksort() fonksiyonları-(ĠliĢkili dizileri sıralama)

Bu dizilerin normal dizilerden farkı değerlerinin birde adı

olmasıdır. Değerlerin adına anahtar (key- ksort fonksiyonun adındaki k harfi buradan gelmektedir)

denir. Bu tip bir diziyi elemanların değerlerine göre sıralamak için asort(), değerlerin anahtar adlarına göre

sıralanması isteirse ksort() kullanılır.

<?

$dizi=array(a1=>"Ali", a2=>"AyĢe" , a3=>"BüĢra" ,

a4=>"Betül");

asort ($dizi);

Page 249: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

249

$dizi2=array(a1=>"Ali", a2=>"AyĢe" , a3=>"BüĢra" ,a4=>"Betül");

ksort ($dizi2);

?>

Program Durdurma Fonksiyonları

exit() fonksiyonu (kodun çalıĢmasını durdurmak)

Bir PHP fonksiyonunu istediğimiz anda durdurabiliriz. Ancak genelde bu iĢlem belirli koĢulların sağlanması

durumunda yapılır. Kodun bir kontrolün sonucuna göre kendisinden beklenen iĢi yapamaması halinde oracıkta

durdurulmasını exit() fonksiyonu sağlar. Bu fonksiyona ekranda görüntülenmesini istediğimiz bir metni

parametre olarak verebiliriz. Eğer bu ifade bir metinse ekrana basılır.

die() fonksiyonu (kodun çalıĢmasını durdurmak)

Bu fonksiyon teknik anlamda exit fonksiyonu için bir alias

olduğundan iĢlevleri aynıdır. "Öl!" anlamına gelen bu fonksiyona ekranda görüntülenmesini istediğimiz bir

metni parametre olarak verebiliriz. Eğer bu ifade bir metinse ekrana basılır.

eval() fonksiyonu (kodun çalıĢmasını durdurmak)

Bu fonksiyonda ilk ikisine benzer. Ancak aldığı parametre PHP kodu ise bu php kodunu çalıĢtırır.

Page 250: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

250

Bu fonksiyonlar genel itibarı ile önemli durumlarda

kurulacaktır. Örneğin bir MYSQL veritabanına bağlantı kurulmadığında buradaki bir tablodaki kayıtları

listeleyemeyiz. Bu durumda die(‗Mysql bağlantısı kurulamadı‘) fonksiyonun tabiî ki kullanacağız ancak

Ģimdilik kafa karıĢıklığı olmasın diye basit kullanım örneği görmek daha mantıklı olacaktır. Örneğin aĢağıdaki kod

bir dosyayı açmaya çalıĢıyor ancak dosya açılında bir sorun varsa kod deyim yerindeyse intihar ediyor. Dosya

açma fonksiyonu ilerde görülecektir. Ancak önemli olan die() fonksiyonunun kullanım Ģeklidir.

<?php

$dosyaadi = fopen( "benimdosyam.txt" , 'a' ) or die ("Dosya açılırken bir sorun oluĢtu!") ;

?

Tarih ve Zamanla ĠĢlem Yapma

PHP dili tarih zaman bilgilerini Unix EPOCH formatında

kullanır. Bu formata göre 1.1.1970 den beri geçen her saniye için bir rakamsal karĢılık vardır. Buna Unix

Timestamp‘te denilir. Bunun avantajları ve dezavantajları vardır.

Avantajları

Tarih formatını merak etmeye gerek yoktur.

Örneğin 01.12.1970 yada 19701201 yada Aralık 12 1970 yazılması durumunu merak etmeye gerek

yoktur.

Tarih zamanlarla milisaniye bazında iĢlem

yapabiliriz.

Page 251: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

251

Bir gün 24*60*60 saniye olduğundan 86400

sayısına eĢittir. Yani yarının tarihi için time ile gelen sayıya bu sayıyı eklemek yeterlidir.

Dezavantajı

BaĢlangıcı 1970 tir.

PHP, ile tarih zaman verilerinin iĢlenmesi gayet kolaydır.

Gelen bilgi tarayıcının olduğu değil web sunucunun tarih zaman bilgisidir.

time() fonksiyonu (Ģu anki zaman bilgisini alma)

Time fonksiyonu parametre almaz ve epoch formatında

Ģu anki zaman bilgisini saniye olarak verir. Bu bilgiyi

ister olduğu gibi ekrana basabiliriz, istersek bir değiĢkene alıp iĢlemlere tabi tutabiliriz.

<?php

print time();

$zaman = time();

print $zaman;

?>

Yukardaki kodu çalıĢtığında ekrana

11843764951184376495 gibi bir sayı basacaktır. Bu sayı çalıĢtığı bilgisayarın zamanına göre değiĢecektir.

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

Microtime Time fonksiyonu true parametresi alırsa zaman bilgisini milisaniye cinsinden verir. Bu

fonksiyonun dönüĢ değerinin ondalıklı sayı olduğuna dikkat edilmelidir. Bu bilgiyi ister olduğu gibi ekrana

Page 252: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

252

basabiliriz, istersek bir değiĢkene alıp iĢlemlere tabi

tutabiliriz.

<?php

print microtime(true);

?>

strtotime() fonksiyonu (Metni zaman bilgisine çevirme)

Strtotime fonksiyonu parametre olarak verilen metni

zaman bilgisine çevirir… Örneklerde Ġngilizce kullandıldı

çünkü PHP ayarlarının Türkçe destekleyip desteklemediği konusunda bilgimiz olmadığını varsayıyorum. Ġlerde

bununla baĢ etmeyide göreceğiz.

<?php

print strtotime("12th January 1979")

.”<br>”;

print strtotime("01 January 2007 17:30")

.”<br>”;

print strtotime("2007/12/22") .”<br>”;

?>

date () fonksiyonu (tarih zaman bilgisini metne çevirme)

Yukarda gördüğümüz gbi epoch kullanıĢlı bir formattır

ancak son kullanıcı için bu çok bir anlam ifade etme. Çünkü kullanıcı her Ģeyi alıĢtığı gibi isteyecektir. Tarihide

tarih gib görmek ister milisaniye cinsinden bir sayı değil. Bu fonksiyon iki parametre alır ve ikinci parametre

zorunlu değildir. Birinci parametre tarihi çevirmekte kullanacağımız format, ikincisi çevrilmesini istediğimiz

değerdir. Birinci parametre için PHP dilinde tanımlı 31 mümkün değer vardır. Bunlardan istediğimizi seçebiliriz.

Page 253: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

253

Bunların listesi aĢağıdadır ancak bu değerlerin büyük

küçük harf ayrımı yaptığına çok dikkat edilmelidir.

A 12 saatlik Anglo-Sakson

sistemlerinde öğleden önce ("am") veya öğleden sonra

("pm") iĢaretinin verilmesini sağlar.

am-pm

A a ile aynıdır ancak sonucu

büyük harfle yazdırılmasını sağlar.

AM-PM

d Ġki haneli gün sayısı, tek haneli günlerin önüne sıfır

konur

"01" - "31"

D Üç haneli gün adı kısatması "Sal"

F Uzun ay adı "Temmuz"

h 12 saatlik sistemde saat

(tek haneli sayıların önüne sıfır konulur)

01 - 12

H 24 saatlik sistemde saat (tek haneli sayıların önüne

sıfır konulur)

00 – 23

g 12 saatlik sistemde tek haneli saatlerin önüne sıfır

konmadan saat

1 – 12

Page 254: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

254

G 24 saatlik sistemde tek

haneli saatlerin önüne sıfır konmadan saat

0 – 23

i Dakika 00 – 59

j Tek haneli sayıların önüne sıfır konmadan gün sayısı

1 – 31

l Uzun gün adı (küçük L harfi)

Cuma

L Artık yıl olup olmadığına

iliĢkin Boolean (doğru/yanlıĢ) değiĢken.

Artık yıl ise 1, değilse 0.

1,0

m Tek hanelilerin önüne sıfır

konarak ay sıra numarası

01 – 12

n Tek hanelilerin önüne sıfır konmadan ay sıra numarası

1 – 12

M KısaltılmıĢ ay adı Ock

s Saniye 00 – 59

S Ġngilizce ('ncı anlamına) 2

karakter ek (Türkçe‘dei 2. deki nokta gibi)

th, nd

t Belirtilen ayın gün sayısı 28 – 31

Page 255: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

255

w Haftanın gün sayısı. Ġlk

günün Pazar yada Pazartesi olması yerel ayarlardan

alınır

0-6

Y Yıl bilgisi dört haneli 2007

y Ġki haneli yıl 07

z Yılın gün sayısı (Artık yıllarıda düĢünerek)

0 - 365

B Swatch internet zamanı 0-999

C ISO 8601 tarih zaman bölge ayarı

2007-06-18T09:26:55+01:00

I Yaz saati uygulaması varmı 1 var 0 yok

O GMT diliminden farkı 200

R RFC-822 biçiminde tarih Sat, 12 Jan 1979

17:30 +0000

T Sunucu için bölge alanı GMT,CET,EST

U Unix zaman pulu 1056150335

W ISO-8601 formatında

haftanın numarası

1-52

Z Bölge ayarı ofseti saniye

cinsinden

-43200 to 43200

Page 256: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

256

<?php

print date("H:i") . "<br>";

print "dünün tarihi " . date("l", time() - 86400) .

"<br>";

print "Bu yıl" . date("Y") . "<br>";

print date("jS / F Y") . "<br>";

print "Doğum günüm " . date("l", strtotime("01 Apr

1974")) . "<br>";

print (date ("l, d F Y g:i:s")) . "<br>";

?>

Ġlk örnek en çok bilinen formattır. 24 saatlik saat biçimi.

mktime() fonksiyonu (sayılardan tarihi oluĢturma)

mktime ( [saat [, dakika [, saniye [,ay [, gün [, yıl [,

yazsaati]]]]]]]) formatında kullanılan bu fonksiyon kendisine verilen parametrelerden tarih zaman bilgisini

oluĢturur.

<?php

$zamanpulu = mktime(22, 30, 0, 6, 20, 2007, -1);

?>

Örneğin bir banka için kod yazdığımızı varsayalım. MüĢteri 3 ay vadeli bir hesap açtırmayı talep ederse 90

gün sonrasının tarihini bulmak gerekecektir. Bunu elle saymak yerine Mktime ile kendimiz hesaplayabiliriz.

Page 257: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

257

<?php

mktime(0,0,0,date("m"),date("d")+90, date("Y")) ;

?>

checkdate() fonksiyonu-Tarih geçerli mi

PHP dili, devrik yılları fark etmek ve yanlıĢ tarihleri düzeltmek için otomatik denetleme mekanizmasına

sahiptir. checkdate() fonksiyonu, bilginin geçerli bir tarih olup olmadığını, girilen ay, gün ve yıl cinsinden denetler.

if (checkdate (2, 29, 2008) >0)

{

echo ("Tarih geçerli");

}

else

{

echo ("Tarih GEÇERSĠZ");

}

programcığı 2-29-2008 tarihinin doğruluğunu kontrol eder.

setlocale() fonksiyonu (bölgesel ayarlar)

PHP sunucuda gerekli bölgesel ayarlar yapılmıĢ ise

sunucunun değil arzu ettiğimiz bölgenin tarih zaman bilgisini verebilir.

Page 258: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

258

<?php

setlocale (LC_TIME, "tr_TR");

print (strftime ("Bugün günlerden: %A "));

?>

Bu kod çalıĢtırıldığında gün adı, Monday,Sunday gibi

Ġngilizce olarak geliyorsa, sunucuda Türkçe için bölgesel ayar desteği yok demektir! Bu durumda aĢaıdaki örnek

kod her türlü koĢulda iĢe yarayacaktır.

Tarih Bilgilerini Türkçe Yazdırmak

<? //tarihyaz.php $gun[0] = "Pazar";

$gun[1] = "Pazartesi"; $gun[2] = "Salı";

$gun[3] = "ÇarĢamba";

$gun[4] = "PerĢembe"; $gun[5] = "Cuma";

$gun[6] = "Cumartesi"; $ay[1] = "Ocak";

$ay[2] = "ġubat"; $ay[3] = "Mart";

$ay[4] = "Nisan"; $ay[5] = "Mayıs";

$ay[6] = "Haziran"; $ay[7] = "Temmuz";

$ay[8] = "Ağustos"; $ay[9] == "Eylül";

$ay[10] = "Ekim"; $ay[11] = "Kasım";

echo date("m")." ".$ay[date("n")]." "

Page 259: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

259

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

?>

getdate() fonksiyonu (tarih zaman bilgisini alma)

PHP dilinde zaman ve tarih belirleme iĢleminde en çok getdate() fonksiyonu kullanılır. getdate() fonksiyonu

tarih ve saat bilgisini alır ve belirteceğiniz bir isimdeki dizi-değiĢkende saklar. Dizi değiĢkeninde sırasıyla Ģu

bilgiler yer alır:

10 saniye

45 dakika

5 saat

10 ayın gün sayısı (1-31)

1 haftanın gün sayısı (1-7)

1 ayın sayısı (1-12)

2007 yıl

10 yılın kaçıncı günü

Wednesday günün adı

January ayın adı

1183046641 Unix sistemlerinde Epoch biçiminde zaman bilgisi

$simdi = getdate()

Page 260: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

260

Matematiksel ĠĢlemlerde Kullanılan Fonksiyonlar Ve ĠĢlevleri

ceil() fonksiyonu (yukarı yuvarlama)

Parametre olarak verilen sayıyı en yakın tamsayıya yuvarlar.

floor() fonksiyonu (aĢağı yuvarlama)

Parametre olarak verilen sayıyı en yakın ve kendisinden

küçük tamsayıya yuvarlar. Bu iĢlem aslında type-casting ile aynıdır ancak type casting daha hızlıdır. Kısaca ceil()

sayının ondalık kısmını atar.

round () fonksiyonu (matematiksel yuvarlama)

round() fonksiyonu verilen parametredeki değiĢkeni

matematiksel kurallara göre yuvarlar. Sayının ondalık kısmı 5 veya üstü ise yukarı, 0 ile 5 arasında ise aĢağı

yuvarlama yapılır. round() iki parametre alır. Birinci parametre iĢlem yapılacak değiĢken, ikincisi ise

yuvarlanacak ondalık hane sayısını gösterir.

Örnek kod;

<?php

$deger = 4.8;

$ceille = ceil($deger); //5

$floorla = floor($deger); //4

$a = round(4.9); // 5

$b = round(4.5); // 5

$c = round(4.4999); // 4

$d = round(4.123456, 3); // 4.123

$e = round(4.12345, 4); // 4.1235

Page 261: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

261

$f = round(250 / 40); // 6

?>

Örnek kodu en son satırına dikkat edersek eğer yuvarlama fonksiyonlarının dikkatli kullanılması

gerektiğini görürür. ġimdi düĢünelim nakletmemiz gereken 250 tane koyunumuz var ve bunları vagonla

nakledeceğiz. Her vagon maksimum 40 koyun alıyor. ġimdi kaç vagon gerektiğini bulmak için round()

kullandığımızda en son satırdaki kod bize 6.25 sayısını yuvarlayıp, 6 değerini verecek. 6 vagonda bize en fazla

240 koyun nakletme Ģansı verecek. Peki kalan 10 koyun ne olacak ? Oysa round() yerine ceil() kullanmıĢ olsaydık

bu bize 6 değil 7 sayısını verecekti. Kısaca yuvarlama fonksiyonlarının her biri kendi açısından kullanıĢlıdır ve

yerinde kullanılmalıdır.

rand() fonksiyonu (rastgele sayı üretme)

Bu fonksiyon verilen iki paremetre arasında rastgele bir sayı üretir.

mt_rand() fonksiyonu (rastgele sayı üretme)

Bu fonksiyonda verilen iki paremetre arasında rastgele

bir sayı üretir. Aralarındaki fark ise rand gerçekten temel anlamda kodlanmıĢ bir fonksiyondur ve ürettiği değerler

tahmine daha yakındır. mt_rand() ise Mersenne twister kelimelerinden gelir ve özel bir randomize algoritması

kullanıldığını belirtir. Buradaki üretilen sayı rand fonksiyonuna göre ―daha rastgele‖ tabiri caizse daha

Page 262: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

262

kuvvetli sallanmıĢ bir sayıdır. Tabii bu fonksiyon hız

olarak biraz daha düĢük iĢlem yapmaktadır.

<?php

$rastgele = rand();

$randsiniri = rand(1,10);

$mtrandsiniri = mt_rand(1,100);

?>

ġimdi rand() fonksiyonu ile ziyaretçilerimizi rastgele

Ģekillerde selamlayacak bir kod yazalım.

<?php

switch(rand(1,6)) {

case 1: $slm = 'Hello!'; break;

case 2: $slm = 'Bonjour!'; break;

case 3: $slm = 'Merhaba!'; break;

case 4: $slm = 'Ne haber!'; break;

case 5: $slm = 'Ġyi günler!'; break;

case 6: $slm = 'Nasıl gidiyor!'; break;

}

print $slm;

?>

srand() ve mt_srand() fonksiyonları (ilk sayıyı vererek rastgele sayı üretmek)

Bu fonksiyonlar verilen parametreye göre ilk sayıyı

üretirler, bu saydan ikinciyi, ikincidende üçüncüyü üretirler. Kısaca aslında aynı referanslar verilecek olursa

elde edilecek sonuçta aynı olacaktır. Tabii buna ne kadar rastgele iĢlem denir o da ayrı bir konu.

Page 263: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

263

<?php

mt_srand(123456);

echo mt_rand(1, 100), "\n";

echo mt_rand(1, 100), "\n";

echo mt_rand(1, 100), "\n";

?>

getrandmax() ve mt_getrandmax() fonksiyonları (Üretilebilecek en yüksek sayı)

Bu iki fonksiyon ile rand ve mt_rand fonksiyonlarından geriye dönebilecek ne yüksek sayı bulunur.

abs() fonksiyonu (mutlak değer)

Verilen sayının mutlak değerini dönderir. Mutlak değer

sayının sıfıra uzaklığıdır. Örneğin mutlak -50 değeri

mutlak 40‘dan büyüktür çünkü sıfır değerinden daha uzaktadır.

sqrt() fonksiyonu (karekök alma)

Bir sayının karekök değerini verir. Bu fonksiyon oldukça

yavaĢ çalıĢtığından döngü içinde vs kullanırken dikkatli olunmalıdır.

pow() fonksiyonu (üs alma)

Bu fonksiyon iki parametre alır. Birincisi hesaplanacak

değer, ikincisi ise üs sayısıdır. Pow(10,2) demek 10‘ un 2. üssünü hesapla demektir.

Page 264: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

264

hypot() fonksiyonu (hipotenüs hesaplama)

Bu fonsiyon iki parametre alır ve bu iki sayının kareleri toplamının karekökünü alır. Matematikteki Pisagor

teoreminin çözümüdür.

<?php

abs(50); //50

abs(-12); //12

abs(50.1); //50.1

abs(-12.5); // 12.5

print sqrt(25); // 5

print sqrt(26); // 5.0990195135928

print pow(10,2); // 100

print pow(10,3); // 1000

print pow(10,4); // 10000

print pow(-10, 4); // 10000

print hypot(3, 4); // 5

?>

log() fonksiyonu (logaritma)

e tabanına göre logaritma alır.

log10() fonksiyonu (logaritma)

10 tabanına göre logaritma alır.

base_convert() fonksyionu (sayının tabanını değiĢtirme)

Bir sayıyı istenilen sayı tabanından istenilen sayı

tabanına çevirmek için kullanılır.

Page 265: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

265

$sayı=base_convert(AA,16,8);// 16‟lık AA

sayısını 8‟lik sayıya çevirir

bindec() fonksiyonu (desimal düzene çevirme)

Binary (2 lik düzen) düzendeki bir sayıyı decimal (10 luk

düzen) düzene çevirir.

$sayi=bindec(101010);

decbin() fonksiyonu (Onluk düzenden ikilik düzene çevirme)

10‘luk sistemdeki bir sayıyı 2‘lik sayıya çevirir

$sayi=decbin(25);

dechex() fonksiyonu (16 lık düzene çevirme)

2‘lik sayıyı 16‘lık sayıya çevirir

$sayi=dechex(101011);

decoct() fonksiyonu (8 lik düzene çevirme)

2‘lik sayıyı 8‘lik sayıya çevirir

$sayi=decoct(1010);

hexdec() fonksiyonu (Hex düzeninden ikilik düzene çevirme)

16‘lık sayıyı 2‘liğe çevirir

$sayi=hexdec(ff00);

Page 266: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

266

octdec() fonksiyonu (8’lik düzenden 2’lik düzene çevirme)

8‘lik sayının 2‘lik karĢılığını verir.

echo octdec(45453);

max() fonksiyonu (en büyük değeri bulma)

Belirtilen değerlerden en büyüğünü bulur.

echo max(25,8);//25

min() fonksiyonu (en küçük değeri bulma)

Belirtilen değerlerden en küçüğünü bulur.

echo min (25,8);//8

Trigonometrik fonksiyonlar

sin() fonksiyonu (sinüs)

Sinüs değerini dönderir.

cos() fonksiyonu (kosinüs)

Kosinüs değerini dönderir.

tan() fonksiyonu (tanjant)

Tanjant değerini dönderir.

asin() fonksiyonu (arcsinüs)

ArcSinüs değerini dönderir.

Page 267: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

267

cos() fonksiyonu (arckosinüs)

Kosinüs değerini dönderir.

atan() fonksiyonu (arctanjant)

Arctanjant değerini dönderir.

Yukardaki ilk üç fonsiyon verilen parametrenin radian değerlerini hesaplar kalan diğer üçü ise bu radyan

değerini parametre olarak alıp değeri hesaplarlar. Radyan değeri sayının PI sayısı (3.14) ile çarpımının

180‘e bölümüdür.

deg2rad() fonksiyonu (açıyı radyana dönüĢtürme)

Verilen değerin radyanını hesaplar.

rad2deg() fonksiyonu (açıyı radyana dönüĢtürme)

Verilen radyan değerini üretecek açıyı elde etmeyi

sağlar.

<?php

$sinus1 = sin(10);

$sinus2 = sin(deg2rad(80));

$cosinus1 = cos(89);

$cosinus2 = cos(deg2rad(9));

$sinus1 = sin(deg2rad(80));

$asinus1 = rad2deg(asin($sin1));

?>

Page 268: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

268

Metin ĠĢleme Fonksiyonları

Programlama dillerinin en önemli parçalarından biride metinler üzerinde iĢlem yapan fonksiyonlardır. PHP dili

bu konuda oldukça geniĢ bir kütüphaneye sahiptir. ġimdi bazı fonksiyonları sırayla görelim.

substr() fonksiyonu (Metnin bir parçasını alma)

substr verilen parametrelere göre metni istenen

karakterden itibaren, istenen sayıda karakterden oluĢan bir parçasını sonuç olarak verir. En az iki parametre

gerekir. Ancak en genel kullanımı üç parametreli halidir.

Substr(değişkenadı, başlangıç, kaç karakter

alınacak)

Sayılardan birisi verilmez ise verilen sayıdan itibaren

metnin sonuna kadar her Ģey alınır.

BaĢlangıç sayısı negatif ise baĢlangıç sondan itibaren hesaplanır.

Alınacak sayı negatif ise sondaki uzunluk byte değerleri hariç her Ģeyi kopyala denilmiĢ olur. (BaĢlangıç sayısı

gözeltimektedir)

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

Page 269: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

269

$e = substr($string, -5, 4); //

luay

$f = substr($string, -5, -4); //

l

?>

str_replace() ve str_ireplace() fonksiyonları (Metin içinde

bul-değiĢtir yapma)

Bazen metnin içindeki bir parçayı aratıp bunu yeni bir değiĢtirmek isteyebiliriz. PHP dilinde bu iĢlem için iki

fonksiyon vardır. Str_replace ve str_ireplace. Str_replace fonksiyonu üç parametre alır ve kullanımı 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 içinde geçen ―Ġbrahim‖ kelimelerini bulacak ve ―Ġ.‖ olarak değiĢtirecektir. ġimdi

aynı örneği değiĢtirip müstakbel problemimizi tanıyalım.

<?php

$eski = "Ġbrahim Halil Kutluay";

$yeni = str_replace("ibrahim", "Ġ.", $eski);

print $yeni;

?>

Bir önceki ifade ile ilk bakıĢta hiçbir fark yok ancak bu örnekteki str_replace fonksiyonu kendisinden beklenen

Page 270: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

270

iĢi yapmayacaktır. Çünkü ―Ġbrahim‖ ile ―ibrahim‖

alfabetik olarak eĢit olsada normal ASCII düzeninde eĢit değildir. Sonuçta metinde aranan ifade ―Ġbrahim‖ değilde

―ibrahim" olduğundan str_replace bu metni bulamayacaktır. Bu durumu önlemek içinse str_ireplace()

kullanılır. Str_ireplace fonksiyonu harflerdeki büyük küçük harf ayrımlarına dikkat etmez.

Son parametre olan sayı değiĢkeni verilmiĢ ise metin içinde en fazla o kadar sayıda bul değiĢtir yapılır.

Örneğin metin içinde geçen 10 ―Ġbrahim‖ varsa ve bu parametre 5 ise str_replace bu ifadelerin sadece 5 ini

değiĢtirir.

chr() fonksiyonu (ASCII kodun karakter karĢılığı)

ASCII kod düzeneğinde harfler ve rakamlar birer kod ile

numaralandırılmıĢtır. Örneğin A 65, a 97 koduna sahiptir. Chr fonksiyonu bir sayının ASCII karĢılığını verir. Örneğin

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 numarasını verir.

Örneğin ord(―A‖) bize 65 değerini verecektir.

strlen() fonksiyonu (Metnin uzunluğunu bulma)

strlen() fonksiyonu tek parametre alır bu bu parametrde verilen değiĢkenin karakter sayısını döndürür. Bu

fonksiyondan dönen değer tam sayı olduğundanr; aritmetik iĢlemlerde kullanılabilir. Örneğin, ziyaretçinin

bir form alanına yazdığı yazının uzunluğunun bizim

istediğimiz sınıra uygun olup olmadığını test edebiliriz:

Page 271: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

271

<?php

print strlen("ali") . "\n"; // 3

if (strlen($adi) > 25

{ // girilen değer 25 karakterden uzun ise

echo ("Ġsim en fazla 25 harf olabilir!);

}

?>

count_chars() fonksiyonu (Metin içinde karakterlerin tekrar etme sayısını bulma)

count_chars() fonksiyonu metin içindeki karakterlerin

kaçar defa tekrar edildiklerini verir. Ġkinci parametresi verilirse parametre 1 ise kelimeleri bir dizinin elemanları

olarak, parametre 2 ise kelimeleri ve bu kelimelerin metin içindeki baĢlangıç pozisyonlarını bir dizi halinde

verir.

str_word_count() fonksiyonu (Metin içindeki kelime sayısını bulma)

str_word_count() fonksiyonu metin içindeki tekil kelime

sayısını bulur. Ġkinci parametresi verilirse parametre 1

ise tekrar sayısı 0 dan büyükler, parametre 2 ise tekrar sayısı 0 olanlar listelenir.

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

Page 272: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

272

$d = str_word_count($st);

echo " <br>a değeri <br>";print_r($a);

echo " <br>b değeri <br>";print_r($b);

echo " <br>c değeri <br>";print_r($c);

echo "<br>Metinde $d kelime var \n";

?>

Sonuç çıktısı Ģöyle olacaktır.

a değeri

Array ( [32] => 6 [46] => 1 [72] => 3 [75] => 1 [76] => 1 [77] => 1 [80] => 3 [84] => 1 [97] => 6 [98]

=> 1 [101] => 1 [103] => 1 [104] => 1 [105] => 2 [108] => 4 [109] => 3 [111] => 1 [114] => 3 [116]

=> 1 [117] => 2 [118] => 1 [121] => 1 [221] => 1 ) b değeri

Array ( [0] => Ġbrahim [1] => Halil [2] => Kutluay [3]

=> PHP [4] => ve [5] => HTML [6] => Programlama ) c değeri

Array ( [0] => Ġbrahim [8] => Halil [14] => Kutluay [22] => PHP [26] => ve [29] => HTML [34] =>

Programlama ) Metinde 7 kelime var

strpos() ve stripos() fonksiyonları (Metnin bulunduğu pozisyon)

Bu fonksiyonlarla bir metin içinde bir ifadenin olup olmadığını, varsa da hangi pozisyondan itibaren

baĢladığını bulabiliriz. Strpos() ve stripos() arasındaki fark ise stripos() fonksiyoun nüyük küçük harf ayrımı

yapmamasıdır. Bu fonksiyonlar 0 indexlidir. Yani sonuç 7

Page 273: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

273

ise aranan metin aslında 8. karakterden baĢlıyor

demektir.

<?php

$str = "Ġbrahim Halil Kutluay strpos()

kullanımı";

print strpos($string, "a") . "\n";

?>

Bu örnekte dönen sayı 3 olmasına rağmen görüldüğü gibi

A karakteri aslında 4. karaterdir.

strstr () ve stristr () fonksiyonları (Metnin ilk bulunduğu yer)

Bu fonksiyonlarla bir metin içinde bir ifadenin ilk

bulunduğu yerden itibaren metnin sonuna kadar olan tüm kısmını alabiliriz. Stristr() ise kontrol iĢlemini büyük

küçük harf ayırmadan 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 atında bu fonksiyonlar metin içindeki

white-space dediğimiz boĢluk, sekme (tab) ve yeni satır karakterlerini çıkarır. Ancak ikinci parametresi verilirse

bu parametre içindeki karakterleri metinden atar. Bu

Page 274: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

274

fonkyionlar ne çok metin içindeki veya önünde-arkasında

bulunan gereksiz boĢlukları traĢlamak için kullanılır.

<?php

$a = trim(" kutluay "); //

“kutluay”

$b = trim(" kutluay ", " ku"); //

“tlay”

$c = ltrim(" kutluay "); //

“kutluay “

?>

wordwrap() fonksiyonu (Metni satırlara ayırma)

HTML kendisi zaten satırları otomatik olarak ekranda yer

kalmayınca aĢağı kaydırmaktadır. Ancak bazı durumlarda bu iĢlemi kendimiz yapmak isteyebiliriz. Örneği 90

karakterlik bir adres bilgisini üç satıra bölmek

isteyebiliriz… wordwrap() fonksiyonu bu iĢi yapar. Hiçbir parametre verilmez ise metni 75 er karakterlik satırlara

böler. Ama ikinci 3. parametreler ile hem satırdaki karakter sayısını hemde satır sonu karakterini belirtmek

mümkündür.

$text = wordwrap($text, 20, "<BR />");

explode() fonksiyonu (Metni bölümlere ayırma)

explode fonksiyonu bir metni verilen bir karaktere göre bölümlere ayırır.

Page 275: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

275

implode()fonksiyonu (Metni bölümlere ayırma)

implode fonksiyonu ise explode ile bölümlere ayrılan metni gene eski haline getirir.

<?php

$str1=”PHP, kolay, bir dildir!”;

$bolunmus=explode(“,“,$str1);//virgüller esas

alınarak metin parçalara ayrılır.

$str1=implode(“,”,$bolunmus);

//her bölümün arasına virgül gelecek Ģekilde

metin eski haline getirilir

?>

strtoupper() fonksiyonu (büyük harfe çevirme)

Verilen parametredeki metni tamamen büyük harfe

çevirir. Ancak bu fonksiyon Türkçe karakterleri tanımaz. Örneğin

Ali->ALI, alı ->ALı, aĢlama-> AĢLAMA olarak geri döner.

strtolower () fonksiyonu (küçük harfe çevirme)

Verilen parametredeki metni tamamen küçük harfe çevirir. Ancak bu fonksiyon Türkçe karakterleri tanımaz.

ucfirst () fonksiyonu (ilk harfi büyük harfe çevirme)

Verilen parametredeki metni ilk harfini büyük harfe

çevirir. Ancak bu fonksiyon Türkçe karakterleri tanımaz.

Page 276: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

276

ucwords () fonksiyonu (kelimelerin ilk harfini büyük harfe çevirme)

Verilen parametredeki metni tüm kelimelerindeki ilk

harfleri büyük harf yapar. Ancak bu fonksiyon Türkçe karakterleri tanımaz.

<?php

$str = "ibrahim halil kutluay";

$a = strtoupper($str);

$b = strtolower($str);

$c = ucfirst($str);

$d = ucwords($str);

$e = ucwords(strtolower($str));

?>

number_format() fonksiyonu (Rakamları ekrana biçimlendirerek yazdırmak)

Ekrana rakam yazdırma önemli bir konudur. Örneğin bir maaĢ listesi yazdırırken altalta gelmemiĢ küsuratları

farklı sayılarda rakamlar kullanılırsa kodun ve yazılımn kalitesinden Ģüphe edilir. O yüzden özellikle ondalıklı

sayılar ekrana yazdırılırken, en uygun Ģey ondalık hane sayısının fu fonksiyonla sınırlandırılmasıdır. Ayrıca uzun

sayılarında üçer basamak halinde bölünerek yazdırılmasıda okunurluğunu artırır. number_format

parametresiz kullanılır ise sayıyı üçerli basamaklar ve ondalık haneyi aĢağı ada yukarı yuvarlayarak keser.

AĢağıdaki ilk örekte bu görünmektedir. Ġkinci paramtre

olan ondalık hane sayısı verilirse sayının ondalık hanesine buna uygun hade yuvarlar.

Page 277: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

277

<?php

$sayi = 12345.6789;

$a = number_format($sayi);

//12,346

$b = number_format($sayi, 2);

//12,345.67

$c = number_format($sayi, 3);

//12,345.679

$d = number_format($sayi, 4, ',', '.');

//12.345,6789

echo $a . "<br>" . $b . "<br>" . $c .

"<br>" . $d . "<br>" ;

?>

strcmp () fonksiyonu (iki metni karĢılaĢtırma)

Bu fonksiyon ile iki metni karĢılaĢtırma iĢlemine tabi tutmak mümkündür. AĢağıdaki örnekte fonksiyonun

çaıĢma mantığı görülebilir. Birinci metin ikinciden ASCII olarak önce geliyorsa -1, iki metin aynı ise 0 ve ilk metin

ASCII olarak büyük ise 1 değerini geri dönderir.

<?php

$str1 = "ali";

$str2 = "veli";

$sonuc = strcmp($str1, $str2);

switch ($sonuc) {

case -1: print "ali veliden öncedir ";

Page 278: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

278

break;

case 0: print "ali ve veli aynıdır ";

break;

case 1: print "ali veliden sonra gelir

"; break;

}

?>

Örneğe bakıldığında Ģüphesiz gözle bile karĢılaĢtırma

yapıp bu fonksiyona ne gerek var demek mümkündür

ancak bu fonksiyonun böyle açıkça yazılan metinler için değil değiĢkenlerle kullanılıdığını unutmamak gerekir.

Son olarak operatörler kısmında gördüğümüz ―===‖ operatörünü hatırlarsak yukardaki örnekte switch

içindeki ikinci satırında aynı iĢlemi yaptığını görebiliriz. Bir PHP efansesi derki ―===‖ operatörü bu fonksyiondan

hızlıdır. Bu belki binlerce iĢlem ardı ardına yapılırsa küçük bir fark için doğru olabilir. Ama asıl sorun Ģudur;

strcmp iki metin aynı ise 0 değeri dönderirken, ―===‖ mantıksal true olarak 1 değeri dönderecektir.

strcasecmp () fonksiyonu (iki metni karĢılaĢtırma)

Kullanımı strcmp ile aynıdır ancak büyük küçük harf

ayrımı konusunda ayrılırlar.

str_pad () fonksiyonu (metnin etrafını boĢlukla (yada karakterle) destekleme)

str_pad metin iĢlerken yararlı bir fonksiyondur. En az iki parametre ile çalıĢır. Ġlk ikisi zorunlu diğerler seçimliktir.

str_pad ( metin, destek uzunluğu [, destek metni [, destek tipi]])

Page 279: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

279

Sadece iki parametre ile kullanılırsa metnin önüne ve

arkasına verilen sayıda boĢluk karakteri ekler. Ama eklenecek karakter üçüncü parametre ile verilmiĢse

ekleme içleminde bu karakter kullanılır. Döndüncü parametre ile ise ekleme iĢleminin sadece sağa , sadece

sola yada her iki ana yaptırılacağı belirtilir.

<?php

$str = "Merhaba!";

$str1 = str_pad($str, 10);

// " Merhaba! "

$str2 = str_pad($str, 10, 'c');

// "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 (biçimlendirerek çıktı verme)

Bu fonksiyonlar C++ dünyasından trasfer edilen özelliklerdendir. Normalde çok sık kullanılır özellikler

olmasalarda, çok sık biçimlendirme yapılan durumlarda daha kısa kod ürettikleri için tercih edilebilirler.

Page 280: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

280

Bu fonksiyonları bir değiĢkenin içeriğini yazdırırken

biçimlendirmekte kullanırız. Printf sonucu tarayıcıya yazdırırken, sprintf ise sonucu değer olarak dönderir. Bu

fonksiyonlarla birlikte kullanılan biçimlendirme parametreleri ise:

b DeğiĢken tamsayı olarak iĢlem görür ve ikili

sayı olarak döner.

c DeğiĢken tamsayı olarak iĢlem görür ve

ASCII değerinin karĢılığı olan karakter olarak döner.

d DeğiĢken tamsayı olarak iĢlem görür ve ondalık sayı olarak döner.

f DeğiĢken kesirli sayı olarak iĢlem görür ve kesirli sayı olarak döner.

o DeğiĢken tamsayı olarak iĢlem görür ve

sekiz-tabanlı (octal) sayı olarak döner.

s DeğiĢken alfanümerik olarak iĢlem görür ve

alfanümerik olarak döner.

x DeğiĢken tamsayı olarak iĢlem görür ve 16

tabanlı (hexadecimal) sayı olarak döner. (Harfler, küçük harf olur).

X DeğiĢken tamsayı olarak iĢlem görür ve 16 tabanlı (hexadecimal) sayı olarak döner.

(Harfler, büyük harf olur).

Page 281: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

281

% Yüzde iĢareti. Yanında biçim parametresi

gerekmez.

Her iki fonksiyonun da kullanılıĢ biçimi aynıdır:

printf( "biçim" , $degisken1, $degisken2, ... "metin" );

sprintf( "biçim" , $degisken1, $degisken2, ... "metin" );

Burada "biçim" yerine yukarıdaki biçim parametlerinden istediğimizi yazarız. Biçim parametrelerini ayırt etmek

için, önüne yüzde iĢareti konulması gereklidir.

Yukardaki tabloya bakarak bu fonksiyon zor yada

kullanıĢsız görülebilir ancak fonksiyonun iĢlevlerine ve yapabildiklerine bakınca yanıldığınızı anlayacaksınız.

<?php

$hayvan = "kaplan, aslan, yılan";

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

"<br>";

printf("150 metin olarak: %s", $sayi); echo

"<br>";

printf("%% ise yüzde iĢareti yazdırır");

echo "<br>";

$sayi2= 123.456;

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

Page 282: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

282

print "Biçimli sayı $bicimli\n";

echo "<br>";

printf("Biçimli sayi %.2f\n", $sayi2);

echo "<br>";

?>

1. printf değiĢken ve metinleri ayırmakta daha

baĢarılıdır.

2. Çoklu dil kullanılan kod yazarken çok kullanıĢlıdır.

3. Ancak echo fonksiyonunun hız olarak avantajıda

göz ardı edilmemelidir.

Yukarıdaki tür belirten biçimlendirme parametlerine ek

olarak diğer özellikler Ģöyle sıralanır:

Doldurma karakteri: tek tırnak ve onu izleyen bir

karakterden oluĢur.

Hizalama: Eksi iĢaretinin varalığı yazının sola, yokluğu

ise sağa hizalanma anlamına gelir.

Minimum-Maksimum uzunluk: Sayı-nokta-sayı

(örneğin 20.20 gibi) yazılır; birinci sayı maksimum, ikinci sayı minimum uzunluğu belirtir.

Bu üç özelliğe bir örnek verelim.Bir değiĢkenin değerinin sonuna yanyana yeteri kadar nokta konarak

uzunluğunun 40 karaktere çıkartılmasını Ģu deyimle sağlarız:

<?

$vecize = " Olmaya devlet cihanda bir nefes sıhhat gibi " ;

printf( "%'.-60.60s" , $degisken);

Page 283: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

283

?>

Burada "%'.-60.60s" Ģeklindeki biçim komutu, metni yazıp sonunuda uzunluk 60 karakter olanada dek

noktalarla dolduracaktır.

Üçüncü biçim komutu olan "%s" ise üçüncü değiĢkenin

sadece metin muamelesi görmesini sağlıyor. Biçim komutlarının arasında boĢluk bulunmaması, ait oldukları

değiĢken değerlerinin de aralarına boĢluk konmamasına sebep olur. Üçüncü değiĢkenin etkisini, kağıt üzerinde

göremeyiz; ancak bu tarayıcı penceresinde bundan sonra gelecek satırların bir satır aĢağı kaymasını sağlayacaktır.

Dördüncü biçim özelliği, ondalık sayıların virgülden (veya noktadan) sonraki ondalık bölümünün kaç hane olacağını

belirler. Bunu da bir örnekle görelim:

<?php

$fiyat = " 500 " ;

printf( "Tutar (ABD) $%.3f" , $fiyat);

?>

Bu kod tarayıcı penceresine çıktı olarak ―Tutar (ABD) $500.000‖ yazdıracaktır.

parse_str() fonksiyonu (get ile alınan değiĢkenleri parçalayarak bir diziye atma)

HTML formları incelerken GET metodunda bilgilerin adres satırından query string adlı bir değiĢkene aktarıldığını

görmüĢtük. Örneğin ―sayfa.php?a=abc&b=def‖ digi. parse_str() fonksiyonu bu metni parçalarına ayırır.

Parametresiz kullanımı mümkündür ancak en uygunu bir

Page 284: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

284

diziyle kullamaktır. Bu fonksiyon oluĢturdu değiĢkenleri

global olarak tanımlamaktadır.

<?php

$array = array();

if (isset($array['a'])) {

print "a= {$array['a']}<BR />";

} else {

print "a tanımsızdır <BR />";

}

parse_str("a=abc&abc=def", $array);

if (isset($array['a'])) {

print "a= {$array['a']}<BR />";

} else {

print "a tanımsızdır <BR />";

}

?>

Veri ġifreleme Fonksiyonları

cyript() fonksiyonu (Metni verilen bir anahtara göre Ģifreleme)

cyript parametre oan metinleri, verilen anahtara göre Ģifreli kodlar haline çevirir.

<?

$user=”ibrahim”;

echo cyript($user,”deneme”); //$user

Ģifrelenir ve deneme anahtarı bu iĢleme esas

alınır

?>

Page 285: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

285

sha1() fonksiyonu (Metni hash algoritması ile Ģifreleme)

sha1() fonksiyonu Secure HASH Algorithm kelmelerinden gelmektedir. HASH algoritması tek yönlü bir Ģifreleme

algoritmasıdır. Metni HASH‘leyerek 40 bytelık bir değer verir. sha1 verilen her parametre için 40 byte

uzunluğundan bir değer geri dönderecektir. Verdiğiniz parametre 3 harfte olsa, 1000 harfte olsa dönen sonuç

gene 40 byte olacaktır. Böylece güvenli Ģifreleme yapar.

ġimdi denilebilir ki madem sha1 tek yönlüdür ve sha1 ile

Ģifrelen metnin orjinalini yeniden elde etmenin bir yolu yoktur;o halde bu sha1 ne iĢe yarar ki ? Burada çok

derine girmeye gerek yok ama Ģöyle düĢünelim. Kullanıcı Ģifreleri mevcut ve bunlar kod içinde parola = ―benim

parolam‖ gibi kodlanmıĢ durumda. Bu durumda koda

eriĢen herkes parolayı görecektir. Parola veritabanında olsa bile yetkisi olan kullanıcıların eriĢim Ģansı vardır.

Örneğin admin kullanıcı sistem bazında ki herkesin Genel Müdürün bile parolasını görebilmektedir. ġimdi parolaları

açıkta tutmamak için sha1 fonksiyonu bize ne gibi bir imkan verir ona bakalım. ġifre bilgisi ―parola‖ olduğu

takdirde sha1 bunu kendi algoristması ile Ģifreleyecek bir sonuç elde edecektir. Bu tamamen ―garbage‖ yani çöp

tabir edilebilecek hiçbir iĢe yaramayacak anlamsız bir bilgidir. Aynı HASH sonucunu üretmenin tek yoluda aynı

parolayı girebilmektedir.

İşte mükemmel koruma ;

Adminler parola bilgisinin orjinalini PHP ile bile elde edemeyecekler

Ancak kullanıcı parola ile erişim sağlayabilecek

Page 286: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

286

Adminler görevleri gereği parolayı sıfırlama imkanına

sahip olsalarda bu kullanıcıdan habersiz olamayacak

<?php

print sha1("ibrahim") . "<br>";

print sha1("Ġbrahim") . "<br>";

print sha1("Ġbrahim Halil Kutluay ve SHA ile sifreleme");

?>

Ekrana dönen sonuçlar ise

04bbd3d882dc8b95efba41c3814ca1f1e417aa8f

86cc77f526bb554ccf073dc691e218228e3f23ee 8065019f642faa3d88a9c2f162e68a79bffd6ba7

ifadeleri ve bana ilk halleri ile pek alakalı gibi görünmüyorlar. Özellikle birinci ve ikinci arasındaki tek

bir harf değiĢikliğne rağmen sha1 sonucu oluĢan farka

dikkat etmek gerek.

md5() fonksiyonu (Metni MD5 algoritması ile Ģifrelem)

md5() fonksiyonu Message Digest kelimelerinin kısaltılmasından oluĢturulmuĢtur. Buda sha1 gibi tek

yönlü bir algoritmadır. Farkları ise sha1 40 byte değer döndermesine karĢın md5 32 byte uzunlukta bir değer

geri dönderir. Sonuçta sha1 daha uzun olduğundan aynı sonucu elde etmeye yarayacak metni bulmak çok düĢük

bir ihtimaldir ve denilebilrki sha1 daha güvenlidir. Ancak md5 buna karĢın hız gibi bir avantaj sunar. Bu daha az

güvenli olmak farazi bir kelimedir. Hesap yapalım ve

Page 287: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

287

bunu görelim; 32 bye demek 128 bitlik Ģifreleme

demektir. Peki bu algoritme bu durumda kaç değer üretebilir. 2128 kadar yani

3.4028236692093846346337460743177e+38 farklı değer geriye dönebilir. ġahsen ben sayıyı okurken bile

zorlanıyorum.

<?php $md5sifre = md5("parolam"); print $md5sifre;

?>

Düzenli Ġfadeler (REGEXPS)

Metin iĢleme fonksiyonlarını kısaca iĢlemiĢ olduk. Peki

daha fazla kontrol ve güç istersek ne olacak. Bu durumda devreye Regexps girecektir. Regular expression

denen olayı anlatmak için eski günlerden bir önek vermek yeterli olacaktır. Eski DOS zamanlarını

hatırlayanlar olabilir. Joker karakterler vardır. Örneğin del a.pdf dosyası sadece bu komutu silerken del *.pdf

dosyası tüm PDF uzantılı dosyaları silerdi. Regexp iĢte bu mantığın programcılığa yansımasıdır. Örneğin

kullanıcıdan bir mail adresi alındığında zararlı

karakterlerin temizlenmesini istenebilir. Bu durumda bu karakterler tek tek temizlenirse belkide 9-10 satır

karakter silme kodu olacaktır. Oysa Regexp ile aynı iĢlemi yapmak tek satırlık bir iĢtir.

Regexpler genelde üç amaçla kullanılırlar

Bul – değiĢtir iĢlemleri

Page 288: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

288

Metin içinde baĢka bir metin arama veya var olup

olmadığını test etmek

Metinden bir parçayı almak

PHP dili iki tp Regexp destekler. POSIX geniĢletilmiĢ

sürüm ve Perl Uyumlu Regexp sürüm. Bunlar Posix extended ve Perl Compatible Regular Expressions

kelimelerinden gelmektedir. Perl uyumlu Regexp PCRE olarak bilinir ve buna ait fonksiyonlar hem daha güçlü

hem daha hızlıdırlar. Bu yüzde konularda PCRE fonksiyonları takip edilecektir.

Aklınızda bulunsun

1. Regexpler / iĢareti ile baĢlar

2. Regexpler aksi belirtilmediği sürece büyük küçük harf ayrımı yaparlar

3. /i büyük küçük harf ayrımını iptal eder

Temel Seviye Regexpler

Regexp Metin Sonuç

/ali/ ali eĢit

ali/ ali hatalı ifade / ile baĢlaması

gereklidir

/ali/ ALI eĢit değil. Büyük küçük harf

ayrımı var

/ali/i ALI eĢit çünkü büyük küçük harf

ayrımı iptal edilmiĢ

Page 289: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

289

BaĢlangıç Düzeyi Regexpler

Regexpler [] içinde tanımlı küme kullanımıdana izin

verirler. Buradan itibaren Regexp konusu dallanıp budaklanmaya baĢlayacaktır. Örneğin [Aa] Ģeklinde bir

set tanımlayabilir ve bununla "A" veya "a‖ harflerinin aynı kabul edilmesini sağlayabilrsiniz. Aynı Ģekilde abul

edilebilir karakter setleri oluĢturmanızda mümkündür. [A-Z] tüm büyük harflerin, [A-Za-z] tüm küçük harflerin

kullanımını sağlar. [a-z0-9] ise tüm küçük harfler ve rakamların kabul edilebilir olmasını sağlar. Bu tanımların

inde kullanılacak ^ karakteri (karet) kontrol bloklarındaki ! iĢareti gibi tersi anlamına gelir. Yani [^A-Z] seti büyük

harf olmayan her Ģeyi kabul ederken [^A-Za-z0-9] seti

sadece sembolleri kabul eder yani büyük harfler, küçük harfler ve rakamlar kabul edilmez.

Regexp String Sonuç

/[Aa]bc/ Abc EĢit

/[^Aa]bc/ Abc EĢit değil. Regexp F ve F yi kabul

etmiyor. Bbc,cbc vs eĢit olurdu.

/[A-Z][0-9]/ Z6 EĢit

/[A-D]bc/ Ebc EĢit değil ilk harf en son D olabilir. Sonraki harfler kabul edilmemiĢ

/[A-C]bc/ Bbc EĢit

/[a-z]abc[0-9][0-9]/ AbcAA EĢit değil

/[a-z]abc[0-9][0-9]/ abc99 EĢit

/[a-z]abc[0-9][0-9]/ Abc99 EĢit Değil. Büyük

küçük harf sorunu var

Page 290: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

290

/[a-z]abc[0-9][0-9]/i Abc99 EĢit. /i kullanılmıĢ

/[^a-z]abc/ Abc EĢit. Set ilk harf için küçük

harf dıĢında her Ģeyi kabul ediyor

/[^a-z]abc/i Abc EĢit değil. ―A‖ uygun gibi

gelebilir ama /i kullanıldığından buda ―a‖ iĢlemi görür

Üst Düzey Regexp Ġfadeleri

Regexp ifadeleri içinde +, *, ?, { }, $, ve ^ karakterleri özel bir anlam ifade etmek üzere kullanılırlar. Ġlk dört

karakter eĢitlik sayısını etkilerken, son ikisi poziyonu etkiler.

? iĢareti {0,1} anlamına gelir. Kendisinden önce yer alan ifadenin en az sıfır en çok bir kere tekrar

edilmesi gerektiğini (olmayabileceğini ama olursa

en fazla bir kere olabileceğini) belirtir.

* iĢareti {0, } anlamına gelir. Kendisinden önce

yer alan ifadenin sıfır veya daha fazla kere tekrar edilmesi gerektiğini (tümüyle opsiyonel olduğunu)

belirtir.

+ iĢareti {1, } anlamına gelir. Kendisinden önce

yer alan ifadenin en az bir veya daha çok kere tekrar edilmesi gerektiğini (bulunmasının zorunlu

olduğunu) belirtir

^ ifadenin baĢta olmasını kontrol eder

$ ifadenin sonda olmasını kontrol eder

{} arasına yazılan kadar sayısı Ģart koĢar

Bu kısa-yolları kullanım örneklerine bakalım:

Page 291: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

291

^[a-zA-Z0-9_]+ġ En az bir harf veya

rakam yada altçizgi içeren herhangi bir kelime

^[0-9]+ġ Tüm sıfırdan büyük tamsayılar

^\-?[0-9]+ġ Tüm tamsayılar

^\-?[0-9]*\.[0-9*$]+ġ Tüm ondalıkı sayılar

Regexp Metin Sonuç

/[A-Z]{3}/ AbC EĢit değil. Üç büyük

harf gerekli

/[A-Z]{3}/i AbC EĢit. Yukardaki

ile aynı ama /i den dolayı eĢit

/[0-9]{3}-[0-9]{4}/ 236-3800 EĢit 3 rakam,

bir tire(-) ve 4 rakam daha (telefon numarası gibi)

/[0-9]{3}-[0-9]{2}-[0-9]{2}/ 236-38-00 EĢit 3

rakam, bir tire(-) 2 rakam ve yine – ve 2 rakam daha

/[a-z]+[0-9]?[a-z]{1}/ ab1 EĢit değil

ifade en son arakter küçük harf olmalı Ģartını koĢuyor

/[A-Z]{1,}99/ 99 EĢit değil ifade en az bir büyük harfle baĢlamalı

/[A-Z]{1,5}99/ PAPATYA99 EĢit değil en çok ilk 5 karakter büyük harf olabilir

/[A-Z]{1,7}[0-9]{2}/i papatya99 EĢit ilk 7 harf

büyük harf olmalı ancak /i ile büyük harf Ģartı geçersiz

Page 292: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

292

En Üst Seviye (Guru ) Düzeyi Regexp Ġfadeleri

Tüm bu ifadelerin en sonunda yer alan özel karakterler

çok üst düzey regexp ifadeleri yazılabilir.

. \n hariç her Ģey kabul edilir. k.t = kot kat

ancak <> kart

^.5$ deyimi yeni satırla baĢlamayan ve 5

ile biten herhangi iki karakterli değeri bulacaktır.

\s BoĢluk karakterini bulur

\S Nümerik alfanümerik her Ģeyi kabul eder.

Yatay ve düĢey sekme, kağıt-çıkart, yeni satır, satırbaĢı ve boĢluk dıĢındaki herhangi

bir karakteri bulur.

\b b kelime baĢı ve sonu için iĢlem yapar. /at\b/ = yat kat ancak <> katarakt.

\B B kelime içinde geçen ifadeler (baĢta ve snda olmayan) için iĢlem yapar. Önceki

örnekten hareketle /at\B/ = katarakt veya yatarak ancak <> yat kat

[\b] Geri (Backspace) karakterini bulur.

\cX X yerine yazacağımız kontrol karakterini

bulur. Örneğin, \cA, Ctrl+A'yı, \cZ ise Ctrl+Z'yi bulur.

\d 0'dan 9'ya kadar bir rakamı bulur: IE\d, her

Page 293: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

293

ikisi de herhangi bir rakamla biten "IE5" ve

"IE4" değerlerini ikisini de bulur,

\D Herhangi bir ondalık iĢaretini bulur.

\f Form-feed (kağıt çıkart) karakterini bulur.

\n Newline (yeni satır) karakterini bulur.

\r Return (satırbaĢı) karakterini bulur.

\t Yatay sekme (Tab) karakterini bulur.

\v DüĢey sekme karakterini bulur.

\w Herhangi bir harf, rakam veya alt-çizgiyi

bulur.

\W Harf, rakam ve alt-çizgi dıĢındaki karakteri

bulur.

\xHex Verilen 16 tabanlı (Hexadecimal) sayıya

uygun Escape karakterini bulur. Örneğin, \n25, % iĢaretini bulur.

[[:alpha:]] Herhangi bir harf

[[:digit:]] Herhangi bir rakam

[[:alnum:]] Herhangi bir harf veya rakam

[[:space:]] Herhangi bir boĢ karakter

[[:upper:]] Herhangi bir büyük harf

Page 294: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

294

[[:lower:]] Herhangi bir küçük harf

[[:punc:]] Herhangi bir noktalama iĢareti

[[:xdigit:]] Herhangi bir Hexadecimal karakter. [0-9a-

fA-F]

| Veya (\.com|\.com\.tr : ―.com‖ veya

―com.tr‖ değerlerinin bulunmasını sağlar

preg_match() fonksiyonu (metinler eĢitmi)

Bu fonksiyon ile iki metin eĢitmi kontrol edilir. Bir desen ve karĢılaĢtırma metnini parametre olarak alır

<?php

if (preg_match("/php/", "php")) {

print "eĢit!\n";

}

if (preg_match("/php/", "PHP")) {

print "EĢit!\n";

}

if (preg_match("/php/i", "php")) {

print "eĢit!\n";

}

?>

Yukardaki örnekte 1 ve 3 eĢitliği sağlarken 2 büyük

küçük harf ayrımından dolayı eĢitliği sağlamaz. Bunlar temel düzeydi Ģimdi baĢlangıç düzeyine giriĢ yapalım.

Page 295: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

295

preg_match_all() fonksiyonu

Bu fonksiyonda preg_match() gibi çalıĢır. Ancak preg_match() ilk bulduğu metinde iĢlemi bitiriken bu

fonksiyon metnin tümü için iĢlem yapar.

<?php

$a = "yat Kat sat yatarak mat!";

preg_match("/[A-Za-z]at\b/i", $a, $dizi);

?>

Gördüğümüz örnekte fonksiyon ilk eĢitleme örneğinde iĢini yaptğını varsayacaktır.

<?php

$a = "yat Kat sat yatarak mat!";

preg_match_all("/[A-Za-z]at\b/i", $a,

$dizi);

?>

ise tüm eĢitlikleri diziye alacaktır. Eğer isterseniz kodun sonuna var_dump(dizi) fonksiyonun ekleyip sonucunu

görebilrsiniz. Var_dump özellikle dizilerle kullanılan ve içeriğini ekrana basan bir fonksiyondur.

ereg() fonksiyonu (dizilim arama)

Arattığımız karakter sıraanıĢı varsa true yoksa false dağer üretir. Kullanımı ise

deger = ereg("eĢleĢtirilecek_karakter_sırası,$kaynak , $yeni_değiĢken);

Page 296: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

296

eregi() fonksiyonu (dizilim arama)

ÇalıĢması yukardaki fonksiyon gibidir ancak büyük küçük harf ayrımı yapmaz.

ġimdi bir örnekler email adresinin doğrulamasını yapalım. Ġçinde en az bir @ iĢareti ile en az bir adet

nokta içip içermediğine bakmamız yeterli olacaktır. Böyle bir sınama için gerekli kod Ģöyle olabilir:

<?php

if (eregi("^.+@.+\\..+$", $adr, $email)) {

}

else {

$hata = "Email adresi hatalıdır!<br>";

echo $hata;

include("hatamesaji.php");

exit;

}

?>

ereg_replace() fonksiyonu (dizilim arama ve değiĢtirme)

Dizilim aratma iĢlevinin yanında bazen bulunan bu değerleri baĢkası ile değiĢtirmek isteyebiliriz. Bu iĢ içinse

ereg_replace fonksiyonu kullanılır. Kullanımı ereg_replace("dizilim" , yeni_metin , $kaynak);

Ģeklindedir.

ġimdi bu fonksiyonu kullnarak zararlı karakter giriĢine

engel olan bir örnek görelim. Genelde email adresi girilen

Page 297: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

297

alanlarda zararlı karakter giriĢine müsati alan olabilir.

Bunların en baĢındada ―<‖ ve ‖>‖ karakterleri gelir. Gerçi bunların arasında bir sürü karakter bulunabilir ancak

baĢında bu karakterler olmadan scriptler çalıĢmayacağından bu bir seviyeye kadar güvenlik

sağlar. Örneğin ziyaretçi defteri uygulaması gibi bir formdan adi, adr ve msg isimli üç değer almıĢ olalım.

<?

$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 parçalara ayırma)

Verilen dizilimi ayraç olarak kullanıp bir değeri parçalara ayırır ve bu ayrılan parçaları birer dizi elemanı olarak

verir. Kullanımı

$yenidizi = split("eĢleĢtirilecek_değerler" ,

$kaynakdeğiĢken, maksimum dönen değer sayısı);

Dönen değer sayısı fonksiyonun döndereceği maksimum

değer sayısını belirtir. Geri dönen dizi en fazla bu sayıda elemana sahip olabilir. Bu parametre verilmez dizinin

eleman sayısı gerektiği kadar otomatik olarak belirlenir. ġimdi split kullanarak bir cümleyi kelimelere ayıralım.

Page 298: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

298

Örnek kodumuz boĢluk karakterlerini arayacak ve

bulduğu yerde kelimeleri saptayacaktır. En sonunda ise for..each döngüsü ile bu kelimeleri sırayla ekrana

yazdırıyoruz.

<?php

$str = "Ġbrahim Halil Kutluay PHP ve Mysql Kullanım

rehberi.";

$ara = " ";

$sonuc = split($ara, $str);

foreach ($sonuc as $deger) {

print "$deger <br>";

}

?>

sql _regcase() fonksiyonu (düzenli ifade üretme)

Ġçeriğinde büyük harf-küçük harf ayrımı olan bir değeri büyük harf-küçük harf ayrımı olmayan Düzenli ifade

haline çevirir. Örnek:

<?php

$str = "Kutluay";

echo(sql_regcase($str);

?>

Bu program, Browser penceresine Ģu metni yazdırır:

[Kk][Uu[Tt][Ll][Uu][Aa] [Yy]

Page 299: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

299

Kullanıcı Tanımlı Fonksiyonlar GeliĢtirmek

Basit Bir Fonksiyon Yazalım - myecho

Daha önce gördüğümüz gibi ekrana bir Ģeyler yazdırmak

için echo fonksionunu kullanıyoruz. ġimdi Örneği

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 incelediğimizde her değiĢkenden sonra <br> etiketi

ile alt satıra geçmeyi sağladığını görürüz. ġimdi istiyoruzki ki echo komutu her seferinde bu <br>

etiketini otomatik eklesin bizde bu konuda rahat edelim.

Php dilinde fonksiyonlar function bildirimi ile yazılar.

Fonksiyona iĢlemesi için bir takım değerler aktarılacaksa

bu değer isimleri fonksiyon adının yanına parantez içinde yazılır. Birden fazla değer alıyorsa aralarına virgül

konulur. Dğer aktarılmayacaksa içi boĢ iki parantez konulmak zorundadır. Fonksiyon hesap yapıp bi değer

döndürecekse bu RETURN ile belirtilir.

function fonksiyonun_adı (parametre1, parametre2, ...

parametreN) {

Page 300: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

300

fonksiyonun yapacağı iĢe iliĢkin komutlar

}

ġimdi basitçe yazdığımız ilk örneğimizi 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 için fonksiyon yazmak çok mantıklı değil ama aklınıza gelebilecek her konuda

fonksiyon yazmak ve bunu PHP nin içinde hep varmıĢ gibi kullanmak mümkün.

ġimdi biraz daha geliĢtirelim;

<?php

function echobr ($metin) {

Page 301: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

301

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 BaĢlık");

echobr ("Bu satira Br etiketi kendiliğinden ekleniyor.");

echop ("Bu satıra paragrafetiketi fonksiyon tarafından

eklenmektedir..");

?>

ġimdi yukardaki fonksiyonlar kullanılarak, kod yazılırsa

etiket açıkmı, kapalımı dikkat edilmesine yada kodlama hatalarını düĢğnmeye gerek kalmayacaktır.

ġimdi çarpım tablosu örneği yapalım ;

Page 302: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

302

<?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 toplama($sayi1, $sayi2); echo("<br>");

print cikartma($sayi1, $sayi2); echo("<br>"); print carpma($sayi1, $sayi2); echo("<br>");

print bolme($sayi1, $sayi2); echo("<br>");

?>

GLOBAL ve STATĠK DEĞĠġKENLER

Bütün üst düzey dillerde global ve lokal değiĢken kavramı vardır. PHP dilinde bunlar global ve static olarak

belirtilirler. Kod içinde tanımladığımız değiĢkenler ile bir fonksiyonun içinde tanımladığımız değiĢkenler birbiri ile

aynı kapsama alanında değildir. Bir fonksiyon içinde

Page 303: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

303

tanımlı bir değiĢkene o fonksiyon içinde yazılan kodlar ile

eriĢilebilir. Fonksiyonda kendisi dıĢında tanımlı değiĢkenlere eriĢemez, değerlerini bilemez ve bunlarla

iĢlem yapamaz. (Yeni $_POST ve $_GET bunun dıĢındadır). Fonksiyon içinde tanmlı değiĢkenlerin

hesaplanan değerlerinin saklanması isteniyorsa bu değiĢkenler static olarak tanımlanmalıdır.

Örneğimize bakalım ;

<?php

$adi = "Ġbrahim Halil Kutluay!";

function yazdir () {

print ("<h1>Adınız: $adi </h1>");

}

yazdir();

?>

Yukardaki örnek ilk myecho örneğimizdeki gibi masum

bir fonksiyon. Ancak bu kodu çalıĢtırırsak ekrana sadece ―Adınız:‖ yazılacak ancak $adi değiĢkeninin içeriği

yazılmayacaktır. Çünkü yazdir fonksiyonu $adi değiĢkenine eriĢemez. EriĢmesi isteniyorsa global

tanımlayıcısı kullanılır.

<?php

$adi = "Ġbrahim Halil Kutluay!";

function yazdir () {

global $metin; // global değere ulaşım

yetkisi alınıyor

Page 304: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

304

print ("<h1>Adınız: $adi </h1>");

}

yazdir();

?>

ġimdi static örneğini inceleyelim;

<?php

function saybakalim () {

static $rakam = 0;

$rakam++;

print ("<h3>ġu anki sayi: $rakam </h3>");

}

echo ("<h2>1.:</h2>"); saydir();

echo ("<h2>2.:</h2>"); saydir();

echo ("<h2>3.:</h2>"); saydir();

echo ("<h2>4.:</h2>"); saydir();

?>

Eğer rakam değiĢkeni static olmasaydı fonksiyon her

çalıĢmasında rakam değiĢkenini tekrar sıfırdan baĢlatacaktı. Ancak static olarak tanımlanınca değiĢkenin

o anki değeri unutulmamaktadır.

Page 305: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

305

Dizi Fonksiyonları

array() fonksiyonu (değerleri diziye çevirme)

En az bir ve üst sınırı belirsiz olmak üere parametre alır ve bu değerleri bir dizi olarak dönderir.

count() fonksiyonu (dizinin eleman sayısını bulma)

Parametre aldığı dizi değiĢkenin eleman sayısını verir.

print_r () fonksiyonu (değiĢken içeriğini yazdırma)

Bu fonksiyon parametre olarak aldığı değiĢken ve içeriği hakkında bilgi verir. Bu değiĢken bir dizi ise dizinin

elemanlarıda buna dahildir. Ġkici bir parametre olarak ―true‖ verilirse sonucu yazmak yerine bir değer olarak bir

değiĢkene aktarmak mümkün olur.

var_dump () fonksiyonu (değiĢken içeriğini yazdırma)

print_r () ile aĢağı yukarı aynı iĢleve sahiptir. Ancak

var_dump() farklı olarak

DeğiĢkenlerin boyutunuda verir

Nesnelerdeki yayınlanmıĢ bilgileri yazdırmaz

Sonucu bir değiĢkene yönlendiremez ve ilgili

parametreyide kabul etmez.

ġimdi örneklerle bu fonksiyonları inceleyelim;

<?php

$benimdizi = array("elma", "armut",

"çilek");

$boyut = count($benimdizi);

Page 306: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

306

print_r($benimdizi);

?>

Yukardaki örnekte tanımlanan dizi değiĢken üç meyve

adınıda içeren bir container durumuna gelmektedir. $boyut değiĢkeni ise count() ile dizinin eleman sayısını

alacaktır. print_r() fonksiyonu ise ekrana dizi içeriğini yazacaktır.

Array

(

[0] => elma

[1] => armut

[2] => çilek

)

<?php

$benimdizi = array("elma", "armut",

"çilek");

$boyut = count($benimdizi);

print_r($benimdizi);

$cikti = print_r($benimdizi); // iĢlem çıktı

sı bu değiĢkene atılacak

print($cikti);

?>

<?php

$benimdizi = array("elma", "armut",

"çilek");

$boyut = count($benimdizi);

var_dump($benimdizi);

?>

Page 307: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

307

Dizileri Sıra ile ĠĢlemek

Dizileri çeĢitli töntemlerle iĢleyebiliriz. Örneğin for

döngüsünde dizinin baĢından sonuna kadar iĢlem yapabiliriz. Yada for each döngüsü ile dizi elemanları

boyunca iĢlem yapabiliriz. PHP de ayrıca bu iĢ geliĢtirilmiĢ ikide fonksiyon vardır.

list() fonksiyonu

Parametre olarak aldığı dizinin elemanlarını değiĢkenlere çevirir,

each() fonksiyonu

Parametre olarak aldığı dizinin o anki ―array corsor‖

konumundaki anahtar alan ve bunun değerini dönderir.

<?php

while (list($degisken, $deger) =

each($array)) {

print "$degisken = $deger\n";

}

?>

For.. Each ile dizileri iĢlemek

Bu konu daha önce döngüler konusunda kısaca

geçilmiĢti. Burada bir örnek vermekle yetinelim.

foreach ($dizi as $anahtar => $deger) {

print "$anahtar = $deger\n";

}

Page 308: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

308

For ile dizileri iĢlemek

Bu konu daha önce döngüler konusunda kısaca

geçilmiĢti. Burada bir örnek vermekle yetinelim.

<?php

for ($i = 0; $i < count($dizi); ++$i) {

print $dizi [$i];

}

?>

Page 309: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

309

PHP ve Formlar

PHP dilinin en büyük var oluĢ amacı formlar yoluyla

kullanıcıdan alınan bilgilerin iĢlenmesidir. Daha önce HTML ile hazırladığımız formlarda bazı bilgiler edinmiĢtik.

Bunları kısaca tekrarlamakta fayda var;

1. Formdan bilgiler Get yada Post metodu ile

gönderilir

2. Get ile gönderilen bilgiler ―querystring‖ adlı özel bir değiĢkene, Post ile gönderilenler ―stdin‖

değiĢkenine saklanarak gönderilir.

3. Get metodunda gönderilecek bilgiler adres

satırında görününürler. Satırın sonuna ―?‖ iĢareti eklenerek ―değiĢken=değer‖ ve değiken aralarına

―&‖ kodlanarak bilgi iletilir.

4. ―Query string‖ in uzunluğu belli bir sayıyı

geçemediğinden büyük formlarda kullanılması sakıncalıdır

5. Parola vs sorulan ekranlardada get kullanılması sakıncalıdır.

6. POST metodunda ise kullanıcı bilgileri gönderdikten sonra tarayıcının ―geri‖ düğmesine tıklarsa ―bu

sayfa gönderilmiĢ veriler içermektedir‖ benzeri bir

mesaj görüntüler. Bu da kafa karıĢtırıcı olabilir.

Süper Globaller (Superglobals)

PHP dilinde form verilerini iĢlemek istiyorsak önce süper

globalleri tanımalıyız. Süper global adını almalarının sebebi ise kodumuzun her yerinden ulaĢılabilir

olmalarıdır. Formlardan alınan bilgiler metoda göre farklı

Page 310: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

310

dizilere alınır. GET ile alınan bilgiler $_GET, POST ile

alınanlar ise $_POST değiĢkenlerine alınır. Bunları bir döngü içinde sırayla iĢlemek yada dizi içeriklerine teker

teker eriĢmek mümkündür.

$GLOBALS Tüm global değiĢkenleri (diğer süper globallerde dahil) eriĢilebileceği bir

dizidir. Kullanımı çok gerekmedikçe tavsiye edilmez.

$_POST Post ile gönderilen değerlerin tutulduğu

dizi ($HTTP_GET_VARS) yerine bu dizi kullanılmalı)

$_GET Get ile gönderilen değerlerin tutulduğu dizi ($HTTP_POST_VARS) yerine bu

dizi kullanılmalı)

$_COOKIE http çerezleri ile gönderilen tüm değiĢkenleri içerir.

($HTTP_COOKIE_VARS) yerine artık bu dizi kullanılmalıdır.

$_REQUEST Yukardaki üç değikenin birleĢtirilmiĢ hali olarak düĢünülebilir. Kullanımı

$GLOBALS‘ e göre daha güvenli olsada

hala güvenli kaynaklı olmayan bilgileri içerebilmesi nedeniyle dikkatli

olunmalıdır.

$_FILES Upload edilen tüm dosyaların tutulduğu

Page 311: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

311

dizidir. ($HTTP_POST_FILES) yerine

artık bu dizi kullanılmalıdır.

$_SESSION Oturum için kaydedilen tüm değiĢkenleri

içerir. ($HTTP_SESSION_VARS) yerine artık bu dizi kullanılmalıdır.

$_SERVER Kullanılan web sunucunun bize

varsayılan olarak sunduğu değiĢkenleri içerir. ($HTTP_SERVER_VARS) yerine

artık bu dizi kullanılmalıdır.

$_ENV Kullanılan web sunucudaki iĢletim

sistemi tarafından ayarlanmıĢ tüm

sistem değiĢkenlerini içerir. ($HTTP_ENV_VARS) yerine artık bu dizi

kullanılmalıdır.

Gördüğünüz tablodaki birçok değiken eski değiĢkenlerinin yetenekleri artırılmıĢ ve isimleri kısaltılmıĢ halidir. Eskileri dururken neden yenisini

kullanalımki diyecek olursanız üç sebep sayılabilir.

1. Yeni isimler kısa olduğundan kodlama açısından daha

pratik 2. Yeni süper globaller gerçekten kodun her yerinden

eriĢelebilmektedirler. Oysa eski değiĢkenler adları global olsalarda örneğin fonksiyonların içinde iken özellikle talep

edilemeden eriĢelemiyorlardı

3. Kodunuzun geleceği için

Page 312: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

312

Eski değiĢkenler Ģimdilik kullanım için bırakılmıĢ olsada

Ģimdiden yeni sisteme ayak uydurmanızda fayda vardır. (Zaten kodlanırken isimleri uzun olduğu için yazmasıda

sıkıntı vermekte.) Örneğin değiĢkenlere global eriĢimin güvenlik açığına yol açtığı saptanınca bu iki dizi getirilmiĢ

ama php ayar dosyasında bir ayarla iki kullanımda mümkün kılınmıĢtı. Oysa bugünlerde çıkacak olan PHP 6

da artık bu ayarda olmayacak ve süper dilizlerin kullanımı Ģart olacak. PHP 7 sürümünde ise belkide

HTTP_GET_VARS ve HTTP_POST_VARS değiĢkenleride olmayacak. O yüzden yukardada belirtildiği gibi Ģimdiden

uyumlu kod yazmakta yarar var.

Form Dizaynında Altın Kurallar

1. Form okunuĢu basit, doldurması sıkıcı olmamalıdır

2. Kullanıcı bilgileri neden girmesi gerektiğini kavrayabilmelidir. Örneğin kimlik bilgileri ekranında

―tuttuğunuz takım nedir‖ gibi bir soru olmamalıdır.

3. Formlarda girilen bilgileri doğrulanmalıdır. Aksi

takdirde güvenlik açıkları ve özellikle ―sql injection‖ yöntemiyle hackerlera yakalanabiliriz.

4. Formlardaki etiketler aynı yöne yaslanmalıdır

5. Formlarda istenen bilgilerin sıralaması genel düzene uymalıdır. Örneğin kimlik bilgileri

ekranında önce doğum yeri sonra baba adı sonra adı sorulursa form tuhaf bir hal alır. Ancak bunlar

akla mantığa uygun bir sırada olsa kullanıcı için daha hoĢ ve antıklı bir görünümü oluĢur.

Page 313: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

313

6. Kullanıcıyı hata yapmaktan koruyan bir yapı

gözetilmelidir. Örneğin öğrencilerin sınıf bilgisini alacağımız bir alan düĢünelim. Bu düzyazı olarak

tutulursa, kullanıcı bu alana ―6.a‖, ―6.A‖, ―6-a‖,‖6-A‖, ―6/A‖ girebilir. Bunların hepsi kullanıcı için

gçerli verilerdir ama kullanıcı gerçekten ―6-A‖ sınıfının listesini isterse ne olacak. Oysa daha ilk

baĢta form dizayn edilirken alanı düz metin yerine combobox ile tasarlanmıĢ olsaydı. Kullanıcı sınıf

değerini listeden seçtiği için mecburen aynı değeri girmek zorunda kalacaktı.

Formlardan Bilgi Alma

Formlardan bilgi aktarımı yaparken iki tipte program

kodlayabiliriz. Birinci tipte bir çağıran, birde çağrılan dosya vardır ve biz bu ikisini ayrı ayrı kodlarız. Ġkinci

tipte ise kaynak kod tek bir dosyadan oluĢur ancak dosya kodlamasında bir if..else yapısı ile hem form, hemde bu

formu verileri iĢleyen kısmı kodlanır. Böylece kod üzerindeki kontrolümüz artar ve gereksiz dosya çağırma

zamanlarından kurtlmuĢ oluruz. Ġkili dosya yöntemini görelim.

Form Verilerini ĠĢleme (Ġki dosya ile)

AĢağıdaki örnek get metodunu kullanmaktadır. Amacımız

ise kullanıcının forma girdiği bilgileri ikinci dosyada okuyup ekrana göstermek. Örnek ―Gönder‖ düğmesine

tıklayınca ACTION olayına yazılmıĢ ―hedef‖ dosyasını çağıracaktır. Bilgiler ―hedef‖ dosyasına adres satırına

eklenen bilgilerle oluĢtrulan ―query_string‖ ile

aktarılacaktır.

Page 314: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

314

<HTML>

<HEAD>

<TITLE>Form</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 ACTION="hedef.php" METHOD="GET">

Adınız, Soyadınız: <INPUT TYPE="TEXT" NAME="adsoyad"><br>

E-email: <INPUT TYPE=TEXT" NAME="email"><br>

<INPUT TYPE="SUBMIT" VALUE="Gönder"> <INPUT

TYPE="RESET" VALUE="Sıfırla">

</FORM>

</BODY>

</HTML>

ġimdi hedef.php dosyasını inceleyelim.

<?php

print ("Merhaba <b>$adsoyad</b>\n\n");

print ("<p>E-mail: <b>$email </b></p>\n\n");

?>

Page 315: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

315

Kodu çalıĢtırdığımızda aslında tüm bilgiler iletilmesine

rağmen ekrana sadece ―Merhaba Email‖ satırları gelmekte ama isimleri gelmemektedir.

Eğer sizinin çalıĢtırdığınız örnekte girdiğiniz bilgiler

görünüyor ise sisteminizde güvenlik açığı var demektir.

Burada yapabileceğimiz iki Ģey var ;

Ya tembellik eder PHP.ini dosyasında register_globals

ayarını ―on‖ yapar ve sistemde güvenlik açığına sebep oluruz, yada kodlama Ģeklimizi geleceğe hazır hale getirir

ve bu ayarı gerektirmeyecek Ģekilde kod yazarız. Anladığınız gibi örnek kod eski Ģekilde kodlanmıĢ bir

örnektir. Peki ne yapalımda bu kodu çalıĢır hale getirelim?

Olayın sebebi, form değiĢkenlerinin güvenlik kuralları gereğince kullanılan metoda göre gerekli olan diziden

alınmasıdır. ġimdi hedef dosyanın yeni haline bakalım ve

nasıl çalıĢır hale getireceğimizi görelim.

<?php

$adsoyad =$_GET[adsoyad];

$email =$_GET[email];

print ("Merhaba <b>$adsoyad</b>\n\n");

print ("<p>E-mail: <b>$email </b></p>\n\n");

?>

Gördüğünüz gibi iki satır kod ekledik belki ama kodumuz Ģimdi çok daha güvenli ve hosting Ģirketinin ayarı neydi

diye düĢünmek zorunda değiliz.

Page 316: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

316

Kendi Ģahsıma ait 7-7 tane parasını verip aldığım Türkçe PHP kitabı var. Bunların bir çoğu konuları çok yalın almıĢ,

gene bir çoğundada örnekler eski tipte kodlanmıĢ. Kitap PHP 5 kitabı ve PHP 4 sürümünden beri bu güvenlik

sorunu sebebi ile yeni sitemle kod yazılması gerektiğini neredeyse sağır sultan duymuĢ durumda ama bizim

yazarlar bundan hariç galiba. Çünkü PHP 5 ‗i anlatan kitabımda ―örnek çalıĢmıyorsa register_globals=on yapın

deniliyor. Diyelimki yazara uyup bunu yaptınız; peki kodu hosting Ģirketine attığınızda ne olacak. Gene

çalıĢmayacak. Hosting Ģirketide sırf sizin için sistemini hackerlara açmayacağına göre siz en iyisi yazara değil

aklın gereğine uyun ve doğrusu neyse onu öğrenin.

Form Verilerini ĠĢleme POST Metodu

Yukardaki örnekte methodu GET yerine POST yapmıĢ

olsaydık hedef dosyada aĢağıda değiĢiklikleri yapmamız 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");

?>

Page 317: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

317

Form Verilerini ĠĢleme (Tek dosya ile)

Bu sefer yazacağımız kod içinde Ģöyle bir mantık

güdeceğiz. Önce $_GET değiĢkenin değerini kontrol edip boĢ olup olmadığına bakacağız. Eğer boĢ ise program ilk

defa çalıĢtığını anlayacak ve kod içinde form kısmını iĢleyip ve ekrana formu gösterip bilgi giriĢi yapılmasını

isteyecektir. Eğer bu değiĢken boĢ değilse demektir ki

program daha önce çalıĢmıĢ ve gönder tuĢuna basılmıĢ ve bu yüzden _GET dizisi içinde iĢlenmek üzere bilgi var.

Bu seferde kodun else bloku çalıĢacak ve bilgileri iĢleyecektir. Formdan girilen bilgileri gene aynı dosyaya

göndermek için PHP_SELF ön tanımlı değiĢkenini kullanacağız. Bu değiĢken bize o an çalıĢan dosyanın

adını 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>

<?

Page 318: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

318

// yukardaki kısımlar html icin gerekli olanlardı.

// Program Ģu mantıkla çalıĢıyor. Önce $_GET değiĢkenin

değerini kontrol ediyor. eğer bu değiĢken boĢ değilse

// gelen bilgi var demektir. bilgileri iĢleyen else kısmına

gidiyor. Aksi takdir yani gelen bilgi yoksa

// ekrana formu gösterip bilgi giriĢi sağlıyor. Gönder

düğmesi ise PHP_SELF sayesinde bilgileri dosyaynın kendisine gönderir.

// Gönderim anında GET dolu olduğundan bu defa bilgiler gösteriliyor

if (!$_GET):

{?>

<table border=1>

<Form Action="<?$PHP_SELF?>" Method="GET">

<tr><td colspan=2 align=center style="font-

color:red;"> Bilgi Alma</td></tr>

<tr><td> Adı</td> <td><input type="TEXT" name="adsoyad"></td></tr>

<tr><td> Email</td> <td><input type="TEXT" name="email"></td></tr>

<tr><td> <input type="SUBMIT" value ="Gönder"></td></tr>

</table>

</form>

Page 319: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

319

<?}

else :

$adsoyad=$_GET['adsoyad'];

$email=$_GET['email'];

echo "Merhaba $adsoyad <br> Email $email";

endif;

?>

</body>

</html>

Eğer form konusunu biraz biliyorsanız ve yukardaki kodu incelediyseniz PHP_SELF yerine sadece dosya adını

yazabileceğimizide görmüĢ olmanız gerekirdi. Örneğin dosya adı ―a.php‖ olsaydı action=‖a.php‖ komutuda aynı

iĢlemi yaptırırdı. Peki PHP_SELF ‗ i kullanmanın faydası

ne olacak denirse dosya adı değiĢikliğinden etkilenmemek ve kopyala-yapıĢtır iĢlemlerinde birde

sonradan dosya adı değiĢtirmemek olarak açıklanabilir.

Yukardaki örnekte ki kullanım mantık ve kodlama açısından doğru sıradır. Bu sırayı aynı Ģekilde

if (empty($_GET)) kontrolü ilede yapabilirdik.

Page 320: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

320

Form Verilerini ĠĢleme POST Metodu

Yukardaki örneği 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 kısımlar html icin gerekli olanlardı.

// Program Ģu mantıkla çalıĢıyor. Önce $_POST

değiĢkenin değerini kontrol ediyor. eğer bu değiĢken boĢ değilse

// gelen bilgi var demektir. bilgileri iĢleyen else kısmına gidiyor. Aksi takdir yani gelen bilgi yoksa

// ekrana formu gösterip bilgi giriĢi sağlıyor. Gönder düğmesi ise PHP_SELF sayesinde bilgileri dosyaynın

kendisine gönderir.

// Gönderim anında POST dolu olduğundan bu defa

bilgiler gösteriliyor

Page 321: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

321

if (!$_POST):

{?>

<table border=1>

<Form Action="<?$PHP_SELF?>" Method="POST">

<tr><td colspan=2 align=center style="font-

color:red;"> Bilgi Alma</td></tr>

<tr><td> Adı</td> <td><input type="TEXT"

name="adsoyad"></td></tr>

<tr><td> Email</td> <td><input type="TEXT"

name="email"></td></tr>

<tr><td> <input type="SUBMIT" value

="Gönder"></td></tr>

</table>

</form>

<?}

else :

$adsoyad=$_POST['adsoyad'];

$email=$_POST['email'];

echo "Merhaba $adsoyad <br> Email $email";

endif;

?>

</body>

Page 322: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

322

</html>

Hesap Makinesi Programı

Artimetik operatörleri, switch blokunu ve formları

gördüğümüze göre basit bir hesap makinesi için gereken her Ģey elimizin altında 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;

Page 323: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

323

break;

case "/":

$sonuc = $sayi1/$sayi2;

break;

case "*":

$sonuc = $sayi1*$sayi2;

break;

case "+":

$sonuc = $sayi1+$sayi2;

break;

default:

echo 'Hata oluĢtu.';

}

}

?>

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

Page 324: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

324

<input type="text" name="ikincisayi" size="1">

<input type="submit" value="="> <?=$sonuc?>

</form>

</body>

</HTML>

Basit Bir ġifreli GiriĢ Sayfası

Web sitelerinde gördüğümüz bir sistem olan Ģifreli

sistemlere basit bir örnek yapalım.

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

?>

Örneğimizde parola bilgisi kodun içinde yazılmıĢtır. Bu

Ģekilde olunca kullanıcının parolayı değiĢirme imkanı yoktur. Ayrıca prola kod içinde metin lrak kodlandığından

sunucuya dosya eriĢimi olan herkes kodu görecek kısaca paolayı öğrenebilecektir (örneğin hostng firması

çalıĢanları).

Page 325: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

325

Birden Fazla Sayfaya Yayılan Formlar

Bazen uğraĢmamız gereken formlar tek bir sayfa için

fazla gelebilir. Bunları birden fazla sayfaya yayılmıĢ formlarda toplayıp öyle kullanmamız icap edebilir. Bu

iĢlem için üç alternatifimiz vardır.

1. Form konularında ögrdüğümüz gibi Hidden alanlar

kullanmak

2. Bilgileri bir tabloya yazmak

3. Bilgileri oturum değĢkenlerinde tutmak.

Kullanım ve hata kontrolü açısından en rahatı ise birinci yöntemdir. Zaten POST metodu kullanıacak olursa

gönderilen bilgi boyutuda sorun olmadığından bu gayet mantıklı bir durumdur. Hidden alan kullanımına örnek

olarak ise

<INPUT TYPE="HIDDEN" NAME="isim" VALUE="<?php

print $_POST['isim']; ?>">

verilebilir.

PHP ile Posta Gönderme

Gerek PHP gerekse HTML içinde form komutları görüldüğü kadarı le basit bir geri besleme (feedback)

yada iletiĢim saufası yapmak kolaydır. ĠĢin aslı burada kolaya kaçıp formun action kısmında

<form name="form1" method="post" action="mailto:[email protected]">

denilmesi bu iĢlem için teknik anlamda yeterlidir. Ancak burada formu dolduran kiĢinin bilgileri size POST formu

nasıl yolladı ise öyle gelecektir. DeğiĢken adı, &

Page 326: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

326

iĢaretleri, = iĢaretleri %20 karakterleri vs vs. Kısaca bu

bilgiyi okumak zordur ve bunu teknik bilgisi olmayan birisine kabul ettirmek zordur. (Teknik bilgisi olan birisi

ise bunu görünce zaten sizle çalıĢmaktan vazgeçer)

Peki ne yapmalı. Aklın yolur birdir. Demek ki formdan

bilgiler alınıp toplanmalı daha sonra uygun Ģekilde biçimlenip PHP‘ nin kendi fonksiyonları ile e-posta olarak

gönderilmelidir.

Not:

Bu kodu kendi bilgisayarınızda denemeniz için bir

SMTP sunucuya ihtiyaç vardır. Internet ortamında

ise emrinize ait bir SMTP sizi bekliyor olacaktır.

mail() fonksiyonu – PHP ile eposta göndermek

Mail fonksiyonu Mail (kime, konu, mesaj, [ek_baĢlıklar]); Ģeklinde kullanılır.

Bu fonksiyon ile e-posta otomatik olarak "kime" kısmındaki kiĢiye veya kiĢilere gönderilir. Her bir virgül

(,) ayrı bir kısmı göstermektedir. Burada kısımdan kast edilen Ģey bir epoastanın kısımlarıdır. Hedef adres, konu,

bilgi, karbon kopya, gövde metni gibi. Örneğin:

mail("[email protected]", "Deneme", "Merhaba\nBu bir

denemedir\nHoĢçakalın.");

Ek baĢlıkları da yazarsak:

Mail ("[email protected]", "Deneme", "Merhaba\nBu bir denemedir\nHoĢçakalın.", "From:

[email protected]\n‖,‖Reply-To: [email protected]");

Ek BaĢlıkların tümünün daima çift tırnak içinde olduğuna

Page 327: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

327

ve birbirlerinden "\n" ile ayrıldıklarına dikkat edilmelidir.

Bu yazım Ģekli mesajı oluĢtururken de geçerlidir. Mesajı oluĢtururken bir alt satıra geçmek için her zaman ―\n‖

karakteri kullanılmalıdır.

Posta yollarken en sık kullanılan başlıkları

listeleyelim:

From (Kimden)

Reply-to (Cevabın yollanacağı adres)

Cc (Carbon Copy - Karbon kopya)

Bc (Blind Copy - Kör Kopya - gönderdiğiniz e-posta adreslerini gizler)

ġimdi kullanıcının girdiği isim, eposta adresi, yorum bilgilerini [email protected] adresine ―web sitesinden

gönderildi‖ konusuna sahip bir epoasta olarak gönderecek kodu inceleyelim. Burada kullanılacak

formda

isim (ziyaretçi dolduracak)

eposta (ziyaretçi dolduracak)

yorum (ziyaretçi dolduracak)

kime ([email protected])

konu (―web sitesinden gönderildi‖)

Ģeklinde bilgilerin kaynağını belirleyip buna uygun bir

format oluĢturalım.

Önce formu hazırlayalım ve dosyayı feedback.php olarak

saklayalım:

Page 328: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

328

<html>

<head>

<title>Yorum Gönderme 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 dosyasına gönderilecek -->

<form name="eposta" action="sender.php"

method="post">

<table border="0" cellspacing="2" cellpadding="2"

align="left">

<tr> <td colspan="2"> <p align="left">Lütfen

yorumunuzu gönderin.</p></td></tr>

<tr>

<td width="98"> Ad Soyad: </td>

<td width="150"><input type="text" name="isim"><!-- 1. DeğiĢken alındı "isim" --></td>

</tr>

<tr>

<td width="98"> E-Posta: </td>

Page 329: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

329

<td width="150"><input type="text" name="eposta"><!-- 2. DeğiĢken alındı "eposta" --

></td>

</tr>

<tr>

<td width="98">Yorumlarınız </td>

<td width="150"> <textarea name="yorum" cols="55" rows="10"></textarea></td></tr>

<!-- 3. Degisken alındı "yorum" -->

<!-- 4. ve 5. Degisken "kime" ve "konu" ise zaten belli olduğundan ―hidden‖ ile veriliyor-->

<br><input type="hidden" name="kime" value="[email protected]">

<input type="hidden" name="konu" value="web sitesinden gönderilmiĢtir">

<!-- 6. ve 7. değiĢkenler ise buton olduğundan Php

karĢılığı değer almaya gerek yoktur. -->

<tr><td>

<input type="submit" name="gonder" value="Gönder">

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

</p>

<p>Lütfen 10 sn. bekleyin. Tekrar Gönder

butonuna basmanıza gerek yoktur.</p>

Page 330: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

330

</td> </tr>

</table>

</form>

</body>

</html>

ġimdi bu verileri kullanarak elektronik postamızı hazırlayıp yollayacak PHP kodumuzu yazalım:

<?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:[email protected]\n";

$extra .= "Content-Type:text/plain; charset=\"iso-8859-9\"\n";

$extra .= "Content-Transfer-Encoding: 8bit\n";

mail($kime, $konu, $mesaj, $extra);

?>

HTML sayfalarını yayınlarken geçerli olan bütün kurallar, e-posta hazırlarken de geçerlidir: Ġçeriğin hangi karakter

seti ile okunması gerektiğini mutlaka belirtmelisiniz, aksi takdirde e-postanız farklı e-posta istemcilerinde farklı

Page 331: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

331

sonuçlar verecektir! Bu sorunu çözmek için, $extra

değiĢkenine Content-Type ve Content-Transfer-Encoding değerleri eklenmiĢtir. Postanın BCC bölümüne de bir e-

posta adresi yazılarak epostanın aynı zamanda [email protected] adresinede bilgi olarak geçilmesi

sağlanmıĢ oldu.

Son olarak akılda tutulması gereken konu ise kullanıcıyı sonuçtan haberdar etmektir. Böylece hem kullanıcı dostu

bir kod yazılmıĢ olur hemde kullanıcı postanın gönderildiğini görür ve merakta kalıp iĢini sağlama almak

için ikinci bir posta göndermez. Bunun için yukarıdaki

kodun altına sadece birkaç HTML kodu eklenmesi yeterli olacaktır. Sender.php dosyasının 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:[email protected]\n";

$extra .= "Content-Type:text/plain; charset=\"iso-8859-9\"\n";

$extra .= "Content-Transfer-Encoding: 8bit\n";

mail($kime, $konu, $mesaj, $extra);

?>

<html>

Page 332: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

332

<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; Sayın <?php echo($isim) ?>,

formunuz baĢarıyla alındı.</title>

</head>

<body>

<b>Sayın <font color="Purple"><?php echo($isim);

?></font>,

formunuz <b><font color="Purple">

<?php echo($kime); ?></font></b> adresine gönderilmiĢtir.

TeĢekkür ederiz.</b>

</body>

</html>

Bu kodu keni bilgisayarınızda denemek için bir SMTP

sunucuya ihtiyacınız olduğunu hatırlatalım. Ayrıca bu SMTP sunucu varsa ve Windows altında çalıĢıyorsanız,

―php.ini‖ dosyasını açın ve [mail function] baĢlığı altındaki ayarlarınızı Ģu Ģekilde değiĢtirin:

Kullandığınız bilgisayarda kurulu bir SMTP sunucusu varsa:

SMTP = localhost ;for win32 only (Kendi serverınızın smtp ayarını yazın)

Page 333: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

333

[email protected] ;for win32 only (Email

adresinizi yazın)

Öte yandan kendinize ait POP3 ve SMTP destekli bir

adresiniz var ise bunu da kullanmanız olasıdır.

Web Sayfasından Bir Siteye Dosya Yükleme

(Upload)

Upload terimine uygun bir Türkçe karĢılık bulmak sorun.

Biz yükleme diyip geçelim. Normalde kullanıcılar internette gezer yada dosya indirir. Formları iĢlerken

gördüğümüz INPUT etiketinin TYPE="file" parametresi ziyaretçiye Web sunucusuna dosya yükleme (upload)

imkanı sağlamaktadır. Ancak HTTP buna izin versede tarayıcı programları bu yeteneği ileriki sürümlerinde

kazandılar.

Bu endiĢe birazda haklıdır. DüĢünecek olursak; örneğin

kullanıcıdan CV dosyasını yüklemesini istedik. Peki

kullanıcı bunu Word formatındamı yükledi yoksa HTML formatındamı. Peki ya kullanıcı bir punduna getiripte

hack için kullanılabilecek bir dosya yüklerse ne olacak.

Görüldüğü üzere dosya yükleme (upload) olayı hafife

alınacak bir konu değildir. Ġnternette herkesi kötü niyetli gibi düĢünüp ona göre tedbir almak gerekir.

<HTML>

<HEAD>

<TITLE>PHP Kullanarak Dosya Gönderme</TITLE>

<meta http-equiv=\"content-type\"

content=\"text/html; charset=ISO-8859-9\">

</HEAD>

Page 334: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

334

<?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>Tür:</b> $gonder_type<br>\n");

copy ( $gonder, "$dizin/$gonder_name" )or die

("Dosya kopyalanamadı!");

if ( $gonder_type == "image/gif"

||$gonder_type == "image/pjpeg" ) {

print ("<img

src=\"$url/$gonder_name\"><p>\n\n");

}

}

?>

</BODY>

<FORM ENCTYPE="multipart/form-data" ACTION="<?php

print $PHP_SELF?>" METHOD="POST">

<INPUT TYPE="hidden" NAME="MAX_FILE_SIZE"

VALUE="500000">

<INPUT TYPE="file" NAME="gonder"><BR>

<INPUT TYPE="SUBMIT" VALUE="Dosya Yükle!">

</FORM>

Page 335: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

335

</BODY>

</HTML>

Bu programda <INPUT TYPE="file" NAME="gonder"> etiketinde kullandığımız NAME parametresine verdiğimiz

değer, ziyaretçimizin göndereceği dosyanın sunucu tarafından kaydedileceği geçici dizinin tam yolunun

yazılacağı değiĢkenin adı olacakdır. PHP, bu dosya ile ilgili her türlü bilgiyi bu adla kaydedektir. PHP,

ziyaretçiden bir dosya baĢarıyla aktarıldığı anda otomatik olarak bu isimden yararlanarak Ģu değiĢkenleri oluĢturur:

$gonder

Geçici kayıt dizini yolu (UNIX'te /tmp/phpXXX,

Windows'da Windows/TEMP0phpXXX Burada XXX yerine ziyaretçilerin gönderdiği dosyaların sıra numarasını

göreceksiniz.)

$gonder_name

Ziyaretçinin gönderdiği dosyanın adı.

$gonder_size

Ziyaretçinin gönderdiği dosyanın boyutu.

$gonder_type

Ziyaretçinin gönderdiği dosyanın türü

PHP ayrıca bu bilgileri $_POST dizi-değiĢkeninde de

tutar. Yukardaki programda Ģu iki değiĢken çok önemlidir:

$dizin = "/inetpub/wwwroot/";

Page 336: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

336

$url = "http://server/";

$dosya_dizin adıyla oluĢturduğumuz değiĢkene

vereceğimiz değer, ziyaretçinin göndereceği dosyanın kopyalanacağı klasörün adı olarak kullanlacaktır.

Sözgelimi Windows ortamında buraya kiĢisel Web sunucunun varsayılan klasörünün adını yazabilirsiniz.

PHP SERVER DEĞĠġKENLERĠ

PHP sistem bazında yapılacak bazı iĢlemleri kolaylaĢtırma

için ön tanımlı değikenler kullanır. Ancak burada bazır değiĢkenleri her sunucu için geçerli olmadığını

unutmamalıyız. Bu değiĢkenlerin en genel olanlarına bir göz atalım.

PHP_SELF: ÇalıĢan PHP programının bulunduğu

dizin ve adını verir. Özellikler kendi çağrı yapan formlarda bu değer çok

kullanılır.

QUERY_STRING Get metodu ile bilgi alınırken

tarayıcının göndereceği bilgilerin tutulduğu değiken

REMOTE_ADDR Ziyaretçinin bilgisayarına ISS

tarafından atanmıĢ IP adresi

REQUEST_METHOD Form ile gelen bilgilerin gönderildiği

metod: GET veya POST

REQUEST_URI O anda çalıĢmakta olan PHP dosyasının adı ve varsa bu ada

eklenmiĢ Query_String

Page 337: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

337

SCRIPT_FILENAME O anda çalıĢmakta olan PHP

programının dosya adı

SCRIPT_URI O anda çalıĢmakta olan PHP

programının tam URL adresi

SERVER_PROTOCOL Sunucunun HTTP protokolünün sürümü

SERVER_ADDR Sunucunun IP adresi

HTTP_USER_AGENT Kullanıcının sayfayı gezmek için kullandığı tarayıcının imzası. Bir çok

site bu imzaya bakarak farklı kod parçalarını kullanıp uyumsuzluk

sorunlarını elimine etmeye çalıĢmaktadır

HTTP_REFERER Kullanıcın bizim sayfamıza gelmek için tıkladığı linkin bulunduğu sayfa

<?php

phpinfo()

?>

Yukardaki örnek kod kurulu olan PHP programına ait

bilgilerin yanında yukardaki değerleri ve diğer tüm değiĢkenleri listelemektedir. Ancak istenirse özel bir

değiĢkene ait kod yazmak mümkündür.

Page 338: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

338

Kullanıcının Girdiği Değerlerin Doğruluğunu Kontrol Etme

Kullanıcının girdiği değerlerin doğruluğunu kontrol etmek

programın iĢleyiĢi açısından önemlidir. Örneğin kullanıcıya listelemek istediği sınıfı seçmesi için bir form

sunmuĢ olalım. Kullanıcı hiçbir sınıf girmeden ―gönder‖ butonuna tıklarsa ne olacak, ya da sınıf bilgisinde yer

alması imkansız bir kararter girerse ne olacak.

Kullanıcı bir form doldururken dört tür hata oluĢabilir

1. Hatalı girilmiĢ bilgi. Örneğin 01.01.2007 yerine

01/01/2007 gibi.. Yada saat için 10.35 yerine 1035 girmek gibi

2. Tehlikeli bilgi. Özellikle hacking için

3. YanlıĢ bilgi. Avantaj sağlamak için aldatıcı verilen

bilgiler.

4. GirilmemiĢ bilgi.

Doğrulama iĢleminin yapılabileceği iki yer vardır. Kullanıcı tarafı ve sunucu tarafı. Kullanıcı tarafında

Javascript le yazılmıĢ kodlar daha girilirken bilginin kontrolünü sağlarlar. Kullanıcı tarafındaki doğrulamanın

avantajı iĢlem hızlanır ve kontrol anında yapılır. Dezavantajı ise ilave kod ve javascript bilgisi gerektirir.

Sunucu tarafı doğrulama ise form verisi hatalı ise veriler

git-gel-geri git iĢlemine tabi tutulacağından sunucuya binen yük artar. Ancak buradaki kontrollerde gerçekten

daha detaylı olabilirler.

Page 339: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

339

Windows ve Unix Dosya EriĢim Yetkilendirmesi

Her ne kadar ülkemizde çoğunluk Windows yüklü

bilgisayarlarda olsada hosting sistemlerinde genelde Linux yüklüdür. O bakımdan bu konu anlaĢılmalıdır.

Sadece dosya fonksiyonları için değil FTP komutlarını kullanırkende bu bilgiler gerekli olacaktır. Windowsta bu

iĢlem ACL denilen Access Control List ile yapılır. Dosya nitelikleri dosyaya olan yetkilerimizi belirtir. Ancak

dosyanın çalıĢtırılabilir bir dosya olup olmadığını ise Windows dosyanın uzantı adından anlar. Unix bu konuda

farklı bir yaklaĢım uygular. Unixte her dosya ve klasör için kullanıcıların ayrı ayrı yetkileri vardır. Örneğin bir

klasörde duran bir dosya için her kullanıcının okuma,

yazma ve çalıĢtırma anlamında farklı yetki dereceleri vardır. Kısaca unix yada Linux sistemlerde bir dosyanın

var olduğunu bilmeniz hatta dosya listesinde görmeniz o dosyaya eriĢebilme yazda dosyaya yazabilme yetkiniz

olduğu anlamına gelmez. Unix sitemleri için

u : dosya/dizinin sahibi (user)

g : dosya/dizinin sahibiyle aynı grupta olanlar (group)

o : diğer kullanıcılar (others)

a : herkes (all)

Bunların her biri için yetkilerin sayısal değeri hesaplanır.

Okuma yetkisi r, yazma yetkisi w çalıĢtırma yetkisi ise x ile ifade edilecek olursa r : 4, w : 2, x : 1 sayısal değerini

taĢır. Bu hesabın sonucu ise chmod komutu ile dosyaya

uygulanır.

Bir örnekle durumu inceleyelim. Dosya.txt dosyasının

kullanıcı yetkilerini sahibi için, tüm iĢlemler, grup için

Page 340: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

340

okuma ve çalıĢtırma, diğerleri içinse sadece çalıĢtırma

yetkisi olacak Ģekilde ayarlayalım. ĠĢlem sırası Ģöyle olmalı. U, G, O harflerini yazıp altlarına sırası ile rwx

harflerini koyup ve örnekte görüldüğü gibi verilen ifadelerden – veya + olarak yetkileri yazıp daha sonra

bunların sayısal değerini hesaplayabiliriz.

U G O

rwx rwx rwx

+++ +-+ --+

4+2+1 4+0+1 0+0+1

Sonuç değeri ise U için 7, G için 5 ve O içinse 1 olur.

Bunları yan yana yazarak chmodi ile kullanılacak 751 değeri bulunur. Buradan anlayacağınız gibi 777 niteliği

olan bir dosya herkes arafından her iĢleme açık durumdadır.

FTP programları dosya niteliği ayarlarken rastgele 777 değerini kullanmamaya özen gösterilmelidir. Buna dikkat

edilemezse böyle bir açık bekleyen hackerlar can

yakabilir.

Page 341: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

341

PHP Klasör Fonksiyonları

mkdir() fonksiyonu (Klasör oluĢurmak)

Bu fonksiyonlar eğer sunucudaki yetkilerimiz izin veriyorsa klasör oluĢturabiliriz.

mkdir ("test", 777);

777 parameresi klasör için izinleri belirtir ve sadece Unix

ve türevlerinde geçerlidir.

rmdir() fonksiyonu (Klasör silmek)

Bu fonksiyonlar eğer sunucudaki yetkilerimiz izin veriyorsa klasör silebiliriz.

rmdir ("test");

chdir() fonksiyonu (Klasör değiĢtirmek)

Bu fonksiyonla aktif klasörü değiĢtirebiliriz.

is_dir() fonksiyonu (Dizin mi)

yukardaki örnekte görülebileceği gibi bir parametrenin bir klasör olup olmadığını test etmek içinse bu fonksiyon

kullanılır. Ġsim bir klasöre aitse fonksiyon true/doğru,

değilse false/yanlıĢ sonuç verir. Örnek:

<?

if ( is_dir ( "/klasor1" ) )

print ("Bu bir klasor!");

?>

Page 342: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

342

opendir() fonksiyonu (Klasörü açmak)

Bir klasörü açar. Deyim yerindeyse okumak için müsaitmi kontrol eder.

readdir() fonksiyonu (Klasörü okumak-listelemek)

Klasörün içindeki dosya ve alt klasör isimleri sıra ile okur.

closedir() fonksiyonu (Klasörü kapatmak)

Opendir ile açılan klasörü kapatır.

<?php

$klasor_adi = "./";

$klasor = opendir ($klasor_adi);

while ( gettype ( $info = readdir( $klasor ) ) !=

boolean ) {

if ( is_dir( "$klasor_adi/$bilgi" ) )

print " [Klasör] " ;

print ("<A

href=\"$klasor_adi/$bilgi\">$info</A><br>\n");

}

closedir ($klasor);

?>

Yukardaki örnek kodla; alt klasörler sıra ile HTML

formatında listelenmektedir. AĢağıdaki kod ise dosyaları listelemektedir.

<?

$dizinler=opendir(".");

Page 343: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

343

while (($dosya = readdir($dizinler))!==false)

{ echo ("<li>$dosya\n");

}

closedir($dizinler);

?>

ġimdi kapsamlı bir örnekle dosyaları listeleyip, link

halinde gösterlim ve tıklanan dosyayıda içerik olarak okuyup ekrana çıkaralım.

Öncelikle dosyaları listeleyen kod liste.php

<?

if ($basla)://form doldurulmuĢsa if-else arası

kısım çalıĢır

$i=1;

$dizinler=opendir("$yol");//dizini açıyoruz

while (($dosya = readdir($dizinler))!==false)

/*dosyalar bitinceye kadar okuyor ve atama

yapıyoruz*/

{

if ((substr($dosya,-4,4)==".php") &&

$yol!=""):

/*eğer dosya adının sondan 4‟hanesinden

itibaren 4 hanesi .php ise yap*/

echo ("<li><a

href=dok.php?ad=$yol/$dosya>$dosya</a><br>");

$i++;

Page 344: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

344

elseif ((substr($dosya,-4,4)==".php") &&

$yol==""):

echo ("<li><a

href=dokum.php?dosyaad=$dosya>$dosya</a><br>");

$i++;

else:

$i++;

endif;

}

closedir($dizinler);

else: //form doldurulmamıĢsa else-endif bloğunu

yapar yani yol ister

?>

<form action="liste.php" method="post">

Yol <input type="text" name="yol"><br>

<input type="submit" name="basla"

value="gonder">

</form>

<?

endif;

?>

Bu kod ise dokum.php

<? //dokum.php

show_source($dosyaad);

Page 345: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

345

/*diğer dosyanın adres satırından gelen $dosyaad

değiĢkeninin ifade ettiği dosya içeriğini ekrana

döker*/

?>

Örnek çalıĢtırıldığında ekrana form gelecektir. Burada

içeriğinin görüntülenmesi istenilen dizin adı girilir, eğer boĢ geçilirse dosyanın bulunduğu dizin baz alınır. Daha

sonra dosyalar tek tek listelenecektir. Herhangi bir dosya adı tıklandığında ise show_source fonksiyonu

çalıĢacak ve dosyayı görüntüleyecektir.

PHP Dosya Fonksiyonları

Normalde bu fonksiyonlar da diğerleri ile birlikte anlatılabilrdi. Ancak programcılık dünyasında metin

dosyaları VTYS sistelerinin çıkmasından önce ver depolamak için kulanıldığından bu konunun oradan önce

gelmesi daha uygun göründü. PHP dili ile formlar hazırlayarak metin dosyalarını depo olarak kullanan

güzel uygulamalar yapılabilir. Örneğin basit bir sayaç, ziyaretçi defteri, sözlük gibi. Önce fonksiyonları basit

örneklerle görüp sonra kompleks kullanımlara bakalım.

file_exits() fonksiyonu (Dosya var mı?)

Bir dosyanın var olup olmadığını denetleyen bu

fonksiyon, dosya varsa true(doğru), yoksa false(yanlıĢ) sonucunu verir. Parametre verilirken klasör adıda

iletilebilir ancak burada daha önce HTML konusunda önerdiğimiz gibi ―/‖ kullanımına dikkat edilmelidir.

<?php

if ( file_exits ( "dosya.txt" ) )

Page 346: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

346

print ("Dosya var!");

?>

Örnek kodumuz ―dosya.txt‖ adında bir dosya var mı diye kontrol etmektedir. Eğer dosya varsa ―Dosya var‖ mesajı

görüntülenecek 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)

Adını verdiğimiz dosyanın boyutunu byte cinsinden bir

değer olarak verir:

Örnek:

<?php

print ("Dosyanın büyüklüğü (byte cinsinden) :");

print filesize( "dosya.txt" );

?>

Page 347: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

347

is_file() fonsiyonu (Dosya mı )

Klasörlerle dosyaların isimlendirilmesi ile teknik anlamda bir ayrıma gidilmiĢ olmaz. Bunlar temelde nitelikleri ile

ayrılırlar. Kullanıcı verilen parametredeki ismin bir dosya olup olmadığı test etmek için bu fonksiyonu kullanabilir.

Örnek olarak farzedelim kullanıcı forma dosya adını girecek ve buna mukabil o dosyanın içerği ekrana

yazdırılacak olsun. Ya girilen isim bir dosya değilde klasöre aitse ne olacaktır. Haliyle kodumuz

çalıĢmayacaktır. Oysa okuma iĢlemine baĢlamadan önce is_file() ile test yapılmıĢ olsaydı kod Ģartlar doğru

olduğundan çalıĢacak, Ģart sağlanmadıysa yani öyle bir dosya yok ise bir mesaj verilebilecekti. Parametre olarak

verilen isim bir dosyaya ait ise fonksiyon true/doğru,

değilse false/yanlıĢ sonuç verir. Örnek:

<?

if ( is_file ( "dosya.txt" ) )

print ("Bu bir dosyadır!");

?>

is_readable() fonksiyonu (Dosya okunabilir mi?)

Programda kullanmaya kalkmadan önce bir dosyanın eriĢilebilir ve PHP tarafından okunabilir olup olmadığını

kontrol etmek isteyebiliriz. Ortalama bir Windows kullanıcısı iseniz bu olay sizin için bir anlam ifade

etmeyebilir. Çünkü Windowsta normal Ģartlar altında dosya var ise okunabilirdir. Ancak unix ekolü sistemlerde

dosyanın var olması yetmez birde bağlandığınız kullanıcı hesabının o dosyayı okuma izni olması gerekir. Bu

Page 348: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

348

fonksiyon dosya okunabilir ise true/doğru, değilse

false/yanlıĢ sonuç verir. Örnek:

<?

if ( is_readable ( "dosya.txt" ) )

print ("Bu dosya okunabilir bir dosyadır!");

?>

is_writable() fonksiyonu (Dosya yazılabilir mi? )

Programda kullanmaya kalkmadan önce dosyanın

eriĢilebilir ve yazılabilir olduğunu kntrol etmeye yarar. Dosya yazılabilir ise true/doğru, değilse false/yanlıĢ

sonuç verir. Yukarda ki örnekte açıklandığı gibi Unix ekolü sistemlerde dosyanın eriĢilebilir olması yanında

bağlantı sağladığımız hesabın o dosyaya yazma yetkisi olmasıda gereklidir. Örnek:

<?

if ( is_writable ( "dosya.txt" ) )

print ("Bu dosyaya yazılabilir!");

?>

is_executable() fonksiyonu (Dosya çalıĢtırılabilir mi? )

PHP dili ile iĢletim sistemi komutlarınında çalıĢtırılabileceğinden daha önce bahsetmiĢtik. Ancak bu

iĢlemden önce bu komutu çalıĢtırmaya yetkimiz olup olmadığını kontrol etmemiz yerinde olur. ĠĢletim

sisteminin komutlarını çalıĢtırma olayı çok komplez bir konudur ve açıkçası böyle bir olayı bir dil içinde

Page 349: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

349

kodlamak çok maharet gerektiren bir iĢtir. DüĢünelim;

hosting makinesi Linux olsun ve bu makinede RAR programı yüklü olsun. Linux sistemlerde kullanıcı Ģifreleri

passwd dosyasında tutulmasından hareketle rar a –d pass passwd dosyasını bir yere sıkıĢtırıp sonra silmek ve

daha sonra mail komutu ile bu dosyayı bir adrese mail yoluyla göndermek mümkündür. Böyle bir açığı

affedecek hacker yoktur. Onun için bir çok hosting Ģirketi dosya çalıĢtırma yetkisini ya hiç vermez yada çok kısıtlı

kullandırır.

Bu fonksiyon dosya çalıĢtırılabilir ise true/doğru, değilse

false/yanlıĢ sonuç verir. Örnek:

<?

if ( is_executable ( "dosya" ) )

print ("Bu dosya çalıĢtırılabilir!");

?>

touch() fonksiyonu (dosya oluĢturma)

touch fonksiyonu bir metin dosyası oluĢturmak için

kullanılır. Eğer verilen isimde bir dosya zaten varsa içeriğine dokunmadan dosya tarihi vs bilgiler değiĢtirilir.

<?php

$klasor = "/text/";

touch ("$klasor/dosya.txt");

print ("dosya.txt adlı bir dosya oluĢturuldu!");

?>

Page 350: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

350

unlink() fonksiyonu (dosya silme)

Unix sistemlerde dosya isimleri dosyanın fiziksel haline bir bağlantı kabul edilirler. Dolayısı ile bu bağlantıyı

kırmak dosyaya eriĢimide imkansız kılar. Kısaca dosya aslında silinmiĢ olur. PHP ile mevcut bir dosyayı silmek

için unlink() fonksiyonu kullanılır. Bu fonksiyon da silinecek dosyanın adı ile birlikte yolunu ister. Bu komut

Windows sistemlerinde iĢlemeyebilir. Örnek:

<?php

$klasor = "/files";

unlink ("$klasor/dosya.txt");

print ("dosya.txt adlı dosya silinmiĢtir!");

?>

copy() fonksiyonu (dosya kopyalama)

PHP ile dosyaları kopyalamak için bu fonksiyon kullanılır.

Bu fonksiyon iki parametre alır. Kaynak dosya ve hedef dosya. Ancak hedef dosya için gerekli oluĢturma

yetkimizin olup olmadığı, kaynak dosyayı görme yetkimizin olup olmadığı bu komut için önemlidir.

<?php

copy("yenidosya.txt","yenidosya2.txt");

?>

readfile() fonksiyonu (Dosyayı satır satır okumak ve ekrana yazmak)

Dosyanın tamamen ekrana yazılması için kullanılır.

readfile(“dosyaadı”);

Page 351: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

351

fopen () fonksiyonu (dosya açma)

Bir dosyayı açmak için kullanılır. Dosyanın ne amaçla açılacağı ise parametre halinde verilir. w dosyayı yazmak

için, r okumak için ve a ise varolan bir dosyaya ek bilgi girmek için kullanılır. Bu fonksiyon dosyanın baĢarıyla

açılması halinde bir tamsayı değeri sonuç olarak verecektir. PHP programlarımızda, açılan dosyanın

mutlaka ona iĢaret eden bir değiĢkene (file pointer) bağlı olması gerekir; daha sonra bu dosya ile ilgili bütün

iĢlemleri bu iĢaret değiĢkeni ile yaparız. Örnek:

<?

$dosya = fopen( "dosya.txt" , 'r' ); // okumak

için

$dosya = fopen( "dosya.txt" , 'w' ); // yazmak

için

$dosya = fopen( "dosya.txt" , 'a' ); // eklemek

için

?>

―r‖ modunda PHP, bu dosyayı sadece okumak amacıyla açacak ve fonksiyondan dönen değeri $dosya

değiĢkenine atayacaktır. Olmayan bir dosyayı açmak istediğimiz zaman PHP hata mesajı verir. Olmayan bir

dosyayı yazmak amacıyla açmak istediğimizde PHP önce

bu dosyayı oluĢturur. Bir dosyaya ek yapmak istediğimiz zaman ise kodumuz örneğin son satırındaki gibi kullanılır.

fopen() komutunun parametreleri

r : Sadece okuma iĢlemi yapılacağı zaman

kullanılır.

Page 352: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

352

r+: Hem yazma hem de okuma iĢlemine izin verir.

Dosyayı silmez.

w: Sadece yazma iĢlemine izin verir. Eğer sistemde

belirtilen adda bir dosya varsa, dosyanın içeriği silinir ve boyutu sıfırlanır. Eğer belirtilen adda

dosya yoksa, yeni bir dosya oluĢturulur.

w+-: Hem yazma hem de okuma iĢleminde

kullanılır. Eğer dosya varsa silinerek yenisi oluĢturulur. Dosya yoksa yeni bir dosya

oluĢturulur.

a : Sadece yazma iĢlemi için kullanılır.

a+ : Hem okuma hem de yazma iĢlemlerine izin verir. Eğer dosya yoksa oluĢturur.

fgets () fonksiyonu (dosyadan satır satır okuma)

Bir dosyadan bilgi okumak için kullanılır. Okunacak karakter sayısı parametre olarak verilmiĢ olsada satırın

bundan önce sonlanması veya dosya sonuna gelinmesi bir hataya sebep olmaz. Bu durumda fonksiyon

okuyabildiği kadar karakteri sonuç olarak verir.

fseek () fonksiyonu (dosya içinde bir yere konumlanma)

Bir dosya açıldığı zaman dosya imleçi dosyanın baĢına konumlanmıĢtır. Keza fgets kullanımında her satır

bitiminde imleç bir sonra ki satıra konumlanır. Fseek fonksiyonu imleçi parametre olarak verilen bir konuma

doğrudan konumlandırmak üzere kullanılır.

Page 353: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

353

fread () fonksiyonu (dosyadan belirli sayıda karakter okuma)

Bazen bir dosyayı satır satır okumak yerine istenen

sayıda karakter blokları halinde okutmak dan bilgi okumak için kullanılır. Okunacak karakter sayısı

parametre olarak verilmiĢ olsada dosya sonuna gelinmesi bir hataya sebep olmaz. Bu durumda fonksiyon

okuyabildiği kadar karakteri sonuç olarak verir. Bu fonksiyon genel olarak fseek ile kullanılır.

fgetc () fonksiyonu (dosyadan birer birer okuma)

Bazen bir dosyanın satır satır yada blok olarak okumak

yerine byte byte okunması istenebilir. Bu iĢlem içinse

fgetc kullanılır.

feof () fonksiyonu (dosya sonuna gelindi mi)

Bir dosyadan bilgi okuma esnasında dosya sonuna gelinigelinmediğini kontrol etmek önemlidir. Bu fonksiyon

bu iĢ için kullanılır ve eğer dosya sonu ise true değerini verir.

fclose () fonksiyonu (dosyayı kapat)

Yapılacak iĢlem bittikten sonra dosyayı kapatıp bağlantıyı

kesmek için kullanılır. Bu aĢama önemlidir çünkü gereksiz yere açık duran her dosya sistem kaynaklarını

kullanmaktadır.

ġimdi fgets, feof ve fclose kullanan basit ve ilkel bir

dosya içeriği listeleme örneği görelim

<?php

if ($dosya = (fopen ("dosya.txt" , 'r') ) ) {

Page 354: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

354

print ("Dosya açıldı!<br>");

}

else {

print ("Dosya açılamadı!");

}

while (!feof ($dosya))

{

$satir = fgets ( $dosya, 1024 ) ;

print ("$satir<br>");

}

fclose ($dosya);

?>

Örnekte görüldüğü gibi dosya açılmaya çalıĢılıyor ve

duruma uygun mesajı ekrana basıldıktan sonra dosya içeriği satır satır ekrana yazdırılıyor. Fgets ile 1024

değerinin kullanılması kafa karıĢtırabilir. Ancak eğer satır

1024 ten kısa ise fgets okuyabildiği kadarını kabul eder. while() döngüsü, feof() doğru değilken devam etmek

üzere kurulmuĢ olduğu için, dosya sonuna ulaĢıldığında döngü duracaktır. Okuma iĢlemi durabilen bir döngü

içinde kullanılmazsa, fgets() PHP'nin bir programın sona ermesi için verilmiĢ varsayılan süresi doluncaya kadar

dosyayı okumak isteyecektir. Bunun kısa anlamı ise sonsuz döngüdür.

ġimdi fseek ve fread kullanan örneğe bakalım;

<?php

Page 355: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

355

$adi =”dosya.txt”;

if ($dosya = (fopen ($adi, 'r') ) ) {

print ("Dosya açıldı!<br>");

}

else {

print ("Dosya açılamadı!");

}

$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 aĢağıdadır.

<?php

$adi = "dosya.txt";

if ($dosya = (fopen ($adi , 'r') ) ) {

print ("Dosya açıldı!<br>");

}

else {

print ("Dosya açılamadı!");

}

Page 356: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

356

while ( ! feof ($dosya) ) {

$bytebyte = fgetc ( $dosya ) ;

print ("$bytebyte");

}

fclose ($dosya);

?>

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

PHP açısından dosyaya ekleme yada yazma teknik anlamda farklı bir iĢlem değildir. Sadece dosyanın açılma

aĢaması farklıdır. fputs ve fwrite aynı iĢi yaparlar ve aynı Ģekilde kullanılırlar.

$dosya = fopen( "bir_dosya.txt" , 'w' ) or die

("Dosya açılamıyor!") ; // yazmak

$dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("Dosya

açılamıyor!") ; // eklemek

<?php

$adi = "dosya.txt";

$dosya = fopen ($adi , 'w') or die ("Dosya

açılamadı!");

$str = "Bu satır dosyaya kaydedilecek: Ġbrahim

Kutluay!\n";

fwrite ( $dosya , $str ) ;

fputs ( $dosya , "PHP dersleri. Bu satır ise fputs

ile yazılmıĢtır \n" ) ;

Page 357: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

357

fclose ($dosya);

?>

<?php

$adi = "dosya.txt";

$dosya = fopen ($adi , 'a') or die ("Dosya

açılamadı!");

$str = "Bu satır dosyaya kaydedilecek: Ġbrahim

Kutluay!\n";

fwrite ( $dosya , $str ) ;

fputs ( $dosya , "PHP dersleri. Bu satır ise fputs

ile yazılmıĢtır \n" ) ;

fclose ($dosya);

?>

flock() fonksiyonu (Kullanımdaki dosyayı kilitleme)

Ġlk bakıĢta kilitleme kelimeside böyle bir Ģeye neden ihtiyaç duyulduğuda anlamsız gelebilir ancak dosya

kilitleme kesinlikle gereklidir. Metin dosyaları tabiatları gereği tek kullanıcılıdır. Bu bakımdan VTYS tabir

ettiğimiz gerçek vertbanı dosyalarından farklıdırlar. Örneğin bir kullanıcı metin dosyasını kayıt eklemek üzere

açmıĢken hemen bir karıĢıklık olabileceğini söylemek mümkündür. ĠĢte bu yüzden iĢlem yapılırken dosyanın

geçici olarak kilitlenmesi en sağlık lı yöntem olacaktır. Bu

fonksiyona kilitlemek istediğimiz dosyanın iĢaret değiĢkeninin adını ve kilit türünü belirten sayıyı

Page 358: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

358

parametre olarak vermek gerekir. Bu fonksiyon ile

kullanabileceğimiz kilit türü parametreleri Ģunlardır:

1:Paylaşım Diğer proseslerin dosyayı paylaĢmalarına

imkan verir

2:Tam Diğer proseslerin dosya ile iĢlem

yapmasına engel olur

3:Serbest Dosyanın 1 veya 2 olan kilidini kaldırır

Örnek:

<?php

$adi = "/www/dosya.txt";

$dosya = fopen ($adi , 'w') or die ("Dosya

açılamıyor!");

flock ( $dosya , 2); // dosyayı kilitle komutu

böylece verildi

$str = "Merhaba Dünya!\n";

fwrite ( $dosya , $str ) ; // dosyaya yazıldı

fputs ( $dosya , "Merhaba Hayat \n" ) ;

flock ( $dosya , 3); //dosyanın kilidini çöz

fclose ($dosya);

?>

Bir dosya, kilitlendiği anda, aynı dosyayı daha sonra kilitlemeye kalkan diğer programlar kendilerinden önce

konulmuĢ kilide saygı gösterirler. Yani kilitli dosya bir daha kilitlenemez. Önce ilk kilidin çözülmesi gerekir.

Page 359: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

359

fileadate() fonksiyonu (Dosyaya son eriĢim tarihi- file access date )

Bir dosyaya son eriĢim tarihini Epoch formatında verir.

Date() ile bunu anlamlı hale getirmek mümkündür.

filemdate() fonksiyonu (Dosyanın son değiĢtirilme tarihi- file modification date)

Bir dosyanın en son değiĢtirildiği tarihi Epoch formatında

verir. Date() ile bunu anlamlı hale getirmek mümkündür. En çok sayfaların sonuna son değiĢiklik tarihini

yazdırmak için kullanılır.

filecdate() fonksiyonu (Dosyanın oluĢturulduğu tarih - file creation date)

Bir dosyanın oluĢturulduğu tarihi Epoch formatında verir. Date() ile bunu anlamlı hale getirmek mümkündür.

<?php

print ("son değiĢiklik tarihi :");

$islemtarihi = filemdate( "dosya.txt" );

print date("D d M Y G:i:s H", $islemtarihi

);

?>

CSV Dosya Fonksiyonları

CSV dosyaları (Virgülle AyrılmıĢ Değerler- Comma Separated Values) değerlerin belirli bir karakterle

ayrıldığı metin dosyalarıdır. Bu karakter genelde ―;‖ yada ―,‖ (noktalı virgül yada virgül) karakteridir. Standart bir

format olup veri alıĢveriĢi için uygundur. Metin dosyada

Page 360: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

360

bir tablo gibi kullanıma imkan verir. Excel tafından

iĢlenebilir. Onun için bir metin dosyasını Excel ile açmak için uzantısını csv yapmak yeterlidir.

PHP dilinde CSV dosyalarından bilgi okumak için fgetcsv,

CSV dosyasına bilgi yazmak içinse fputcsv kullanılır.

fgetcsv() fonksiyonu (CSV dosyasını satır satır okuma)

Metin dosyaları için bu iĢlemi fget ile yaparken CSV dosyaları biraz ayrı bir iĢleme ihtiyaç duyarlar. Örneğin

(―Ġbrahim‖;‖Kutluay‖;33) bilgilerini ele alırsak görüleceği gibi metindeki ― karakterlerinin çıkarılması ve ―;‖ ile

ayrılmıĢ değerlerinden iĢlenmesi gereklidir. fgetcsv() de tam olarak bunu yapar. fget () fonksiyonundan farklı

olarak okuduğu satırı iĢler ve bilgileri bir dizinin

elemanları olarak dönderir.

<?php

$satir = 1;

$handle = fopen("test.csv", "r");

while (($data = fgetcsv($handle, 1000, ",")) !==

FALSE) {

$bilgisay = count($data);

echo "<p> $satir satırında $bilgisay alan

bulundu: <br /></p>\n";

$satir++;

for ($c=0; $c < $bilgisay; $c++) {

echo $data[$c] . "<br />\n";

Page 361: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

361

}

}

fclose($handle);

?>

Yukardaki kod bir CSV dosyasını satır satır okuyup döngü içindeki bilgileri değerlere ayrılmıĢ olarak yazmaktadır.

fputcsv() fonksiyonu (Değerleri CSV formatında yazma)

Metin dosyaları için bu iĢlemi fput ile yapılmaktaydı.

Ancak (―Ġbrahim‖;‖Kutluay‖;33) bilgilerini ele alırsak görüleceği gibi metindeki ifadelerin iĢlenmesi gereklidir.

Split fonksiyonu ilede CSV ayracının eklenmesi gereklidir. Kendisine parametre olarak geçilen dizinin

elemanlarını CSV biçimine uygun Ģekilde düzenler ve dosyaya yazar. Geriye yazılan metnin boyutu döner,

iĢlemde bir hata varsa da dönen değer FALSE olur.

<?php

$liste = array (

'aaa,bbb,ccc,dddd',

'123,456,789',

'"aaa","bbb"'

);

$dosya = fopen('text.csv', 'w');

Page 362: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

362

foreach ($liste as $satir) {

fputcsv($dosya, split(',', $satir));

}

fclose($dosya);

?>

Yukardaki kod bir CSV dosyasını satır satır okuyup döngü

içindeki bilgileri değerlere ayrılmıĢ olarak yazmaktadır.

KullanıĢlı Bir Örnek Kayıt Arama

Öğrenci Notlarını Webde Yayınlama

PHP ile birbirine benzer yapıda dizayn edilmiĢ ancak günlük hayatta kullanılabilecek örnekler yapalım. Ġlk

örnek öğrenci notlarını web sitesinden yayınlamak olsun. Öğrenci notlarının CSV formatında bir dosyada

tutulduğunu ve bu dosyanın hazır olduğunu varsayarak; aĢağıdaki örnek veriler ıĢığında

542;62

543;78

544;45

545;52

örnek koda geçelim;

<html>

Page 363: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

363

<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 style="font-color:red;"> Not arama</td></tr>

<tr><td> No</td> <td><input type="TEXT" name="no"></td></tr>

<tr><td> <input type="SUBMIT" value

="ARA"></td></tr>

</table>

</form>

<?}

else :

$no=$_POST['no'];

//echo $no; deger aliyormu kontrol için

Page 364: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

364

$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 için kullanabiliriz

if ($satir[0]==$no)

{

$varmi=true;

break;

}

}

if ($varmi)

{

Page 365: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

365

echo "<b>$satir[0]</b> numaralı kiĢi : <b>$satir[1]</b> almıĢtır";

}

else {echo "numara bulunamadı"; }

endif;

?>

</body>

</html>

Yukardaki kodda Ģimdiye kadar gördüğümüz bir çok bilgi

bir araya getirilmiĢtir. Her Ģeyden önce programda tek dosya içinde hem form hemde formu iĢleyen kod

verilmiĢtir. Program ilk kez çalıĢtığında $_POST dizi değiĢkeni boĢ olacağından, programın form kısmı ekrana

verilmekte ve notu aranan öğrenci numarasının girilmesi istenmektedir. Bilgi girilip butona tıklandığında ise

$_POST bu sefer dolu olacağından programın formu

iĢleyen kısmı yani bu numarayı arayan kısım çalıĢacaktır.

Arayan kısımda ise sıra ile satırlar fgetcsv ile okup

parçalanmakta ve soldaki ilk bilginin yani parçalandıktan sonra dizinin [0]. elemanının forma girilen bilgiye eĢit

olup olmadığı kontrol edilmektedir. EĢitlik sağlandığında döngü kırılmaktadır aksi takdirde numara bulunsa bile

dosya bitene kadar döngü sürecek ve web sunucuya adeta iĢkence çektirecektir.

Basit Telefon Rehberi

Yukardaki örnekte ufak bir değiĢiklik yaparak aynı

programı bu defa basit bir telefon rehberine çevirebiliriz.

Page 366: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

366

Rehberin yine CSV formatında ve hazır olduğunu

varsayalım; aĢağıdaki örnek veriler ıĢığında

Ahmet;05335333355

Mehmet;0542542442

örnek koda geçelim;

<html>

<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 style="font-color:red;"> Telefon Rehberi </td></tr>

<tr><td> Ġsim giriniz</td> <td><input type="TEXT"

name="isim"></td></tr>

Page 367: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

367

<tr><td> <input type="SUBMIT" value ="ARA"></td></tr>

</table>

</form>

<?}

else :

$isim=$_POST['isim'];

$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 için kullanabiliriz

if ($satir[0]==$isim)

{

Page 368: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

368

$varmi=true;

break;

}

}

if ($varmi)

{

echo "<b>$satir[0]</b> isimli kiĢinin telefon numarası : <b>$satir[1]</b>";

}

else {echo "numara bulunamadı"; }

endif;

?>

</body>

</html>

Bu kodda da tek dosya içinde hem form hemde formu

iĢleyen kod verilmiĢtir. Program ilk kez çalıĢtığında

$_POST dizi değiĢkeni boĢ olacağından, programın form kısmı ekrana verilmekte ve numarası aranan kiĢinin

girilmesi istenmektedir. Bilgi girilip butona tıklandığında ise $_POST bu sefer dolu olacağından programın formu

iĢleyen kısmı yani bu ismi arayan kısım çalıĢacaktır.

Arayan kısımda ise sıra ile satırlar fgetcsv ile okup

parçalanmakta ve soldaki ilk bilginin yani parçalandıktan sonra dizinin [0]. elemanının forma girilen bilgiye eĢit

olup olmadığı kontrol edilmektedir. EĢitlik sağlandığında

Page 369: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

369

döngü kırılmaktadır aksi takdirde numara bulunsa bile

dosya bitene kadar döngü sürecektir.

Basit Sözlük

Yukardaki örnekte yine ufak bir değiĢiklik yaparak aynı

programı bu defa basit bir sözlük olarak kullanabiliriz. Verilerin yine CSV formatında ve hazır olduğunu

varsayalım (internette hazır halde bir sürü kelime listesi

çeĢitli formatlarda bulunmaktadır. Dolayısı ile bu uygulamayı Ģirket için bir sözlük olarak kullanmanız

mümkündür). AĢağıdaki örnek verileri inceleyecek olursak;

yes;evet

no;hayır

evet;yes

hayır;no

name;ad,isim

ad;name

isim;name

bu yapıda bir veri ile hem Ġngilizce hem Türkçe sözlük

olarak aĢağıdaki 30-40 satırlık programı kullanabileceğimizi görürüz. örnek koda geçelim;

<html>

<head>

<title>CSV arama</title>

<META Http-Equiv="Pragma" Content="no-cache">

Page 370: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

370

<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 style="font-

color:red;"> Basit Sözlük </td></tr>

<tr><td> Kelimeyi Giriniz </td> <td><input

type="TEXT" name="sozcuk"></td></tr>

<tr><td> <input type="SUBMIT" value

="ARA"></td></tr>

</table>

</form>

<?}

else :

$sozcuk=$_POST['sozcuk];

$dosya="dosya.csv";

$baglan=fopen($dosya,'r');

if (!$baglan)

{

Page 371: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

371

echo "baglanti kurulmadı";

exit();

}

else

{

echo "tabloya baglandi <br>"; }

while (!feof($baglan))

{

$satir=fgetcsv($baglan,filesize($dosya),";");

//echo $satir[0]; okuyor mu kontrol için kullanabiliriz

if ($satir[0]==$sozcuk)

{

$varmi=true;

break;

}

}

if ($varmi)

{

echo "<b>$satir[0]</b> kelimesinin anlamı:

<b>$satir[1]</b>";

}

else {echo "kelime dosyada mevcut değil "; }

endif;

Page 372: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

372

?>

</body>

</html>

Bu kodda da tek dosya içinde hem form hemde formu

iĢleyen kod verilmiĢtir. Program ilk kez çalıĢtığında $_POST dizi değiĢkeni boĢ olacağından, programın form

kısmı ekrana verilmekte ve numarası aranan kiĢinin girilmesi istenmektedir. Bilgi girilip butona tıklandığında

ise $_POST bu sefer dolu olacağından programın formu iĢleyen kısmı yani bu ismi arayan kısım çalıĢacaktır.

Arayan kısımda ise sıra ile satırlar fgetcsv ile okup parçalanmakta ve soldaki ilk bilginin yani parçalandıktan

sonra dizinin [0]. elemanının forma girilen bilgiye eĢit olup olmadığı kontrol edilmektedir. EĢitlik sağlandığında

döngü kırılmaktadır aksi takdirde numara bulunsa bile

dosya bitene kadar döngü sürecektir.

Basit Ziyaretçi Defteri

Ziyaretçi defterleri kullanıcı etkileĢim için ideal bir yoldur.

Kullanıcı buraya bir not yada soruyu yazar sizde bunu görebilirsiniz. Hatta cevapta yazabilirsiniz... Burada kod

olarak basĢt bĢr ziyaretçi defteri verilecektir. Ġlk amaç

alınan bilgileri bir metin dosyada depolamak ve bunları biçimli olarak geri yazdırmak… ileri seviye bir ziyaretçi

defterinden beklenenler ise ;

Ayıp kelime süzgeci (Herkes size hayranlığını ifade

etmeyebilir)

Page 373: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

373

Ziyaretçilerin durmadan yada otomasyon yoluyla

yazmasının önüne geçmek için otomatik onay kodu üreteçleri

Bilgilerin doğruluğunu kontrol etmeli

Veritabanı kullanımı

<?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 ACTION="<?$PHP_SELF;?>"

METHOD="POST">

<P><font size='3' face='verdana, Arial,

Helvetica'>

Defteri imzalamadan okumak için <a

href='zd1mesaj.php'>

burayı tıklayın</a></FONT></P>

Page 374: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

374

<P><font size='3' face='Arial, Helvetica'>

Adınız, Soyadınız: <br><INPUT TYPE="TEXT"

NAME="adi"><BR>

Email Adresiniz: <br><INPUT TYPE="TEXT"

NAME="adres"><BR>

Mesajınız:<BR>

<TEXTAREA NAME="mesaj" ROWS=10 COLS=30></TEXTAREA>

<BR><BR><BR>

<INPUT TYPE="SUBMIT" VALUE="Gönder">

<INPUT TYPE="RESET" VALUE="Sıfırla">

</FORM>

</BODY>

</HTML>

<?

}

else

{

?>

<HTML>

<HEAD>

<TITLE>PHP'de Ziyaretçi Defteri</TITLE>

<meta http-equiv='content-type'

content='text/html; charset=ISO-8859-9'>

Page 375: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

375

<meta http-equiv='Content-Type' content='text/html; charset=windows-1254'>

</HEAD>

<BODY>

<P><font size='3' class='s4' face='Arial, 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>");

$metin = "$buyugecevir: $deger<br>";

fputs($baglanti, $metin);

}

fputs($baglanti, date("D d M Y h:i:s"));

fputs($baglanti, "<br>\n");

Page 376: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

376

fputs($baglanti, "<center><img src='nokta.gif' width=100% height=1

border=0></center>\n");

fclose($baglanti);

?>

<HTML>

<HEAD>

<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 size='3' class='s4' face='Arial, Helvetica'>

<center><img src='nokta.gif' width=100%

height=1 border=0></center>

Sayın: <?$adi=$_POST['adi'];echo $adi;?><br>

Deftere bilgi girdiğiniz için teĢekkür ederim </P>

<p>Ana Sayfaya Dönmek için <A

HREF="index.php"> tıklayın</A><BR>

Mesajları okumak için<A HREF="zd1mesaj.php">

tıklayın</A>

</BODY>

Page 377: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

377

</HTML>

<?

}

?>

Program öncelikle gönderilen bir değer varmı diye bakıp,

eğer bu değer varsa değerleri iĢlemek, yoksa formu gönderip değerleri toplamak üzere tasarlanmıĢ

durumdadır. if (!$_POST) kodu ile değer olup olmadığı kısaca form üzerinde gönder düğmesine baslıp baılmadığı

kontrol ediliyor. Eğer form iletilmiĢ ise bu defa mesajların kaydedileceği dosya zaten varmı diye bakılıyor. Eğer

dosya varsa ―eklemek‖ yoksa ―yazmak‖ üzere dosya açılıyor ve sırası ile formdan gelen veriler bu dosyaya

kaydediliyor ve en sonunda bu dosyaya yazılan bilgiler ile birlikte bir teĢekkür mesajı görüntülenip çıkılıyor.

Programda Ģu haliyle mesajları ekrana gösteren

zd1mesaj.php dosyası eksik. Onu da dosya fonksiyonları ile kendiniz yazabilirsiniz.

PHP Çerez - Cookie Fonksiyonları

Çerezler bir sitenin kullanıcı bilgisayarına bir takım bilgiler içeren paket (dosya) bırakıp daha sonra bu

paketteki bilgilere göre bir takım iĢlemler yapmasına

yarayan dosyalardır. Kısaca çerezler yardımıya site sahibi ziyaretçi hakkında bilgiler alıp saklayabilir ve bir dahaki

ziyarette kullanabilir.

Örneğin bir anket kodu hazırlamıĢ olalım; bir çok kiĢi

haliyle sonucu etkilemeye çalıĢacaktır. Bu durumda çak basit bir tedbir olsada kutlanıcı bilgisayarına anketei

oyladığı anda bir çerez bırakmak ve daha sonra tekrar

Page 378: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

378

aynı yere geldiğinde ise çerez varmı diye kontrol edip,

eğer varsa ankete daha önceden katıldığını gösteren bir mesaj görüntülemektir. Zaten çerezler genel olarak

anket formlarında ve üyelik sistemlerinde kullanılır.

Üyelik sistemlerine gelince; sayfaya giriĢin bir kullanıcı adı ve Ģifre ile mümkün olduğunu varsayalım. Sayfaya

üye olduktan sonra üyeler kullanıcı adı ve Ģifresi ile sisteme giriĢ yaparlar. Daha sonra bu web sayfasına

girilmek istendiğinde sistem atılan çerez, web sayfası tarafından kontrol edilir ve Ģifreyi tekrar girmemize gerek

kalmaz. Aslında çerezler daha pek çok iĢlemde kullanılırlar ancak en çok bu alanda kullanıldıklarından

bunun detaylarına girildi.

Not: Sakın “aha süper bir güvenlik önlemi buldum”

diye düşünmeyin. Çünkü çerezler tarayıcı

tarafından verilen bir komutla temizlenebilir. Kısaca çerezler tek başına güvenlik için yetmez. IP

numarasınıda kullanarak bir nebze etkili olunur ancak bu seferde kişiler ADSL modemlerini

resetleyerek değişik bir numara alıp bizi aldatabilirler. Çerezlerin tamamen güvenilir

olduğunu düşünenler aşağıdaki listeye bir göz atmalıdır.

Çerezler Ģifrelenmeden saklanır yani düzyazı dosyalarıdır. ġifre vs bilgiler için uygun değildirler.

(Parolaları MD5 yapıp saklamayı tekrar hatırlatmıĢ olalım. Detay için md5() fonksiyonuna bakınız)

Çerezler sistemde herkesin rahatlıkla görevileceği bir Ģekilde ve belli bir klasör içinde durur

Page 379: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

379

Çerezler kullanıcı tarafından silinebilir yada tarayıcı

programa temizletilebilir

Kullanıcı çerez kullanımı yasaklamıĢ ve bu

dosyaların bırakılmasını tarayısısına engelleme talimatı vermiĢ olabilir

Çerezlerin kullanıcı tarafında ne kadar saklanacağıda belirlenebilir. Eğer bir zaman belirtilmezse çerez sadece

tarayıcı penceresi açıkken bırakılır ve kapatılırken silinir. Aksi takdirde istenirse 1 ay gibi bir zamanda belirtilebilir.

Çerezlerin içerdiği değerlere eriĢmek için PHP sunucu değiĢkenlerinden $_COOKIE kullanılır.

$degisken=$_COOKIE[―çerez adı‖];

Not: $_COOKIE[] değiĢkeni $HTTP_COOKIE_VARS[]

değiĢkeninin yerine gelmiĢtir. ġimdiden kod yazılırken buna uygun davranılması uygun olur. Her ne kadar

kerhen geriye uyumluluk adına iki kod çalıĢıyor olsada bu

ilerdede bu destek ürecek anlamına gelmez.

setcookie() fonksiyonu – (Çerez bırakma)

Bu fonksiyon süre belirterek veya süre belirtmeden kullanıcı bilgisayarına bir çerez bırakır. Süre belirtilecek

olursa; istenilen süre saniye cinsinden girilir yani 1 saat için 3600 ve 1 gün için 6540 gibi. Sadece o pencere açık

olduğu sürece bırakma Ģekli

setcookie(―çerez adı‖,‖saklanacak değer‖);

Zaman belirerek çerez bırakmak içinse

setcookie(―çerez adı‖,‖saklanacak

değer‖,time()+istenilen sure);

Page 380: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

380

Bırakılan bir çerezi temizlemek içinse kodda ufak bir hile

kullanılır.

setcookie(―çerez adı‖,‖‖,time()-sure)

Birden fazla çerez bırakmak için dizi değiĢkeler kullanılabilir.

setcookie(―eleman [adi]‖,‖tuncay‖);

setcookie(―eleman [soyadi]‖,‖Ģanlı‖);

Siteye giren kullanıcıyı tanıma ;

<? setcookie ( "Kod", "555", time()+3600 ) ;

if ( $ _COOKIE ['Kod']=="555") { echo "Kodunuz 555 tir "; ] else { echo "Çerez yüklü

değil" }; ?>

Yukarıdaki örnekte php sayfamızı çalıĢtıran ziyaretçinin

sistemine 1 saat süre ile saklanmak üzere bir çerez bırakılmıĢtır. Çerezin adı Kod ve değeri 555 tir. Daha

sonra bu adrese tekrar girilirse haliyle çerez bulunmuĢ olacak ve Kod değeri yazılacaktır.

Kullanıcı siteye kaçıncı defa girdi ;

<? $tmp=$_REQUEST['gelis];

echo "$tmp"; setcookie ( "gelis", "2", time()+3600 );

if ( $tmp > "0" ) { echo "Sayfamızı daha önce $tmp kez ziyaret etmiĢtiniz.";

Page 381: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

381

$tmp++;

setcookie ( "gelis", $tmp, time()+3600 ); } else {

echo "Sitemize ilk geliĢiniz. hoĢgeldiniz.."; setcookie ("gelis","1",time()+3600);

};

?>

Yukarıdaki komutlar sayfaya giriĢlerimizi sayacaktır.

Sayfaya ilk giriĢimizde "Sayfaya ilk giriĢiniz.." ibaresi ile karĢılaĢacağız. Daha sonraki giriĢlerimizde sayfaya kaç

kere girmiğimizi gösterecektir. Burada dikkat etmemiz gereken husus, "$_REQUEST" birimini kullandığımız.

Herzaman $HTTP_COOKIE_VARS deyimini kullanmayabiliriz. Çerez değerini alırken $_REQUEST

metodunu da kullanabiliriz.

Cookie kullanarak bir sayaç kodu hazırlayalım.

<? // cookiesayac.php $hane=3;//kaç haneli sayaç kullanılacak?

$sure=5;//cookie sistemde kaç saat tutulacak $yasam=$sure*3600;// cookie süresi hesaplanıyor gün

için 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 artır

$bak++; endif;

fclose($dosya);

Page 382: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

382

else://dosya yoksa oku değiĢkenine 1 verilir yani yeni a

çılır $bak=1;

endif; $dosya=@fopen($isim,"w");//dosya yazma modunda acıl

ır ve bilgiler yazılır fputs($dosya,$bak);

setcookie($cokiename,1,time()+$yasam); fclose($dosya);

/* Ekrana yazdırılıyor */ $str=strlen((string)$bak);

$str=$hane-$str; if($str>0):

for($i=1;$i<=$str;$i++): echo ―0‖;

endfor;

endif; echo "$bak";

?>

Yukardaki kod alıntı ancak değiĢtirilmiĢ bir koddur. Kodda dikkat edilecek konular ise öncelikle bu konu

include edecek kiĢilerin include komutunu kodlaının en baĢında kullanmalarıdır. Eğer iclude edilmeden önce

ekrana çıktı veren komut yada tag kullanılır ise cookie sisteme bırakılamaz. Bu da kodun çalıĢmaması demektir.

En sonda ise sayaç hane sayısı sayacın o anki değerinden büyük ise sayac değerinin baĢına ―0‖ değerleri

eklendiğine dikkat edilmelidir.

Page 383: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

383

Aynı sayfada birden fazla çerez bırakmak

Bir sayfada birden çok cookie bırakmak normal Ģartlarda

imkansızdır. Ġkinci bir cookie‘yi bırakmak istediğimizde pencerede hata mesajı görüntülenecektir. Ayrıca cookie

bırakmak istediğimizde bunu hiçbir header(sayfa baĢlığı, meta tanımlama vb) kullanmadan önce yada ekrana hiç

birĢey yazdırmadan önce yapmak gereklidir. Eğer bu kurala uyulmazsa hata oluĢacaktır. Buna engel olmak

için cookieler genellikle sayfaların ilk baĢında bırakılır kullanılacak değerler sayfaların ilerleyen bölümlerinde

kullanılır. Bunun yanında php dilinde illaki cookie kullanılması gerekli durumlarda kullanmak için bir

fonksiyon vardır. Eğer sayfa baĢında ob_start(); ile

baĢlayıp sayfa sonunu ob_end_flush(); ile yaparsak o arada cookieleri istediğimiz gibi kullanabiliriz.

<?php

ob_start();

echo "deneme";

echo "!\n";

setcookie ("birinci", "degeri");

setcookie ("ikinci", "degeri");

ob_end_flush();

?>

Page 384: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

384

PHP Dilinde Oturum – Kullanımı

Oturum yönetimi kısaca sayfalar arasında bilgi akıĢını

sağlamaktır. Oturum yönetimi iĢlevleri aslında çerezler ile benzeĢir ancak güvenlik sebebiyle oturum yönetimi

tercih edilir. Bir site kodlanmıĢ olsun ve bu sitede üyelik sistemi de olsun. Bu sitede kullanıcı bilgileri çerezler ile

saklanıp paylaĢılabilir ancak bu durumda herkese açık

olacaktır. Diğer dezavantajları tekrar saymadan devam edelim. Adres satırından diğer dosyalara aktarılabilir. Bu

hem güvelik anlamında iĢi karıĢtırır hemdesite içi kodlama daha bir karıĢacaktır.

Bu gibi durumlarda güvenliği krumak içinde PHP yazarları PHP diline session özelliğini eklemiĢlerdir. Session olayı

sadece PHP diline özgü bir yetenek değildir. Aslında bir tekniktir. Sayfalar arasında veri akıĢını sağlar. Ġlgili

kullanıcı adı ve Ģifre bir sayfadan diğer sayfaya taĢınarak kullanıcının tekrar tekrar Ģifre girmesine gerek kalmaz.

Bu oturum denetimi web penceresini kapatana kadar devam edecektir.

Kısaca özetlersek, Session'lar bize sayfalar arasında verilerin taĢınmasına olanak sağlar. Bu veriler herzaman

üyelik sayfalarındaki kullanıcı adı ve Ģifreler olmayabilir.

Üyelik sistemleri Session'ların kullanıldığı en yaygın sistemlerdir.

Page 385: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

385

PHP ve MYSQL Kullanımı

Bugün dünyada aĢağı yukarı tüm programlar bir takım

verileri iĢlemek için yazılırlar. Vei iĢlemek demek veri depolamak demektir. Veri depolamak demek ise

veritabanı yönetim sistemleri demektir. Veritabanı yönetim sistemi demek ise SQL dili gelir akla. Bugün

nerdeyse bilinen bütün diller bir çok veritabanı ile

çalıĢabilirler. Aslında yaptıkları ise kullanıcıdan verileri alıp bunu SQL kodlarına çevirip veritabanına göndermek,

yada verileri SQL ile sorgulayıp dönen sonuçları uygun görünüme getirip ekrana yazmaktır. Bu bakımdan Ģunu

söylemek çok yanlıĢ olmaz. SQL sorgulama dilini bilmeyen programcı yarım programcıdır.

PHP içinde en çok fonksiyon Mysql ve daha sonra Oracle için yazılmıĢtır. Ancak Mysql için geliĢtirilmiĢ olan bir çok

fonksiyon gündelik kullanım içinde sürekli gerekli değildir. Aslında bu tüm veritabanı sistemleri geçerlidir.

Yani 10 kadar fonksiyon ile veritabanı ile çalıĢan uygulamalar yazılır. Yalnız bu 10 sayısı toplam yada

kesin bir sayıyı değil her bir veritabanı için gereken bir sayıyı ifade eder.

Mysql veritabanı kullanılarak, her türde program yazmak

mümkündür. Tabii bunu derken Windows gibi bir iĢletim sistemi yazılabileceğini kastedilmemektedir. Ancak

veritabanı programcılığı açısından bilinmesi gereken bazı konular vardır.

Mysql nedir

Veritabanı ve Tablo nedir

Mysql tablo tipleri

Page 386: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

386

Mysql veri tipleri

Tablo Tasarlama, Key ve index kullanımı

Mysql‘i komut satırından yönetmek

SQL dili

Mysql üzerinde veritabanı ve tablo oluĢturmak için

kullanılacak araçlar

PHP ile bu tablolara bağlanıp iĢlem yapmak

MySQL Nedir ?

MySQL bir ĠliĢkisel Veri Tabanı Yönetim Sistemidir. SQL

komutları ile çalıĢır. SQL Sorguları ile veritabanlarına bilgiler eklenir, silinir ve güncellenir. Kısaca, SQL

veritabanlarında kullanılan komut dilidir. Unix tabanlı sistemler için geliĢtirilen ancak zaman içinde Windows,

Linux, Mac OS gibi pek çok sistemdede kullanılabilir hale gelen MySQL veritabanları arasındaki en hızlı

sistemlerdendir. Oracle'dan sonra en hızlı veritabanı olan MySQL, kullanımı kolaylığı ve Linux iĢletim istemi yada

ticari olmayan kullanımlar için bedava olmasından dolayı Web üzerinde en çok tercih edilen veritabanı

durumundadır.

MySQL, ayrıca tüm programlama dilleri tarafından da

desteklenir. Sorguları salt SQL kodları ile alıp gönderdiği

için oldukça hızlıdır ve kullanıldığı dili fazla zorlamaz. MySQL'de veriler sunucu üzerinde tutulur, size tahsis

edilen Ģifre ile bu veritabanına eriĢerek veri akıĢı sağlanır.

PHP, MySQL için biçilmiĢ kaftan gibidir. Bunun yüzden PHP ve MySQL muhteĢem ikili olarak adlandırılır. Her

Page 387: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

387

ikiside Unix tabanlı sistemler için geliĢtirildiği için

birbirine son derece uyumludur ve hızlıdır.

Veritabanı ve Tablo Nedir

Tablo demek satır ve sütunlardan oluĢan bilgiler yığınıdır.

Fiziksel anlamda bir veritabanı ise değiĢik tabloların bir arada bulunduğu alandır. Gözünüzün önüne bir Excel

sayfası getirin. Her sayfa bir tablo, Excel dosyasının

kendisi ise Veritabanına karĢılık gelir. Tablo tasarımı ise çok bilgi ve tecrübe gerektiren bir konudur. Çünkü kötü

tasarlanmıĢ bir tablo üzerine yazılan kod sonuçta bir gün mutlaka kullanıcıyı yarı yolda bırakır.

Örnek bir tablo

No Adı Soyadı Sınıfı Doğum Tarihi

1 Ġbrahim Kutluay 5 01.04.1974

2 Ġsmail Kutluay 4 02.02.1976

3 Tuba ġahin 2 03.05.1980

Mysql Tablo Tipleri

Mysql standart olarak iki tipte tablo kullanır. Myisam ve

Innodb. Ancak Oracle Innobase, Ģirketini satın alınca Mysql AB Ģirketide Interbase VTYS‘nin ilk geliĢtiricisi Jim

Starkey‘i iĢe alarak kendi tablo formatını geliĢtirme yoluna gitmiĢtir. Ancak Ģu anda hala ilk iki format

günceldir.

Mysql Veri Tipleri

Veri tipleri sadece Mysql için değil tüm programlama dilleri ve veritabanı programları için bilinmesi gereken

konulardır. DeğiĢkenler konusu hatırlanacak olursa bu

Page 388: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

388

olayı kavramak kolaylaĢır. Dile veya göre programa göre

değiĢseler de mantık hep aynıdır. Mysql için 4 ana tip vardır. Metin, sayı, tarih/zaman ve küme tipleri. Bir

tablo sütunu için bir tip belirlemek demek o alana nasıl bir bilgi depolanacağının belirtilmesi demektir.

Metin tipleri

CHAR( ) 0 ile 255 karakter uzunlukta sabit kayıt boyutlu metin alanı.

VARCHAR( ) 0 ile 255 karakter uzunlukta değiĢken kayıt boyutlu metin alanı.

TINYTEXT Maksimum 255 karakterlik metin alanı

TEXT Maksimum 65535 karakterlik metin alanı

BLOB Maksimum 65535 karakterlik metin alanı

MEDIUMTEXT Maksimum 16777215 karakterlik metin alanı

MEDIUMBLOB Maksimum 16777215 karakterlik metin alanı

LONGTEXT Maksimum 4294967295 karakterlik metin alanı

LONGBLOB Maksimum 4294967295 karakterlik metin

alanı

Parantezler kullanılarak alanların maksimum uzunluğu

tanımlanabilir. VARCHAR(20) gibi.

CHAR ve VARCHAR Farkı

Bu iki tipteki metin alanı en çok kullanılan tiplerdir. Char tabloda sabit geniĢlikte yer tutar. Örneğin isim char(100)

Ģeklinde bir alan tanımlandıysa ve bu alana ―ALĠ‖ bilgisi girilirse veritabanı geriye kalan 97 karakteri boĢluk ile

dolduracaktır. Varchar tipi alanda ise alan geniĢliği ne

Page 389: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

389

olursa olsun kaydettiğiniz bilginin uzunluğu kadar yer

kullanılır. Bu hesap gerektirdiği için ve char ipinde alan geniĢliği hep aynı olduğu için Char tipli alanların nispeten

biraz daha hızlı çalıĢtığı söylenir. Aslında bana görede bu mantıklıdır. Ancak bu konuda araĢtırma yapan bazı

arkadaĢlarım diğer veritabanı sistemlerinde olsun Mysql de olsun ya bu fark konusunda 3 Ģey söylüyorlar.

1. Varchar daha yavaĢtır.

2. Evet varcgar daha yavaĢtır ancak fark önemsiz

denecek kadar az

3. Varchar daha hızlı

Ancak disk üzerinde ve hafıza kullanımında tasarruf sağladığından 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 değiĢken boyutlu ve uzun metinleri tutmak için kullanılan

alanladır. Varchar tipinin daha uzun veri tutabilen üst sürümleridir. Bu tipler büyük metin parçaları

depolayabilirler ancak diğer tiplerden çok daha yavaĢtırlar.

Sayısal Veri Tipleri

Sayısal tipleri kullanarak tüm sayısal alan depolacak

tablo alanları tanımlanır. Ancak bu alan kullanılırken öncelikle alt ve üst sınırlara ve ondalık durumuna dikkat

edilmelidir.

Page 390: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

390

TINYINT( ) -128 ile 127 arası yada 0 ile 255 arası iĢaretsiz (UNSIGNED)

SMALLINT( ) -32768 ile 32767 arası yada 0 ile 65535 iĢaretsiz

MEDIUMINT( ) -8388608 ile 8388607 arası yada 0 ile 16777215 arası iĢaretsiz

INT( ) -2147483648 ile 2147483647 arası yada 0 ile 4294967295 arası iĢaretsiz

BIGINT( ) -9223372036854775808 ile 9223372036854775807 arası yada

0 ile 18446744073709551615 arası iĢaretsiz

FLOAT Küçük boyutlu ondalıklı sayı

DOUBLE( , ) Büyük boyutlu ondalıklı sayı

DECIMAL( , ) Metin tipte saklanan Double tipli

değiĢkendir.

Tamsayı tiplerinde gördüğünüz iĢaretsiz (UNSIGNED) seçeneği ek bir özelliktir. Normalde tamsayılar eksi veya

artı değer alabilirler. Ancak sayı unsigned olarak tanımlanırsa eksi değer alamaz ve sıfırdan baĢlar. Buda

sayının taĢıyabileceği üst sınırı artırır.

Tarih / Zaman Tipleri

AĢağıdaki tarih zaman tiplerinde Y yıl, G gün, A ay, S Saat, D dk N Saniye anlamına gelmektedir.

Page 391: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

391

DATE YYYY-AA-GG

DATETIME YYYY-AA-GG SS:DD:NN

TIMESTAMP YYYYAAGGSSDDNN

TIME SS:DD:NN.

Küme Tipi

ENUM ( )

ENUMERATION (numaralandırma) tipidir.Sütun gelen

numarayı veri olarak depolar

SET

Enum ile aynıdır ancak veri uygun elemanların bir kaçından olauĢabilir.

ENUM('y','n')

Enum listelerinde 65535 değer olabilir. Bu listede

olmayan bir değer verilirse alana boĢ bir değer atanır. SET yukarda da belirtildiği gibi enum ile aynıdır. Ancak

Set listesinde 64 eleman olabilir ve bunlardan bir kaçıda değer olarak depolanabilir.

Page 392: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

392

Tablo Tasarlama, Key Ve Ġndex Kullanımı

Tablo tasarımı yapılırken öncelikle nelerin kayıt alınacağı,

bunlara girilecek bilgilerin tipi ve uzunluğu saptanır. Daha sonra yapılacak optimizasyonlar yapılır, anahtar

alanlar vs saptanır ve daha sonra tablo oluĢturulur.

Örnek bir tablo

No Adı Soyadı Sınıfı Mezuniyet

1 Ġbrahim Kutluay 5 Yüksekokul

3 Ġsmail Kutluay 4 Üniversite

2 Tuba ġahin 2 Ortaokul

8 Ġbrahim ġahin 5 Lise

4 Ġsmail ġahin 1 Lise

9 Azize ġahin 2 Lise

5 Türkan ġahin 1 Lise

ġimdi genel mantık açısından tablo tasarımı konusunda

fikir geliĢtirelim.

Görüldüğü gibi öğrenci no herkes için tek bir değer

almaktadır. Ġsim ve soy isim char ve ya varchar olarak tanımlanabilir ve 20 karakter yeterlidir. Sınıf değeri için

Ģu anda smallint tipi bile uygun ama 6 FEN C gibi

değerler içinde hazır bir alan tutmak adına varchar yada char tanımlanabillir.

Burada tasarım hüneri bunlarda değil son iki sütundadır. ġöyleki gördüğünüz gibi cinsiyet bilgisi 5, mezuniyet ise

Page 393: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

393

10 karakter uzunlukta. Tabloda 1.000.000 kayıt var ise

bu iki sütun toplam 15 Mb yer kullanacaktır. Peki biz cinsiyet değeri yerine, erkek =1 kadın= 0 olarak smallint

, ve de mezuniyet için aynı teknikle, ilkokul =0, ortaokul=1, lise=2 , Myo =3 ve Üniversite=4 diye iki

değer kullansak nasıl olur. Ekrana görüntülerken ilave kod yazmak gerekecek ancak ilk hali ile 15 MB yer

kullacak olan bu sütunlar smallint ile sadece 2 MB yer tutacak. Tabii bu değerler liste alınırken vs hafızanın

daha ekonomik kullanılmasınada yarayacak.

Son olarak ise arama iĢlevleri için hazırlık yapmaya

gelelim. ġimdi Örneğin adı Tuba olan öğrenciyi bulmak istersek ne yapmak gerekecek. CSV örneklerini

hatılarsak For each ile bütun tabloyu sırayla okuyup kontrol edeceğiz. Peki bu iĢlemi hızlandıramazmıyız.

Örneğin yukardaki asıl tablonun asıl tablonun yanında

birde anahtar dosya tanımlasak. Mesela numara alanı için

Öğrenci no Adı

1 Ġbrahim

2 Ġsmail

3 Tuba

4 Ġsmail

5 Türkan

8 Ġbrahim

9 Azize

ġeklinde kayıt tutan bir indeks dosyası tanımlasak ve burada kayıtlar sıralı olduğu için arama yöntemleri

Page 394: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

394

kullansak nasıl olur. Örneğimizde 8 nolu kayda ulaĢmak

için 5 kayda gidip kontrol etmek gerekirken ikiye bölerek arama yöntemi kullanılırsa neler olur.

Bu töntemde kayıtların en ortasındaki eleman bulunur.

Örneğimizde bu 4 tür. Aradığımız değer bundan büyükse buraya kadar elemanlar iptal olur, küçükse bundan

sonraki değerler iptal olur. Görüldüğü gibi ilk elemede kayıtların yarısı uçmakta. Daha sonra orta eleman 8

oluncaya kadar bu yüntem devam edecektir.

Key kullanmanın tek faydası bu değildir. Key alanlar

tablolar üzerinde iĢlem yaparken bize doğru kayıtların iĢleme girmesi konusunda ehberlik eden alanlardır.

Örneğin yukardaki tabloda ―adı Ġbrahim olan kaydı sil ― deseydik silinen kayıt sayısı iki olacaktı. Peki ya silmek

istediğimiz kayıt sadece bir tane olsaydı. Bu durumda

ilgili kaydın numarasını vermemiz gerekirdi. ĠĢte key alanlar bu konuda yardımcı olarak ön plana çıkarlar.

Key alan kullanmadan veri giriĢi yapılır ancak silme yada güncelleme yapılacak olursa iĢler karıĢır.

Programcılık dünyasında artık veritabanı tasarımı ayrı bir uzmanlık alanı haline gelmiĢtir. Yukarda saydıklarımız

Ģüphesiz kimseyi veritabanı yöneticisi yapmaz ama arama algoritmaları ve indekslerin gerekliliği ise sadece

tavsiye anlamında kaynaklarda yer almaktadır. O bakımdan iĢin detayını öğrenmek bakımından iyi bir adım

atılmıĢ olmaktadır.

Page 395: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

395

MYSQL ‘i Komut Satırından Yönetmek

PHP dilinin baĢında PHP ile Mysql arasında nasıl iletiĢim

kurulduğundan bahsedilmiĢti. Ancak MYSQL sadece böyle değil komut satırından da yönetilir. Komut satırından

kasıt Windows komut noktası değilde bu komutları anlayacak bir SQL iĢlemcisinin komut satırıdır. Burada

göreceğiniz komutlar komut satırına yazılıyor olsalarda aslında normal SQL dili komutlarıdır. SQL standartlarına

uygun tüm VTYS ler içinde geçerlidirler. Kısaca öğrenmek lehinize olacaktır. Basit birkaç komut görelim daha sonra

ise SQL dilinin detaylarına girelim.

Mysql’i BaĢlatmak

Benim kullandığım Uniform paketinde bu iĢ için komut noktasında ―c:\> satırında‖ iken ―mysqld-opt.exe‖

komutu verilemektedir. Böylece Mysql çalıĢacaktır.

Komut Satırından Veritabanı OluĢturmak

Mysqladmin komutu bu iĢlemi yapacaktır. –u parametresi

ile kullanıcı adı belirtilir.

mysqladmin -u root create veritabaniadi

Ģeklinde kullanılır.

Komut Satırından Tablo OluĢturmak

MySQL'de bir tablo oluĢturmak için CREATE TABLE komutu Ģöyle kullanılır:

CREATE TABLE tablom (id INT , alan1 VARCHAR(10), alan2 VARCHAR(10)) ;

Page 396: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

396

Bu komutla, "tablom" isimli üç sütunlu bir tablo oluĢturulur:

ilk sütunda sadece tam sayı olan değerler bulunabilir,sonraki iki sütunda ise en fazla 10 karakterlik

değiĢen boyutta alfanümerik değerler yer alır.

Genel bir kural olmamakla birlikte tablolarda bir adet indeks alanı bulunması mutlaka tavsiye edilir. Bu alan

genellikle otomatik artıĢlı bir alandır. Yine genel olarak bu alanın ya adı ―id‖ olur yada alan adı ―id‖ ile biter.

Komut Satırından Veri GiriĢi

Create table ile oluĢturulan bir tabloya veri giriĢi için INSERT INTO komutu kullanılır:

INSERT INTO tablom (id, alan1, alan2) VALUES

(1,'Ali’,'Veli')

Bir tablonun oluĢturulması ile içine veri yerleĢtirilmesi

komutları ayrı ayrı zamanlarda, ayrı iĢlemler olarak yapılabileceği gibi, toplu bir metin halinde, otomatik

olarak da yapılabilir.

Komut Satırından Veri Sorgulama

Bir tablodaki bilgileri görmek yada bir tablodan koĢul yada

oĢullara göre kayıt sorgulamak için SELECT komutu kullanılır.

SELECT * FROM tablom ;

Bu, MySQL programına, tablom adlı tablodaki bütün kayıtların okunmasını bildirir. Buradaki "*" iĢareti, "bütün

sütunlardaki bütün değerler" anlamına gelir. KoĢul verilmediği içinde zaten tüm kayıt satırları okunacaktır.

Page 397: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

397

Sadece alan1 alanındaki bilgileri gömek isteseydik, bu

komutu Ģöyle yazmak gerekirdi:

SELECT alan1 FROM tablom;

Select komutunda sadece bize gereken sütunların seçilmesi çok önemli bir konudur. Bir çok üşengeç

programcı SELECT * from diyerek işi daha kısa yoldan haletliğini sanır ancak bu her zaman dğru

değildir. Hatta genellikle yanlıştır. Neden derseniz. Select komutu sonuç olarak bir çıktı üretmektedir.

Bu çıktı ya ekrana yollanacaktır yada istenen yere.

Web ortamında buna riayet etmezseniz sonuçta

almanız gerekenden daha büyük bir sonuç veri kümeniz olacaktır. Böylece hem sunucu gereksiz

yorulacak, hem siz işinize yaramayan bir bilgiyi sunucudan almak için gereksiz zaman harcamış

olacaksınız hemde sunucu trafiği olumsuz

etkilecenecektir. Cidden amacınız sadece ad-soyad listsi almak ise yanda tüm kimlik detay bilgilerinide

görmek istermiydiniz.

Komut satırından Bilgi DeğiĢikliği Yapmak

Bir tablodaki bilgilerin yenileriyle değiĢtirilmesini, yani

tablodaki kayıt yada kayıtların güncelleĢtirilmesini UPDATE komutu sağlar. Veritabanı dosyalarını

güncelleĢtirme zorunluğu bulunması ise bize veritabanı tasarımının çok önemli olduğunu gösterir. Örneğin:

UPDATE tablom SET alan1 = "Ali" ;

Page 398: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

398

Bu komut, tablodaki bütün satırlarda, ilgili sütundaki

değerleri "Ali" olarak değiĢtirmekle sonuçlanır. Amacımız gerçekten bu olsaydı sorun değil ancak genelde sadece

bir yada bir koĢula göre değiĢiklik yapılması gerekir. Kısaca MySQL'e hangi satırda (veritabanı diliyle

söylersek, hangi kayıtlarda) değiĢiklik yapılacağını daha ayrıntılı söylememiz gerekir. Veritabanı dosyamızı

oluĢtururken, her kaydın diğer kayıtlarda olmayan (unique) bir sütun (bunu da veritabanı tekniğindeki

terimle söylersek alan) bulunmalıdır. Yukardaki key kullanımını hakkında yazılanları hatırlattıktan sonra öneği

yeniden ele alalım

UPDATE tablom SET alan1 = "Ali" WHERE id = 1;

MySQL bu komutu gördüğü zaman sadece id alanı 1 olan kiĢinin (yani 1 nolu kaydın) "alan1" alanındaki değeri

bizim verdiğimiz yeni değerler yani ―Ali‖ olarak

değiĢtirecektir.

Komut Satırından Kayıt Silmek

Bir MySQL tablosundaki kayıt yada kayıtları silmek için -

DELETE komutu kullanılır:

DELETE FROM tablom WHERE id = 1;

Şimdi id alanı olmasaydı nasıl kayıt silerdik diye

düşünmen yeridir sanırım. Tabloda sadece bir kayıtta id 1 olacağı için bu komutla sadece bir satır silinecektir.

Page 399: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

399

SQL Dilinin Tarihçesi

Veritabanı sistemleri herhangi bir bilgiyi

depolayabileceğimiz ortamlardır. GeniĢ ölçekli ulusal bilgi bankalarından, bir öğrencinin notlarına varıncaya kadar,

veritabanları bilgileri depolayıp dağıtabilirler. Ġlk baĢta bu iĢlemler için metin formatlı dosyalar kullanılmıĢ bunlar

yetersiz kalınca ise veritabanı programları geliĢtirilmiĢtir.

15-20 yıl öncesine kadar büyük veritabanı sistemleri yalnızca büyük mainframe bilgisayarlarda çalıĢabilirlerdi.

Haliyle pahalı fiyatlara sahiptiler. Günümüzde kullanılan çoğu ev bilgisayarları bile o zamanın süper bilgisayarları

kadar hızlanmıĢ olup verileri daha hızlı ve ucuz bir Ģekilde dağıtmada yardımcı olmaktadır.

Bilgisayar ortamında tutulan kayıtlar arttıkça bunları iĢlemek, süzmek, yedeklemek, aralarındaki iliĢkileri

koruma için geliĢtirilen programların ortak adı DBMS (Data Base Management System) -ki biz bunu Türkçeye

VTYS olarak çevirelim- programlarıdır. Bu VTYS sistemlerinde bulunan kayıtlarla iĢlem yapmak ortak bir

yöntem aranmaya baĢlayınca 1970 yılların sonunda IBM DB2 VTYS için SQL dili geliĢtirildi. SQL (Structured

Query Language) Yapısal Sorgulama Dili anlamına

gelmektedir. SQL dilinin amacı sistemi yönetenler kadar kullanıcılarında neredeyse günlük konuĢma Ġngilizcesine

yakın bir Ģekilde verilerle iĢlem yapabilmesidir. Eğer ortaokul düzeyinde Ġngilizceniz var ise SQL dili size zor

gelmeyecektir. SQL prosedürel bir dil değildir. Bunun anlamı veritabanı operasyonunun nasıl yapılacağından

çok ne olduğudur. Hangi kayıtlar çekilecek, eklenecek, silinecek vb. Günümüzde birde RDBMS –ĠVTYS diyelim-

dediğimiz iliĢkisel veritabanları vardır. DBMS (VTYS) ile

Page 400: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

400

RDBMS (ĠVTYS) arasındaki karakteristik fark RDBMS'nin

set-oriented (küme yönelimli) veritabanı dili sunmasıdır. Birçok RDBMS'in veritabanı dili SQL'dir. Küme yönelimli

demek SQL'in veri kümesini grup halinde iĢleme tabi tutmasıdır.

VTYS geliĢtiricileri programlarına SQL komutlarını anlama, iĢleme yeteneklerini eklemektedirler. Ancak her

Ģirket kendi VTYS programını daha iyi hale getirmek için ayrı ayrı komutlar ekleyince bir standart belirlemek

zaruri hale geldi. Günümüzde SQL dili için iki ayrı kurum iki ayrı standart belirlemiĢtir. Bunlardan biri ANSI

(American National Standards Institute) diğeri ise kısa adı ISO olan International Standards Organization‘ dur.

VTYS sistemlerinin bir çoğu ANSI-92 standardına tam uyum desteğiyle gelirler.

ĠliĢkisel Bir VTYS Ġçin 12 kural

En popüler veri depolama modeli olan RDBMS -iliĢkisel

veritabanı- 1970' de Dr.E.F-Codd tarafından tanımlanmıĢtır. Codd ĠVTYS sistemleri için olmazsa olmaz

12 kuralı velirlemiĢtir. Bunlar Codd‘un 12 kuralı olarak bilirnirler. Bunlar sırasıyla;

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

Page 401: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

401

8. Set level Insertion, update, and deletion

9. Physical Data Independence

10. Logical Data Independence

11. Integrity Independence

12. Distribution Independence

Olarak belirlenmiĢtir.

1- Relational Data Process: ĠVTYS

programları depoladıkları bilgileri veritabanını iliĢkisel olarak yönetebilmeli

2- Information Rule : Bütün bilgiler bir iliĢkisel veritabanında (tablo ve kolon adları

dahil) bir tablodaki değerler gibi gösterilebilmeli. (Örneğin Mysql de bütün

veritabanı isimleri, bunların içinteki,tablolar, bu taplardaki alanlar ve bu alanlarında

tipleri, uzunlukları da Mysql tablolarında

tutulmaktadır)

3- Guarented access : ĠliĢkisel veritabanı

içindeki her değer tablo adı, birincil index değeri ve kolon adları birleĢtirilerek

eriĢilebilir olmalı.

4- Systematic Null Value Support :

Veritabanı yönetim sistemi altyapı olarak null verileri (değerleri verilmeyen veya

uygulanabilir olmayan veri) desteklemeli.

5- Active, Online Catalog : Veritabanı tanımı

ve içeriği mantıksal seviyede bir tablo gibi

Page 402: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

402

veritabanı dili tarafından sorgulanabilmeli.

(bkz.Madde 2)

6- Comprenhensive Data Sublanguage : En

az bir dil, veritabanı tanımlanmalı ve bu dil, veri tanımlama, değiĢtirme ve güvenilirlik

kuralları, yetki ve hareketleri destekmeli. (örneğin SQL gibi)

7- View updating rule : Bütün görüntü tabloları (view) sistem tarafından

güncellenmeli.

8- Set level Insertion, update, and deletion

: Veritabanı sistemi sadece kayıtları seçme iĢlemini değil aynı zamanda veri kümesi

seviyesinde ekleme, güncelleme ve silme yapabilmeli.

9- Physical Data Independence : Uygulama

Programı mantıksal olarak Fiziksel eriĢim metodu veya depolama yapısı değiĢtiğinde

etkilenmemeli.

10- Logical Data Independence : Uygulama

programı tablo yapısındaki değiĢikliklerden etkilenmemeli.

11- Integrity Independence : Veritabanı güvenlik kuralları tanımlayabilmeli ve bunu

online katalog içinde depolayıp geçersiz kılınamamalı. (Örneğin mysql2in kullanıcı

yetki tablosu)

12- Distribution Independence:

Veritabanındaki veriler tekrar tekrar

Page 403: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

403

dağıtılabilmeli. 12- Nonsubversion :

TanımlanmıĢ güvenlik kuralları düĢük seviyeli dillerle etkisiz hale getirilememeli.

Bir çok database'in ata-çocuk iliĢkisi bulunmaktadır. Ata her bir çocuk için iĢaretçiler içerir. Bu metodun bir çok

avantaj ve dezavantajları vardır. Bu sayede disk üzerindeki fiziksel veri yapısı önemini kaybetmektedir.

Programcılar basit olarak iĢaretçileri bir sonraki yerde saklayarak veriyi eriĢilebilir kılmaktadır. Bu yolla veri

kolayca eklenebilmekte ve silinebilmektedir.

Codd'un fikri ĠVTYS‘lerin, iliĢkisel cebirin matematiksel

konseptleri ile veriyi küme ve iliĢkisel altkümelere bölmekti. Çünkü bilgi doğal olarak farklı kümeler yoluyla

gruplanır. Dr.Codd. Veritabanı sistemini bu konsept etrafında toplamıĢtır. ĠliĢkisel model altında veri

kümelere bölünmüĢ ve tablo yapısında toplanmıĢtır. Bu

tablo yapısında veri elementleri kolon veya alan ( Column-Fields) olarak anılır. Bir grup alan kümesi satır

veya kayıt olarak bilinir.

SQL Dilinin Bölümleri

SQL dilinde komutlar 3 gruba ayrılır.

DDL (Data Definition Language):Veri tanımlama komutları.

DML(Data Manupulation Language):Veri düzenleme ve iĢleme komutları.

DCL (Data Control Language):Veri kontrol komutları.

Page 404: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

404

A. DDL (DATA DEFINITION LANGUAGE) KOMUTLARI

DDL deyimleri veritabanı üzerinde nesne (tablo, yeni

veritabanı, tablo alanları) yaratmak için kullanılırlar. En yaygın kullanılan DDL deyimleri Ģunlardır:

CREATE

ALTER

DROP

B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI

Veritabanı içindeki seçmek, değiĢtirmek, güncellemek ve silmekle ilgili SQL deyimleridir.

SELECT

INSERT

UPDATE

DELETE

C. DCL (DATA CONTROL LANGUAGE) KOMUTLARI

Veritabanındaki kullanıcı haklarını düzenlemek için

kullanılan deyimlerdir.

GRANT

DENY

REVOKE

Page 405: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

405

SQL Komutları ve Örnekler

SQL diline ait komutları kendilerine ait bölümlerde

inceleyelim. Ancak Ģunu hatırlatmaka fayda var SQL diline ait komutlar büyük-küçük harf duyarlı değildirler.

Örneğin select, Select, SELECT ve SEleCT komtularının hepsi aynı olarak ele alınır. Ancak bu sadece SQL

komutları için geçerlidir. Metin ifadeler bunun dıĢındadır.

Örneğin adı ―Ali‖ olan kayıtları listele gibi bir komut yazdığınızda varsayılan olarak ―Ali‖ olan kayıtlar

gelecektir ama ―ALĠ‖ ve ―ali‖ gibi kayıtlar gelmezler. Çünkü bu bir komut değiĢ verilen bir Ģarttır ve bilgisayar

aslında siz ne emrederseniz onu yapmaktadır. Kısaca bilgisayar verdiğiniz emre bakar aslında ne kastettiğiniz

konusunda tahmin yürütmez.

Bu arada son kez hatırlatmıĢ olalım yazdığınız SQL

ifadeleri ne kadar kaliteli ve optimize edilmiĢ ise bu sitenizin (veya masaüstü program yazıyorsanız

programın) hızına birinci dereceden etki eder. Örneğin bir okuldaki öğrenciler içinde 6-A sınıfındaki öğrencilerin

listeleneceğini farzedelim. Bunu PHP ile iki Ģekilde yapmak mümkündür.

Mysql‘ e ―Tüm kayıtları gönder‖ der ve gelen

kayıtarı kontrol edip 6-A öğrencilerini ekrana kendiniz yazarsınız.

Mysql‘e ―Okuldaki öğrecileri öğrencileri kontrol et ve 6-A öğrencilerini gönder‖ dersiniz ve buradan

gelen tüm kayıtları ekrana yazarsınız.

Page 406: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

406

ġüphesiz bu iki iĢlemi yapan kiĢide programcıdır ancak 1.

iĢlemi programıcı amatör iĢi yapmıĢtır.

Komutlara geçmeden önce son bir hatırtmada bulunalım.

SQL, sadece PHP diline yada MYSQL‘ e ait bir kavram değildir. Bugün PHP, Java, C++, Delphi, Python, ASP, C#

dahil hangi dile bulaĢırsanız bulaĢın mutlaka temel SQL bilmeniz gerekir. Yine aynı Ģekilde Interbase, MsSQL,

Oracle, Mysql, Firebird vs hangi ĠVTYS sistemini kullanırsanız kullanın mutlaka SQL bir gün size lazım

olacak. Onun için SQL konusunu çok ama çok iyi çalıĢmalısınız.

A. DDL KOMUTLARI

CREATE Komutu

CREATE komutu tablo ve view gibi bir veritabanı nesnesi yaratmayı sağlar. (Create ayrıca yeni veritabanıda

oluĢturabilir.)

Mysql‘de sütun adlarını sınırlamak için ― ` ‖ karakteri kullanılır. Normalde bu verilmedende iĢlem yapılır.

normal SQL nostasyonlarında bu karaktere gerek yoktur.

Kullanım Yapısı:

CREATE <tablo adı>

Örnek:

CREATE TABLE ogrenci

(

ogrno INT,

adi VARCHAR(30),

Page 407: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

407

soyadi VARCHAR(30)

) ;

Daha üst düzey 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 DEYĠMĠ

Daha önce yaratılmıĢ nesnenin değiĢtirilmesini sağlar.

Örneği bir tablonun tasarımını değiĢtirmek gibi.

Örnek:

ALTER TABLE ders01a ADD msn VARCHAR( 40 ) NOT

NULL ;

Yukardaki komutla ders01a tablosuna birde msn adlı alan eklenmektedir.

DROP DEYĠMĠ

Bir nesnesin silinmesini sağlar.

Page 408: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

408

Örnek:

DROP TABLE ders01a

Yukardaki örnek kod az ders01a adlı tabloyu mevcut

veritabanından kaldıracaktır. Yani tablo komple yok olacaktır.

Drop Database Ģeklinde kullanılrsa bu komut komple bir veritabanınıda silebilir.

B. DML (DATA MANIPULATION LANGUAGE) KOMUTLARI

SELECT DEYĠMĠ

Tablolardan koĢul belirterek yada belirtmeden verilerin bir kısmına yada tümüne eriĢmeyi sağlayan komuttur.

Genellikle bir ya da daha çok tablonun bütün alanları ya da belli alanları için SELECT deyimi yazılır. SELECT

komutu tartıĢmasız olarak en çok kullanılan SQL komutudur.

Temel Kullanımı:

SELECT [ALL] [DISTINCT] liste [INTO yeni tablo] FROM

[tablo]

[WHERE ifade]

[GROUP BY ifade]

[HAVING ifade]

[ORDER BY ifade]

[COMPUTE ifade]

[LIMIT ifade]

Page 409: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

409

Parametrelerin Anlamları:

ALL : Parametresi bütun sütunları döndürür. DISTINCT : Parametresi çiftleyen kayıtlardan sadece

birer tane gelmesini sağlar. liste : Parametresi tablodan döndürülecek sütunların

isimlerini bildiren listedir. INTO :Parametresi Select ifadesiyle gelen kayıtları baĢka

bir tabloya doğrudan yazmaya yarar. yeni tablo : Parametresi sorgu sonucu yaratılacak

tabloyu belirtir. FROM : Verilerin hangi tablodan getirileceğini belirtir.

tablo : Parametresi ise sorgulanacak olan tablo ya da tabloları, görünümleri belirtir.

WHERE : Select ifadesi için koĢul belirtmeye yarar.

GROUP BY: Kayıtların gruplanmasını sağlar. HAVING : Grupların ara toplamları alınır. HAVING

sözcüğü de kayıtlarda kısıtlama yapar ancak hesaplamayı etkilemez.

ORDER BY: Sorgulama sonucu dönen kayıtları belir bir sütuna göre artan (ASC) yada azalan (DESC) Ģekilde

sıralamayı sağlar. COMPUTE : Parametresi ise hesaplama yapar. Tipik

olarak SUM, AVG, MIN, MAX, COUNT gibi fonksiyonları kullanarak hesaplama yapar.

LIMIT : Parametresi ifade ile verilen sayıda kaydı dönderir.

LIMIT Mysql ile kullanımda belirli bir özelliğe 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. kayıttan sonraki ilk 10 kaydı getir

Page 410: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

410

demek anlamına gelir. Bu iĢlem en çok verileri sayfalar

halinde listelemeye yarar

Yukardaki karĢık kullanım tablosu yerine en basit kullanım için Select komutu

Select (alan adi) from (tablo adı);

Ģeklindedir.

Örnek:

SELECT * FROM ders01a

Bu komut ders01a tablosundaki tüm kayıtları seçer. SELECT deyiminin ardından kullanılan * iĢareti bütün

kayıtlar anlamına gelir. Bu deyimin aynısı Ģu Ģekilde de yapılabilir:

Örnek:

SELECT id,ad,soyad,tel,email,msn FROM ders01a

SELECT deyimi ile sadece belli kolonlar (alanlar) da seçilebilir:

SELECT id,ad,soyad FROM ders01a

Yukardaki komutla tablodan id, ad ve doyad kolonları seçilmiĢtir.

SELECT Distinct ad FROM ders01a

Yukardaki komutla ders01a dosyasında 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 kayıtlar sinif alanına göre

sıralanarak listelenecektir.

Page 411: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

411

SELECT * FROM ders01a Order by Sinif, ogrencino

Yukardaki komutla tablodaki kayıtlar önce sinif alanına, daha sonra sınıfı aynı olanlarda kendi içlerinde ogrenci

no alanına göre sıralanacaktır.

SELECT * FROM ders01a Order by Sinif DESC

Yukardaki komutla tablodaki kayıtlar sinif alanına göre büyükten küçüğe göre sıralanacaktır.

SELECT * FROM ders01a Group by Sinif

Yukardaki komutla tablodaki kayıtlar sinif alanına göre

gruplanarak listelenecektir.

SELECT * FROM ders01a LIMIT 0 , 300

Tablodan ilk 300 kaydı seçerek listeler

SELECT * FROM ders01a LIMIT 10

Tabloadan ilk 10 kaydı seçerek listeler

SELECT * FROM ders01a LIMIT 100 , 20

Tablodan ilk 100 kayıttan sonra gelen 20 kaydı seçerek

listeler

SELECT mamul, siparisadet FROM siparisler ORDER BY

mamul COMPUTE SUM(adet)

Yukarıdaki örnekte siparisadet kolonunun toplamı alınır.

AS Deyimi ile Alias Tanımlama

SQL kullanımında kullanıcının iĢini kolaylaĢtıran

iĢlevlerden biride Alia yani Lakap kullanımıdır. Lakaplar hem bir tablo, hem alan isimleri hemde sanan sütunlar

için kullabılabilir.

Page 412: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

412

Örneğin hazır bir veritabanı olsun. Bu tabloda personel

için L_01_employee_db_recs olsun… Bunu SQL çinde doğru yazmak kesinlikle zor..Üstelikte birden fazla

tablodan kayıt çekilen ve ilerde görülecek olan Join iĢlemlerinde SQL yazmak için hem kodu uzatan hemde

okumayı zorlaĢtıran bir durum. ġimdi koda bakalım ve durumu daha iyi anlayalım. Kod yazılırken Joinli

ifadelerdeki notasyon kullanılmıĢtır.

Select L_01_employee_db_recs.name,

L_01_employee_db_recs.surname, L_01_employee_db_recs.date1

Select abc.name,abc.surname, abc.date1 from L_01_employee_db_recs AS abc

Görüldüğü gibi abc yerine ―eleman‖ gibi daha anlaĢılır bir isim yazılacak olursa kodu okumak dahada kolaylaĢacak.

Aslında burada mantık basit. SQL çalıĢtıran sisem burada

kullanıcıdan aldığı ifadeler yerine çalıĢtırmadan önce gerçek hallerini koyup öyle iĢlem yapmaktadır, hepsi bu.

Where Deyimi

Where deyimi aslında en çok Select ile birlikte kullanılır. Ancak where deyiminin tek kullanım alanı bu değildir.

Where kayıt silerken veya güncellerkende kullanılması

adeta zorunlu bir deyimdir. Select komutunda kullanılan Where parametresi ile belirli koĢullara uyan kayıtların

seçilmesi sağlanır. Aslında bu olay çok önemlidir. Örneğin Adana‘da oturan kiĢilerin listesi dediğimiz zaman

yapabileceğimiz iki Ģey vardır. Ya 70 milyon kaydı çeker tek tek oturduğu yer kontrol edilir. Yada daha

veritabanından sorgu aĢamasında iken ―Oturduğu yer

Page 413: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

413

Adana olan kayıtları Ģeç ve bana gönder‖ denilebilir. Bu

iĢlem bize iki fayda sağlar;

1. Web server yorulmaz mümkün olan en az sayıda

kayıtla iĢlemi yapmıĢ olur

2. Gerekmediği halde seçilen kayıtların web bant

geniĢliğini kullanması engellenmiĢ olur

SQL ile Arama Operatörleri

AĢağıdaki tabloda iĢlemde kullanılabilecek operatörler görüntülenmektedir.

KarĢılaĢtırma operatörleri

(=, >, <, >=, <>, !=, !<, !>

Aralık belirtme BETWEEN ve NOT BETWEEN

Liste IN ve NOT IN

String karĢılaĢtırma LIKE ve NOT LIKE

Bilinmeyen değerler IS NULL ve IS NOT NULL

KoĢulların birleĢtirilmesi AND, OR

Tersini alma NOT

ÖRNEK:

SELECT * FROM ders01a WHERE id =1 SELECT * FROM ders01a WHERE adi =’ALİ’

Page 414: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

414

And ve Or ile Birden Fazla KoĢulun Kontrol Edilmesi

Where kalıbını kullanırken birden çok kritere göre cümle

yazılması gereken durumlarda kullanılır. Kullanım ġ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 koĢul için birden fazla değerin kontrol edilmesini sağlarlar. Aslında bunların yerine AND

– OR blokları da yazılabilir ancak bu iki deyim daha temiz bir kod görünümü sunarlar. ġimdi yukardaki son örneği

ele alalım. Daha sonra bunu IN deyimi ile yazalım.

SELECT * from ogr WHERE adi= “Ali” and

adi=”Veli”

SELECT * from ogr WHERE adi IN (“Ali”,”Veli”)

Page 415: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

415

Görüldüğü gibi ikinci kullanım daha temiz ve anlaĢılırdır.

IN deyimi birden fazla değerin içinden eĢitlik durumunu kontrol ederken NOT In kelime anlamı gibi bunun tersini

yani değerlerin dıĢında olması Ģartını arar.

Like ve Not Like Deyimleri:

Where kalıbı içerisinde kullanılan bu deyim ile regexp

benzeri eĢitlik yada olmama durumları kontrol edilir.

Kısaca, kayıtlarda baĢ harfe veya belli yere kadar olan harf veya harflere göre arama yapmak gibi iĢlerde

iĢimize yarayabilir.

Kullanım ġekli:

... where alan_adı like Ģart

Örnekler:

Select * from eleman where adi like ―A%‖ // Eleman

tablosundaki adı A ile baĢlayanlar

Select * from eleman where adi like ―AL%‖ // Eleman tablosundaki adı Al ile baĢlayanlar

Select * from eleman where adi like ―%A%‖ // Tabloda

adınındaki herhangi bir harf A olanlar

Select * from eleman where adi like ―Ce?al%‖

Son örnek size DOS bĠlgini< varsa wildcaRd olayını hatırlatmıĢ olmalı. Tabloda adı ―Ce‖ ile baĢlayan ve

Page 416: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

416

ondaki sonraki harfi ne olursa olsun sonu ―al‖ ile biten

kayıtlar listelenmektedir.

Group By Deyimi

Kayıtları belirli bir alana göre gruplamak için kullanılır.

Örneğin müĢterileri Ģehirlere göre gruplanmı olarak listelemek için bu deyimden faydalanılır. Ancak grup by

sadece kendisine verilen sırada iĢlem yapmaktadır. Kısaca kayıtlar sıralı değilse bu iĢlemin sonucu tuhaf

veriler dönebilir. O yüzden temel prensip gruplanacak alana göre sıralama yapılıyor olmasıdır.

Kullanım Ģekli:

SELECT [Alan Adi] FROM [Tablo Adı] WHERE [Seçilen Kriter] Group By [Alan Adı];

Örnekler:

Select * from isim group by ad;

Order By Deyimi:

Tablodan sorgulanan kayıtları sıralamak için

kullanılır.Dikkat edlmesi gereken nokta anahtar alan kullanımıdır. Eğer tabloda anahtar alan var ise sıralama

bu kullanılarak yapıalacağından iĢlemin hızı artacaktır. ĠĢte bu yüzden ilerde olabilecek bu gibi durumlar için

tablonun daha tasalanma aĢamasında gerekli anahtarların konulması önemlidir. Order by ile birden

fazla alan kullanarak sıralama yapılabilir.

Page 417: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

417

Kullanım ġekli:

SELECT [Alan Adi] FROM [Tablo Adı] WHERE [Seçilen

Kriter] Order By [Alan Adı];

Örnekler:

Select ad,soyad from eleman order by soyad;

Yukardaki örnekte ―eleman‖ adlı tablodan ad ve soyad

sütunları çekilerek soyad alanına göre sıralanıyor. Peki aynı soyada sahip kiĢiler ne olacak derseniz bir alttaki

örneğe bakalım.

Select ad,soyad from eleman order by ad,soyad;

Bu örnektede aynı tablodan aynı kayıtlar sorgulanmakta. Ancak bu sefer sıralama iĢleminde önce soyad daha

sonrada ad sıralanacaktır. Yani eğer aynı soyada sahip kiĢiler varsa bunlarda adlarına göre sıralanmıĢ olacaktır.

SELECT Ġçinde Aritmetik ĠĢlemler

Bu satırları okurken Ģunu düĢünebilirsiniz ―bu PHP dili de

aptal bir dil, aritmetik bile toplamı yok mu ki SQL ile yapalım.‖

ĠĢin aslı PHP dilinde artimetik iĢlem fonksiyonları var. Ancak öncelikle Ģunu anlamalıyız. PHP dili için değil ama

masaüstü program yapılan diller için konuĢursak;

günümüzde orta halli bir web sunucu bile çoğunlukla evde kullandığımız bilgisayardan çok daha fazla RAM ve

iĢlemci gücüne sahiptir. Kısaca biz hız gerektiren iĢlemleri sunucuda yapar ve sadece sonucu alırsak trafiği

engellemiĢ ve hız kazanmıĢ oluruz.

Page 418: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

418

ġimdi diyeceksiniz ki ―ee PHP zaten sunucuda

çalıĢmıyormu o zaman neden kayıtlar üzerinde ki bu tip aritmetik iĢlemleri PHP ile yapmayayım‖…

Cevabı iki Ģıklı bu sorunun;

1. SQL de yaptırmak her ikiside sunucuda çalıĢmasına

rağmen nispeten daha hızlıdır. Çünkü SQL de Mysql‘in kendisi kayıtları okuyup değeri

hesaplayacak ve bunun için en optimize yöntemi kullanacaktır. Diğer yanda PhP tarafında yapmak

içinse, kayıtlar çekilip değiĢkenlere atanacak, sonra birde bunlarla iĢlem yapılacak ve değer elde

edilecek. Hangisi daha kısa ?

2. Daha kısa kod yazmak için. Yani

SQL ile olsa kod;

select maas+mesai as hakedis from eleman

Gördüğünüz gibi sonuç elimizde PHP ile olsa birde bunları

iĢleyecek while yada for döngüsü kurulacak döngüde iĢlem yapılacak ve bunun için kod yazılıp varsa hatalar bulunup

düzenlenecek.

Aritmetik ĠĢlem Operatörleri

Aritmetik iĢlemleri gerçekleĢtirmek için belli operatörler

kullanılır:

+ Toplama

- Çıkarma

/ Bölme

* Çarpma

Page 419: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

419

SELECT borc, (borc*10)/100 FROM taksitler

Bu komutla hem gerçek borç hemde vade farkı hesaplanmıĢ hali listelenecektir.

Aggregerate fonksiyonları

SQL dilinin kolaylıkları bununla bitmez. SQL dili, bir sütundaki bilgilerin arasında ortalama, en küçük, en

büyük değerleri bulan fonksiyonları hazır sunar. Yine aynı Ģekilde bir sütundaki değerlerin toplamını veya

sayısını da SQL fonksiyonu ile öğrenmek mümkündür.

sum() fonksiyonu – Bir sütunun toplamı

Bir sütuna göre bir select ifadesinin toplamını alır.

SELECT grp, sum(bakiye) FROM taksitler GROUP BY grp

Yukarıdaki örnekte taksitler tablosundaki bakiye alanı grp kodu bazında toplanır.

SELECT grp, sum(bakiye) FROM taksitler GROUP BY grp HAVING sehir = 'ADANA’

Yukarıdaki deyim ile taksitler tablosundaki bütün kayıtların bakiye bilgileri gruplarına göre ara toplam

alınır, bir de sehir bilgisine göre filtrelenir.

Gruplama yapılmayan her sütun GROUP BY deyiminde

kullanılması gerekir:

Örnek:

SELECT urunid, kategoriid, SUM (fiyat) FROM

urunler GROUP BY urunid, kategoriid

Page 420: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

420

avg() fonksiyonu – Bir sütunun ortalaması

Bir sütuna göre bir select ifadesinin ortalamasını bulur.

SELECT avg(maas) FROM eleman

Yukardaki sade kullanım iĢlevi görmeniz içindir. Bu

komutla eleman tablosundaki kayıtların ortalama maaĢı bulunur. Tabii koĢul eklemekte mümkündür.

SELECT avg(maas) FROM eleman WHERE bolum=”Bilgi İşlem”

Yukardaki komutta birinci gibi ortalamayı bulur ancak bu sefer bulunan ortalama sadece Bilgi ĠĢlem bölümüne ait

ortalamadır.

SELECT avg (maas+prim) FROM eleman

Yukardaki örneke bu sefer maaĢ ve prim toplamının ortalaması istenmiĢtir. Görüldüğü gibi avg () fonksiyonu

ile basit aritmedik iĢlemelerde yapmak mümkündür.

min() fonksiyonu – Bir sütundaki en küçük değer

Bir select ifadesinin bir sütunundaki değerlerden en

küçük olanı verir.

SELECT min (maas) FROM eleman

Yukardaki sade kullanım iĢlevi görmeniz içindir. Bu

komutla eleman tablosundaki kayıtların içinde maaĢ bilgisi en düĢük olan değer gelecektir. Tabii koĢul

eklemekte mümkündür.

SELECT min (maas+prim) FROM eleman

Yukardaki örnekte bu sefer maaĢ ve prim toplamı en düĢük olan kayıt istenmiĢtir. Görüldüğü gibi min ()

Page 421: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

421

fonksiyonu ile basit airtmedik iĢlemelerde yapmak

mümkündür.

SELECT min(maas) FROM eleman WHERE

bolum=”Bilgi İşlem”

Yukardaki komutta birinci gibi minimum değerini bulur

ancak bu sefer bulunan değer tüm elemanların değil sadece Bilgi ĠĢlem bölümüne ait en düĢük maaĢ

değeridir.

max() fonksiyonu – Bir sütundaki en büyük değer

Bir select ifadesinin bir sütunundaki değerlerden en

büyük olanı verir.

SELECT max (maas) FROM eleman

Yukardaki sade kullanım iĢlevi görmeniz içindir. Bu komutla eleman tablosundaki kayıtların içinde maaĢ

bilgisi en büyük olan değer gelecektir. Tabii koĢul eklemekte mümkündür.

SELECT max(maas) FROM eleman WHERE

bolum=”Bilgi İşlem”

Yukardaki komutta birinci gibi minimum değerini bulur

ancak bu sefer bulunan değer tüm elemanların değil sadece Bilgi ĠĢlem bölümüne ait en büyük maaĢ

değeridir.

SELECT max (maas+prim) FROM eleman

Yukardaki örneke bu sefer maaĢ ve prim toplamı en fazla olan kayıt istenmiĢtir. Görüldüğü gibi max () fonksiyonu

ile basit aritmedik iĢlemlerde yapmak mümkündür.

Page 422: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

422

count() fonksiyonu – Bir sorguya göre dönen kayıt sayısı

Bir select ifadesinin sonucunda dönen kayıt sayısını verir.

KoĢul belirtilmezse tablodaki kayıt sayısını, koĢul belirtilir ise koĢula uyan kayıt sayısını verir.

SELECT count (maas) FROM eleman

Yukardaki sade kullanım iĢlevi görmeniz içindir. Bu

komutla eleman tablosundaki kayıtların içinde maaĢ

bilgisi en büyük olan değer gelecektir. Tabii koĢul eklemekte mümkündür.

SELECT max(maas) FROM eleman WHERE bolum=”Bilgi İşlem”

Yukardaki komutta birinci gibi minimum değerini bulur ancak bu sefer bulunan değer tüm elemanların değil

sadece Bilgi ĠĢlem bölümüne ait en büyük maaĢ değeridir.

JOIN ĠġLEMĠ

Sql‘de bazen birden fazla tablodan iliĢkilendirme ile

sorgulama yapmak gerekir. Örneği Öğrenci tablosundan no, adı, soyadı, yanına ise Türkçe dersinden aldığı

notların getirilmesi gerektiğinde uygulanacak iĢlem böyle bir sorgudur.

Aslında temel olarak uygun where kullanımı ileda bazı join iĢlemleri yapılabilir ancak JOIN‘in kendisi kodlama

açısından daha sadece bir kullanım sağlar.

ġimdi Personel ve departman adlı 2 tablodan sorgulama

yapalım.

Page 423: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

423

SELECT no, ad, soyad, dept_no, yonno FROM

personel,dept

WHERE personel.dept_no = dept.dept_no

Join iĢleminin çeĢitleri vardır. Inner join, Left Outer Join, Right Outer Join. Günümüzde kısaca Left ve Right join

olarak bilinmektedirler.

INNER JOIN

Join iĢleminde her iki tarafında Ģarta uyması

zorunluluğunu arar. Aksi takdirde kayıtlar listeye alınmaz.

Örneğin MüĢteri tablosundan MüĢteri adını ve Telefonlar tablosundan da MüĢteri telefonunu seçtiğimizde Inner

join kullanarak Adını ve telefonu yan yana getirelim.

Select id,adi, telno

From Cari

Inner join TELNO on Cari.id=TELNO.mus_id

Yukarıdaki sorguda aslında her Ģey güllük gülistanlık görünüyor ama aslında önemli bir sorunu da içinde

barındırıyor.

ġimdi Ģu soruyu kendimize soralım. Ya müĢterinin kayıtlı

bir telefonu yoksa ?

Yukarıdaki sorgu bu durumda o müĢteriyi hiç göstermeyecektir. Peki Sorgumuzda alacaklarında

olduğunu ve müĢterileri arayarak para tahsilatı

Page 424: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

424

yapılacağını düĢünün. Haberiniz olmayan bir alacağı

kimden tahsil edeceksiniz ?

ĠĢte bu yüzden Inner Join kullanımında son derece dikkatli olmak zorundasınız.

LEFT JOIN

Left Join iĢleminde soldaki tablodaki her kayıt detayda karĢılığı olsun olmasın listelenir.

Select id,adi, telno

From Cari

Left join TELNO on Cari.id=TELNO.mus_id

Mesela yukarıda örneği bu Ģekilde yazmıĢ olsaydık, telefonu olsun olmasın bütün cariler listelenecek, teleonu

kayıtlı müĢterilerin ise bu bilgileride görüntülenecekti.

RIGHT JOIN

Right Join iĢleminde detay tablosundaki her kayıt, ana tabloda karĢılığı olsun olmasın listelenir.

TABLOYU KENDĠSĠ ĠLE ĠLĠġKĠLENDĠRME (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;

Page 425: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

425

ĠÇĠÇE SELECT NESTED SELECTS

Bazı durumlarda iç içe select kullanmanız gerekir.

Örneği firmanızda ki tüm departmanların satıĢ toplamını listelemeniz istenmiĢ olsun. Burada yapılması gereken iĢ

önce depertmanları Select ile seçmek ve sonra bunların her birinin satıĢ toplamını buldurmaktır.

1. Adım

Select * from Dept_adi from Departman

2. Adım

Select sum(satis_tutari) from Satislar Where

Dept_adi=‘xx‘

3. Adım

ġimdi sorguları birleĢtirelim.

Select D.Dept_adi, (Select sum(satis_tutari) from Satislar S Where S.Dept_adi=D.Dept_adi)

from Departman D

UNION KULLANIMI

Ġki ayrı SELECT komutunun sonucunda elde edilen

tabloların birleĢimi iĢlemini gerçekleĢtirir.

Select * from a where adi=‘Ahmet‘

Union

Select * from a where adi=‘Mehmet‘

Page 426: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

426

Tabiki yukarıdaki komutu görünce ―biz bunu where ilede

yapardık‖ diyebilirsiniz ama yukarıdaki amaç kullanım Ģeklini göstermektir.

EXISTS KULLANIMI

And, or veya not operatörleri ile kullanılabilir.

C. DCL (DATA CONTROL LANGUAGE) DEYĠMLERĠ

Veritabanındaki kullanıcı haklarını düzenlemek için kullanılan deyimlerdir. Örneğin GRANT, DENY, REVOKE

gibi.

Örnek:

USE DB

GRANT SELECT ON Stok TO PUBLIC

GRANT DEYİMİ

AĢağıdaki örnek AyĢe adlı kullanıcı veritabanı ve tablo oluĢturma izni verilir:

GRANT CREATE DATABASE, CREATE TABLE

TO ayĢe

Page 427: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

427

SQL FONKSĠYONLARI

SQL dilini destekleyen programların daha iyi olma çabası

SQL diline birçok hazır fonksiyon eklenmesine sebep olmuĢtur. Sonuçta kazan kullanıcı olmuĢtur tabiî ki.

AĢağıda listelenen fonksiyonların bir çoğu sadece Mysql değil bir çok VTYS için geçerlidir. Ancak bazı sistemlerde

fonksiyon adı değiĢebilir, kullandığı parametre tipleri vs değiĢebilir.

Bu bakımdan eğer birden çok VTYS ile çalıĢacak bir kod düĢünüyorsanız ilk yöntem SQL92 standardına uygun

foksiyonları kullanp diğerlerinden kaçınmak olacaktır. Diğer yöntemler ise her VTYS için ayrı kod yazmak yada

bu iĢi otomatik hale getiren bir DAL kullanmak. DAL Database Absraction Layer kelimelerinden üretilmiĢtir.

Veritabanı soyutlama katmanı demektir.

Bundan sonraki SQL fonksiyonlarının bazıları her DBMS üzerinde çalışmayabilir, yada kullanımı

farklılıklar gösterebilir.

Metinlerle ĠĢlem Yapan SQL Fonksiyonları

ascii() fonksiyonu

Parametre olarak verilen değerin ASCII karĢılığını bulur.

char() fonksiyonu

ASCII olarak verilen değerleri birleĢtirip string bir değer

olarak sonuç dönderir.

CHAR ( N1, N2 .. )

Page 428: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

428

concat() fonksiyonu

Birden çok değeri birleĢirip bir string olarak verir. Bu fonksiyonlar örneği ad veya soyad bilgisi sanal olarak tek

bir sütun haline getirilebilir.

CONCAT ( N1, N2 .. )

length() fonksiyonu

Kelime anlamından da tahmin edileceği üzere parametre

olarak verilen değerin kakater sayısını verir.

LENGTH (N1)

DönüĢtürme Fonksiyonları

conv() fonksiyonu

Veriyi bir tabandan baĢka bir tabana çevirir. CONV ( veri,

a1, a2 ) veri'yi a1 tabanlı olarak alıp a2 tabana

dönüĢtürür.

bin() fonksiyonu

Sayıyı onluk sayı sisteminden ikilik sayı sistemine çevirir. BIN (Sayi) Ģeklinde kullanılır.

oct() fonksiyonu

Sayıyı onluk sayı sisteminden sekizlik yani octal sayı

sistemine çevirir. OCT (N) Ģeklinde kullanılır.

hex() fonksiyonu

Sayıyı onluk sayı sisteminden onaltılık yani Hex sayı sistemine çevirir. HEX (N) ġeklinde kullanılır.

Page 429: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

429

Tarihlerle ĠĢlem Yapan SQL Fonksiyonları

DAYOFWEEK(tarih) => YYYY - MM - DD formudaki

tarih'in, ODBC standardinda haftanın kaçıncı günü olduğunu bulur.

SELECT DAYOFWEEK('2001-12-26') =>4

DAYOFMONTH(tarih) => Ayın kaçıncı günü olduğunu

bulur.

DAYOFYEAR(tarih) => Yılın kaçıncı günü olduğunu bulur.

MONTH(tarih) => Kaçıncı gün olduğunu bulur.

DAYNAME(tarih) => Gün adını bulur.

MONTHNAME(tarih) => Ay adını bulur.

QUARTER(tarih) => Tarihin, yılın kaçıncı çeyreğinde

olduğunu bulur.

WEEK(tarih) => Yılın kaçıncı haftası olduğunu bulur.

YEAR(tarih) => Hangi yıl olduğunu bulur.

HOUR(zaman) => HH : MM : SS formatındaki zaman

verisinden saat bulunur.

MINUTE(zaman) => Dakikayi bulur.

SECOND(zaman) => Saniyeyi bulur.

Page 430: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

430

%M : Ay adı ( January, December ) %W : Gün adı ( Sunday, Saturay ) %D : Gün değeri ve eki ( 1st, 2nd ) %Y : Yıl değeri , 4 dijit ( 1993 ) %y : Yıl değeri , 2 dijit ( 93 ) %a : Kısa gün adı ( Sun, Sat) %d : Gün değeri , 2 dijit ( 00 , 31) %e : Gün değeri ( 0 , 31 ) %m : Ay değeri , 2 dijit ( 01 , 12 ) %c : Ay değeri ( 1 , 12 ) %b : Kısa ay adı ( Jan , Dec ) %j : Yılın gün sayısı ( 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ı kaçıncı günü olduğu (0=Sunday , 6=Saturday ) %U : Yılın kaçıncı haftası olduğu ( Pazar ilk gün olmak üzere) %u : Yılın kaçıncı haftası olduğu ( Pazartesi ilk gün olmak üzere) %% : Sadece ' % ' karakteri

Page 431: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

431

TABLOLARDA DEĞĠġĠKLĠK YAPMAK:

INSERT Komutu

Bir tabloya bilgi eklemeye yarar. Kullanım Ģekli:

Insert Into Tablo adı (alan1,alan2,..,alanN) values

(‗değer1‘, ‗değer2‘,.., ‗değerN‘);

Insert Into isim (ad,soyad) values

(‘ali’,’rizeli’);

Ġsim adlı tabloya sadece ad ve soyad alanlarına olmak üzere kayıt yapar.

Insert Into isim values

(„ali‟,null,‟[email protected]‟);

Bu kullanım Ģeklinde alanlar belirtilmediğinden tüm

alanların değeri belirtilmek zorundadır. Eğer girilecek alanlar belirtilmiĢ olsa idi boĢ kayıtlar belirtilmek zorunda

kalmazdı.

Örneği öğrenci tablosuna numarası 1 olan öğrenciyi ekleyelim.

INSERT INTO ogrenci (no, adi) VALUES(‘1’,’Ali’);

Insert komutunun değiĢik kullanım Ģekilleri de vardır ancak temel kullanımı budur. ÇalıĢmamızın ileri

sürümlerinde bu konu ile ilgili daha çok örnek

ekleyeceğim.

UPDATE Komutu:

Tablodaki verileri güncellemek için kullanılır. Tabloda

iĢlem yapmak üzere uygun bir alan üzerinden where ifadesi ile kullanılmalıdır. Kullanım Ģekli

Page 432: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

432

Update [Tablo Adı] Set alan=yeni deger Where

aranan alan= alan değeri

Kullanılacak anahtar alanın iĢlem çoklu güncelleme değilse Unique (tekil index) olması tercih edilmelidir.

SET ile de kullanılabilir. SET değiĢtirilecek kolonları ve değerleri belirtir. WHERE sözcüğü ise değiĢtirilecek satırı

belirtir. UPDATE tablo SET sütun = ifade WHERE kosul Ģeklinde set halinde düzenleme yapar.

Örnek: AĢağıdaki örnekte fiyat değerini %10 artırır.

UPDATE taksitler SET tutar= tutar * 1.1

Örneğin bir kaydı düzeltmek istersek ;

UPDATE Musteri SET Ad = 'Ali‟ WHERE id='1';

Not: Yukardaki örnekte eğer id alanı bir olan birden fazla kayıt varsa onlarda etkilecektir. Eğer derdiğimiz cidden tek bir kaydı iĢlemekse o zaman tekil bir key alan

kullanmalıyız.

DELETE DEYĠMĠ

Bir tablodaki verileri silmek için DELETE komutu

kullanılır.

Kullanım biçimi:

DELETE FROM tablo

WHERE arama_koşulu

Örneğin musteri tablosundaki tüm verileri silmek için;

DELETE * from musteri;

Page 433: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

433

Tabloda, bakiyesi 1000'den küçük olan

müĢterilerin satırlarını silmek için:

DELETE * FROM musteri WHERE bakiye <=1000

Bu komutu, kayıt yenileme tarihini yenilememiĢ kiĢilerin

tümünü silmek için de kullanabiliriz. Veritabanımızda yenileme tarihini gösteren bir alan bulunduğunu

farzedelim:

DELETE FROM musteri WHERE yenileme_tarih < 2007-

10-10;

Page 434: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

434

PHPMYADMIN

Günümüzde kullanılan grafik ekranlarla iĢlem yapmak

oldukça kolaylaĢmıĢtır. Bir çok iĢlemi yaparken programlarda tanımlı sihirbazlar gerekli yönlendirmeleri

yaparak iĢlemi basitleĢtirmekte, iĢlem için gereken ek bilgiler dialog penceleri yardımıyla alınmaktadır. Oysa

eskiden bu iĢlemlerin hepsini yapmak için yüzlerce belki

binlerce komutu ve parametrelerini örenmek gerekirdi.

Günümüzde her nekadar grafik arayüzler Linux ve unix

türevlerinde de varsa bile komut gereksinimi devam etmektedir. SQL komutlarında gördüğümüz üzere

veritabanını yönemek için Mysql komutları vermek mümkündür. Ancak bir çok son kullanıcı için bu komutları

doğru ve hatasız yazmak deveye hendek atlamkatan zordur.

ĠĢte bu yüzden daha görsel ve güvenli bir arayüz tercih edilir. Hosting hizmeti verenler komut eriĢiminin

tehlikelerini bilirler. Web ortamında bunun çeĢitli sakıncaları vardır. Tabii birde hosting servislerini

kolaylaĢtırmak zorunluluğu vardır ki kullanıcılar iĢlemlerini daha rahat yapıp, teknik desteğe ihtiyaç

duymasın.

1. Web ortamında önüne gelene komut çalıĢtırma yetkisi vermek saflığında ötesinde aptallık

demektir. Çünkü saniyeler içinde sunucu hack edilebilir.

2. Kullanıcılar için grafik bir arayüz daha Ģirin ve basit gelecektir.

Page 435: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

435

3. Kullanıcıyı doğrudan bir arayüzle karĢılamak aynı

zamana daha geliĢmiĢ güvenlik kontrolüne izin verir. ġöyle düĢünelim. Kullanıcı Ģehir adını

parametre vererek buna dair kayıtları listeleyecek olsun. Bunu iki Ģekilde yapabiliriz. Ya kullanıcı

istediği Ģehri yazar, yada programcı Ģehir adlarını bir liste kutusuna koyar ve kullanıcı buradan

sadece veriyi seçebilir. ġphesiz ikinci yöntem kullanıcıya daha kolay gelir. Ancak bu asıl güvenlik

açısından çok daha önemlidir. Çünkü kullanıcı yazma ekranı olsa araya bir takım kodlar gömerek

SQL Injection denilen saldırı tekniğini kullanabilir. Ancak liste kutusunda tek yapabileceği bir ögeyi

seçmek olacaktır.

Görüldüğü gibi ne kadar profesyonel olursanız olun, hazır

yazılımlar kullanarak yapılan MySQL yönetimi hem daha

hızlı hem de daha sıkıntısız olacaktır. Çünkü diğer türlü her türlü iĢlem için baĢtan aĢağı SQL komutları ile

uğraĢmak gerekir. PHP'yle geliĢtirilmiĢ olan PhpMyAdmin yazılımı kullanılarak tarayıcı penceresi içinden MySQL'le

ilgili birçok iĢlemi gerçekleĢtirebilmek mümkündür. Pma‘yi kullanabilmek için Apache ve Mysql çalıĢıyor

olmalıdır. Pma üstünde tanımlı formlardan iĢlemler seçilir ve yazılması gereken SQL kodlarını Pma, kendisi

oluĢturup, PHP bağlantısı üzerinden MySQL‘e gönderip çalıĢtırır.

PhpMyAdmin Kurulumu

Bu konuya burada yer veriliyor olması bunun sık sık

tekrarlanan bir görev olduğunu düĢündürmemelidir. Phpmyadmin kurulumu çok zor bir iĢlem değildir ancak

Page 436: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

436

hosting Ģirketleri PHP desteği veren sunuculara nerdeyse

otomatik olarak bunuda kurdukları için zaten sıradan kullanıcılar zaten böyle bir sorunla karĢılaĢmazlar.

Peki ne zaman gerekir ?

1. Hosting iĢi yapıyorsanız ve bir sunucu kuracak

iseniz

2. Kendi sisteminizde lokal kullanım ve test ortamı

için

Bir çok durumda her iki iĢide hazır WAMP yada LAMP

paketleri ile yapmak mümkündür bu durumda gene Phpmyadmin hazır gelecektir.

Kurulum için kurum dosyası ilgili sitesinden indirilip web sunucunun ―webroot‖ klasörüne açıldıktan sonra

config.inc.php dosyasına Mysql eriĢimi için gereken Ģifre ve kullancı adı gibi ayarlar girilmelidir.

Not: PMA içine bu ayarlar girildikten sonra MySQL Ģifresi değiĢtirilecek olursa bu dosyada da gerekli değiĢiklikler

yapılmalıdır. Aksi takdirde PMA çalıĢmaz.

PhpMyAdmin'i ÇalıĢtırma ve Tanıma

PhpMyAdmin'i çalıĢtırmak için tek yapılması gereken, PhpMyAdmin‘in kurulu olduğu adresi taayıcıcnın adres

çubuğuna yazmaktır. Pma ile Mysql üzerindeki her türlü sorgulama iĢlemi yapılabildiği gibi veritabanı yönetimi ve

bakım iĢlerinde de kullanılabilir. Pma'nın ilk açılıĢ pencersinde, sol tarafta sistemde tanımlı olan

veritabanlarının listesi, ortada da MySQL'in hafızadaki aktif iĢlemleri ve o anda yerine getirilen görevler yer alır.

Sol tarafta yer alan menüde bulunan veritabanı isimleri,

Page 437: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

437

yeni kurulan bir MySQL kurulumu için sadece test ve

mysql olarak görülecektir. Menüden bu veritabanı isimlerine tıklanarak, veritabanı içinde yer alan tablolar

ekranına ulaĢılır. Aynı zamanda, sol tarafta da veritabanının altındaki tabloların isimleri belirecektir. Sol

menüdeki tablo isimlerine tıklanarak, tabloların içinde yer alan alanlar hakkında ayrıntılı bilgiye eriĢilebilir. Bilinmesi

gereken Ģudur; Test veritabanı mysql içinde zaten tanımlı olan boĢ bir veritabanıdır. Test ve deneme

iĢlemleri için kullanılır. Mysql isimli veritabanı ie MySQL‘in master veritabanıdır. Kısaca kullanıcının oluĢturacağı

diğer veritabanları, ve bunların içindeki alanlarla ilgili bilgiler, indeks bilgileri, kullanıcı isim, parola ve yetkileri

gibi tüm bilgiler Mysql isimli veritabanında tutulur. Bu açıdan eğer deneme iĢlemler yapacaksanz Mysql adlı

veritabanından uzak durun.

Page 438: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

438

PhpMyAdmin ile Database OluĢturma

Pma calıĢtırıldığında gelecek olan sağ çerçevede yer alan

create new database bölümüne oluĢturulması istenilen veritabanı adı yazılarak create tuĢuna basılırsa database

oluĢturulacaktır.

PhpMyAdmin ile Tablo OluĢturma

Eğer veritabanı sorunsuz olarak oluĢturulursa sağ

çerçevede bir sql sorgu metin kutusu bir de manual olarak table oluĢturmamıza yarayacak olan ―Create new

table on database ...‖ bölümü yer alacaktır. Eğer doğrudan sql olarak tablo oluĢturulacak ise Create Table

ile Run sql query bölümünden tablo oluĢturmak mümkündür. Yada ―Create new table on database...‖

Page 439: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

439

yazan bölüme tablo adı ve kaç alandan oluĢacağı

yazılarak kaç alandan oluĢacaksa belirtilerek sihirbaz mantığı ile oluĢturmak mümkündür.

Not: PHP ile yazılmıĢ open source yazılımlar genelde kullanıcının iĢini kolaylaĢtırmak için bir takım iĢlevler

içerirler. Mesela kimi yazılım sadece MySQL için kullanıcı adı ve Ģifre sorar, ondan sonra ise tüm veritabanı,

gerekli tablolarve kullanıcı bilgilerini kendisi oluĢturur. Kimi programda ise gerekli tablo yapıları SQL halinde

verilir. ĠĢte bu durumlarda bu sql komutlarını Pma içinden çalıĢtırıp kurulum iĢlemini tamamlamak

mümkündür.

Mesela run sql query bölümünde bir tablo oluĢturalım.

Page 440: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

440

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 yanıt alınırsa tablo sorunsuz olarak oluĢturulmuĢ demektir.

Eğer ―Create new table on database ― bölümünden yola devam edilirse, burada tablo adı ve tablonun alan sayısı

belirtilerek aynı tablo oluĢturulabilir. Fakat sql cümlecikleri nispeten iĢimizi kolaylaĢtırır. (elle

yazılmadığı durumlarda diye haırlatmaya gerek yok sanırım)

Sağ çerçevenin alt bölümünde yer alan ―drop database‖

linki database silmek için kullanılır.

Tablo oluĢturulurken kullanılan alan türleri Mysql konusu

içinde iken anlatılmıĢtı.

Bir Veritabanının Modelini Çıkarmak

Buradaki baĢlıkta kastedilen aslında yukarda bahsedien

veritabanı için gereken SQL kodlarının bir blok halinde elde edilmesidir. Ġki Ģekilde çıkarılabilir. Pma‘da herhangi

bir database‘i sol menüden seçip sağ tarafta ―View dump (schema) of database‖ bölümünü kullanabiliriz. Burada 3

seçenek vardır.

Page 441: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

441

Burada ;

Structure only: Sadece alanları ve tabloları verir.

Structure and data: Hem alanları hemde alanlara kayıtlı verileri verir. Boyut olarak büyük olabilir.

Data only: Sadece tablolara kayıtlı alanları verir.

UPDATE [Tablo Adi] SET [Yeni Değer] WHERE [Seçilen

Kriter]

Page 442: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

442

MySQL ve PHP

PHP ile MySQL çalıĢtırmak basit diğer fonksiyonları

kullanmak kadar kolay ve pratiktir. Kodlama yapısı diğer fonksiyon ve prosedürlerden farklı olmayan MySQL

fonksiyonları sorguları da SQL komutu ile gerçekleĢtirerek dönen değerleri While, For gibi

değerlerle alabilir. MySQL için kod yazarken önce

Veritabanı sunucusuna bağlanmamız gerekir. Bize verilen kullanıcı adı ve Ģifre ile sunucuya bağlandıktan sonra

yetkilerimiz bize hangi imkanları sunuyorsa buna uygun iĢlemlerimizi gerçekleĢtirebiliriz.

PHP dilinin son sürümleri Mysql ile farklı Ģekillerde bağlantı kurup iĢlem yapabilmektedir. PDO, Mysql

Improved ve klasik SQL cümleleri ile. Aslında Ģu an PHP ile yazılmıĢ hazır kodların bir çoğunda klasik yöntem

tercih edilmiĢtir. Ayrıca programcılık dünyasında SQL dilini yani bir veritabanını nasıl sorgulayacağını bilmek

önemli bir olaydır. Kullanıcı hangi programlama dilinde ve hangi Veritabanı için kod yazarsa yazsın olu mutlaka

SQL dili ile kesiĢir. Dolayısıyla programcı kiĢi veritabanı ile uğraĢıyorsa SQL bilmek zorundadır. PHP ile klasik

yöntemi kullanarak MySQL ve diğer veritabanı tablolarına

bağlanmak ve onlarla iĢlem yapmak oldukça kolaydır. Bu konuda izlenmesi gereken sıra Ģudur:

1. Veritabanı sunucusuna bağlanma (mysql_connect, vs... gibi fonksiyonlar ile) ve bir bağlantı numarası

(link identifier) alma,

2. Bu bağlantıyı kullanarak bir veritabanı seçme

(my_sql_select_db, vs...),

Page 443: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

443

3. Bu bağlantı üzerinde sunucuya sorgu gönderme

(mysql_db_query, vs...) ve ve sorgu sonuncu bir dizi değiĢken (result identifier) olarak alma

4. Bu diziyi PHP değiĢkenlerine aktararak kullanma (mysql_fetch_row, mysql_fetch_assoc vs...),

5. Sunucu ile bağlantıyı kesme (mysql_close() fonksiyonu)

Daha önce Msql‘i komut satırından yada sql ile nasıl kullanacağımızı iĢlemiĢtik. ġimdi mysql ile php arasındaki

bağlantılar ve komutları görelim:

PHP Dili Mysql Fonksiyonları Tablosu

AĢağıdaki fonksiyonlar basitçe ve topluca verilmiĢtir. En

yukarda tanımlı olanlar daha sık kullanılan fonksiyonlardır. Aslında bu tablo çok daha uzundur ancak

diğerleri dahada ender kullanılan fonksiyonlardır. Bu tablonun ardından önemli fonksiyonlar detaylıca açıklanıp

örneklerle incelenecektir.

mysql_connect : Sunucuya veritabanı

bağlantısı açar

mysql_close : Belirtilen MySQL bağlantısını kapatır

mysql_fetch_row: Sonuç tablosundan dizi

değiĢkeni olur

Page 444: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

444

mysql_fetch_array : Sonuçları dizi değiĢkeni olarak alır

mysql_num_rows : Sonuçtaki satır sayısını verir

mysql_query : Veritabanına sorgu gönderir

mysql_result : Sorgudan dönen sonuçları alır

mysql_select_db : Sunucudan veritabanı seçer

mysql_affected_rows: Bir önceki iĢlemde etkilenen satır sayısı

mysql_create_db : MySQL'de veritabanı açar

mysql_data_seek : Sonuç satırında belirtilen sıraya geçer

mysql_db_query : MySQL'e sorgu gönderir

mysql_drop_db : Sunucudan veritabanı siler

mysql_errno : Bir önceki iĢlemdeki MySQL hata

numarasını verir

mysql_error : Bir önceki iĢlemdeki MySQL hata

mesajını verir

mysql_fetch_field : Sonuç tablosundaki alan adını obje olarak alır

mysql_fetch_lengths : Sonuç tablosundaki dizi değiĢkenin uzunluğunu alır

Page 445: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

445

mysql_fetch_object : Sonuç satırını obje olarak alır

mysql_field_name : Sonuç tablsundaki sonucun tablodaki alan adını verir

mysql_field_seek : Sonuç tablosunda sıra indisini

belirtilen yere götürür

mysql_field_table : Alan adı verilen sonucun tablo

adını verir

mysql_field_type : Sonuçtaki alanın hangi tip olduğunu belirtir

mysql_field_flags : Sonuçtaki alanın hangi tür ekstra parametrelerle tanımlandığını

belirtir

mysql_field_len : Sonuçtaki alanın veritabanındaki uzunluğunu verir

mysql_free_result : Sonuçlar için atanan hafızayı boĢaltır

mysql_insert_id : Bir önceki veri yerleĢtirmede

oluĢan otomatik veri değerini verir

mysql_list_fields : Sonuçtaki tüm tablo alanlarını

listeler

mysql_list_dbs : Sunucudaki tüm veritabanlarını

listeler

Page 446: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

446

mysql_list_tables : Veritabanındaki tüm tabloları

listeler

mysql_num_fields : Sonuçtaki alan sayısını verir

mysql_pconnect : Sunucuya kalıcı bir bağlantı

tanımlar

mysql_tablename : Verilen alanın ait olduğu tablo

adını verir

mysql_connect() deyimi(Database bağlantısı)

Php ile mysql ile bağlantıyı sağlayan komuttur. Kullanım Ģekli ise

mysql_connect(“adres”,“kullanici”,”Ģifre”);

genel olarak mysql kurulduğunda kullanıcı

tanımlanmamıĢ ise tek kullanıcı vardır. Bu kullanıcı ―root‖dur. Ve Ģifresi boĢ geçilecektir. Adres bölümüne ise

eğer kendi makinemizde kullanıyorsak localhost yazarız. Buna göre bağlantı için:

mysql_connect(“localhost”,”root”,””);

Ģeklinde bir cümlecik eğer mysql çalıĢıyor ise bağlantı için yeterlidir. Peki ya çalıĢmıyor ise ne olacak;

mysql_connect() fonksiyonunun baĢarılı olup olmadığını

bu değiĢkenin durumunu test ederek anlayabiliriz. Örneğin:

Page 447: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

447

$baglan =mysql_connect("localhost", "root",‖‖);

if ( ! $baglan) die ("MySQL ile veri bağlantısı

kurulamıyor!);

Ġkinci satırdaki if ile baĢlayan satır, $baglan değiĢkeninin değer içerip içermediğine bakmaktadır. Çünkü eğer

bağlantı baĢarılı ise bu değiĢken bir değer içerecek aksi taktirde içermeyecektir. Haliyle kodumuz değiĢkende bir

değer yoksa, bağlantı kurma giriĢini durdurarak, ziyaretçiye hata mesajı dönderecektir.

mysql_select_db() deyimi

Bağlantı baĢarıyla kurulduktan sonra PHP programı,

veritabanı sunucusuna, hangi veritabanı dosyasını

kullanmak istediğini belirtmelidir. Buna veritabanı dosyası seçme iĢlemi denir. Bu iĢ için

mysql_select_db() komutu kullanılır. Kullanım Ģekli:

mysql_select_db(“veritabanı adı”,”baglantı

adı”);

Ģeklindedir.

PHP'nin MySQL veritabanını seçememesi çoğu zaman

kullanıcı yetkilerinin Internet ziyaretçilerini kapsayacak Ģekimde düzenlenmemiĢ olmasından kaynaklanır. Bu

durum gerçek Web sunucusunda ortaya çıkarsa, Web sunucusu yönetimine baĢvurmak gerekir. Ancak en

basitinden bağlanılacak veritabanının adını yanlıĢta yazmıĢ olabiliriz. Bu ve diğer öngörülemeyen hatalar için

burada da daha konrollü bir kod yazmak elimizdedir.

Page 448: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

448

mysql_select_db( "veritabanının_adı" , $baglan) or die

("Veritabanı açılamıyor!");

Bu kod bize bağlantı kurulamadığı durumlarda ilgili mesajı

gösterecektir. Daha detaylı bir kontrol kodunu ile ―hata kontrolü‖ kısmında tekrar iĢleyeceğiz.

mysql_query() fonksiyonu- Mysql’e sorgu göndermek

PHP dilinde MySQL'e sorgu göndermek için

mysql_query() komutu kullanılır. Parantez içinde tırnak arasında sql sorgusu veya daha önce sql olarak

hazırlanmıĢ değiĢken yazılabilir. Örneğin:

$sorgu=”select * from deneme”;

$islem=mysql_query($sorgu);

veya

$islem=mysql_query(“select * from deneme”);

aynı iĢlemi yapar.

mysql_numrows() fonksiyonu-Sorgudan Dönen Kayıt Sayısını Bulmak

Sorgu sonucu kaç tane kayıt döndürüldüğünü öğrenmek

için mysql_numrows() komutu kullanılır. Bu sayı daha sonra sorgudan gelen kayıtları değiĢkenlere almak yada

sıra ile iĢlemek üzere iĢimize yarayacaktır.

$kac_tane=mysql_numrows($islem);

yukarıdaki sorgudan kaç tane kayıt geldiğini bize verecektir.

Page 449: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

449

mysql_result()-Sorgudan Dönen Kayıtları ĠĢlemek

Eğer sorgudan gelen kayıtları değiĢkenlere almak

istiyorsak bunun icinde mysql_result() komutu kullanılır. Mesela yukarıdaki sorgudan ad ve soyad diye iki alan

geldiğini düĢünelim burdan gelen tüm kayıtları ayrı ayrı iki değiĢkene aktaralım.

$i=0;

while($i<$kac_tane):

$ad[]=mysql_result($islem,$i,”ad”);

$soyad[]=mysql_result($islem,$i,”soyad”);

$i++;

endwhile;

Yukarıda $i değiĢkeni sorgudan gelen sonuçları alırken

kullanılan geçici bir değiĢkendir. Sırası ile her satırdaki ad ve soyad alanlarındaki kayıtlar $ad ve $soyad isimli

iki dizi değiĢkene aktarılmıĢtır. Böylece mysql‘de yer alan

yaptığımız sorgu ile alakalı tüm kayıtlar artık php‘nin içine aktarılmıĢtır.

Kayıtları Ekrana Listelemek

Yukardaki sorguda dönen kayıtları ekrana listelemek için kuĢkusuz PHP dili bizlere birden çok imkan sunmaktadır.

Ancak Ģimdilik basit bir FOR döngüsü ile yetinelim.

for($j=0;$j<$kac_tane;$j++):

Page 450: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

450

echo $ad[j].” “.$soyad[j].”<br>”;

endfor;

Ģeklinde kısa bir döngü kullanılabilir. Tabii ki bunu html kullanarak daha görsel hale getirmek mümkündür.

DeğiĢkenleri Sorguların Ġçinde Kullanmak

Php‘den gelen değiĢkenleri de sorgularda kullanmamız

mümkündür. Mesela $isim diye bir değiĢken değeri alınıp ve bu değiĢkenin ad, soyad ,maas ve eposta bilgileri

ekrana yazılacak olsun. Burada değiĢkenin değerini ekrandan akmak için gerekli formla uğraĢmadan sorgu

ile ilgileneceğiz. Çünkü birincil amaç sorguyu değiĢken ile yapmak.

Kullanılan database personel olsun eleman adlı bir tablo kullanalım:

<?

$host =“localhost”;

$user =“root”;

$password =“”;

$db =“personel”;

mysql_connect($host,$user,$password)

mysql_select_db($db);

$sorgum = “select isim,soyad,maas,email from

eleman where isim=‟$isim‟”;

$sonuc =mysql_query($sorgu);

$kactane =mysql_numrows($islem);

Page 451: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

451

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

echo”adı: $isim <br> soyadı:

$soyad<br> email: $email<br>”;

$i++;

endwhile;

?>

Daha dinamik bir program yapısı kullanmak ve ileride kodlarınızı sürekli yeniden kullanmak için bu tip yapıları

alıĢanlık edinmelisiniz.

Benim kendi kullandığım genel yapıda buna benzerdir.

Ancak ben buradan bir adım sonrası olarak veritabanı bilgilerini, mysql_connect ve mysql_select_db

komutlarını harici bir dosyaya koyar oradan include komutu ile çağırırım. Dosyada ayrıca hata kontrol koduda

yer aldığından Mysql bağlantısı kurulamaması durumundandan kullanıcı haberdar edilir. Böylece

veritabanı adı, kullanıcı adı yada Ģifre vs değiĢecek olursa tek bir yeri değiĢtirmem yeterli olur aksi durumda

tüm kodları gözden geçirip bağlantı bilgilerini yeniden düzenlemek durumunda kalırım.

Page 452: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

452

mysql_fetch_assoc() fonksiyonu- sorgu sonucundan bir satır almak

Bu fonksiyonlar bir sorgu sonucunda dönet kayıtlar satır

bazlı olarak değiĢkene aktarılabilir.

<?

while ($listele=mysql_fetch_assoc($sorgu)): // kayıtlar döngü içinde iĢleniyor

echo "$listele[Database]";

endWhile;

?>

Yukardaki örnek kod yarım bir koddur. Sadece kullanım amacıyla burada verilmiĢtir. ÇalıĢan bir kod daha sonra

görülecektir.

mysql_error() fonksiyonu- MySQL hatalarını konrol etmek

Kullanıcının MySQL'de oluĢabilecek hataları PHP içinden

fark edebilmesi için, PHP'de özel komutlar vardır. Bu komutlar sayesinde veritabanı sorgulamasında oluĢan

sonuçlar hata numarasıyla birlikte yakalanabilir. Hata gösterge komutları kullanılmadan PHP, MySQL'e dair

hiçbir hata mesajı vermeden iĢleme devam eder.

if (mysql_error())

{

echo ("MySQL hatası oluĢtu. Hata: ");

echo mysql_error() ;

}

Page 453: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

453

Yukarıdaki PHP satırları mysql_error() komutunu

kullanarak herhangi bir MySQL hatası oluĢtuğunda ekrana MySQL hatasının yazılmasını ve PHP yazılımcısının

uyarılmasını sağlar.

mysql_select_db( "veritabanının_adı" , $baglan)

or die ("Veritabanı açılamıyor!".mysql_error());

Yukardaki kod veritabanı seçme kısmındada gördüğümüz kodun deha detaylı ve geliĢmiĢ bir sürümüdür. Bu

fonksiyonun sonucunun true yada false olması bize bağlanı kurulup kurulmadığını vermektedir. Bu değer

false ise doğrudan die() bölümü iĢlenerek kullanıcının tarayıcısına veritabanının açılamadığı mesajıyla birlikte

MySQL'in hata mesajı da gönderilecektir.

$kayitlar = mysql_query(select * from eleman");

if (mysql_error()) {echo ("MySQL hatası oluĢtu.

Hata no :"); echo mysql_error();}

$isim = mysql_result($kayitlar,$i,"isim");

$soyad = mysql_result($kayitlar,$i,"soyad");

PHP ile Veritabanı OluĢturma Listeleme ve Silme

Aslında bu komutlar çok sık kullanılan komutlar değildir.

Çünkü elimizin alında bulunan Phpmyadmin bir çok konuda eksikliği kapatan bir yardımcıdır. Bu iĢlemler için

bildiğimiz Mysql komutlari SQL sorguları halinde

mysql_query() fonksiyonu ile çalıĢtırılır. Ancak bu iĢlem için yetki verilmiĢ olması gereklidir. Özellikle gerçek web

sunucularında bu yetkilerin sağlanmĢ olduğundan emin olmak gereklidir. Sunucu üzerinde genellikle veritabanı

Page 454: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

454

oluĢturma yetkisi verilmemiĢtir. Yada bu iĢlem bir panel

yada sihirbaz yardımıyla gerçekleĢtirilir.

<?

@mysql_connect("localhost","root","");

// Mysqle bağlanılıyor

$sorgu=mysql_query("CREATE DATABASE Deneme");

// Deneme adlı database oluĢturuluyor

echo $sorgu; // Sonuç ekrana yazdırılıyor

$sorgu=mysql_query("SHOW DATABASES"); //

Mevcut databaseler alınıyor

while ($listele=mysql_fetch_assoc($sorgu)): // kayıtlar döngü içinde iĢleniyor

echo "$listele[Database]";

endWhile;

$sorgu=mysql_query("DROP DATABASE Deneme");

//Deneme database kaldırılıyor

echo $sorgu;

?>

Yukarıdaki örnek kodlar önce "Deneme" adlı bir veritabanı oluĢturacaktır. $sorgu değiĢkenine atanan

mysql sorgusundan dönen değer eğeriĢlemde bir hata yoksa 1 olmalıdır. Sorgu ile ilgili bir hata olursa bu değer

"0" olarak dönecektir.

Daha sonra ―Show databases‖ ile mevcut veritabanları listelenmektedir. Bunun ardından bir döngü ile sorgu

sonucu dönen veritabanı listesini döngü içinde listelemek için gerekli kodu en basit haliyle görmekteyiz. Döngü

Page 455: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

455

içerisinde "echo $listele[Database] diyerek tampon

değiĢkeninden dönen değerin ekrana yazılması istenmeĢir. Bu yöntem PHP ile sorgu alıĢveriĢlerinde en

sık kullanılan yöntemlerden birisidir. En son olarak ise DROP yardımı ile Deneme veritabanı silinmektedir.

Görüldüğü gibi MySQL'de PHP ile veritabanı oluĢturmak,

silmek ve listelemek standart'da aynı fonkisyonları kullanarak basit SQL kodlarıyla mümkün. Burdan sonraki

konulardada aynı mantık ve pratik çalıĢma ile diğer iĢlemlerimizi gerçekleĢtirebiliyoruz.

PHP ile Tablo OluĢturma, Listeleme, Güncelleme ve Silme

Bu iĢlemleri yaparkende yukarda görüldüğü gibi aslında

gerekli SQL komutları PHP kodları içinde Mysql‘e yollanıp gerekli iĢlemler yapılacaktır.

<?

@mysql_connect("localhost","root","");

// Mysql e bağlanıldı

@mysql_select_db("Deneme"); // veritabanı seçildi

$sorgu=mysql_query(" // tablo oluĢturan kod gönderiliyor

CREATE TABLE `Tablo` (

`id` INT NOT NULL,

`adisoyadi` TEXT NOT NULL,

`user` TEXT NOT NULL,

`pass` TEXT NOT NULL)"

);

Page 456: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

456

echo $sorgu;

$sorgu=mysql_query("SHOW TABLES"); // tablo listesi alınıyor

while($listele=mysql_fetch_assoc($sorgu)): // liste ekrana yazılıyor

echo "$listele[Tables_in_Deneme]";

endWhile;

echo $sorgu;

$sorgu=mysql_query("DROP TABLE Tablo"); // oluĢturulan tablo database den kaldırılıyor

echo $sorgu;

?>

ġimdi yukardaki örmek kodları detaylıca inceleyim; önce

veritabanına bağlanıp, iĢlem yapılacak veritabanı seçimli

ve daha sonra ―create table‖ komutu ile istenen yapı verilerek bir tablo oluĢturulmuĢtur. Daha sonra mevcut

veritabanı içindeki tablolar bir sorgu ile alınmıĢ ve dönen kayıtlar ekrana yazılmıĢtır. En son olarak ise ―Drop

Table‖ ile oluĢturulan örnek tablo yok edilmektedir.

Kimi durumlarda bütün tabloyu değilde tablonun

içerisindeki bir sütunu silmemiz gerekebilir. Böyle durumlarda da aĢağıdaki gibi bir kod kullanılır.

<?

@mysql_connect("localhost","root","");

@mysql_select_db("Deneme");

$sorgu=mysql_query("ALTER TABLE Tablo

Page 457: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

457

DROP `user`,

DROP `pass`");

echo $sorgu;

?>

Sorgudaki farka dikkat ettiyseniz Alter komutu ile iĢlem yapılmakta ve kaldırılacak sütunlar DROP ile birlikte

verilmektedir. Bu komutlarla tablodan user ve pass

alanları kaldırılacaktır.

PHP ile Tablolara Veri GiriĢi, Listeleme, Güncelleme ve Silme

PHP ile veritabanı yada tablo oluĢturma iĢlemi normal

Ģartlarda sık sık kullanacağınız komutlar değildir. normalde bu iĢlemler hosting Ģirketine ait bir panelden

yapılır ve daha sonra bu hazır tabloları iĢleyecek kodlar yazılır. PHP ile ilgili yazılan bu kitapta en çok önem

verilmesi gereken kısım burasıdır. Çünkü veri iĢleme

gereksinimi olmasaydı programlama dillerinede gerek olmazdı. Ancak Mysql in komut satırı kısmında da SQL

kısmındada gerekli komutlar görülmĢtür. Aslında burada da veritabanı oluĢturmak tablo listelemek iĢlemlerindeki

mantık kullanılacaktır. PHP ile gerekli veriler iĢlenecek ve bu verilere uygun SQL ifadeleri hazırlanıp Mysql

komutları halinde veritabanına gönderilecek ve iĢlem yapılmıĢ olacaktır. ġimdi basit bir örnekle baĢlayalım.

Burada bilgi giriĢleri kullanıcıdan istenmeyecek ve bir kaydı kod içinden kaydetmek, değiĢtirmek, silmek,

listelemek gibi iĢlemlerin hangi fonksiyonlar ile yapıldığı görülmüĢ olacaktır.

Page 458: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

458

<?

@mysql_connect("localhost","root","");

// Bağlantı kuruluyor

@mysql_select_db("Deneme"); // Veritabanı seçiliyor

$sorgu=mysql_query("INSERT INTO `Tablo` (

// bir kayıt giriĢi yapılıyor

`id`,

`name`,

`code`,

`pass`)

VALUES (

'1',

'Ġbrahim Kutluay,

'BarıĢManço,

'1234')

");

echo $sorgu;

$sorgu=mysql_query("SELECT * FROM Tablo");

// tablodaki tüm kayıtlar alınıyor

while($liste=mysql_fetch_assoc($sorgu)):

// kayıtlar sıra ile değiĢkene alınıyor

echo "$liste[id]-$liste[name]-$liste[code]-$liste[pass]";

// alınan satır ekrana yazılıyor

endWhile;

$sorgu=mysql_query("UPDATE Tablo SET pass=123 WHERE

id=1"); // 1 nolu kayıt güncelleniyor

echo $sorgu;

$sorgu=mysql_query("DELETE FROM Tablo WHERE id=1");

Page 459: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

459

// 1 nolu kayıt siliniyor

echo $sorgu;

?>

ġimdi örneği detaylıca inceleyelim. Deneme adlı veritabanındaki "Tablo" adlı tabloya bir kayıt giriĢi

yapılmaktadır. "INSERT INTO" ile veritabanına kayıt eklenmiĢtir. Bu iĢlem için kaydın hangi tabloya

yapılacağı, tabloya hangi bilgilerin ekleneceği ve eklenen bilgilerin hangi sütunlar için verildiğini vermekteyiz.

Sonraki aĢama da listeleme olayına geçilmiĢtir. Görüldüğü gibi buradada daha önceki ibi önce ilgili

kayıtlar sorgu ile çekilmiĢ daha sonra döngü halinde iĢlenmiĢtir. SQL kısmında da görüldüğü gibi "SELECT *

FROM" kayıtların seçileceği tablo belirtilmiĢtir. Ayrıca bu hali ile yapılan listelemede, dönen değerler verilerin son

güncelleme tarihine göre listelenir. Yani sıralı olarak

listelenmez. Bu iĢlem için sorguya bu seçeneğin eklenmesi gerekir. Bunu yapmak içinde yine QL

kısmından hatırlayacağınız ORDER by deyimi gereklidir

"SELECT * FROM Tablo" sorgusunu, "SELECT * FROM

Tablo ORDER by id" olarak değiĢtirirsek kayıtlar bu sefer ―id‖ alanına göre sıralı olarak listelenecektir. Sıralamanın

tersten yapılması istenirse ―order by id― yerine ―order by id DESC‖ yazılması gereklidir. Yine SELECT Sql komutunu

hatırlarsanız burada belirli koĢullara uygun kayıtlarında seçilebileceğini görürsünüz. Çünkü her zaman bütün

tablodaki verilerin listelenmesi gerekmeyebilir. Kimi zaman tablo içerisindeki tek bir bilginin alınması bile

yeterli olabilir;

Page 460: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

460

"SELECT * FROM Tablo WHERE id=1" yapılırsa sadece 1

nolu kayıt sorgu sonucu olarak dönecektir. Bu size ilk etapta pratik gelmeyebilir ancak düĢünelim ki bir sınıf

kayıt var ve öğretmen geçer not alanları görmek istiyor. Tüm sınıfı listeleyip ―geçenleri sen say ve notlarının

ortalamasınıda sen elle hesapla mı‖ diyeceğiz.

"SELECT * FROM Tablo WHERE ort>49" gib bir sorgu ile

ortalaması geçer olan kayıtlar sorgulanıp döngü ile yazdırılabilir.

Varolan bir kaydı güncellemek içinse görüldüğü gibi tabloya UPDATE komutu gönderilmiĢtir. DeğiĢikliğin

yapılacağı verinin bulunduğu tabloyu belirtilir ve "SET pass=123" komutu ile değiĢtirilecek alan verilerek bunun

yeni değeride girilmiĢ olur. En son aĢama ise varolan bir kaydın silinmesidir. Delete SQL komutuna istenilen

duruma uygun bir koĢul eklenerek iĢlem yapılmıĢ olur.

Örnek Uygulama: PHP ile ġifreli GiriĢ Sayfası Yapılması

Web sitelerinde sık sık gördüğünüz Ģifreli giriĢ

sayfalarından bir tanede yapmak istenirse aĢağıdaki kodlar iĢe yarayabilir. Kodlar geliĢirmeye müsaittir.

Ayrıca içinde iĢe yarayacak bir Javascript koduda mevcuttur. Önce bu iĢlem için kullanmak üzere bir tablo

oluĢurmak gereklidir. Bunu ister PMA ile ister PHP kodu yazarak oluĢturmak mümkündür.

CREATE TABLE `kisi` (

`kullanici` varchar(8) NOT NULL default '',

Page 461: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

461

`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 dosyalarımızı sırasıyla dosyalarımız oluĢturalım. Ġ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>

Page 462: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

462

<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( 'Lütfen bir kullanıcı ismi giriniz!' ); theForm.kullanici.focus(); return; } if ( theForm.sifre.value.length == 0 ) { alert( 'Lütfen Ģifre giriniz!' ); theForm.sifre.focus(); return; } theForm.submit(); } </SCRIPT> <center> <b><font face="Verdana, Arial, Helvetica, sans-

serif" size="2">Kullanıcı GiriĢi </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, sans-

serif" size="2">Kullanıcı Adı</font></td> <td width="101"> <font face="Verdana, Arial, Helvetica, sans

-serif" size="2">

Page 463: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

463

<input type="text" name="kullanici" size="10" maxlength="

8" value="<? echo $kullanici?>"> </font></td> </tr> <tr> <td width="115"><font face="Verdana, Arial, Helvetica, sans-

serif" 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>Kullanıcı Kayıt</a></center> </body> </html> <? endif; mysql_close() ?>

/********************************************

*************************/

kaydet.php

Page 464: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

464

<html> <head> <title>Kullanıcı Kayıt Sayfası</title> <meta http-equiv="Content-Type" content="text/html; charset="> </head> <body bgcolor="#FFFFFF" text="#000000"> <center> <p><font face="Verdana, Arial, Helvetica, sans-

serif" size="2"><b>Kullanıcı Kayıt 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">

Page 465: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

465

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

Page 466: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

466

<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?>> Kız </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";

Page 467: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

467

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>Kullanıcı Kaydı Tamamlandı</center><br>"; include "index.php"; else: echo"<center>Lütfen tüm alanları doldurunuz!</center><br>"; include "kaydet.php"; endif; ?>

/********************************************

*************************/

gir.php

<? if( $kullanici && $sifre ): include "sabit.php";

Page 468: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

468

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

Page 469: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

469

/********************************************

*************************/

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;

Page 470: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

470

else: @header("Location: sayfa.php"); endif; ?>

/********************************************

*************************/

sayfa.php

<? include "kontrol.php"; if ( $kontrol == 1 ): echo "<center>Gizli bölüm</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'";

Page 471: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

471

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

Page 472: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

472

/********************************************

*************************/

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

llanıcı Kayıtlı Değil...</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 olmalısın...</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 ; ?>

Page 473: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

473

PHP ve GÜVENLĠK

Ġlk konularda anlatıldığı üzere internetin iletiĢim

protokolü olan TCP/IP protokolü güvenlikten daha çk verinin iletilmei amacına yönelik tasarlanmıĢtı. ĠĢte bu

yüzden web ortamında güvenlik inert yaygınlaĢtıkça büyük sorun olmaya baĢladı. Çünkü çk çeĢitli sebeplerle

internet siteleri, buları yayınlayan web sunuculara

saldırılır oldu, o da yetmez gibi web sunuculardaki we server programları, iĢletim sistemleri hedef tahtasına

kondu. Günümüzde

Merakını gidermek ve öğrenmek

Kendini test etmek

Bir yerlerden okuduğu bir yöntemi yada kodu

denemek

Yazılımı geliĢirenlere ―sizin ürününüzü kırdım, bunu

daha güvenli yapın, ben sizden daha akıllıyım‖ mesajı vermek

KiĢisel egosunu tatmin etmek

Yazılımların güvenlik açıklarına dikkati çekmek

Edindiği sisteme sızma yollarını yada önemli bilgileri para karĢılığı satmak

Rakibine ait bilgileri ele geçirmek

Gibi çok çeĢitli sebeplerle sistem güvenliğine saldırı olabilir. Üstelik sadece iyi niyetli olmayan kiĢilere karĢı

değil, ne yaptığını tam bilmeyen Web ziyaretçilerini de düĢünmek ve PHP programlarının güvenliğini arttırmak

gereklidir.

Page 474: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

474

Internet ve iyiniyet bir arada olmaz. Size tuhaf gelsede içinde güvenlik açığı olan bir kodu yada programı ortaya

bırakırsanız birisi yada birileri bunu mutlaka kullanacaktır.

Sunucu güvenliği de son derece önemlidir ancak bunu sağlamak genellikle tasarımcının sorumluluğunda değil

hosting Ģirketinin sorumluluğundadır. Ancak sitedeki kodların ve vasa veritabanının güvenliği haliyle siteyi

tasarlayanın sorumluluğundadır.

Zararlar ne türde olabilir;

Sayfanız baĢa yerlere yönlendirilebilir

Sayfalarınız silinebilir veya değiĢtirilebilir

Sitedeki açık yardımıyla sunucu çökertilebilir

Site veritabanlarında bulunan kredi kartı

numaraları ve telefon numaraları, email adresleri

gibi özel bilgiler baĢkalarının eline geçebilir

Bunun dıĢında birde insan faktörü ile hata yapan

ziyaretçilerin hatalarının kontrol edilmesi gerekir. Mesela elektronik posta adresini yazmak isteyen kiĢi yanlıĢlıkla

@ yerine q yazabilir yada iki @ iĢaretiyle yazabilir, adresi eksik yada hatalı yazabilir. Formu eksik doldurabilir. Bu

gibi durumlarda hatayı sonradan düzeltmek zaman kaybına yol açar. Kimi zaman eksik verilmiĢ bir bilgi bu

bilgileri iĢleyecek olan diğer programda hataya yol açabilir. Bu sebeple, özellikle Form yoluyla alınan

bilgilerin kontrol edilmesi ve doğrulanması önemlidir.

Page 475: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

475

Form doğrulama iki yerde yapılabilir. Ziyaretçi yani

istemci tarafından yada sunucu tarafında. Kullanıcı tarafındaki, yani ziyaretçiye göndereceğimiz HTML

sayfasının içinde yer alan kodlarla yapacağımız kontrol ve doğrulama sunucuya bağlantı gerekmediği için tabiî ki

hızlı çalıĢacaktır.

Kullanıcı gönder düğmesini tıkladıktan sonra çok

beklemesi gerekmez. Ancak bildiğiniz gibi HTML kodları herkesçe kolayca görülebilirler. Bu durumdan anlamamız

gereken konrol ve doğrulama iĢlemini yapan kodlarında görüntülendiğidir. Bunları inceleyen kötü nietli ve bilgili

biri kodunuzun açıklarını kullanarak zararlı kod gönderebilir. Bu kontrol iĢleminin sunucu tarafında

yapılması ise zaman, hız ve trafik geniĢliğinden kayıp demek olsada güvenlik açısından daha etkindir.

Kullanıcı her gönder düğmesinde gönder düğmesini

tıkladığında sunucu tarafı verilen kodlara göre bilgileri doğrular ve eksik kısımları bildirerek tekrar giriĢ ister. Bu

gerektiğinde 4-5 defa git-gel-doğrula iĢlemine yol açar ama sonuçta önemli olan güvenliktir.

PHP ayrıca mevcut hemen hemen bütün sunucu kullanıcı kimlik doğrulama protokolleri ile uyumludur; ve sunucu

yönetimi ile iliĢki kurularak daha karmaĢık kullanıcı kimlik doğrulama yöntemleri uygulanabilir. Bu yöntemler

arasında Secure Socket Layer (SSL) yöntemlerini, ve OpenSSL ve ModSSL teknikleri sayabiliriz.

Page 476: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

476

addslashes() fonksiyonu (metindeki zararlı olabilecek karakterleri etkisiz yapmak)

addslashes fonksiyonu ile metinde hacking gibi etkilere

açık kapı bırakabilecek ‗ (tektırnak), ― (çift tırnak), \ (ters slash) iĢaretleri etkisiz hale getirilebilir. Daha önce

escape karakterlerinde gördüğümüz gibi bu karakterlerin önüne ―\‖ karakteri getirilir ve etkisiz hale getirilmiĢ olur.

<?php

$str = "tuncay'ın transferi";

$a = addslashes($str); // Tuncay\'ın

transferi

?>

stripslashes () fonksiyonu (etkisizleĢtirilmiĢ kodları ilk haline döndürmek)

addslashes fonksiyonu ile metinde hacking gibi etkilere

açık kapı bırakabilecek ‗ (tektırnak), ― (çift tırnak), \ (ters slash) iĢaretleri etkisiz hale getirildiği belirtilmiĢti. Daha

önce escape karakterlerinde gördüğümüz gibi bu karakterlerin önüne ―\‖ karakteri eklenir ve etkisiz hale

getirilmiĢ olur. Ancak daha sonra bu bilgi tekrar ekrana

yazıldığında iĢ karıĢır. Ekrana ―Tuncay\'ın transferi‖ yazıldığında haliyle kullanıcı bunu tuhaf bulacaktır.

Sonuçta yapılması gereken bu bilgiyi ilk haline getirmektir. Bunu da stripslashes kullanarak yapmak

mümkündür.

<?php

$str = "tuncay'ın transferi";

$a = addslashes($str); // Tuncay\'ın

transferi

Page 477: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

477

$b = stripslashes($str); // Tuncay'ın

transferi

?>

strip_tags () fonksiyonu (HTML etiketlerini metinden çıkarmak)

Bu fonksiyon ile istenmeyen HTML etketlerini bir metinden atmak mümkündür. Peki bu ne zaman

kullanıĢlı olur denilire; bir ziyaretçi defteri düĢünelim. Kullanıcı site hakkındaki düĢüncelerini yazacağı ekrana

gelip <H1>Bu site 5 para etmez. BoĢuna zaman harcamayın!</H1> yazarsa, bu bilgi site dizaynını

bozacak Ģekilde büyük baĢlık olarak görnütülenecektir. (Olumsuz reklam özelliğini saymıyoruz). Bu durumda en

uygun olay strip_tags ile etiketleri çıkartmaktır. Ancak strip_tags istenirse ikinci bir paramete ile bazı etikelerin

bırakılmasınada 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 çalıĢtırıldığında ilk echo metindeki tüm etiketleri çıkarılmıĢ halde görüntülediği halde ikinci echo

komutunda ―<b>‖ etiketinin etkisi devam etmektedir.

Page 478: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

478

Çünkü stripslashes kullanılırken bu etiketin çıkarılmaması

istenmiĢtir

PHP ile Header Kullanımı

Bir web tarayıcı bir web sunucuya bir döküman istediği

gönderdiğinde web sunucu istenilen dökümanın yanısıra header(baĢlık) adı verilen bazı açıklayıcı ve yönlendirici

bilgiler de gönderir. Bunar aslında http protokolü ile

tanımlanmıĢ çeĢitli parametreler ve bunlara ait bilgilerdir. Örneğin kredi kartı iĢlemlerinin olduğu bir sayfanın

taraıcının önbelleğine alınmasi demek kredi kart numarasınında saklanması demektir. Bu durumda

header bilgileri kullanılarak sayfanın ön belleğe alınmaması sağlanabilir.

Http doğası gereği header bilgileri kullanılacağı zaman

kod içinde bu fonksiyondan daha önce ekrana çıktı yapılmamıĢ olmalıdır.

header() fonksiyonu-(BaĢlık bilgilerini kullanmak)

Yukarda tanımlandığı üzere baĢlık bilgilerinin kullanımını

sağlar. Komut aĢağıdaki paramerelerden birini içerebilir.

Location

Pragma

Cache-Control

Content-Encoding

Content-Language

Page 479: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

479

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 kullanımda safa içeriği ara bellekte

depolanmayacaktır. Bu, özellikle yüksek güvenlik gerektiren ve çok sık değiĢen siteler için gereklidir.

Örnek 2:

<?php

header("Location: http://deneme.com.tr");

?>

Yukardaki kullanımda ise header fonksiyonu kullanıcıdan

hiçbir Ģey sormadan tanımlanan URL adresine gider. Burada dikkat edilecek konu öncesinde ekrana çıktı

vermemektir.

Page 480: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

480

Header fonksiyonunun bu kullanımına çok sık

baĢvururlur. Çünkü özellikle Ģifre korumaı sitelerde, ―parola doğru ise Ģu adrese git‖ tarzı iĢlem yapmak için

kullanılır.

Örnek :

AĢağıda görüldüğü gibi parola ve isim soran parola.php dosyası olsun. Daha sonra bu bilgileri konrolphp

dosyasında onrol edip basit bir Ģifreli giriĢ iĢlemi yaptıralım.

//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" name="submit" value="Tamam">

</form>

</body>

</html>

Page 481: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

481

Bu sayfadan alınan girdiler user ve pass adlı iki

değiĢkendir. Bu bilgileri kontrol.php dosyasında verilen değere göre test edip gidilecek adrese karar verilecekir.

<?

//kontrol.php dosyası

// gereksiz boĢluklar alınıyor

$user = trim($user);

$pass = trim($pass);

if ($user == "tuncay") {

if ($pass = "FB") {

header ("Location : OK.php");

}

} header ("Location : olmadi.php.php");

?>

Kod da kullanıcı adı ve parolanın doğru olup olmadığı kontrol edildikten sonra eğer her iki bilgi de doğru ise

OK.php adlı döküman çağrılıyor. Eğer bu bilgilerden herhangi birisi doğru değilse bu iĢlem yapılmayacak e

olmadi.php adresine gidilecektir. Yukarıdaki örnekte dikkat edilmesi gereken bir nokta vardır. header

("Location........."); kullanımı sadece kendisinden önce ekrana bir çıktı yapılmadığı durumlarda çalıĢacaktır.

Page 482: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

482

Örneğin : echo "Öylesine bir çıktı";

header(Location : "deneme.html");

Kod parçacığı beklendiği gibi deneme.html dosyasını çağırmayacaktır. Bu kısıtlama PHP' nin zayıflığından değil

HTTP protokolünün tanımlarından kaynaklanmaktadır.

Page 483: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

483

Bir Nesne Oluşturalım

Bir nesne oluĢturmak için önce onu tanımlamamız gerekir. Bunu PHP'nin class deyimini kullanarak

yapabiliriz. Bir nesnenin özellikleri (properties) ve metodları (methods) vardır. ġu kodu nesneler01.php

adıyla kaydedin:

<HTML>

<HEAD>

<TITLE>PHP'de Degiskenler</TITLE>

<meta http-equiv="content-type" content="text/html;

charset=ISO-8859-9">

<meta http-equiv="Content-Type" content="text/html;

charset=windows-1254">

</HEAD>

<BODY>

<B>

<H2>

<?php

class ogrenci {

// özellikleri tanımlayalım

var $adi;

var $soyadi;

var $sinav1;

var $sinav2;

Page 484: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

484

var $not;

// metodları tanımlayalım

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 . " için not

ortalaması: ". $this->not);

}

}

//Buraya baĢka kodlar girecek

$ogr1 = new ogrenci();

$ogr1 -> adi_belirle("ġahika");

Page 485: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

485

$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 tanımlıyoruz; ve daha sonra bir değiĢken adına new komutu ile bu

nesnenin bir örneğini oluĢturuyoruz. Nesnelerin yeni bir örneği veya kopyasını çıkartmak ifadeleri aslında

yaptığımızı tam anlatmıyor. Nesnenin tanımı bir adet; her new komutu ile bu nesnenin özelliklerine ve

metodlarına sahip yeni bir nesne yapmıĢ oluyoruz.

Nitekim bu iĢe insanın dilini dolayan Ġngilizce bir kelimeyle Instantiation (yeni bir varlığını oluĢturma)

deniyor. Bu örnekte, $ogr1 adlı değiĢken gerçekte, ogrenci nesnesinin tam bir örneği: içinde beĢ değiĢken

ve altı metod var. Nesneyi bir kere tanımladıktan sonra programın daha ileri aĢamalarında bu istediğimiz kadar

örneğini farklı isimler vererek oluĢturabiliriz. ġimdi Ģu satıra dikkat edelim:

$ogr1 = new ogrenci();

$ogr1 -> adi_belirle("ġahika");

Page 486: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

486

Burada $ogr1'in parametrelerine nasıl değer

yazdırdığımızı görüyorsunuz. Nesnenin metodlarından biri olan adi_belirle fonksiyonuna bir değer veriyoruz:

"ġahika"; nesne oluĢturulurken yazılmıĢ olan bu fonksiyon ise aldığı değeri, kendi ait olduğu nesnenin bir

değiĢkenine kaydediyor:

function adi_belirle ($n) {

$this->adi = $n;

}

Bu ve diğer fonksiyonlarda kullandığımız "$this->" ifadesi, kendisine ulaĢtırılan değeri bir parametre olarak

kullanıyor ve "$adi" değiĢkenine yazıyor. "this" (bu) kelimesi o anda nesnenin o anda oluĢturulmakta olan

örneğine göndermede bulunur. "->" iĢlemcisini kullanarak, istediğimiz nesnenin istediğimiz metoduna

veya parametresine değer gönderebiliriz. Bir nesnenin

yeni bir örneğini oluĢturduğumuz zaman, bu örneğin bütün parametrelerini sağlamak veya bütün metodlarını

kullanmak zorunda değiliz.

Yukarıdaki örneğe göre yeni örnekler oluĢturarak en az

dört öğrencinin not ortalamasını hesabedebilir misiniz? PHP ile Web programcılığı yolunda hızlı adımlarla yol

alıyoruz. Bu bölümde gördüğümüz dizi değiĢkenler ve nesneler, Web sayfalarımızda bir çok iĢi adeta otomatik

hale getirecek unsurlar olarak kullanılacak.

Page 487: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

487

PRATĠK BĠLGĠLER

Resim Albümü:

Bir dizindeki tüm resimleri sırası ile önceki sonraki

Ģeklinde gösteren program örneği olarak aĢaıdaki örneği

kullanmak mümkündür. Bu Ģekli ile kullanman için kodu index.php olarak, kullandığı stil Ģablonunu ise galeri.css

adıyla bir klasöre kaydedip aynı klasöre gösterilecek resimleri de koymak yeterlidir. Kodun sadeleĢtirilmesi

mümkündür. Ayrıca kullandığı stil Ģablonunun değiĢtirilmesi sadece hayal gücünün sınırına bağlıdır.

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

}

Page 488: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

488

}

} $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 Sayısı :

$sayi</font><br> <font face=verdana size=2 color=white>ġu An Gösterile

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 Sayısı : $sayi</font><br>

<font face=verdana size=2 color=white>ġu An Gösterilen : $i</font><br> <br>

<img src=$imagelist[$no] border=1 class=bir><br><br>

<a href=$resim_link$onceki>Önceki Resim</a> <center>

";

else

Page 489: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

489

echo"

<center> <font face=verdana size=2 color=white>

Resim Sayısı : $sayi</font><br> <font face=verdana size=2 color=white>ġu An Gösterile

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: #FFFFFF;

scrollbar-base-color: #000000;

scrollbar-face-color: #000000;

}

a.bir { font-family: Verdana; color: #FF9999; text-

decoration: none}

Page 490: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

490

a.bir:hover { cursor:crosshair; font-family: Verdana; color: #99FFFF; text-decoration: underline overline}

img.bir { border: #FFFFCC; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-

width: 1px; border-left-width: 1px}textarea { font-family: Verdana; font-size: 10pt; color: #FFFFCC;

background-color: #666666; border: #CCFFFF; border-style: solid; border-top-width: 1px; border-right-width:

1px; border-bottom-width: 1px; border-left-width: 1px}

GiriĢ sayfası yapmak

Sayfa tanımlanan süre kadar ekranda görünür ve daha

sonra belli bir adrese gidilmesini sağlar. sitenizin niteliği

hakkında fikir verir ve ilgi çeken bir özelliği vardır:

<META HTTP-EQUIV="Refresh" CONTENT="5;URL=hedefurl.HTML">

<BODY>

<IMG width="300" height="200" alt="GiriĢ

resmi"SCR="enter.jpg">

<BODY>

Bu konuda en çok dikkat edilecek konu yüksek bekleme

sürelerinden kaçınmaktır. Yada böyle durumlarda hedefe sayfa içinde de link verilmelidir. Böylece ziyaretçi sabırlı

çıkıp beklesede linke tıklasada aynı yere gider.

Page 491: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

491

Sayfada Tarih Yazdırma

Konuyu baĢında beri okuyupta PHP tarih fonksiyonlarını

gördü iseniz ―o da bir Ģeymi PHP ile bunun alasını yapabiliriz‖ diyebilirsiniz. Ancak bazen PHP eriĢimi

olmadan bunu yapmak gerekebilir. Bu durumda mecburen aĢağıdaki kod gibi Javascript gerektiren bir

blok parçasını kodunuza eklemeniz gerekir.

Biraz uzun görünebilir ama, herĢeyi bir tablo içinde gösteren bu kodu, istediğiniz sayfaya dahil ederek, her

sitede tekrar tekrar kullanmanız mümkün. Ancak dikkat etmeniz gereken konu; bu kod ziyaretçinin sistem

saatini görüntüler. PHP dilindeki gibi sunucu saatini değil.

Bu kodu, yazarının adını belirten satıra yer vermek

Ģartıyla, istediğiniz gibi kullanabilir ve değiĢtirebilirsiniz. Kod içindede görebileceğiniz gibi orijinal geliĢtirici Caroly

B. Allard adlı bir webmasterdır. AĢağıdaki hali ise bir baĢka weböaster tarafından biraz değiĢtirilmiĢ halidir.

Bununla birlikte ben Ģahsen ekrana kullanıcının sistem saatini görüntülemek için bunca kod eklemeye ve

zahmete girermiyim diye sorulursa cevabım ―hayır‖ olur.

Çünkü kullanıcı cidden saati öğrenmek isterse, sağ alt

köĢeye sistem bildirim alanına bakar olur biter, o zaman

bunun için zahmete girmeye değermi düĢünmek lazım. Ancak yinede el altında olması için kod aĢağıda

görülmektedir.

<TABLE WIDTH="75%" BORDER="0" CELLSPACING="5" CELLPADDING="5">

<tr><td WIDTH="100%">

Page 492: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

492

<script LANGUAGE="JavaScript">

<!-- eski browseryardan gizleyelim

// DateCal JavaScript v1.00 Copyright (c) 1998 Carolyn B. Allard

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

Page 493: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

493

if (ay == 3) {ay_uzun = "Nisan"}

if (ay == 4) {ay_uzun = "Mayıs"}

if (ay == 5) {ay_uzun = "Haziran"}

if (ay == 6) {ay_uzun = "Temmuz"}

if (ay == 7) {ay_uzun = "Ağustos"}

if (ay == 8) {ay_uzun = "Eylül"}

if (ay == 9) {ay_uzun = "Ekim"}

if (ay == 10) {ay_uzun = "Kasım"}

if (ay == 11) {ay_uzun = "Aralık"}

yil_uzun = 1900 + yil

uzuntarih = ay_uzun + " " + tarih + ", " + yil_uzun

tablo = '<TABLE WIDTH="120" BORDER="0"

CELLSPACING="2"';

tablo += 'CELLPADDING="0" HEIGHT="34">';

tablo += ' <TR>';

tablo += ' <TD WIDTH="120"

HEIGHT="34"ALIGN="center" VALIGN="bottom"

BACKGROUND="';

tablo += resim;

tablo += '"><CENTER><FONT COLOR="#003399" FACE="Arial" SIZE="-1">';

tablo += uzuntarih;

tablo += ' </FONT></CENTER></TD>';

tablo += ' </TR>';

Page 494: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

494

tablo += '</TABLE>'

document.write(tablo)

// gizlemeye son-->

</script></font><</td></tr></table>

Bu kodu yazarken, en çok dikkat edilmesi gereken

bölümü, Javascript'e HTML yazdırtan son 16-17 satırıdır.; tek ve çift tırnakların yerine özellikle dikkat etmeniz

gerekir.

Page 495: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

495

CMS Sistemleri

Bugün web ortamında milyonlarca site hazırlanmıĢtır.

Web siteleri ilk ortaya çıktıklarında Ģirketler bir web master bulup bir site yaptırırlar ve daha sonra

gerektiğinde gene aynı webmaster siteyi günceller yada site içeriğine hiç dokunmadan yıllaca kalırdı. Bazı

Ģirketler ise daha Ģanslıydı çünkü bünyelerinde Bilgi

iĢlem birimleri bu güncelleme iĢlemini de yapardı. Ancak daha sonra site içeriklerini güncellemenin siteyi ilk kez

yapmaktan daha da önemli olduğu anlaĢıldı. Çünkü bu hem maliyetli bir iĢlemdi hem de çoğu site için sürekli dıĢ

kaynak gerekinimi demekti. Tabii birde kodlamayı bilmek gerekiyordu. Ġnsanlar bu ortamda daha kolay

güncellebilir sitelerin talebini yapmaya baĢladıklar.

Ek olarak belirtmem gerekirse; Arama motorları‘nın

güncelleme konusunda site sahiplerini deyim yerindeyse zorla koĢturması bu konuda itici bir güç olmuĢtur.

Çünkü ticari siteler için arama motorlarının üst sayfalarında yer almak için can atmaktaydı. Bunun

yoluda belliydi. Arama motorlarına reklam vermek ancak dahada önemlisi arama mortları ile dostça geçinen ve

sıkça güncellenen bir site kurmak. Arama motorlarının

kullandığı algoritmalar daha sık güncellenen siteleri daha yukarıya taĢımaya baĢladıklar ki bu da çok mantıklı bir

iĢlemdi.

Bundan hareketle site yaptıranlar FLASH animasyon

yazarlarından bile metinlerin Flash dosyası dıĢında tutulmasını ve böylece değitirilebilir olmasını istemeye

baĢladılar. Yine menüler içinde grafik dosyaları yerine uygun Ģekillerde metinler kullanılmaya baĢladı. Öyle ya

Page 496: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

496

Google web ‗e her gün eklenen milyonlarca milyarlarca

sayfa ile zaten yeterince meĢgulken birde iĢi gücü bırakıp Flash yada resim dosyalarını analiz edip içindeki metinleri

bulup çıkarmaya uğraĢamazdı. Yani dağ yerinde durmuĢ, ―ben ayağınıza gelemem, eğer ziyaretçi istiyorsanız

buyurun siz gelin‖ diyordu.

Sonunda PHP dili ile site tasarlayan bazı yazılımcılar bazı

hazır site kodları ürettiler. Bu site kodlarında bir çok değerler parametrik olduğundan kolayca kurulduğu her

siteye uygun hale getiriliyordu. Ayrıca içeriğide kolayca değiĢtirmek mümkündü. Özelikle PHP dilinde geliĢtirilmiĢ

olan CMS sayısı diğer dillerden daha fazladır. Bundan PHP dilinin ve Mysql veritabanının ücretsiz sunumuĢ

olmasının yanında hosting masraflarının daha düĢük olmasının etkiside büyüktür.

Benim CMS sistemleri ile ilk tanıĢmam PHP Nuke ile oldu.

Venezuellalı bir genç olan Francesco Burzi tarafından yazılan bu CMS open source idi. Daha sonra DCP Portal

adına rastlamıĢ ve ne de çok sevinmiĢtim. Çünkü bir Türk tarafından geliĢtiriliyordu ve oldukçada popülerdi.

PHP Nuke o günler için adeta büyü etkisi yapan modüle, blok ve tema gibi kavramları da içeriyordu. Kısaca Php

Nuke için kendi modüllerinizi eklemek mümkündü. Ayrıca blok kavramı gelmiĢti. Örneğin ekranın her bir ögesi bir

blok idi. Tema kavramı ile blok kavramı sayesinde bir birinden ayrı gibi görünen yüzlerce Ģablon dosyası

oluĢturuldu. Ġnsanlar Php nuke bloklarının konumu ile ve renklerle oynayarak bir sürü hazır PHP Nuke teması

geliĢtirdiler.

Page 497: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

497

O günden bu güne zaman içinde onlarca CMS ile tanıĢtım

ve bir çoğunu ya demolardan yada makalelerden inceledim, bazılarını da müĢterilerime kurdum.

Bu kısmı yazarken amacım sizlere bazı CMS sistemlerinin özelliklerini öğretmek ve bir karĢılaĢtırma sunabilmek.

Ancak tamamen uzman olacağınız seviye de bir CMS anlatıldığını düĢünüyorsanız yanılıyorsunuz demektir.

Bunun kendimce sebepleri var.

Ġnternette tamamen GNU lisansı ile dağıtılan yüzlerce

CMS sistemi bulumaktadır. Size uyan bir tanesini deneye yanıla öğrenebilirsiniz.

CM Simple

CMS Made Simple

SMF

Mambo

Joomla

Php Nuke

Post Nuke

Red CMS

E107

Etomite

Bunlardan sadece bir kısmıdır.

Page 498: HTML Css Php SQL Mysql Rehberi

HTML-CSS–PHP–MYSQL ve SQL Derleme : Ġbrahim Halil Kutluay- 2007-2013

498

DĠĞER SÜRÜME DAĠR NOTLAR

Bir sonraki sürümde Allah izin verirse daha çok örnek

kod ekleyerek kitabı daha iĢe yarar hale getirmeyi planlıyorum.

Kitaptaki hataları bildirecekler web sitemden bana ulaĢabilirler.

PHP kod blokların da bazı yerlerde <?php ve ?>

kullanılmamıĢtır.

Dolayısıyla kodları denemek isteyenler bu duruma dikkat

etmelidirler.

ÇalıĢmada bazı yerlerde gözden kaçan yazım hataları

olabilir, onun için sizlerin yardım ve teĢviği önemlidir.

Ġyi çalıĢmalar dilerim.