Emrah ÜSTÜN ÖNSÖZ VE GĐRĐŞ. 030207036 http://www.emrahustun.com



Benzer belgeler
Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

İnternet Programcılığı

ÇANKAYA ÜNİVERSİTESİ WEBMAIL KULLANIM KLAVUZU

4 Front Page Sayfası Özellikleri

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler:


1.PROGRAMLAMAYA GİRİŞ

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

SQL Uyarı Programı Kurulum ve Kullanımı

PHP ile İnternet Programlama

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1 1. FORMLAR

AEGEE-Eskişehir Online Web Yönetim Paneli ( WEBBY ) Yardım Dökümanı

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

2-Hafta Temel İşlemler

Atatürk Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü BM Web Programlama ÖDEV 1

Arayüz Geliştirme Dokümantasyonu

BİH 605 Bilgi Teknolojisi Bahar Dönemi 2015

7. Çerçeveler. Bu bölümü bitirdiğinizde,

2- Kontrol Sil En Öne Getir En Arkaya Gönder Resim Özellikler: Genel Özellikler...

LOGİN EKRANI. Şekil -1


Web Programlama Kursu

DIV KAVRAMI <style> position: absolute

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

8. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

Kullanım Kılavuzu Milli Eğitim Bakanlığı 2010

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Web Site Tasarımı (Html-Css) (SD0139) Murat KARA 2017

WEB TASARIM. CSS, IFRAME, TEMPLATE, SLICE, INCLUDE(php komutu) Tarık ÖZEL

SESSİON KULLANIMI. .Aşağıdaki Kodları da SessionDevam.asp adıyla kaydedelim. Language=VBScript Codepage="1254"%>

U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları. IPera İletişim Teknolojileri

İNTERNET PROGRAMCILIĞI - II


2. HTML Temel Etiketleri

Yaptığımız web sitelerinin daha kullanışlı olması için veritabanı sistemleri ile bağlantı kurup ihtiyaca göre verileri okuyup yazmasını isteriz.

1) İlk olarak oluşturduğumuz filtre adı yazılır. (örneğin tatil mesajı, taşı vb gibi.) 2) Sonra filtre için kural belirlenir.

HTML Sayfaları. Bütün html sayfaları

İNTERNET PROGRAMCILIĞI I

BİLGİSAYAR 4. MOLEKÜLER BİYOLOJİ VE GENETİK BÖLÜMÜ HTML DERS NOTLARI 9. DERS Tablolar (HTML Giriş) YARD. DOÇ. DR.

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

EĞİTİM-ÖĞRETİM YILI BİLİŞİM TEKNOLOJİLERİ VE YAZILIM DERSİ 6. SINIF 2. DÖNEM 2. SINAV ÇALIŞMA NOTLARI

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

UZAKTAN EĞİTİM YÖNETİM SİSTEMİ (MMYO)EĞİTMEN YARDIM KILAVUZU

ASSAM YÖNERGESİNE EK-T ASSAM WEB SİTESİ YÖNERGESİNE LAHİKA-2 WEB SİTESİ MAKALE EKLEME KILAVUZU ASSAM

Okul Web Sitesi Yönetim Paneli Kullanımı

Samsun Çocuk Hizmetleri İ l Koordinasyon Sekretarya Birimi

KARADENİZ TEKNİK ÜNİVERSİTESİ YENİ WEB SİTESİ BİRİM YETKİLİSİ WYS (WEB YÖNETİM SİSTEMİ) KULLANIM KLAVUZU

PHP ile İnternet Programlama

Turgut Özal Üniversitesi WEB Sitesi Kullanım Kılavuzu

JavaScript Örnekleri PDF

JasperReports Server ve Ireport raporlama Sistemi Kurulumu / Kullanımı 1. Bölüm 2. Bölüm 1- JasperReports Server ve Ireport Nedir?

1.1 Web Kavramlar URL terimini tanımlayınız ve anlayınız.

Bu makalede 2003 sunucu, Windows 2003 Server anlamına gelmektedir. Aşağıda yapılan işlemler 2003 R2 sunucu üzerinde denenmiş ve çalıştırılmıştır.

2) Hesabınıza Giriş yaptıktan sonra aşağıdaki ekran karşınıza gelir.

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Önce Access açıp,masaüstü ne, vt.mdb adlı veri tabanı dosyasını oluşturuyoruz. Kayıt türünü seçiyoruz

Metin İşlemleri, Semboller

PHP 1. Hafta 1. Sunum

Web Teknolojileri ve Programla

MEB (K12) e-posta Sistemi Kullanımı

Flow Kullanım Klavuzu Mart 2014

PHP kodları çoğu zaman HTML kodları arasına gömülü olarak yazıldığından öncesinde HTML kodlarınının bilinmesinde fayda vardır.

ÜSKÜDAR ÜNVERSİTESİ EBYS KULLANIM KILAVUZU

5. Tablo İşlemleri. Bu bölümü bitirdiğinizde,

TURKCELL HİZMETLERİ. Kullanım Bilgileri. LOGO Kasım 2014

Windows 7 - IIS 7.5 üzerine PHP ve MySQL kurulumu

HESAP MAKİNASI YAPIMI

Kurulum ve Başlangıç Kılavuzu. DataPage için

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

4. Bağlantı (Köprü) Oluşturma

EBA Dosya Uygulaması Kullanıcı Kılavuzu ( W eb)

Zoru Kolay Yapmak İçin...

Kurumsal Grup E-Posta Eğitim Dokümanı

WEB TASARIMININ TEMELLERİ

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

Kırklareli Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

KELİME İŞLEMCİLERE GİRİŞ 5.SINIF BİLİŞİM TEKNOLOJİLERİ VE YAZILIM DERSİ ÇALIŞMA KÂĞIDI

Web Tasarımının Temelleri

1. Mutabakat.zip dosyası açılır. 2. Mutabakat klasörü içindeki Mutabakat.exe dosyası çalıştırılır.

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Yeni Adrese Tebligat Gönderim İşlemleri

MUĞLA SITKI KOÇMAN ÜNĠVERSĠTESĠ. BĠLGĠ ĠġLEM DAĠRE BAġKANLIĞI. AKADEMĠK PERSONEL KĠġĠSEL WEB SAYFASI KULLANIM KILAVUZU MUKWEB ĠÇĠNDEKĠLER TABLOSU

İnternet Programcılığı Form İşlemleri ve Oturum Yönetimi Örnekleri

Site Temizlik Projesi Kodları

Bölüm 10: PHP ile Veritabanı Uygulamaları

Luca NET Kobi Ticari Yazılımında ilk yapılacaklar

ÇANKIRI KARATEKİN ÜNİVERSİTESİ ZİMBRA E-POSTA SİSTEMİ KULLANICI DOKÜMANI

2. Belgeye Metin Ekleme

Kets DocPlace LOGO Entegrasyonu

İçindekiler ADIM 1 : Üye Olma... 2 ADIM 2 : Giriş Yap ve Hatırlatma Sayfaları... 3 ADIM 3: Üye Girişi yapıldıktan sonra yapabileceğiniz işlemler...

Wolvox Kapı Ekranı. AKINSOFT Wolvox Kapı Ekranı Yardım Dosyası. Doküman Versiyon :

12. Tanımlama Listeleri <dl> </dl>, <dt> </dt>, <dd> </dd>

Programlama Yazılımı ile Web Sitesi Oluşturma

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

İnternet,artık hayatımızın önemli bir parçası. Her gün interneti programlar aracılığı ile ya da internet siteleri aracılığı ile kullanıyoruz.

Android Ders Notları

1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

1 Aralık 2011 / Perşembe

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

Transkript:

Emrah ÜSTÜN 030207036 http://www.emrahustun.com ÖNSÖZ VE GĐRĐŞ Mühendislik eğitiminin en önemli pratik eğitimlerinden olan yaz stajımı Kocaeli Üniversitesi Elektronik ve Haberleşme Mühendisliği Mikroişlemci Laboratuarında yaptım. Stajımda çok amaçlı robot kontrol kartı Tekir in dinamik web sitesinin programlamasını ve tasarımını yaptım. Bu stajda iş bulmamı sağlayacak ve iş hayatımda çok faydalı olacak bilgiler öğrendim. Okulda hiçbir derste elde edemediğim bir duygu olan, bir proje oluşturup onun çalıştığını görmek de ayrı bir keyifti. Yaptığım projenin de özgeçmişim için iyi bir referans olacağını düşünüyorum. Stajım boyunca bana desteğini esirgemeyen değerli hocam Yrd. Doç. Dr. Mehmet YAKUT a teşekkürü bir borç bilirim. Bu raporda hazırladığım bütün kodları birebir vermedim. Değişken isimlerinin, veritabanı tablo isimlerinin, şifrelerin vb açığa çıkması hazır ve kullanımda olan sitenin güvenliği açısından tehlikedir. Ayrıca tamamen kullanıma hazır bir şekilde olduğu için kodların çalınıp direk kullanılması mümkündür. Bu sebeple kodları parça parça verdim veya kodu vermeyip algoritmasını anlattım.

ĐÇĐNDEKĐLER Giriş ve teşekkür 1 Đçindekiler 2 Başlangıç 3 Html 3 Php 5 mysql 8 Javascript 9 Web sitesi başlangıç bilgileri 10 Dinamik web sitelerinde güvenlik 11 Site özellikleri ve içeriği 12 Site içeriği 12 Kullanıcı kısmı 12 Yönetici kısmı 13 Görsel kısımı 13 mysql hazırlık 13 Kodlamalar 14 Yönetici sayfaları 14 Kullanıcı sayfaları 31 Kaynaklar 45 2

BAŞLANGIÇ Đnternet üzerinden sıkıştırılmış paketlerle veri akışı sağlanarak html kodlarıyla oluşturulan ara yüze web sitesi diyebiliriz. Bir web sitesi yapmak için siteyi yayınlayan bir sunucuya ihtiyacımız vardır. Yayını yapan sunucu siteyi çağıran kullanıcıya sıkıştırılmış paketlerle html kodları gönderir. Bu kodlar tarayıcıda yorumlanarak kullanıcının gördüğü ara yüz oluşur. Bu veri istemleri, gönderimleri için adres olarak bilgisayarlara atanan ve asla 1den fazla olmayan IP adresleri kullanılır. Bir sitenin adresinin değişmeyeceği için sunucu IP si sabit IP olmalıdır. Đnternetin çalışma sistemi şöyledir: Kullanıcı tarayıcıya alan adını (site adresi) yazınca kullanıcı bu alan adının yönlendirildiği IP ye sahip sunucuya yönlenir ve siteyi sunucudan talep eder. Alan adlarının yönleneceği IP leri barındıran sunuculara DNS (domain name server alan adı sunucusu) denir. Yani kullanıcı aslında site sunucusuna ulaşana kadar birçok sunucuya yönlendirilir. Web sitelerini çalışma sistemi olarak ikiye ayırabiliriz. Statik web siteler genelde HTML kodlarının bir dosyaya direk konulmasıyla oluşur ve dosya içeriği site yöneticisi tarafından değiştirilmeden site hep aynıdır. Dinamik web siteleri ise belirlenen kıstaslara göre html kodlarını anlık olarak üreten sitelerdir. Bu sitelerde dinamik web yazılım dilleri olan PHP, ASP, JSP, PERL, kullanılabilir. Dinamik web siteleri genelde verileri bir veritabanında saklar ve bu verilere göre davranır. SQL, Oracle, Freebird veritabanlarına örnek gösterilebilir. Bugün, dünyadaki internet sitelerinin %60 ı SQL (Structed Query Language) kullanmaktadır. Ben de bu projede HTML kodlarını üretmek için dil olarak PHP kullandım. Veritabanı olarak mysql ve site içinde gezintiyi kolaylaştıracak bazı javascriptler kullandım. Statik bir site HTML kodlarından oluşur ancak bu kodları düzenleyen oluşturan programlar olduğu için site yöneticisinin HTML bilme zorunluluğu yoktur. Ancak dinamik sitede html kodlarını tek tek üreteceğimiz için site programcısının HTML i çok iyi bilmesi gerekmektedir. Giriş olarak kısaca kullandığım dilleri biraz anlatacağım. HTML(HyperText Markup Language) Html i bir program dili olarak tanımlayamayız. Çünkü kendi başına çalışamaz. Html i yorumlayan başka programlar olmalıdır. Her hangi bir web sitesinin html kodlarını görmek için tarayıcımızdan kaynağı göster dememiz yeterlidir. Html kod etiketleri <etiket> ile başlar ve mutlaka </etiket> şeklinde kapanır. Basit html örnekleri: Bu kod paragraf açar ve kapatır. <p> YAZI </p> 3

Bu kod paragrafı ortalar. <p align= center > YAZI </p> Bu kod division (bölüm) açar ve kapatır. <div> YAZI </div> Şimdi bir tablo açalım ve tabloya 2 satır 2 sütun ekleyelim: <table align="center" border="1" width="200" height="300"> 1 piksel kenarlığa sahip 200 piksel genişliğinde 300 piksel yüksekliğinde ortalanan bir tablo açıyoruz <tr>ilk satırı açıyoruz <td>a ilk sütun </td> <td>b </td> </tr> <tr> <td>c </td> <td>d </td> </tr> Bu kod şöyle bir tablo verecektir bize: Form oluşturmak: Dinamik sitelerde formlar çok fazla kullanılır. Formlar genelde kullanıcıdan veri almak için kullanılır. Üyelik kaydını, dosya yüklemeyi veya kullanıcıdan alacağımız herhangi bir veriyi elde etmek için form kullanırız. Örnek olarak bir üye giriş formu elde edelim. <form id="giris" method="post" action="giris.php"> giriş: <input name="isim" type="text" maxlength="50" autocomplete="off"/> 4

</label> <label>şifre: <input name="sifre" type="password" maxlength="50" autocomplete="off"/> </label> <label> <input type="submit" name="submit" value="tamam" /> </label> </form> Bu kodların çıkaracağı ara yüz şöyle olacaktır: Bu formda kullanılan değişkenler; Form içindeki action bir adres belirtir ve bu formdan alınan verilerin hangi sayfaya gönderileceğini belirler. input içindeki name o değişkenin adını type tipini belirler. Ve submit formu gönderen düğmedir. Yani bu form index.php dosyasına 1.kutuya girilen verileri isim, 2.kutuya girilen verileri sifre adıyla gönderir. PHP (Hypertext Preprocessor - eski haliyle: Personal Home Pages) PHP, ilk olarak 1993 yılı ortalarında Rasmus Lerdorf tarafından geliştirilmeye başlamıştır. PHP dili, 1995 yılında Lerdorf un kurmuş olduğu bir grup tarafından daha da geliştirilerek, ilk kez Perl dilindeki fonksiyonlardan tamamen arındırılmış ve Nesne Yönelimli (Object Oriented) bir dil haline getirilmiştir. 2005 yılı itibariyle PHP 5 sürümü geliştirilmiş durumdadır. PHP dili Linux gibi Açık Kaynak Kodlu bir dil olup ücretsiz olarak dağıtılmakta ve geliştirilmektedir. Linux, Unix, Windows tabanlı işletim sistemlerinde çalışabilen sürümleri mevcuttur. Php dili bir web sitesinin html kodlarını anlık olarak yorumlayarak üretir. Verdiğimiz koşullara göre geniş php kütüphanesinden faydalanarak belirlediğimiz kodları ürettirebiliriz. Üretilen html kodları kullanıcıya gönderilir. Kullanıcı asla php kodlarını görmez. Php kodları php uzantılı bir dosya içine atılmalıdır. Aslında php dosyası da bir html dosyasıdır. Biz php kodlarını yazacağımız yerleri şu şekilde belirtiriz: <?php kodlar?> Php de değişken isimleri başlarına $ konarak ayırt edilir. Basit PHP örnekleri: Bir değişkene değer atayıp ekrana yazdıralım: <?php $yazi="merhaba"; echo $yazi;?> 5

Ekrana değişkenle birlikte bir sabit yazdıralım: <?php $isim="emrah"; echo "Günaydın ".$isim;?> Ekrana çıkacak yazı: Günaydın Emrah Php fonksiyonu oluşturalım: <?php function isimyazdir() { echo "EMRAH ÜSTÜN"; isimyazdir();?> Formlar: Html kısmında anlattığım formlardan gelen verileri şu şekilde elde edebiliyoruz: <?php $isim =$_POST["isim"];?> Bu kod html değişkeni olarak gelen isim i bir php değişkeni olan isime atar ve bundan sonra bu değişken üzerinde php ile işlemler yapabiliriz. Php sayfadan sayfaya veri taşımanın bir diğer yolu ise adres satırlarını kullanmaktır. Bazı sitelerde adres satırında o sayfanın adresi çok uzun ve karışık görünür. Aslında o adres veri içeriyordur. Şöyle ki; index.php sayfasına adres ile isim değişkenini emrah olarak gönderelim. Kullanıcıya verilen bir bağlantı adresi şu olacaktır: www.siteadi.com/giris.php?isim=emrah burada giris.php den sonra adresin geri kalanının veri olduğunu belirten? kullanılmıştır. Ve ondan sonra isim=emrah konmuştur. Bu değişken şu şekilde elde edilebilir:?php $isim=$_get["isim"];?> Adresten aldığımız isim değişkenini artık bir php değişkenine attık ve üzerinde işlemler yapabiliriz. Sayfa içerme: Küçük sitelerde kodlar bir sayfaya yazılabilir. Ancak site büyüdükçe kodların kontrolü zorlaşacaktır. Bunun için işlemleri bölmek ve ayrı dosyaları çağırmak gerekir. Html kısımlar için de örnek olarak sitelerin menüleri, alt bilgileri her sayfada aynı olacaktır. Eğer bu aynı olacak yerlerin kodlarını her sayfaya koyarsak birinde bir şey değiştirmek için her sayfayı değiştirmek gerekecek. Bunun yerine menüyü bir dosyaya atıp, gerekli yerlerde çağırırsak işimiz çok kolaylaşır. Bu işlemi require veya include fonksiyonlarıyla yapabiliriz. Aralarındaki tek içerilen sayfa bulunamadığında include hata, require uyarı verir. Kullanım: include("menu.php"); veya require("menu.php"); 6

Sorgular ve Döngüler Php dilinde sorgular ve döngüler c dili ile aynıdır. For, if, switch, while fonksiyonlarını c deki kullanımları gibi kullanabiliriz. Tek fark fonksiyon değişkenleri php değişkeni olacak şekilde başında $ bulunacaktır. for($i=0;$i<10;$i++) gibi. Çerezler (cookies) Çerezler kullanıcının bilgisayarına kaydedilen şifrelenmiş verilerdir. Bir kullanıcı üye girişi yaptığında bir sonraki sayfanın anlayabilmesi için kullanıcı bilgisayarına çerez kurulur. Bu cookie site programcısının isteğine göre isim, değer, süre, yol, alan adı bilgileri içerebilir. Kullanıcı bilgisayarına cookie kuralım: set cookie("kullanici", "Emrah üstün", time()+3600); Bu kod emrah üstün kullanıcısına o bilgisayar için 3600/60=60 dakikalık oturum izni vermiştir. Çerez değerlerini şu şekilde yazdırabiliriz: echo $_COOKIE["kullanici"]; Bu kod giriş yapılan kullanıcıyı ekrana yazdırır. Kullanıcı çıkışı yapmak için de çerezin geçerlilik süresini değiştirerek üstüne kurabiliriz. setcookie("kullanici", "", time()-3600); Bu kod o sitenin bütün kullanıcıları için çıkış yapmıştır. mail Php de site üzerinden e-posta gönderebilmek mümkündür. Kullanımı: mail( kime, konu, mail içeriği, ön bilgiler, değişkenler ); mysql fonksiyonları veritabanına bağlan $baglantiadresi=mysql_connect ("localhost", "kullanıcı adı", " kullanıcı şifresi"); sorgu gönder $donus=mysql_query( mysql sorguları ); dönen sorguyu diziye at mysql_fetch_array($donus); bağlantıyı kapat mysql_close($baglantiadresi); Bu fonksiyonlar gerçekleşemediği zaman ekrana neden gerçekleşemediğini bir uyarı olarak çıkarmak için fonksiyon sonrasına 7

or die(mysql_error()); yazabiliriz. mysql (Structed Query language) MySQL, çok-kanallı, çok kullanıcılı bir veritabanı yönetim sistemidir. Veritabanı kullanmak için yapmamız gerekenler; bir veritabanı oluşturmak, bir kullanıcı ve şifre oluşturmak, bu kullanıcıya veritabanını yönetmesi için verilecek izinleri belirlemek. Daha sonra bu kullanıcı veritabanında tablo açabilir, bu tabloların içine satırlar (colums) ekleyebilir. Site yönetilirken da bu satırlar için sütunlar eklene eklene veritabanı büyüyecektir. Şimdi sql yönetim kodlarından bahsedelim. select: Veritabanından belirlediğimiz verileri almaya yarar. SELECT isim FROM uyeler Uyeler tablosundan üye isimlerini çeker. where: Bir nevi arama yapmaktır. SELECT isim FROM uyeler WHERE yas= 20 Yaşı 20 olan üyelerin isimleri gönderir. insert: Veritabanına veri kaydetmek için kullanılır. INSERT INTO uyeler(isim,soyisim,yas) VALUES ( emrah, üstün, 22 ) update: Veritabanında bir veriyi değiştirmede kullanılır. UPDATE uyeler SET yas= 23 WHERE isim= emrah Đsmi emrah olan üyelerin yaşlarını 23 olarak değiştirir. delete: Veritabanından veri silmek için kullanılır. DELETE FROM uyeler WHERE yas= 22 22 yaşındaki bütün üyeleri siler (sütunları siler) order by: Veritabanından çektiğimiz verileri belirlediğimiz sıralamaya göre göndermesi için kullanılır SELECT isim FROM uyeler ORDER BY yas ASC Üyelerin isimlerini yaşa göre küçükten büyüğe sıralı gönderir. Büyükten küçüğe için ASC yerine DESC kullanılır. create: Veritabanında yeni bir tablo açmak için kullanılır. CREATE TABLE uyeler ( isim varchar, soyisim varchar, yas int 8

) alter: Bir tablonun yapısını değiştirmek için kullanılır. ALTER TABLE uyeler ADD adres varchar(50) Üyeler tablosu için adres satırı ekler. count: Veritabanında belli bir satırdaki sütun sayısını sayar. SELECT COUNT(adres) FROM uyeler Adresi kayıtlı olan üye sayısını gönderir. max: Veritabanında belirli bir sütunda en büyük değeri barındıran satırı gönderir. SELECT MAX(yas) FROM uyeler En yaşlı üyenin bilgilerini gönderir Bu fonksiyonlarda alanı belirlemek istemiyorsak, hepsi için geçerli olsun istiyorsak alan yerine * koyabiliriz. SELECT * FROM uyeler Üyelerin bütün bilgilerini gönderir. javascript Javascript bir web sayfasını sayfa değişmeden dinamik hale getirebilir. Diğer web yazılımları yeni sayfaları yorumlayarak gönderir ancak javascript sabit bir sayfanın içeriğini de anlık olarak değiştirebilir. Javascript aslında tarayıcıyla birlikte çalışan, tarayıcıya hükmedebilen bir programlama tekniğidir. Javascript yeni pencereler, uyarı pencereleri açabilir, sayfa içine html in desteklemediği tür görsellikler katabilir. Hatta bir web sayfası sadece javascriptten oluşan jsp uzantılı bir dosyadan da oluşabilir. Burada bir uyarı yapmakta fayda var javascript ile java tamamen farklı şeylerdir. Bu projede duyuru listeleme kısmında javascript kullanılmıştır. Kullanıcı kaç adet duyuru listelemek istediğini seçer, seçenek değiştiği zaman javascript tarayıcıyı direk belirlenen adrese sanki bir adres tıklanmış gibi gönderir. Burada kullanıcı pencerede bir seçeneğe tıklayınca direk adrese gidecektir. Örneğin 50 seçildiğinde adres bilgisine goster=50 bilgisi eklenecektir. Bunun için önce javascript fonksiyonunu fonksiyonu kullanmadan önce tanıtmamız gerekmektedir. <script type="text/javascript"> 9

<!-- tarayıcı java desteklemiyorsa html açıklaması hale gelip bu javascript kodu kullanılmaz hale gelecektir. function MM_jumpMenu(targ,selObj,restore){ //v3.0 eval(targ+".location='"+selobj.options[selobj.selectedindex].value+"'"); if (restore) selobj.selectedindex=0; //--> </script> Form içinde kullanılacak olan javascript kodu <select name="menu1" onchange="mm_jumpmenu('parent',this,0)"> şeklinde olacaktır. Javascript kullanılan bir başka yer ise form verileri kaybedilmeden sayfa değişimini sağladığımız sayfa yönlendirmesi. Bu hatalı giriş yapıldığında kullanıcıyı bir sayfa geri gönderebildiğimiz (adeta tarayıcıda geri tuşuna basılmış gibi) bir tuştur. Bunu yaparken html formu açıp içine bir düğme koyuyoruz ve yanına da javascriptin yapacağı şeyi koyuyoruz. <div align="center"> <p>hatali GĐRĐŞ </p> <p><input TYPE="button"VALUE="geri"onClick="javascript:history.back(1)"> </p></div> Bu kodun tarayıcıda göstereceği şey şudur: Bu tuşla geri dönüldüğünde girilen form verileri korunur (şifreler hariç) ve kullanıcı tekrar tekrar uğraşmaz. Web sitesi başlangıç bilgileri: Web sitelerinin başına meta etiketleriyle site hakkında bilgiler girilmelidir. Bu bilgiler kullanıcı tarafından görülmez. Örnek: <title>emrah ÜSTÜN</title> <META http-equiv="content-type" content="text/html; charset=windows-1254"> <META name="description" content="emrah ÜSTÜN, Elektronik ve Haberleşme Mühendisliği Bölümü 4. sınıf öğrencisi, Kocaeli Üniversitesi, TÜRKĐYE "> <META name="keywords" content="emrah üstün,emrahustun,emrahüstün,elektronik,haberleşme,mühendisliği,öğrencisi,elektronik ve haberleşme mühendisliği öğrencisi"> Title sayfanın başlığıdır. Ondan sonraki sayfanın hangi dilin karakterlerini içerdiğidir. Description ise sayfanın açıklamasıdır. Keywords de sitenin içeriğiyle ilgili anahtar kelimelerdir. Bunun gibi bir çok meta etiketi mevcuttur. Bu meta etiketlerine sahip site arama motorlarında şöyle çıkar: 10

Bir web sitesi kodları 2 bölümden oluşur. Birincisi meta etiketlerinin, javascript tanımlamalarının ve bunlar gibi kullanıcının görmemesi gereken bilgileri barındıran sayfanın head kısmıdır. <head> </head> Etiketleri arasında olmalıdır. Đkinci bölüm de body (vücut) kısmıdır. <body></body ile belirtilir. Dinamik web sitelerinde güvenlik Dinamik web sitelerinin kötü yönü de kullanıcıya verilen hakların kötü yönde de kullanılabilecek olmasıdır. Dinamik site hack metotlarının başında çerez taklit etmek ve SQL injection metotları gelmektedir. Siteye yönetici girişini sağlayan çerezler belli kriptolarla gizlenmiş kodlar içermektedir. Bu kodların bir şekilde taklit edilmesi sayesinde art niyetli biri kendini siteye yönetici olarak gösterebilir. SQL injection: Kullanıcıdan alınan bazı veriler SQL sorgusuna sokulur. Örneğin hiçbir güvenlik önlemi alınmayan bir şifre değiştirme sorgusunda: $isim=$_cookie["kullanici"]; $sifre=$_post[sifre]; UPDATE uyeler SET sifre= $sifre WHERE isim= $isim Kodları kullanılıyor olsun. Burada çerezden alınan kullanıcı isminin olduğu sütundaki şifre bir önceki sayfadaki formdan gelen şifreyle değiştirilecektir. Şifre alanına abcde WHERE isim= yonetici ; UPDATE uyeler SET sifre= 123456 kodu girilirse sorguya gönderilen kod içine başka bir SQL kodu enjekte edilmiş ve sorunsuz bir şekilde çalıştırılmış oluyor. UPDATE uyeler SET sifre= abcde WHERE isim= yonetici ; UPDATE uyeler SET sifre= 123456 WHERE isim= $isim ; Bu şekilde kişi kendi şifresini 123456, yönetici şifresini de abcde yapmış oluyor bu şekilde de yönetici kontrolünü ele almış oluyor. Tabi burada yönetici kullanıcı adı ve sorgu adı yapılan tablo, satır isimlerinin biliniyor olması gerekiyor. 11

md5 MD5 (Message-Digest algorithm 5), veri bütünlüğünü test etmek için kullanılan, Ron Rivest tarafından 1991 yılında geliştirilmiş bir kriptografik özet (tek yönlü şifreleme) algoritmasıdır. Girdi verinin boyutundan bağımsız olarak 128 bitlik özetler üretir. Tek yönlü şifreleme olduğu için yönetici şifresini md5 şeklinde saklıyoruz. Böylece yönetici şifresi asla ele geçirilemeyecek. SĐTENĐN ÖZELLĐKLERĐ ve ĐÇERĐĞĐ Kodlanan site TEKĐR isimli çok amaçlı robot kontrol kartının sitesidir. Dinamik olmasının amacı yönetici girişi yapılarak içeriğinin değiştirilmesi, böylece hiç web bilgisi olmayan birinin dahi site içeriğini güncelleyebilmesidir. Yönetici panelinden site adeta e-posta okumak kadar kolay bir şekilde yönetilebilecektir. Site içeriği Tekir hakkında: Tekir nedir ayrıntılı bilgi. Dönüşüm: Tekirin üzerinde yapılacak değişimlerle elde edilecek farklı görevler. Yazılım: Tekir yazılım dosyaları. Donanım: Tekir donanım dosyaları. Dokümanlar: Tekir ile ilgili bilgiler, resimler, görüntüler ve diğer dosyalar. Duyurular: Tekir hakkında yenilikler, eklenenler, haberler S.S.S.: Sıkça Sorulan Sorular ve cevapları Đlgili bağlantılar: Bazı adresler E-posta grubu: Tekir e-posta grubuna üye olma. Đletişim formu: Site yöneticisine site üzerinden mesaj gönderme. Kullanıcı kısmı Adres satırında görünen tek adres uzantısı index.php olacak. Farklı sayfaları çağırmak için yapacağımız şey adres içeriğinden bilgi çekmek ve ona göre kullanıcıya sayfa göndermektir. Tekir hakkında ve dönüşüm sayfaları direk yazıdan oluşmaktadır. Yazılım, donanım ve dokümanlar sayfaları dosya adreslerini (tıklanarak indirilecek şekilde) ve dosya ile ilgili bilgileri içeren sayfalardır. Duyurular kısmında en yeni duyuru en üstte olacak şekilde sıralanır ve kullanıcı kaç duyuru göstermek istediğine düşen menü ile karar verebilecektir. S.S.S. kısmında soru ve karşısında cevap bulunacak, karışmasın diye tablo satırlarında farklı 2 renk kullanılacaktır. Đlgili bağlantılarda bağlantı adresi ve açıklaması bulunacaktır. E-posta grubu için bir form bulunacak, boşluğa adresini girip göndere tıklayan kişi gruba katılacaktır. Đletişim formunda ise çeşitli alanla mevcuttur. Belirlediğimiz bazı alanları doldurmak zorunlu olacak şekilde göndere tıklayınca doldurulan form yönetici e-postasına gönderilecektir. Ana sayfada 8 adet resim bulunmaktadır. 12

Yönetici kısmı Site yönetici paneline /yonetim adresinden ulaşılacaktır. Kullanıcı kısmında olduğu gibi yönetici kısmı da sadece index.php adresinden oluşmaktadır. Özellikleri: Ana sayfa ayarları: Karşılama mesajı ve ana sayfada bulunan 8 resmin ayarlanması (bilgisayardan direk yükleme ile) Hakkında: Düz yazı kaydı. Dönüşüm: Düz yazı kaydı. Yazılım: Dosya yükleme(isim ve açıklama bilgileriyle) ve mevcutları silme veya düzenleme Donanım: Dosya yükleme(isim ve açıklama bilgileriyle) ve mevcutları silme veya düzenleme Mesajlar: Duyuru ekleme, mevcutları silme veya değiştirme. Dosyalar: Dosya yükleme(isim ve açıklama bilgileriyle) ve mevcutları silme veya düzenleme S.S.S.: Sıkça sorulan soru ve cevabını ekleme, mevcutları silme veya düzenleme Đlgili bağlantılar: Đlgili bağlantı adresi ekleme, mevcutları silme veya düzenleme Ayarlar: Site adı (title), site açıklaması (description), anahtar sözcükler (keywords), dış tablo kenarlığı, dış tablo içi, gösterilecek duyuru sayısı, duyuru resim genişliği, duyuru alan 1,2,3 ve 4 renk belirlemesi, site yönetici e-posta adresi Şifre değiştir: Yönetici şifresi değiştirme Çıkış: Yönetici sistemden çıkar. (çerez sil) Görsel kısım Her sayfanın aynı olması ve bir şeyin değiştirileceği zaman her sayfaya ayrı ayrı uygulanmaması için görsel kısımlar birer dosyada tutulmakta ve yeri gelince çağırılmaktadır. Her sayfada çağırılan sayfalar: stil.php: stil.css dosyasını çağırır ve sayfaya ait tüm stilleri barındırır. ust.php: Sayfanın üst kısmı. Menü. $sayfa.php: Sayfa içeriği. Değişken adı alınıp ona ait php dosyası çağırılır. alt.php: Sayfa alt bilgileri. mysql HAZIRLIK Hostumuzun bize sağladığı site yönetim panelinden bir veritabanı oluşturuyoruz ve bu veritabanına erişecek kullanıcıyla şifresini oluşturuyoruz. Daha sonra phpmyadmin den kullanacağımız tabloları ve bunların satırlarını oluşturuyoruz. Şuan yayında olan sitenin güvenliği açısından burada daha fazla ayrıntı veremiyorum. 13

KODLAMALAR Kodların düzenini sağlamak, yazılımını ve kullanımını kolaylaştırmak amacıyla en küçük işler bile farklı dosyalara kaydedilerek çağırılmaktadır. Böylece o işi başka bir sayfaya da daha rahat bir şekilde yaptırabiliriz. YÖNETĐCĐ SAYFALARI Tarayıcı adres satırına www.siteadi.com/yonetim adresini yazınca direk index.php sayfasına yönlendiriliriz. Kullanıcı birimiyle ortak kullanılan sayfalar kullanıcı sayfalarında anlatılacaktır. index.php Bu sayfa içerisinde yapmamız gereken öncelikle bu sayfaya giren kişinin yönetici olup olmadığını test etmektir. Kişi yönetici ise karşısına yönetim paneli, değilse giriş yapması için yönetici giriş paneli çıkacaktır. Yönetici testi için çerez testi yapmalıyız. Çerez testi cookietest.php dosyasına atılmıştır. include("cookietest.php"); Satırı bize cookietest.php dosyasındaki bütün kodları adete index.php içindeymişçesine kullanmamıza olanak sağlar. Yöneticinin oturum uzunluğunu 10 dakika olarak belirlemiştik. Ancak yöneticinin yönetim panelindeki işini 10 dakikada bitirememe durumu vardır. Yönetici işlerini yaparken tekrar giriş istenecek ve yöneticinin işleri yarım kalacak. Buna çözüm olarak her sayfa yenilemede çerez geçerlilik süresini yenileyebiliriz. Bunun için cookietest.php dosyasına yazacağımız cookieyenile fonksiyonunu kullanmalıyız; cookieyenile(); Daha sonra mutlaka lazım olacak olan veritabanı bağlantısını yapmalıyız. Veritabanı bağlantı kodlarını içeren baglanti.php dosyasını çağırmalıyız. Ancak baglanti.php dosyası yonetim klasöründe değil ana klasörde olduğu için bir klasör üste çıkarak çağırabiliriz. Yani include("../baglanti.php"); Bağlantı ayarlarını tek dosyadan kontrol etmek için bu dosya bir tanedir. Yönetici panelinin görünümü için include("../header.php"); include("../stil.php"); satırlarını, arkasından alt dosyasında kapatılmalar yapılmak üzere bazı etiketler açıyoruz. <body> <table border="5" bordercolor="<?php echo $ayarlar{distablokenari?>" width="100%" bgcolor="<?php echo $ayarlar{distabloici?>"> <tr> <td> 14

Burada site vücudunu, her şeyi içinde barındıracak olan tablomuzu ve satır,sütunu açıyoruz. Tablo kenar rengi için de daha sonra yöneticiye ayarlarda değişiklik hakkı vereceğimiz dış tablo kenarlık rengini veritabanından çağırıyor, html kodları içinde gerekli yere yazdırıyoruz. Şimdi yönetim paneli içeriğini hazırlayalım; Dediğimiz gibi, yönetici girişi yapılmışsa yönetim menüsü, hatta yöneticinin çağırdığı sayfa tespit edilip çağırılacak. Yönetici girişi yapılmamışsa da giriş paneli çağırılacak. Bunun için C dilinden bildiğimiz if, else kontrollerini kullanabiliriz. if(cookietest()==0) { include("dosyalar/yoneticigiris.php"); else if($cookietest==1) { include("menu.php"); $sayfa=$_get[sayfa]; if($sayfa!=null) { include($sayfa.".php"); Cookietest fonksiyonu yönetici girişi algılarsa 1 algılamazsa 0 değişkenini geri gönderecektir. Yani 0 dönmesi durumunda yonetim/dosyalar klasörü içine attığımız yoneticigiris.php dosyası çağırılacaktır. Eğer 1 dönerse önce menü dosyası, altında da yöneticinin talep ettiği sayfa çağırılacaktır. Bunu adres içinden bilgi çekerek yapıyoruz. Örneğin index.php?sayfa=deneme adresine girilmişse deneme.php dosyası menünün altında açılacaktır. Bunlardan sonra da alt.php ve baglantikapat.php dosyalarıyla sayfamızı tamamlıyoruz. Şimdi bu sayfa içinde çağıracağımız dosyaları tek tek inceleyelim; cookietest.php Bu dosya içerinde 2 tane fonksiyon tanımlıyoruz. cookietest ve cookieyenile. cookietest yönetici çerezi algılarsa 1 değerini algılamazsa 0 değerini geri döndürecek. cookiyenile fonksiyonu da çerez algılarsa onun geçerlilik süresini 10 dakika sonrasına alacak. Yani bu demek oluyor ki yönetici sitede dolaştığı sürece oturumu açık kalacak. Eğer yönetici 10 dakika sitede bir işlem yapmazsa oturumu kapatılacak. function cookietest() { if (isset($_cookie["çerezismi"])) { return 1; else {return 0; 15

function cookieyenile() { if (isset($_cookie["çerezismi"])) { setcookie("tekir",$_cookie["tekir"],time()+600); menu.php Hiçbir php koduna gerek yoktur. Olduğu gibi html kodlarından oluşan bir sayfadır. <p align="center"><a href="../"><em><font face="verdana"><strong><font size="2">- ANA SAYFA -</font></strong></font></em> </a></p> <div align="center"> <table border="1" bordercolor="#000000" bgcolor="#d1e9f3"> <tr> <td><strong><font size="4"><a href="index.php?sayfa=ana">ana sayfa ayarları</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=hakkinda">hakkında</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=donusum">dönüşüm</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=yazilim">yazılım</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=donanim">donanım</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=mesajlar">mesajlar</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=dosyalar">dosyalar</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=sss">s.s.s.</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=linkler">ilgili bağlantılar</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=ayarlar">ayarlar</a></font></strong></td> <td><strong><font size="4"><a href="index.php?sayfa=sifredegistir">şifre değiştir</a></font></strong></td> <td><font size="4"><strong><a href="cikis.php">çıkış</a></strong></font></td> </tr> </table> <hr /> horizonal rule menünün altındaki çizgiyi oluşturuyor </div> Görünümü ise: 16

Şimdi sırayla menüden çağırılabilecek sayfaları ve bunların alt dosyalarını tanıtalım. Ana.php Ana sayfa ayarlarını barındırır. Ana sayfada menünün altında kullanıcının karşısına çıkacak olan mesajın ve altındaki 8 adet resmin ayarı. Mevcut mesaj textfield (yazıkutusunda) açılır ve yöneticiye değiştirme hakkı verilir. Resimler için ise gözat tuşu ve yanında resim seçeneği olacak, yönetici bilgisayarından resmi seçtikten sonra o resmi hangi resim olarak kaydettiğini seçip yükleyecek. Sunucuda yer tasarrufu için de eski resim silinecek. Ayrıca bu resimlerin ana sayfada kaç piksel genişlikle gösterileceğinin ayarı da mevcuttur. Sayfanın o an yaptığı iş adres satırına islem değişkeniyle atılır ve sayfa başında $islem=$_get[islem]; koduyla $islem değişkenine atılır. Sayfa menüden ilk kez çağırıldığında islem değişkeni boş olacağından bu testi $islem= =NULL şeklinde yapabiliriz. Eğer işlem boşsa mevcut ana sayfa ayarları çağırılacak ve formlar içinde gösterilecek. $donus=mysql_query("select * from ana") or die(mysql_error()); $ana=mysql_fetch_array($donus); require("dosyalar/anaform.php"); ana tablosu içinden bütün ayar değişkenleri çekilerek $ana değişkenine atılıyor ve bu bilgileri içeren sayfa içine dosyalar/anaform.php çağırılıyor. Anaform.php içinde bu bilgiler yerlerine konacak ve yöneticinin görmesi sağlanacak. dosyalar/anaform.php Bu sayfa içinde 2 adet form bulunmaktadır. 1.form Karşılama mesajı ve resim genişlik piksel değeri ayarını içerir. <form action="index.php?sayfa=ana&islem=mesaj" method="post" name="form1"> <p><strong><font size="3">ana SAYFA AYARLARI</font> </strong></p> <p>karşılama mesajı: <textarea name="mesaj" cols="100" rows="4"><?php echo $ana{mesaj;?></textarea> </p> <p>resim genişliği: <input name="resimgenislik" type="text" size="3" maxlength="3" value="<?php echo $ana{resimgenislik;?>"> piksel</p> <p> <input type="submit" name="submit2" value="kaydet"> </p> </form> 17

Bu formun hedefi index.php?sayfa=ana&islem=mesaj adresidir. Değişkenler ise mesaj ve resimgenislik tir. Burada mevcut veriler veritabanından çekilip form kutucukları içine yerleştirilir. 2.form Bu bir dosya yükleme formudur. Diğer formlardan farkı form tanımı içinde enctype="multipart/form-data" bilgisi bulunmalıdır. Formun hedef adresi index.php?sayfa=ana&islem=resim dir. Resim temp (geçici) klasöre yüklenir ve adresi formda belirttiğimiz dosya değişkenine atılır. Hangi resim olarak yüklediğimiz seçeneği de select formu ile resim değişkenine atılır. <form id="form2" name="form2" method="post" enctype="multipart/form-data" action="index.php?sayfa=ana&islem=resim"> <hr> <p> </p> <table width="405" height="112" border="1"> <tr> <td><div align="center">resim 1 </div></td> <td><div align="center">resim 2 </div></td> <td><div align="center">resim 3 </div></td> <td><div align="center">resim 4 </div></td> </tr> <tr> <td><div align="center">resim 5 </div></td> <td><div align="center">resim 6 </div></td> <td><div align="center">resim 7 </div></td> <td><div align="center">resim 8 </div></td> </tr> </table> <p>resim: <input type="file" name="resim"> <select name="resimno"> <option value="" selected>seçiniz</option> <option value="resim1">resim 1</option> <option value="resim2">resim 2</option> <option value="resim3">resim 3</option> <option value="resim4">resim 4</option> <option value="resim5">resim 5</option> <option value="resim6">resim 6</option> <option value="resim7">resim 7</option> <option value="resim8">resim 8</option> </select> olarak </p> <p> 18

<input type="submit" name="submit" value="yükle"> </p> </form> Görümü ise; Bu formlardan gelen değişkenlere göre ana.php sayfası işlemler yapacaktır. Şimdi yarım bıraktığımız ana.php sayfasına devam edelim. Ana.php (devamı) Bu sayfada $islem değişkeninin 3 ihtimali vardır. Ya boştur (yani NULL) ya da formdan gelen mesaj veya resim değişkenlerinden biridir. Đşlemin boş olma durumunu ele almıştık. Boş olduğunda formu açıp içine mevcut değişkenleri koymuştuk. Şimdi diğer ihtimalleri değerlendirelim; Eğer işlem değişkeni mesaj ise POST ile gelen değişkenler veritabanında eskileri ile değiştirilecek. Bunu if içinde $islem=="mesaj" koşuluyla test ediyoruz. Bu sağlanıyorsa yapılacak işler şunlardır; $mesaj=$_post[mesaj]; $resimgenislik=$_post[resimgenislik]; mysql_query("update ana set mesaj='$mesaj',resimgenislik='$resimgenislik'") or die(mysql_error()); ve ardından yöneticiye işlerin yolunda gittiğine dair bir mesaj olarak ayarlar kaydedildi yazdırabiliriz. Đşlem değişkeninin resim olduğu durum; Burada önce $resimno=$_post[resimno]; 19

Kodlarıyla yüklenen resmin hangi resim yerine yükleneceğini öğrenelim. Daha sonra yöneticinin dalgınlıkla yüklenecek resmi veya hangi resim yerine yükleneceğini seçmeyi unutması ihtimalini göz önünde bulundurarak bir test yapalım. if($resimno==null $resim==null) {?> <div align="center">formda eksik var.<br><input TYPE="button"VALUE="geri"onClick="javascript:history.back(1)"></div> <?php Yani eğer resimno veya resim değişkenler boşsa ekrana şu çıkarılacak; Burada geri tuşunda bir javascript kodu vardır; yönetici tarayıcının bir önceki sayfasına geri yönlendirilir. Bu şekilde formlarda girdiği veriler de kaybolmamış olur. Eğer formda eksik yoksa eksik olma testi için kullandığımız if in else i içine yapılacak işlemleri yerleştirebiliriz. $yukleadi="../".$resim_name; copy($resim,$yukleadi) or die ( "Dosya Kopyalanamiyor." ); $donus=mysql_query("select * from ana") or die(mysql_error()); $dosya=mysql_fetch_array($donus); $adres="../".$dosya{$resimno; unlink($adres); $adres=$dosya_name; mysql_query("update ana set $resimno='$resim_name';") or die(mysql_error()); Yüklenecek olan resimler site ana klasörüne kendi ismi ile yüklenecektir. Bunun için veritabanına kaydedilecek olan isim../$resim_name olmuştur. $resim_name $resim dosyasının ismini bize gönderen kullanımdır. Burada $resim yüklenen dosyanın temp içindeki adresini tutmaktadır. Copy fonksiyonuyla dosyanın konumunu $yukleadi ismiyle değiştiriyoruz. Böylece dosya direk ana klasöre geçmiş oluyor. Daha sonra eski dosyayı silmek için o dosyanın adını veritabanından çağırıp adresini $adres değişkenine atıyoruz. Burada $dosya{$resimno dosya dizisindeki resimno isimli değişkenin değerini gönderir. Yani o numaralı resmin adresi gelecektir. Daha sonra unlink fonksiyonuyla da eski dosyayı siliyoruz. Son olarak yeni dosyanın kaydını yapıyoruz. Ana tablosunda o resimno için adresi yeni adres değeriyle değiştiriyoruz ve yöneticiye resim kaydedildi mesajını gösteriyoruz. ayarlar.php Sitede ayarı yöneticiye sunulacak değişkenler: Site adı (title) site açıklaması (description) anahtar sözcükler (keywords) dış tablo kenarlığı dış tablo içi 20

gösterilecek duyuru sayısı duyuru resim genişliği duyuru alan 1,2,3 ve 4 renk belirlemesi site yönetici e-posta adresi Bu sayfada işlem değişkeni ayardurum dur. Ayardurum ya kayit olabilir ya da boş (NULL) olabilir. Kayit ise alınan değişkenler veritabanında eskileriyle değiştirilecek, NULL ise dosyalar/ayarlarform.php çağırılıp form kutucuklarına mevcutları yerleştirilecek. Boş olduğu durum: $ayarsorgudonus=mysql_query(" select * from ayarlar ")or die(mysql_error()); $ayarlar=mysql_fetch_array($ayarsorgudonus); $siteadi=$ayarlar{ad; $aciklama=$ayarlar{aciklama; $anahtarlar=$ayarlar{anahtarlar; $distablokenari=$ayarlar{distablokenari; $distabloici=$ayarlar{distabloici; $mesajgostersayi=$ayarlar{mesajgostersayi; $mesajresimgenislik=$ayarlar{mesajresimgenislik; $mesajalan1renk=$ayarlar{mesajalan1renk; $mesajalan2renk=$ayarlar{mesajalan2renk; $mesajalan3renk=$ayarlar{mesajalan3renk; $mesajalan4renk=$ayarlar{mesajalan4renk; $maill=$ayarlar{mail; require("dosyalar/ayarlarform.php"); Burada veritabanında mevcut bütün ayarlar çekilip değişkenlere atılıyor ve ayarlarform dosyası çağırılıp içinde uygun kutulara yerleştiriliyor. dosyalar/ayarlarform.php Burada kutucukların değer verileri olarak ayarlar.php dosyasında veritabanından çağırılıp değişkenlere atılan ayarlar yazdırılıyor. <div align="center"> <form name="form1" method="post" action="index.php?sayfa=ayarlar&ayardurum=kayit"> <label> Site adı: <input name="siteadi" type="text" size="50" maxlength="200" value="<?php echo $siteadi?>"> </label> <p> <label>site açıklama: <input name="aciklama" type="text" size="50" maxlength="500" value="<?php echo $aciklama?>"> </label> </p> <p> <label> 21

Anahtar sözcükler: <input name="anahtarlar" type="text" size="50" maxlength="5000" value="<?php echo $anahtarlar?>"> </label> (virgülle ayırın) </p> <p> <label>dış tablo kenarlığı: # <input name="distablokenari" type="text" size="6" maxlength="6" value="<?php echo $distablokenari?>" /> </label> </p> <p> <label>dış tablo içi : # <input name="distabloici" type="text" size="6" maxlength="6" value="<?php echo $distabloici?>" /> </label> </p> <p> <label>gösterilecek mesaj sayısı : <input name="mesajgostersayi" type="text" size="3" maxlength="2" value="<?php echo $mesajgostersayi?>" /> </label> </p> <p> <label>mesaj resim genişlik : <input name="mesajresimgenislik" type="text" size="3" maxlength="3" value="<?php echo $mesajresimgenislik;?>" /> </label> piksel</p> <p> <label>mesaj alan 1 renk: # <input name="mesajalan1renk" type="text" size="6" maxlength="6" value="<?php echo $mesajalan1renk;?>" /> </label> </p> <p> <label>mesaj alan 2 renk: # <input name="mesajalan2renk" type="text" size="6" maxlength="6" value="<?php echo $mesajalan2renk;?>" /> </label> </p> <p> <label>mesaj alan 3 renk: # <input name="mesajalan3renk" type="text" size="6" maxlength="6" value="<?php echo $mesajalan3renk;?>" /> </label> </p> <p> <label>mesaj alan 4 renk: # 22

<input name="mesajalan4renk" type="text" size="6" maxlength="6" value="<?php echo $mesajalan4renk;?>" /> </label> </p> <p> <label>đletişim e-posta: <input name="maill" type="text" size="30" maxlength="50" value="<?php echo $maill;?>" /> </label> </p> <p> <label> <input type="submit" name="submit" value="kaydet"> </label> </p> </form> </div> Görünümü; Formun hedef adresi index.php?sayfa=ayarlar&ayardurum=kayit dir. Kaydet e basılınca tarayıcı o adrese değişkenler ve yeni değerlerle yönlenecek. 23

ayarlar.php(devam) Form geri dönüşünde ayardurum değişkeni kayit olmuş olacak. if($ayardurum=="kayit") { $siteadi=$_post[siteadi]; $aciklama=$_post[aciklama]; $anahtarlar=$_post[anahtarlar]; $distablokenari=$_post[distablokenari]; $distabloici=$_post[distabloici]; $mesajgostersayi=$_post[mesajgostersayi]; $mesajresimgenislik=$_post[mesajresimgenislik]; $mesajalan1renk=$_post[mesajalan1renk]; $mesajalan2renk=$_post[mesajalan2renk]; $mesajalan3renk=$_post[mesajalan3renk]; $mesajalan4renk=$_post[mesajalan4renk]; $maill=$_post[maill]; mysql_query("update ayarlar SET ad='$siteadi',aciklama='$aciklama',anahtarlar='$anahtarlar',distablokenari='$distablokenari',dista bloici='$distabloici',mesajgostersayi='$mesajgostersayi',mesajresimgenislik='$mesajresimgenisl ik',mesajalan1renk='$mesajalan1renk',mesajalan2renk='$mesajalan2renk',mesajalan3renk='$mes ajalan3renk',mesajalan4renk='$mesajalan4renk',mail='$maill'") or die(mysql_error()); echo "<div align=\"center\">ayarlar kaydedildi. </div> <meta http-equiv=\"refresh\" content=\"1;url=index.php\" />"; Bu durumda html değişkenleri $_POST ile php değişkenlerine atılıp veritabanında eskileriyle değiştiriliyor. Bu kayıt işleminin yapıldığı sayfada Ayarlar kaydedildi mesajı görünecek ve refresh meta html etiketiyle 1 saniye sonra index.php ye yönlendirilecek. dosyalar/yoneticigiris.php index.php dosyası tarafından eğer geçerli bir yönetici çerezi algılanmazsa çağırılır. Formdan ibarettir. <form id="form1" name="form1" method="post" action="giris.php"> <label><strong><?php echo $siteadi;?> site yönetici girişi </strong><br /> <br /> giriş: <input name="isim" type="text" maxlength="50" autocomplete="off"/> </label> <p> <label>şifre: <input name="sifre" type="password" maxlength="50" autocomplete="off"/> </label> </p> <p> <label> <input type="submit" name="submit" value="tamam" /> </label> 24

</p> </form> Görünümü: Burada input içlerine autocomplete="off" ibaresi konmuştur. Bu şekilde tarayıcının bu forma daha önce yapılan girişleri hatırlaması engellenmiştir. Ve type="password" ile de girilen şifrenin yıldızlı olarak görünmesi sağlanmıştır. Formun hedefi giris.php dosyasıdır. Girilen veriler oraya html form değişkeni olarak gönderilir. Giris.php Giris.php dosyasında öncelikle yönetici giriş bilgilerini doğrulamak için veritabanıyla bağlantı kurmak zorundayız; include("../baglanti.php"); Daha sonra form verilerini php değişkenlerine atarız. $isimt=$_post[isim]; Bu alınan ilk veriler sql injection içerebileceğinden ilk başta tehlikeli olarak bakıyoruz. Bu tehlikeli isim değişkenine mysql_real_escape_string fonksiyonunu uygularayak sql injectiondan korunuyoruz. Aynı şeyi şifreye yapmaya gerek yoktur. Çünkü şifre veritabanında md5 hash olarak saklandığından girilen şifrenin md5i sorguya gönderilecektir. Md5 hashinin de herhangi bir sql işlemi yapması mümkün değildir. $sifre=md5($sifret); Veritabanından yönetici ismini ve şifresinin md5ini çağırdıktan sonra bağlantıyı kapatıyoruz. Arkasından da şu kodlarla sayfayı bitiriyoruz: if($donenisim==$isim && $donensifre==$sifre) { setcookie("çerez ismi",$isim,time()+600); include("dosyalar/giris.html"); else { include("dosyalar/hataligiris.html"); Doğru girişte 10 dakikalık oturum açılacak, hatalı girişte ise hatagiris.html sayfası açılacaktır. 25

dosyalar/giris.html <div align="center"> <p>gđrđş BAŞARILI</p> <p><a href="index.php">yönetđcđ ANA SAYFASI</a>'NA YÖNLENĐYORSUN </p> </div> <meta http-equiv="refresh" content="0;url=index.php"> Doğru giriş yapıldığında giris.php dosyası tarafından çağırılır. Meta etiketiyle sayfa açıldıktan 0 saniye sonra index.php dosyasına yönlendirilir. dosyalar/hataligiris.html <div align="center"> <p>hatali GĐRĐŞ </p> <p><input TYPE="button"VALUE="geri"onClick="javascript:history.back(1)"> </p></div> Görünümü: Cikis.php Yönetici çıkışı yapılması daha önce de anlattığım gibi çerez geçerlilik süresinin geçirilmesiyle olabilir. Gerekli kod; setcookie ("çerez adı", "", time() - 3600); Bunun dışında çıkış sayfasında görsellikle ilgili sayfalar çağırılabilir ve ana sayfaya yönlendirme yapılabilir. donusum.php Tekir dönüşüm sayfasının içeriğidir. Düz yazıdan oluşur. Yapacağımız şey bu yazıyı bir form içinde açıp tekrar kaydetmektir. Đlk başta işlem boştur. if($islem==null) içinde yazıyı textarea içinde açarız. $donus=mysql_query("select * from donusum") or die(mysql_error()); $donusum=mysql_fetch_array($donus);?> <div align="center"><form name="form1" method="post" action="index.php?sayfa=donusum&islem=kaydet"> 26

<p><strong><font size="4">tekđr DÖNÜŞÜM</font> </strong></p> <p> <textarea name="yazi" cols="120" rows="20"><?php echo $donusum{yazi;?></textarea> </p> <p> <input type="submit" name="submit" value="kaydet"> </p></form></div><?php Formun hedefi index.php?sayfa=donusum&islem=kaydet adresidir. Yani kaydet düğmesine basılınca sayfaya bir yazi değişkeni gelecek ve adres satırında da islem=kaydet değişkeni taşınacaktır. if($islem=="kaydet") { $yazi=$_post[yazi]; $donus=mysql_query("update donusum set yazi='$yazi'") or die(mysql_error());?> <div align="center"><strong><font size="3">kaydedildi</font></strong> </div> <?php?> Đşlem kaydet olduğunda da yapılan şey yazı değişkenini veritabanında eskinin yerine koymak ve yöneticiye kaydedildi diye bilgi mesajı vermek. Hakkinda.php Algoritma ve yapılan işler donusum.php sayfasıyla tamamen aynıdır. Farklar sql değişken isimleri ve form hedef adresidir. O sayfada donusum gördüğümüz yerlere hakkinda koyarak elde edebiliriz. sifredegistir.php Menüden ilk çağırıldığında dosyalar/sifredegisform.html dosyasını çağırır. dosyalar/sifredegisform.html Yöneticiden mevcut şifresi ve 2 kez yeni şifresi istenir. sifredegistir.php dosyasına gönderilir. 27

sifredegistir.php (devam) Şifre değiştirme formundan gelen veriler çeşitli testlere sokulur. $mevcutt=$_post[mevcut]; $sifre1t=$_post[sifre1]; $sifre2t=$_post[sifre2]; $mevcut=md5(mysql_real_escape_string($mevcut)); $sifre1=mysql_real_escape_string($sifre1); $sifre2=mysql_real_escape_string($sifre2); Satırlarıyla veriler alınıp güvenlikleri sağlanır, mysql sorgusuna hazır hale getirilir. Daha sonra if($sifre1!=$sifre2) testi yapılır, eğer 2 yeni şifre uyuşmuyorsa Mesajı çıkartılır. Eğer orada sorun yoksa mevcut şifre kontrol edilir. O da doğruysa $yenisifre=md5($sifre1); mysql_query("update yonetici SET sifre = '$yenisifre' where isim='yönetici'") or die(mysql_error()); echo "<div align=\"center\">yönetici şifresi değiştirildi kodları çalıştırılır ve şifre değiştirme işlemi gerçekleşir. Son bir durum ise 2 yeni şifrenin uyuşup mevcut şifrenin uyuşmaması durumudur. Bu da else ile kontrol edilip Mesajı çıkarılır. Donanim.php Yöneticinin kart donanımıyla ilgili dosyaları siteye yüklemesini, silmesini, düzenlemesini sağlayan dosyadır. Đlk girildiğinde yapacağı iş dosya ekleme formunu çıkarmak ve altında mevcut dosyaları listelemek. Adres satırıyla taşıyacağımız islem değişkenini test ediyoruz. Boş ise <p align="center"><strong><font size="4">dosya EKLE</font></strong></p><?PHP require("dosyalar/donanimform.php"); satırlarını çalıştırıyoruz. 28

dosyalar/donanimform.php Bu dosyayla hem dosya yükleme,hem düzenleme işlemini yapacağız. Form açılışı şu şekilde olacak, <form name="form1" enctype="multipart/form-data" <?php if($islem==duzelt) {?> action="index.php?sayfa=donanim&islem=duzeltildi&no=<?php echo $no;?>"<?php else{?> action="index.php?sayfa=donanim&islem=yukle"<?php?> method="post"> Yani islem değişkeni duzelt ise form hedefi index.php?sayfa=donanim&islem=duzeltildi&no=numara olacak, ve işlem eğer boşsa (ki dosyayı yüklerken donanim.php dosyasının ilk açılışı oluyor böylece islem değişkeni boş oluyor) form hedefi index.php?sayfa=donanim&islem=yukle adresi oluyor. Yani bu dosya verileri her halükarda donanim.php dosyasına gönderiyor fakat islem değişkeni farklı oluyor. Form dosyasının geri kalanı; <div align="center"> <p> Donanım dosyası ismi:</p> <p> <input name="isim" type="text" value="<?php echo $dosya{isim;?>" size="50" maxlength="50"> </p> <p>açıklama:</p> <p> <textarea name="aciklama" cols="100" rows="4"><?php echo $dosya{aciklama;?></textarea> </p> <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="500000"> <?php if($islem!=duzelt) {?> <p> <input name="dosya" type="file" size="50" maxlength="100"> </p> <p> <?php?> </p> <p><strong><font color="#ff0000">yüklenecek dosyanın isminin türkçe karakter içermediğinden emin olun.</font></strong></p> <p><br> <input type="submit" name="gonder" value="kaydet"> </p> </div></form> Şeklindedir. Görünümü; Yüklenen dosya adreslenirken kendi adını alacağından, adının Türkçe karakter içermesi sorun oluşturacaktır. Đnternette türkçe karakter içeren adresler henüz kullanılamamaktadır. 29

donanim.php(devam) Yükleme işlemi: islem değişkeni yukle ise if($islem=="yukle") { $isim=$_post[isim]; $aciklama=$_post[aciklama]; $yukleadi="../donanim/".$dosya_name; echo $dosya_name; echo "<br>"; echo $dosya_size. " Kb"; echo "<br>"; echo $dosya_type; echo "<br>"; echo "<a href=\"$yukleadi\">dosyaya ulaşmak için tıklayın.</a>"; copy($dosya,$yukleadi) or die ( "Dosya Kopyalanamiyor." ); $donusmax=mysql_query("select max(no) from donanim") or die(mysql_error()); $maxdosya=mysql_fetch_array($donusmax); $dosyakaydetno=$maxdosya{0+1; $adres="http://www.umuttepe.org/donanim/".$dosya_name; mysql_query("insert into donanim(no,isim,aciklama,adres,boyut,dosyaad) values('$dosyakaydetno',' $isim','$aciklama','$adres','$dosya_size','$dosya_name')") or die(mysql_error());?> <div align="center">donanım dosyası yayına kondu</div> Dosya ana klasöre değil, donanim ismiyle açılacak olan klasöre konacak. Bunun için dosya adı alınıp önüne../donanim konuyor.../ bir klasör üste çıkmak demektir ki şu an yonetim klasörü içindeyiz. Yükleme tamamlandıktan sonra dosya adı, boyutu, türü ve dosyanın yüklendiği adres yöneticiye bilgi amaçlı sunuluyor. Geçici klasöre yüklenen dosya copy fonksiyonuyla belirttiğimiz klasöre taşınıyor. Şimdi sıra dosyayı veritabanına kaydetmekte. Kaç dosya olduğunu bulup kaydedilecek dosyanın dosya numarasına karar verelim. Veritabanında ilgili tablodan en büyük dosya numarası istenip 1 fazlası dosyakaydetno değişkenine atılıyor. Dosya adresini sitenin her yerinde sorunsuz bir şekilde çağırabilmek için başına sitenin tam adresini yerleştiriyoruz.(eğer site adresi değişirse bu kısım da değişmelidir) Ve de dosyayla ilgili bildiğimiz her şeyi veritabanına kaydediyoruz. Listeleme işlemi: <p align="center"><strong><font size="4">mevcut DONANIM DOSYALARI</font></strong></p> <p> <?php $donusmax=mysql_query("select max(no) from donanim") or die(mysql_error()); $maxdosya=mysql_fetch_array($donusmax); $dosyasayisi=$maxdosya{0+1;?> <table align="center" bgcolor="#ffffff" border="1" bordercolor="#000066"> 30

<?php //for başlangıç for($i=1;$i<$dosyasayisi;$i++) { $donus=mysql_query("select * from donanim where no='$i'") or die(mysql_error()); $dosya=mysql_fetch_array($donus); if($dosya!=null) {?> <tr> <td bgcolor="#d3d3d3"><div align="center"><a href="index.php?sayfa=donanim&islem=sil&no=<?php echo $i;?>">sil</a></div></td> <td bgcolor="#d3d3d3"><div align="center"><a href="index.php?sayfa=donanim&islem=duzelt&no=<?php echo $i;?>">düzenle</a></div></td> <td><div align="center"><a href="<?php echo $dosya{adres;?>"><?php echo $dosya{isim;?></a></div></td> <td><div align="center"><?php echo nl2br(htmlspecialchars($dosya{aciklama));?></div></td> </tr> <?php //for bitiş?> </table> Dosya sayısı kadar for döndürüyoruz, her dönüşte yeni sorguyla verileri alıp yeni satır içine yazıları koyuyoruz. Silme işlemi: Bu işlem yöneticinin bir dosyayı hatayla silmesini engeller. Sadece uyarıdır. $silno=$_get[no];?> <p align="center">dosya silinecek</p> <p align="center"><a href="index.php?sayfa=donanim&islem=silindi&no=<?php echo $silno;?>">[sil]</a></p> KULLANICI SAYFALARI Hazırladığım site parçalardan oluşmaktadır. Bir sayfa için yaklaşık 7 dosyadan veri değerlendirilerek uygun yerlere konmaktadır. Bu sayede sitenin bir şeyini değiştirmek için her sayfayı değiştirmek zorunda kalmayacağız ve sitenin her sayfası tamamen aynı olabilecek. www.siteadi.com adresine girildiğinde server otomatik olarak index.php dosyasını gönderecektir. 31

Yönetici paneli gibi kullanıcı kısmı da sadece index.php dosyasında açılacaktır. Đçerik ise adres satırında taşınarak değerlendirilecektir. Örneğin index.php?sayfa=hakkinda adresine index içinde hakkinda.php dosyasını açtıracağız. index.php <?php include("baglanti.php"); include("header.php"); include("stil.php"); include("ust.php"); $sayfa=$_get[sayfa]; if($sayfa==null) {$sayfa="anasayfa"; include($sayfa.".php"); include ("alt.php"); include ("baglantikapat.php");?> Dinamik içerikli site olduğundan site içeriğini veritabanından çekeceğiz, bunun için ilk başta veritabanı bağlantısını yapıyoruz. Daha sonra sitemizin ön bilgilerini içeren <head> </head> içeriğini koyuyoruz. Sitemizin yazı stillerini,renklerini vb. içeren stil.css dosyasını çağırması için stil.php dosyasını çağırıyoruz. Şimdi geldi sitemizin görsel kısmını oluşturmaya. Ust.php dosyası her zaman sitenin üst kısmında bulunan menüyü açar. Daha sonra sayfa içeriği tespit edilecek. Sayfa değişkenini test ediyor ve ona uygun içerik dosyasını çağırıyoruz. Sonra olarak sayfanın altını çağırıp güvenlik açısından bağlantıyı kapatıyoruz. baglanti.php Mysql veritabanına bağlanmamızı sağlayacak olan dosya. <?php $veritabani_ad="veritabanı adı"; $kullanici_ad="veritabanı kullanıcı adı"; $kullanici_sifre="şifre"; $dbh=mysql_connect ("localhost", "$kullanici_ad", "$kullanici_sifre") or die ('Veritabanı bağlantısı kurulamadı: '. mysql_error()); mysql_select_db ("$veritabani_ad");?> Bu sayfa veritabanı bağlantısını kurup bağlantı linkini dbh değişkenine atar. 32

header.php <?php $ayarsorgudonus=mysql_query(" select * from ayarlar ")or die(mysql_error()); $ayarlar=mysql_fetch_array($ayarsorgudonus); $siteadi=$ayarlar{ad; $aciklama=$ayarlar{aciklama; $anahtarlar=$ayarlar{anahtarlar;?><!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <title><?php echo $siteadi?></title> <META http-equiv="content-type" content="text/html; charset=windows-1254"> <META name="description" content="<?php echo $aciklama?>"> <META name="keywords" content="<?php echo $anahtarlar?>"> Veritabanından ayarlar tablosu içeriği çekilir. Bazı gerekli etiketler açılır ve sitenin karakter kodlaması Windows-1254 belirlenir. Daha sonra açıklama metası içeriğine ayarlardan çektiğimiz açıklama, anahtar kelime metasına da anahtar kelime yazdırılır. stil.php <link href="stil.css" rel="stylesheet" type="text/css" /> Kodlarından ibarettir. Head etiketi içinde stil.css dosyasını çağırır. stil.css Bu dosyada tanımladığımız stiller bütün sayfa için geçerli olacaktır. Bu sayede görünümünü değiştirmek istediğimiz öğelerin hepsini tek tek değil, öğelerin sadece stil dosyasındaki sınıfı içinde değişiklik yapabiliriz. Sadece bir öğe için aksi font, renk, boyut vb belirtilirse geçerli olmaz. body { td, th { a { background-color: #999999; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 24px; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 24px; color: #000000; 33

form { color: #330000; background-color: #CCCCCC;.title { font-family: Georgia, "Times New Roman", Times, serif; font-size: 18px; line-height: 30px; background-color: #990000; color: #FFFF66;.subtitle { font-family: Georgia, "Times New Roman", Times, serif; font-size: 16px; line-height: 20px; font-weight: bold; color: #660000; font-style: oblique;.header { font-family: Georgia, "Times New Roman", Times, serif; font-size: 24px; background-color: #990000; color: #FFFF66;.nav { font-family: Georgia, "Times New Roman", Times, serif; font-size: 12px; font-weight: bold; background-color: #CCCC66;.navLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; background-color: #DEDECA; a:hover { color: #DEDECA; background-color: #000000;.sidebar { font-family: Georgia, "Times New Roman", Times, serif; font-size: 12px; line-height: 18px; padding: 3px; background-color: #FFFF99;.sidebarHeader { font-family: Georgia, "Times New Roman", Times, serif; font-size: 14px; 34

line-height: 18px; color: #FFFF99; background-color: #999933; font-weight: bold;.sidebarfooter { font-family: Georgia, "Times New Roman", Times, serif; font-size: 12px; line-height: 18px; background-color: #FFFF99; color: #990000;.footer { font-family: Georgia, "Times New Roman", Times, serif; font-size: 12px; font-weight: bold; line-height: 22px; color: #333333; background-color: #FFFF99;.legal { font-family: Georgia, "Times New Roman", Times, serif; font-size: 12pt; color: #333333;.box1 { border-width: 2px; border-color: #CCCCCC #333333 #333333 #CCCCCC; border-style: dotted;.promo { font-family: "Times New Roman", Times, serif; color: #000033;.titlebar { font-family: "Times New Roman", Times, serif; font-size: 9px; color: #FFFFFF; background-color: #336699;.dingbat { font-family: Georgia, "Times New Roman", Times, serif; background-color: #CCCC99; color: #660000; font-weight: bolder; font-size: medium; input.big { width: 100px; input.small { width: 50px; 35

ust.php Sitenin vücut etiketini (<body>), ana tablo, bu tabloya ait satır, sütunu açar ve bu tablo içine ortalanmış div içine ustresim.php dosyasını koyar ki bu dosya kullanıcının gördüğü üst menüdür. <body> <table align="center" width="700" border="5" bordercolor="#<?php echo $ayarlar{distablokenari?>" bgcolor="#<?php echo $ayarlar{distabloici?>"> <tr> <td> <div align="center"><?php include("ustresim.html");?></div> ustresim.html Bu dosya içeriği tablolardan, tablolar içinde linklendirilmiş resimlerden oluşmaktadır. Bu resim öbeğinde sol tarafta site logosu bulunmaktadır. Site logosunu photoshop programı ile, diğer kısımları (tuşlar,linkler) imageready programı ile slice(dilimleme) metoduyla yaptım. imageready kullanımı: Hazırladığımız herhangi bir resmi bu programda dilim aracını (slice tool) kullanarak istediğimiz gibi bölebiliyoruz. Bu şekilde linkleri oluşturabiliriz. Dilimlerin sol üst köşelerinde de dilim numarası görünmektedir. Dilim seçme aracını (Slice select tool) kullanarak bir dilim seçip o dilimle ilgili web ayarlarını yapabiliriz. Bunun için slice penceresini kullanıyoruz. Slice seçilmesi: Web linklendirilmesi: 36

Bu linklendirmeler bitince de file dan save optimized as veya ctrl+shift+alt+s tuş kombinasyonuyla bu dosyanın html kodlarını ve resimlerini (images klasörü oluşturup içine atar) elde ediyoruz. Đşte ustresim.html bu şekilde oluşturuldu. ustresim.html dosyası içeriği:v <table id="table_01" width="700" height="117" border="0" cellpadding="0" cellspacing="0"> <tr> <td rowspan="2"> <a href="index.php"> <img src="images/ustresim_01.gif" width="142" height="117" border="0" alt=""></a></td> <td> <a href="index.php?sayfa=hakkinda"> <img src="images/ustresim_02.gif" width="112" height="59" border="0" alt=""></a></td> <td> <a href="index.php?sayfa=donusum"> <img src="images/ustresim_03.gif" width="111" height="59" border="0" alt=""></a></td> <td> <a href="index.php?sayfa=yazilim"> <img src="images/ustresim_04.gif" width="112" height="59" border="0" alt=""></a></td> <td> <a href="index.php?sayfa=donanim"> 37