Önsöz:
Merhabalar. Bu doküman internet programlamaya PHP ile başlamak
isteyenlere yönelik hazırlanmıştır. Amacı bir PHP web serverın nasıl
kurulduğunu anlatıp basit komutlarla karmaşık olmayan işlemler
yapmaktır. Dikkatle okuyanlar doküman sonunda PHP’nin zaten çeyreği olan
bu hususları kavrayacaklardır.
Giriş:
Genelde çoğu dökümanda o dilin tarihi uzunca anlatılır. Ben bu kadar uzatmadan önemli noktaları özetleyeceğim. Bilmemiz gereken şeylerin başında; PHP dilinin çoğu fonksiyonunun C tabanlı bir diğer dil olan PERL’den alındığıdır. Başlarda Perl’den ödünç alına alınarak geliştirilen ve oldukça popülerleşen PHP daha sonra object oriented (nesneye yönelimli) programlamanın ihtiyaç haline gelmesiyle birlikte PHP4 versiyonu ile tamamen bağımsız bir dil haline geldi. Açık kaynaklı (open source) sistemlerin hızla büyümesi ve gelişmesi ile kullanıcısı artan Linux işletim sistemleri ile birlikte, yine bir açık sistem olan PHP oldukça gelişti ve yaygın olarak kullanılmaya başlandı.
Php pek çok veritabanı ile çalışabilmektedir. Zaten çoğu dil, o an piyasada olan çoğu database sistemine destek verir. Fakat bu ortakların başarılı bir şekilde çalışacağı anlamına gelmemelidir. Zira performans internette en önemli unsurlardan bir tanesidir. Deneyimler de göstermiştir ki, binlerce dolarlık database ürünleri MySql’in Php ile uyumlu çalıştığı gibi çalışmamaktadır. Eh tabi ikisi de açık kaynaklı olan bu yapısal dillerin beraber geliştirilmesi bunda en önemli faktördür. Bu sebeple dökümanımızda veritabanı uygulamalarımızda MySql dilini kullanacağız.
Ekipmanlar ve Altyapı çalışması:
Şu halde artık yavaş yavaş altyapımızı hazırlayabiliriz. İlk önce taleplerimizi anlayacak bir web server’a ihtiyacımız var. Bunu sistemimize bir apache server kurarak halledeceğiz. Yine veritabanı uygulamalarımız için bir mysql server kurmamız gerekecek. Fakat bu tüm işlemleri bizim için tek seferde halleden pek çok yazılım var. Hele ki yeni nesil uygulamalar olayı iyice abartmış durumda. Bu sebeple ben daha çok basit uygulamalar geliştireceğimiz bu projede sizlere yeterli olacak bir yazılım olan PHP Triad’ı öneriyorum. O halde;
İlk işlemimiz; http://switch.dl.sourceforge.net/sourceforge/phptriad/phptriad2-2-1.exe adresinden Php Triad’ı indirmek olacaktır. Program indikten sonra ayarlarıyla oynamadan yükleme işlemini tamamlamanız gerekmekte.
Dikkat ettiyseniz yükleme işleminden sonra C klasörünüz altına bir apache klasörü açılmıştır. İşte burası sizin fabrikanız gibidir. Burada üretiminizi yapacak, buradan Php projelerinizi geliştireceksiniz.
İkinci işlemimiz; MySql serverımızı etkinleştirmek. Bunu yapmadan önce bir şeyi hatırlatmakta fayda görüyorum. PhpTriad sayesinde bilgisayarınız bir nevi servera dönüşmektedir. Yani her an gelecek bir komutu algılamak için devamlı çalışan server ekipmanlarını size sağlar. Bu sebeple birazdan yapacağımız işlem ile bilgisayarınız açıldığında artık bir trafik lambasına sahip olacaksınız. Bu sayede kodlarınız içinde yer alan sql sorgularınız anında algılanıp işleme dökülebilecek. Şimdi C:\apache\mysql\bin klasörüne girip winmysqladmin.exe simgesine tıklayınız. Bu bizim serverımızı aktifleştirecek aparattır. Fakat başından beri söylediğimiz uygulamaları gerçekleştirmek için bir genel kullanıcı adı ve şifresine ihtiyacımız olacaktır ki zaten simgeye tıkladıktan sonra size bir kullanıcı adı ve şifresi girmeniz beklenir. Bunu her zaman hatırlanır ve basit bir şey seçebilirsiniz. Genelde admin – admin seçilir. Tabi siz farklı bir şey de seçebilirsiniz. Bunları da seçtikten sonra trafik lambamız statüs barda tarihin yanında çıkacaktır. Eğer yeşil yanıyorsa problem yoktur. Yavaş yavaş kolları sıvayabiliriz demektir.
Üçüncü işlem; Başlat > Programs > PhpTriad > Apache Console > Start Apache simgesine tıklayarak apachemizi başlatmalıyız. İyi ama niye? Dediğimiz gibi bilgisayarımız artık bir server gibi çalışmak zorunda. Zira PHP diğer yapısal dillerde olduğu gibi bir F5 mantığına sahip değil. Bir web server mantığı ile çalışıp compile işlemini an ve an server sayesinde yapar. Bunu yaparken de tek yaptığı şey PHP satırlarını gördüğünde gerekli işlemleri gerçekleştirip ekrana eğer gerekliyse HTML’e dönüştürülmüş sonuçları vermektir. İşte bu dönüştürme işlemini sağlayan Web Server’ımız şu an aktif hale getirdiğimiz apache’dir. Yani biz Php ile çalışmak istediğimiz her an bu apache.exe’yi çalıştırmak zorundayız. Php ile çalışan serverlarda apache hiç kapatılmaz. Zira her an bir sorgu gelecekmiş gibi davranılır. Başlat metodu uzun gelen arkadaşlar C:\apache\apache.exe’den de aynı işlemi gerçekleştirebilirler.
Tüm bu adımları yaptıysak, apachemiz altta açıksa, mysql tamamsa artık bir kodlama standartı olmuş olan “Merhaba Dünya”yı deme vaktimiz geldi sanırım.
Merhaba Php
İnternet sistemlerinde, kullanıcının projelerini depoladığı, bunları alıcılarına sunduğu bir klasörü vardır. Bunlar windows ve unix serverlara göre değişir. Apache bize htdocs (C:\apache\htdocs) klasörünü sunuyor. Yani bizim ana klasörümüz htdocs. Şimdi gelin bir test yapalım.
İnternet explorer ya da (ki bana göre en kullanışlısı olan) Firefox’u açıp ekrana http://localhost yazalım. Eğer yukarıda belirttiğimiz üç maddeyi yerine getirdiyseniz PhpTriad’ın karşılama mesajı ile karşılaşmış olmalısınız. Bu demektir ki bir problem yok, hizmet etmeye hazırım. O halde kendimize yeni bir proje açalım.
Elbette bu windows uygulamaları geliştirmiş olan yazılımcılar için farklı anlama geliyor. Fakat bir Php geliştiricisi için oldukça basit bir işlem. Yapacağımız şey ana klasörümüz olan htdocs içine girip ilk_proje isimli yeni bir klasör oluşturmak.
Daha sonra http://localhost/ilk_proje yazıp projemizin içine baktığımız, henüz klasörümüz boş olduğundan boş bir ekran ile karşılaşacağız.
İyi ama biz bu Php’yi neyle geliştireceğiz doğru bir soru olurdu şimdi. Php herhangi bir text editör ile geliştirilebilir. Note Pad dahi yeterli olabilmekte. Fakat Note Pad++ gerek başlangıç gerek ileri seviye için oldukça şahane bir editör. Uygulamalarımızda bu editörü kullandığınızı varsayacağım. http://notepad-plus.sourceforge.net downloads bölümünden executable olanlarından en yenisini indirip bu şahane editöre kavuşabilirsiniz. Ben bu işlemi de gerçekleştirdiğinizi varsayıyorum.
Şimdi ekrana ilk mesajımızı verelim.
Öncelikle note pad’imizi açalım. Daha sonra karşımıza çıkan sayfayı boş dahi olsa ilk açtığımız klasör olan ilk_proje klasörü içine olacak şekilde index.php olarak kaydedelim. Böylece klasörümüzün açılış sayfasını belirlemiş olmuş olduk. Bu işlem ile artık dosyamız php taglarını anlayacak yapıya dönüştü, aynı zamanda server bunları anlayacak şekilde davranmış oldu ve ilk_proje klasörünün index sayfası yaratıldı.
Şimdi içeriğini geliştirmeye başlayalım;
Bu kitapçığı okuyanların temel HTML bildiğini varsayıyorum. Bu sebeple çok karıştırmadan meseleyi özetleyeceğim. Bilginiz gibi internet sayfaları ekrana HTML olarak basılıyordu. Bu tarayıcıların sayfanızı anlamasını sağlıyordu. Bu sebeple projemizin başına ve sonuna <html> </html> etiketlerini koyalım. Html yapısal bir dil değildir. Kimileri dil dahi kabul etmezler. Fakat bana göre son yaklaşım da doğru değil. İsminin son iki kısaltmasından da anlaşılacağı gibi o bir Markup Language’dir. Yani bir etiketleme dilidir. Şimdilerde XML gibi gelişmiş ML’ler dolaşmakta. Peki bu ne yapıyor? Basit, etiketleri arasında gördüğü her şeyi kendi yapısı gibi kabul ediyor. Yani <html> tagı arasına giren her şey html gibi kabul ediliyor.
O halde ilk kodumuz şöyle olsun;
<html> <head> <title>İlk Proje</title> </head> <body> <?php
echo
"Merhaba Dünya, ben bir PHP
scriptiyim!";
?> </body></html> |
Yukarıdaki kodu alıp ilk_proje altında oluşturduğumuz index.php dosyasının içine yapıştıralım. Daha sonra http://localhost/ilk_proje adresine tarayıcımız ile bağlanalım. İşte ilk projemiz karşınızda. Karşınıza düz bir metin olarak “Merhaba Dünya, ben bir PHP scriptiyim!” yazısı gelmiş olmalı.
Php ve Veritabanı
Bu kitapçığın amacı kısa ama öz bilgiler ile Php’nin temel arayüzünü size öğretmek, projeleri oluşturup genel araçları kullanmanızı sağlamaktı hatırlarsanız. Bu sebeple Php’nin en çok kullanılan, ona anlam kazandıran yapısı olan veritabanına bağlanma, onunla işlemler yapma işlemlerine geçiyorum. Belki ileride doküman genişletilirse oldukça C’ye benzeyen Php’nin ara özellikleri de anlatılabilir. Ama şimdilik genel C kurallarını bildiğinizi varsayıyorum.
Hatırlayacağınız gibi bir trafik lambamız vardı sistem saatinin yanında bulunan. Ki anlamı mySql server’ımızın problemsiz çalıştığını bize gösteriyordu. Şimdi bu konunun derinlerine ineceğiz.
Phptriad ile birlikte sistemimize toplu bir server aparatlar yüklendiğini söylemiştik. Bunlardan biri de genel database işlemlerini yapmamızı sağlayan phpmyadmin’dir. Bu aparat vasıtasıyla bir veritabanı oluşturabilir, onun üstünde bilinen tüm veritabanı komutlarını gerçekleştirebiliriz. Bu aparata bağlanmak için http://localhost/phpmyadmin yolunu kullanacağız. Bu hiç değişmeyeceğinden sık kullanılanlar sekmenize iliştirmeniz faydalı olacaktır. Zira her veritabanı işleminde bu sistemi kullanacağız.
Phptriad oldukça eski bir proje olduğundan, içinde barındırdığı sistemlerin de modelleri eskidir. Fakat bize şu aşamada son model aparatlar gerekmediğinden bir problem yaşamayacağız. Yukarıda belirttiğim adresten phpmyadmin’e bağlandığımızda karşımıza oldukça boş ve temiz bir yönetim sayfası gelecek. Vakit kaybetmeden ilk veritabanımızı oluşturmak için sağ çerçevede bulunan “Yeni veritabanı oluştur” yazısının altındaki textbox’a oluşturmak istediğimiz veritabanının ismini yazarak “git” butonuna basalım. Ben ilk veritabanımız olduğundan “ilk” ismini tercih ettim ve ilerleyen yerlerde böyle kullanacağım. Bu işlemden sonra sol çerçevede veritabanımız gözükmüş olmalı. Şimdi bunu bir kenarda bırakıp biz işimize dönelim.
Hatırlayacağınız gibi ilk_proje klasöründe ilk projemizi geliştiriyorduk. Şimdi gelin veritabanımızı sistemle bağdaştıralım. Genelde veritabanı dosyaları config klasöründe yer alır. Bu ileride yapılacak geliştirmelerde karışıklığı önlemeyi sağlar. Bu sebeple ilk_proje klasörümüz altında bir config klasörü oluşturalım. Daha sonra da bunun altına config.php isimli bir dosya açalım. Tıpkı index.php dosyasını oluşturduğumuz gibi. Bu dosyada veritabanımıza bağlanmamız için gerekli değişkenler ve fonksiyonlar yer alacaktır. Her veritabanı işleminde bunları ayrı ayrı yapmamak ve oluşabilecek karışıklıkları önlemek için bunu ayrı bir dosyada tutmak her zaman daha iyi olmuştur. Şimdi config.php mizin içeriğini yapılandıralım;
Öncelikle mysql serverımızı oluştururken tanımladığımız kullanıcı adı ve şifremizi hatırlamalıyız. Ben admin – admin olarak kullanacağımızı belirtmiştim, şimdi öyle kullanacağım. Şunu da hatırlatmakta fayda var ki, server olarak kullandığımız makinemize erişirken biz host olarak “localhost” kullanırız. Server kendi içinde böyle çağrılır. Veritabanımız ile bütünleşik web server uygulamalarında her zaman localhost kullanılır.
Öncelikle değişkenlerimizi tanımlamalıyız. Dört değişkenimiz olacak ilki hostumuz ki bunun “localhost” olduğunu belirtmiştim. Diğerleri kullanıcı adı, şifre ve bağlanacağımız veritabanımız. Daha iyi anlayabilmeniz için doğrudan değişkenlerimizi yaratacağım.
|
|
Yukarıda göreceğiniz gibi php de değişken tanımlamak oldukça kolay. Başına $ koyulup değer atanan her şey kolayca değişken oluyor. Php’de atamalar yapılırken değişken değeri vermeye de gerek yok (int, string gibi.) Kendisi doğrudan tanıyor. Örneğin $int = 5 dediğinizde bunu int olarak algılıyor, string = “ilk proje” dediğinizde bunun string olduğunu kavrıyor.
Şimdi veritabanımıza Php’nin bize sunduğu fonksiyonlar vasıtasıyla bağlanalım.
|
|
Yukarıdaki kod biraz karışık gelmiş olabilir size. Fakat bazı temel noktaları kavramak yeterli olacaktır, bunu basitleştirmek de elbette mümkün. Şimdi temel fonksiyonları öncelikle özetleyelim.
Değişkenlerimizi atadık, çünkü fonksiyonlarımız veritabanına bağlanmak için bazı bilgilere ihtiyaç duyuyor. Bunları yukarıda anlattık. İlk fonksiyonumuz;
$link =
mysql_connect($server,
$mysql_user,
$mysql_password);
Burada Php’nin mysql_connect fonksiyonunu kullandık. Bu fonksiyon string değişkenlerle gelen veritabanı bilgilerini kullanıp mysql serverımıza bağlanmamızı sağlıyor. Sırası mysql_connect(serverımız, mysql kullanıcı adımız, şifremiz) olarak kullanılmakta. Bu bir standart. Sonra bu değerleri $link değişkenine atıyoruz. Bunu yapmak zorunda mıyız? Hayır. Fakat hata kontrol yaparken ve veritabanımıza bağlanırken bize oldukça yardımcı olacak.
if (!$link)
{
die('Server Problemi: ' . mysql_error());
}
Burada bahsettiğimiz hata kontrolünü
yapıyoruz. $Link değişkeni eğer düzgün dönmüyorsa zaten ekrana karmaşık
bir hata gelecek, fakat bu metotla hatanın altına hatayı bize anlatan
daha detaylı ve özelleştirilmiş bir hata mesajı basılacak.
mysql_error()
fonksiyonu $link değişkeni içine yukarıda atadığımız mysql_connect
fonksiyonunda oluşan hatayı basacaktır. Dilerseniz bunu hiç yazmadan
doğrudan aşağıdaki fonksiyonu da yazabilirdik.
if (!$link)
{
die('Server’a bağlanamadık.');
}
Buradaki diğer bir husus da die() fonksiyonu. Bu aparatımız oluşabilecek hata da alt satırların ekrana basılmasını engeller. Bunun yerine echo fonksiyonu ile de hatayı basabilirdik. Fakat bu sefer tüm sistemimiz tamamen hatalı görüntülenirdi.
$db_selected
= mysql_select_db($database,
$link);
Mysql_select_db fonksiyonunda ise değişkenleri atarken seçtiğimiz veritabanımızı kullanıp artık işlemimizi sonlandırmak istiyoruz. Hatırlarsanız phpmyadmin’den bir veritabanı yaratmıştık. Şimdi yavaş yavaş üstünde işlem yapıyoruz. $link değişkeni ise yine genel server bilgilerini üzerinde taşımakta. Onu bir connection string olarak tanımlamak yanlış olmayacaktır.
Tüm bu işlemleri yaptıktan sonra http://localhost/ilk_proje/config/config.php adresine tıkladığımızda, şayet bilgilerimizde bir problem yoksa ekrana boş bir sayfa gelir. Test için veritabanı ismini ya da server bilgilerini değiştirip aynı işlemi tekrarladığınızda hata mesajlarımızın nasıl çalıştığını daha iyi göreceksiniz.
Veritabanı ile İşlemler
Veritabanımızı oluşturduk, bağlandık. Fakat henüz veritabanımızın yapısını oluşturmadık, herhangi bir tablo oluşturmadık. Elbette bunu yapmadan önce bir senaryoya ihtiyacımız olacak. Madem buraya kadar geldik, işimize yarayacak bir form dizisi, bir veritabanı yapmak daha mantıklı olacaktır.
Bunu da HTML üstünde yapmak daha doğru. Sonuçta alacağımız bu verileri html’in form değişkenli ile yapmalıyız. Hatırlatma yapmamız gerekirse formlar php, asp gibi internet programlama dillerinin ana aparatı olup kullanıcıdan bilgileri almamızı, veritabanı ile kıyaslama yapıp kimi zaman insert etmemizi sağlayan önemli bir değişkendir.
Şimdi yine index.php dosyamıza dönüp güzel bir ekran tasarlayalım. Benim aklıma DVD’lerimi düzene sokacak bir form geldi. Çok karışık olmadan elimdeki DVD’leri ekleyip listeleyeceğim bir arayüz gerekli. Ben şöyle düşündüm; bir tablomuz olsun, iki çerçevesi olsun. Sol tarafta ekleme işlemini yapalım. Sağda da listeleyelim. Böylece tek ekran üzerinden oldukça basit fakat yeterli bir DVD takip aparatı geliştirelim.
Öncelikle index.php sayfamızı temizleyelim. Sonra html’de table mantığı nasıl işliyordu kısaca bir bakalım.
|
|
Yukarıda <table>
etiketi ile tablomuzu yarattık. Madem başta HTML dersine de girdik,
öyleyse hafiften devam edelim. Table içinde görülen
border="0"
değişkeni tablonun kenarlarının belirgin olmasını engeller. Eğer “1”
olsaydı çerçeveler gözükürdü. Width yani genişliği %100 olması ise
tablonun sayfa ile aynı genişlikte yaratılmasını sağlar. Hatırlatmakta
fayda var ki tablo etiketi arasındaki her şey tablonun içinde belirir.
<tr> etiketi tablo içindeki çerçevelirin satırlarıdır. <td>
ise aynı satırdaki sütunlardır. Bunu ekrana bastığınızda karşınıza
gelecek sonuç ile sanırım mantığı daha iyi anlayacaksınız.
Şimdi taslağını hazırladığımız sayfamız tablolarının içlerini dolduralım.
|
|
Yukarıdaki kodu index.php olarak kaydettiğinizde, sol çerçeve içinde artık minik bir DVD ekleme paneli olduğunu göreceksiniz. Fakat bu nasıl sisteme bir kayıt ekleyecek? Nasıl config dosyamızı görecek? Yavaş yavaş bunları anlatalım.
Öncelikle veritabanına bağlanmamızı sağlayan config dosyamızı hatırlayalım. Bu dosyanın içinde yer alan iki fonksiyon olan mysql_connect ve mysql_db_select fonksiyonları bilgileri verilen veritabanına bağlanmamızı sağlıyorlardı. Dosyayı harici bir yerde tutarak veritabanı işlemi yapacağımız zaman işlerimizi kolaylaştıracağımızı söylemiştik. Şimdi bu kolaylığın nasıl işlediğini görelim.
Tıpkı pek çok dilde olduğu gibi, Php’de de include fonksiyonu vardır. Bu fonksiyonun yaptığı şey, include ettiğiniz dosyanın içeriğini sanki zaten dosyamız içindeymiş gibi yapıştırmasıdır. Böylece index.php dosyamıza config.php dosyamızı include ederek veritabanına ulaşıp gerekli işlemleri yapacağız.
Merhaba Veritabanı
Öncelikle index.php’mizin en tepesine aşağıdaki satırları eklemeliyiz.
|
|
İşte bu komutla yukarıda bahsettiğim hortum işlemi yapılıyor, yani gidip config dosyası içindeki tüm bilgiler index.php içine aktarılıyor.
Şimdi gelelim index.php dosyamızı daha da açıklamaya. Demiştik ki internet programlama dillerinde en önemli elemanlar form elemanlarıdır. Form elemanları neler derseniz; text boxlar, butonlar, combo boxlar… Fakat tümünün ortak özelliği hepsinin bağlı bulunduğu bir form olmasıdır. Zira komut verildiğinde bir işlem gerçekleşecekse muhakkak ortada bir form olması lazım. Form verilen komutu web server’a bildiren elemandır.
Şimdi bizim iki adet text box’ımız ve bunları web servera bildirecek bir butonumuz bulunmakta. Bunları almanın iki metodu vardır. Birisi get, diğeri post. Get metodunu çoğu kişi fark etmiştir. Google’a bir soru sorduğunuzda ekrana bir cevap verdiğinde, browser adresinde pek çok şey belirir. İşte bu Get metodu kullandığını gösterir. Oradan da değişiklikler yaparak sorgulama yapabiliriz. Fakat bu özel uygulamalarda güvenliği engeller.
Biz DVDlerimizin dışarıdan eklenebilir olmasını istemiyorsak ki istemiyoruz, POST metodunu kullanmalıyız. Böylece dışarıdan erişimi kapatmış oluruz.
Dikkat ettiyseniz yukarıda verdiğimiz en son index.php kodlarındaki form metodu şöyleydi;
|
|
Burada post metodu kullanmış ve kendi içinde işlemi yapmasını söylemişiz. Yani ekle butonuna bastığımızda form kendi içinde dönecek ve gerekli parametreleri arayacakmış. Biz bu örneğimizde tek form kullanacağız, bu yüzden id kullanmamıza gerek yoktu. Fakat yine de formlarımızı isimlendirmemizde bir sakınca yok. Biz tek kayıt işlemi yapacağımızdan kayit ismini uygun gördüm.
Yine aynı dosyada bir diğer önemli husus da textboxlarımızın id’leri.
|
|
Label kısmı bizi ilgilendirmiyor. Onlar sadece tasarımı güzelleştirmek için kullandığımız aparatlar.
<input name="id" type="text">
En önemli yapılarımız inputlar. Zira kullanıcıdan bu şekilde bilgi alıyoruz. Bu sebeple input nameleri dikkatle almaya gayret ediyoruz.
Bir farklı inputumuz da submit inputu. Tipi submit olan bu input buton şeklinde olup sayfayı formu tetikleyen elemandır.
<input name="insert_dvd"
type="submit" value="ekle">
Input name’i önemlidir. Zira kendi içinde dönecek olan form insert_dvd isimli bir post arayacaktır php kodları arasında. Bulduğunda da gerekli işlemi yapacaktır. Haklısınız henüz bir Php satırı dahi yazmadık include haricinde. O halde haydi Php kullanalım biraz.
Kodumuzun en tepesine, include yaptığımız kısma çıkıyoruz ve aşağıdaki satırı ekliyoruz:
|
|
Burada daha net şekilde göreceğiniz şekilde henüz inşaa ettiğimiz insert_dvd butonunun tetiklediği form, kendi içinde Post edilip ekrana bir yazı yazıyor. Bu en çok kullanılan metodlardandır. Çokça gelişmiş Php projelerinin de temelinde bu yatmaktadır.
Şimdi Dvd bilgilerimizi alalım ve ekrana basalım, bakalım doğru almış mıyız?
|
|
Burada
$_POST[id]
ile form vasıtası ile oluşturulan Post dizisi içinde birikmiş id
verisini çekiyoruz. Demek ki bizim text box içine girdiğimiz veriler
ekle butonuna basıldıktan sonra bir dizi içine atılıyormuş. Gerektiğinde
de nasıl çekildiğini görmüş olduk.
Şimdi artık bunları oluşturduğumuz veritabanına ekleme zamanı geldi
sanırım. Tabi bundan önce veritabanımızda bir tablo oluşturmamız
gerekecek.
http://localhost/phpmyadmin
adresine girip önceden oluşturduğumuz “ilk” veritabanına tıklıyoruz.
Buradan tablo oluşturabileceğiniz gibi, eğer diyorsanız ki benim SQL
bilgim iyidir ben ayrı bir yerde hazırlar sadece SQL satırlarını buraya
girerim, o da olur. Fakat ben phpmyadmin’i biraz daha öğrenmenizi
istiyorum.
Sql ekleme metin sütunu altında
Veritabanı üzerinde yeni bir tablo
oluştur ilk : isimli alanı bulup oraya bilgilerimizi girip ilk tablomuzu oluşturmamız
gerekmekte.
Hangi projeye girdiysem veritabanında tablo oluştururken kulanılan ortak bir isimlendirme standartı göremedim. Yaptığım araştırmalarda veritabanı tablolarının adının TBL ile başlayabileceği, projenin prefixi kulanılabileceği (dvd_user gibi) bahsedilse de bunların karışıklıktan öte bir işe yaramadığını, bu sebeple aynı veritabanı içinde farklı projeler yok ise eğer, tablo isimlerinin yalın ve hızlı anlaşılır bir yapıya sahip olması gerektiği üzerinde kanıya vardım. Bu sebeple ilk tablomuzun ismini dvd kabul ettim. Siz dilediğiniz şekilde isimlendirebilirsiniz.
Şimdilik iki adet alanımız bulunma tablomuzda. Bu sepeble isim kısmına dvd yazıp, alanlar kısmına 2 yazıp git diyelim. Karşımıza iki adet seçim alanı gelecek. Buradan tablomuz alanlarını detaylı şekilde yapılandırıyoruz. İlk alan unique ve tablonun primary key’i olan ID alanı olacak. Değerini INT(10) olarak belirledik. Elbette gelişmiş projelerde ID kısmını kullanıcı görmemeli. Otomatik sayı artımı ile rakamlar veritabanının emrine bırakılmalı. Yoksa karışıklık kaçınılmaz olur. Alt kısma da dvd_name diyip varchar(50) seçip tablomuzu oluşturuyoruz.
Sql’i şöyle oldu:
|
CREATE TABLE `dvd` ( |
Eğer anlatımım karışık geldiyse yukarıdaki kodu SQL kutusuna yapıştır git derseniz dvd isimli tablomuz oluşur.
Veritabanına bağlandık, tablomuzu oluşturduk, form ve text boxlarımız hazır. Evet artık sıra insert işleminde.
Yine kodlama üzerinde anlatalım:
|
|
Artık sona yaklaşıyoruz. Yukarıda siz de yaptığımız birkaç değişikliği fark etmişsinizdir. ID VE dvd_name değişiklikleri ile text box’ımızdan gelen değerlerimizi aldık.
Injection!
Şimdi burada bir hatırlatma yapmakta fayda var. Burada önemsiz bir insert işlemi yapılıyor. Fakat bir kullanıcı login ekranı da olabilirdi. Injection işlemleri veritabanına sorgu yapılan her yerden denenebilir. En popüleri kullanıcı adı ve şifre alanlarından yapılır. Örneğin kötü niyetli bir kişi kullanıcı adı ve şifre kısmına
'OR' '=' yazıp bir açığınızdan faydalanabilir. Örneğin SQL kontrol cümleniz aşağıdaki gibi ise, kişi login olmuş kabul edilir.
|
SELECT * FROM Members WHERE username = '' OR ''='' AND Password = '' OR ''='' |
Bunu önlemenin pek çok
yolu vardır. Fakat en garantisi SQL sorgusu içinde yer alacak
değişkenleri
mysql_real_escape_string( )
kullanmaktır. Bu fonksiyon gereksiz ve tehlikeli karakterleri temizleyip
size sunar.
$ID = $_POST[id];
ile
atadığımız ID nin tehlike yaratabileceğini düşünseydik
mysql_real_escape_string($ID
) diyip problemi
çözmüş olurduk.
Şimdi kodumuza devam edelim. En son id ve dvd_name’i formlarımız vasıtasıyla almıştık.
|
|
Satırı ile veritabanımıza eklemeye hazır hale getirdik.
mysql_query()
fonksiyonu ile de kolayca sorgumuzu çalıştırıp veritabanımıza ekledik.
Basit bir if kontrolü ile de bunu ekrana yazdırdık.
Yavaş yavaş sona yaklaşıyoruz. Sıra geldi bunu listelemeye. index.php dosyamız içinde ikinci <td> etiketi içerisinde listeleme ekranı boş bir şekilde bizi bekliyor. Hatırlatmakta fayda var, fieldset ve legend isminde iki etiket kullandık. Dikkatli okuyucularımız bunlar ne diye düşünmüş olabilirler. Fieldset html’de gruplayıcı anlamına gelir. Legend ise grubun ismidir.
Veritabanından verileri okumak
Dvd tablomuzda listeleme yapacağımız iki şey var. Birisi ID diğeri dvd_name. Fakat burada yüzlerce farklı alan da olabilirdi. Aynı zamanda listelemeler her zaman aynı şekilde ve metodla yapılmaz. Bu sebeple Php bize gelişmiş mySql fonksiyonları sunmakta. Pek çok projede kullanabileceğiz mysql_fetch_array methodunu kullanarak listeleme yapacağız.
|
|
Yukarıda verilen listeleme alanını anlatalım. Görüleceği üzere $sqllist içine sorgumuzu atıyor ve daha önce de kullandığımız mysql_query fonksiyonu ile bunu çalıştırıyor ve sonucunu da $execute değişkenine atıyoruz. Bunun sebebi mysql_fetch_array isimli array list vasıtasıyla $list isimli yarattığımız array’e kayıtlarımızı aktararak listelememizi gerçekleştirmek.
|
|
Bir üstteki while döngüsü en önemli ayrıntı.
$list =@
mysql_fetch_array($execute))kısmında
=@
kullanılmasının sebebi array içinde bulunabilecek karakterlerin arrray
düzenini bozabilme ihtimalidir. Belki şu an elimizde bulunan kayıtlar
bir düzensizlik yaratmazlar. Fakat varchar(255) değerli uzun bir texte
sahip metinler, hele hele htm etiketleri de içeriyorlarsa array listin
bozulmasına, böylece kullanıcıalrın fety_array hataları ile dolu bir
ekran görmelerine neden olurdur. Dizilerde taşma konusu başka bir
makalemiz olabilir. Sonuçta =@ kontrolü ile array yapısı kontrol
altına alınır. Ayrıca sorgumuzun gücüne göre while döngümüz dvd tablosu
içindeki değerleri listeleyecektir. Biz sql’de bir LIMIT fonksiyonu
kullanmadığımız için tüm veriler sağ listeleme bölümünde görülecektir.
echo "$list[ID] - $list[dvd_name]<br>";
Kısmı ise en dikkat çekici bölüm. Burada döngü sql’e göre dönerken, array içine dvd tablosunun alanlarını atar. Dikkat edecek olursanız $list[ID] ve $list[dvd_name] tablodaki iki alanımız adı ile listeleniyor, listelenmek zorunda.
Şimdi en son yaptğımız ddeğişiklikleri de index.php sayfasının içişne atarak http://localhost/ilk_proje adresinden gerekli testleri yapabilirsiniz. Veritabanınıza girip birkaç field daha ekledikten sonra, index.php içine girip birkaç text box ekleyip alanları genişletmeyi deneyebilirsiniz.
Böylece bu makalenin sonunda şunu rahatça ifade edebiliriz ki;
- Browser’ımız artık localhost üzerinde çalışan bir .php dosyasını gördüğünde onu tanıyor, komutları cevaplıyor.
- Bir sql geldiğinde mysql server ile uyumlu halde çalışıyor.
Sizler anlatılanları kavradıysanız;
- Rahatça html formları vasıtasıyla veritabanı işlemleri gerçekleştirebiliyor ve verileri kontrol edebiliyor olmanız gerekli.
Elbette daha niceleri yapılabilirdi fakat şimdilik en hızlı biçimde php ve mysql kullanıp ufak boyutlu projeler geliştirebilirsiniz. Hepsi sizin elinizde.
Unutmayın, hayal edebildiğiniz sürece var olabilirsiniz.
Bir sonraki makalede görüşmek üzere.
Abdullah Önden
Bilgisayarim.org
Abdullahonden.com
Not: Proje dökümanını http://www.bilgisayarim.org/ders/ilk_proje.rar adresinden indirebilirsiniz.