Bu sayfadaki yazılar
Sayfanın metni
Sayfa 41
Plazma // Veritabanini yarat ) $sgl - "CREATE DATABASE ".$veritabanilsmi; mysal guery($sgl) or error()); $baglanti - new MySOLBaglantisi("localhost", echo "-> ".$veritabaniIlsmi.
" veritabani yarat#ld#.<br>";
// Yaratilan veritabanina baglanti yap mysgl select db($veritabanilIlsmi) or die(mysgl error()); "-> ".$ŞveritabaniIsmi. " veritabanina baglanildi.<br>";
echo
// Veritabani uzerinde rehber isimli /4/ bir tablo olustur $sgl "CREATE TABLE ".$tablolsmi." ( id INT NOT NULL AUTO INCREMENT, isim VARCHAR (30) NOT NULL, soyad VARCHAR (30) NOT NULL, sirket VARCHAR(100) NOT NULL, telefon VARCHAR(25) NOT NULL, tip INT NOT NULL DEFAULT O, PRIMARY KEY (id)
; mysal guery($sgl) or diel(mysal error()); echo "-> ".$tabloIsmi. " tablosu yaratildi.<br>"; ?>
Veritabanı Bağlantısı
Bu konunun üzerinde geçen sayıda yeterince durmuştuk. Bu yüzden yeniden bir açıklama yapmayı gerekli görmüyorum. Geçen sayıdaki örneğin biraz geliştirilmiş hali aşağıda yer almaktadır. Bu dosya veritabanıyla işlem gerçekleştirecek her dosyanın başında içerik olarak yer alacaktır.
veritabani baglantisi.php:
<?php class MySOLBaglantisi (| private $sunucu; private $kullaniciAdi; private $sifre; private $veritabaniAdi;
public function. sunucu, $ kullaniciAdi, $ sifre, $ veritabaniAdi)
$this->sunucu $ sunucu; $this->kullaniciAdi $ kullaniciAdi; $this->sifre $ sifre; $this->veritabaniAdi - $ veritabaniAdi;
) public function Baglan()
// MySOL'e baglanti yap mysgl connect ($this->sunucu, $this->kullaniciAdi, $this->sifre) or error());
// Yaratilan veritabanina baglanti yap mysgl select db($this->veritabaniAdi) or die(mysal error());
// Turkce karakter seti ayarlari mysgl guüuery("SET NAMES 'latin5' COLLATE 'latin5 turkish ei"'"); mysgl guery("SET CHARACTER SET latin5"); mysgl guüuery("SET COLLATION CONNECTION — turkish ci'");
"plazma rehber"); $baglanti->Baglan();
Arayüz ve Arkaplan Dosyaları
Bu görmüş olduğumuz iki dosya, bu programın arkaplanında doğrudan ekrana çıktı vermeyecek ya da çıktı verme amacıyla tasarlanmamış dosyalardır. Bu dosyalar programın veritabanını oluşturmak ve programın veritabanına bağlanmak gibi görevler üstlenirler. "veritabani_olustur.php" dosyasının tek başına ve bir kereye mahsus çalıştırılması gerekmektedir. Bu işlem, dosyayı web sunucusunun altında ulaşılabilir bir klasöre koyduktan sonra web tarayıcısından bu dosyanın adresi yazılıp, dosya çağırılarak yapılabileceği gibi, konsol ekranından PHP'nin exesine parametre olarak dosyanın sürücü adresi verilerek de yapılması mümkündür.
"veritabani_baglantisi.php" dosyasını ise bu şekilde kullanmayacağız. Bu dosyayı arayüz ve arkaplanda çalışan PHP dosyaları kullanacaklar. Burada arayüz ve arkaplan dosyaları diye bahsedilen dosyalar işletim sisteminde aynı seviyede çalışan dosyalardır. Buradaki arkaplan kelimesinin kullanımı; ekrana çıktı vermeyen, yalnızca işlem gerçekleştiren dosyalar anlamına gelmektedir.
PHP dosyaları dinamik bir yapıda çalışmazlar. Yani PHP dosyası bir kere yüklendikten sonra arayüzle etkileşimli bir biçimde (bir linke, bir düğmeye tıklamak v.b.) PHP komutları çalıştıramaz, veritabanına sorgu gönderemezler. Bu işlemleri gerçekleştirmek için başka bir PHP dosyası çağırmaları gerekmektedir. Duruma bağlı olarak farklı parametrelerle kendi dosyasını da çağırabilir. Örnek olarak bir kaydı silmek için "sil" linkine tıkladığımızda "sil.php" dosyası çağrılarak kayıt silinebilir. "sil.php" dosyası ekrana hiçbir çıktı vermeyebilir. Yani tek görevi belirlenen kayıt ya da kayıtları silmek olabilir. Dosya işlemini gerçekleştirdikten sonra ekrana bir mesaj yazabileceği gibi, bunu da yapmadan kendini çağıran PHP dosyasına ya da başka bir dosyaya yönlenebilir. Bunun en tipik örneği kayıtların listelendiği dosyanın kayıt silme dosyasını çağırması ve bu dosyanın işlemi gerçekleştirdikten sonra yeniden kayıt listeleme sayfasına dönmesidir.
Bizim yapmak istediğimiz işlemler şunlardır.
1. Kayıtları listelemek. 2. Yeni kayıt girmek. 3. Mevcut kayıtları düzenlemek. 4. Mevcut kayıtları silmek.
Kayıtları listelemek için bir dosyaya ihtiyacımız olacağı kesindir.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 40
* Veritabanındaki veriler ne boyutlara ulaşabilecek? Eğer büyük boyutlara ulaşması söz konusu ise hız arttırımı için ne tür optimizasyonlar gerekecek?
Veritabanı üzerinde ne tür sorgulamalar yapılacak, hangi raporlar üretilecek?
* Kullanıcıların yetki mekanizması nasıl işleyecek?
* Veritabanı güvenliği projemizde ne kadar ön planda olacak? Ne tür tedbirler almamız gerekecek?
Bu maddeler daha da uzatılabilir. Ancak ilk örneğimizde bu maddelerin birçoğunu atlamak için uygulamamızın şifresiz ve tek bir kullanıcı ile kullanılacağını varsayıyoruz. Veritabanındaki bilgiler de telefon rehberinden ibaret olacak ve şu an için bir güvenlik kaygımız yok.
Şimdi ilk soruların yanıtlarını bulalım.
Ortaya çıkarmak istediğimiz uygulama ne tür bilgiler içerecek? Bu bir telefon rehberi uygulaması olacağı için isim, soyad, şirket, telefon kriterleri ilk akla gelen kriterler. Buna bir de numaranın iş mi özel mi olmasıyla ilgili bir tip kriteri ekleyebiliriz. Ayrıca veritabanlarının genel bir kuralı olarak bir kayıda kolayca erişmemizi sağlayacak bir numara (id) vermemiz gerekir. Bu numara her kayıt için özel olmalıdır ki kayıda erişmek istediğimizde "ismi Ahmet, soyadı Kara, telefonu +90 212 222 33 44 olan iş tipindeki kayıt" demekle uğraşmayalım ve kısaca "3 numaralı kayıt" diyebilelim. Bu durumda rehber tablomuzu şu şekilde modelleyebiliriz.
rehber -> id -> isim -> soyad -> şirket -> telefon -> tip
Buradaki "id" alanının otomatik olarak artması için bu alanı birincil anahtar (PRIMARY KEY) olarak tanımlayabiliriz. Bu durumda biz id alanına bir değer vermesek bile o her kayıt için otomatik olarak artacaktır. Örneğin boş bir tabloya ilk kayıt girildiğinde id 1 olacakken, ikinci kayıt için 2, üçüncü kayıt için 3 değerini alacaktır. Bu kayıtlar silinseler bile id alanı son kaldığı değerden 4, 5, 6, ... şeklinde artmaya devam edecektir.
Veritabanını Yaratmak
Artık nasıl bir veritabanı yaratmak istediğimizi biliyoruz. Öncelikle anlaşılması gereken bir nokta var. Tasarlamış olduğumuz tablo veritabanının kendisi değildir. Veritabanı bu tablo ve daha birçok tablo, görünüm (view), yordam (prosedür) v.b. elementleri içeren bir kavramdır. Kısacası bizim öncelikle bir veritabanı yaratmamız ve daha sonra bu veritabanının altına rehber tablomuzu oluşturmamız gerekiyor. Öncelikle veritabanımıza bir isim bulalım. Plazma dergisine ait bir uygulama olacağı için veritabanımızı "plazma_rehber" olarak isimlendirmeyi uygun görüyorum. Tablo ismi içinse "rehber" oldukça uygun. MySQL kullanacağımızı düşünürsek en ideal yöntemlerden biri "phpMyAdmin" isimli MySQL yönetimi için hazırlanmış açık kaynak kodlu projeyi kullanmak olacaktır. Alternatif olarak MySQL'in yeni versiyonlarında gelen gelişmiş MySQL araçlarını da kullanmamız iyi bir alternatif seçenektir. Ancak bu araçlarla yaşayabileceğiniz sorunları göz önüne alarak ve de PHP bilgilerimizi daha da kuvvetlendirmek adına veritabanımızı sadece PHP dilini kullanarak oluşturacağız.
Veritabanını ve tablomuzu oluştururken izlememiz gereken en düzgün adımlar şunlardır.
1. MySQL'e bağlan.
2. Yaratmak istediğimiz veritabanı daha önceden yaratılmışsa yok et.
3. Veritabanını yarat.
4. Bu veritabanını seç. Bu seçimden sonra çalıştıracağımız komutlar artık bu veritabanı üzerinde çalışacaktır.
5. İstediğimiz tabloyu yarat.
Bu 5 adım bize tertemiz bir veritabanı sunacaktır. Unutmayın ki bu işlemi ilk kurulumda ya da baştan kurulumda yapmanız gerekmektedir. Özellikle 2. adım mevcut veritabanları açısından çok tehlikelidir. Bu adımda tüm veritabanı içerisindeki tüm kayıtlar da silinmektedir. Alternatif olarak 2. ve 3. adımlar atlanabilir ve yalnızca yeniden yaratılmak istenilen tablolar silindikten sonra bu tablolar yaratılarak veritabanının geri kalan yapısı korunmuş olur.
Şimdi bu 5 adımı uygulayan PHP programını görelim.
veritabani_olustur.php:
<?php // Tanimlar $mysglHost "localhost"; $mysglKullanicilsmi - "root"; $mysalSifre « $veritabanilsmi - "plazma rehber"; $tablolsmi - "rehber";
// MySOL'e baglanti yap mysgl connect ($mysglHost, $mysglKullaniciIsmi, $mysglSifre) or die(mysal error()); echo "-> mysgl'e baglanti yapildi.<br>";
// Daha onceden yaratilmis ayni isimde // bir veritabani var ise oncekini sil
$sgl - "DROP DATABASE IF EXISTS ".$veritabanilsmi; mysgl guery($sgl) or die(mysal error()); echo "-> ".$veritabaniIsmi.
" veritabani yok edildi.<br>";