Php ve MySQL’le

Web Yazılımı Geliştirme

Php'yi kullanarak web uygulaması geliştirin,

performansın ve yaygın desteğin keyfini sürün.

Kayra Otaner

21/8/2000

Neden Php?

Web'in gelişen yüzüne ve artan kullanıcı taleplerine artık 3 numara küçük gelen statik HTML sayfaları yerine veritabanından çalışan sitelere bırakıyor. Bu alanda devasa içerikler içeren portallarda kullanılmak üzere gelişmiş web uygulama geliştirme dilleri kullanılıyor. Genellikle web sitelerinde kullanıcılardan gelen bilgi miktarı, web sunucunun kullanıcılara gönderdiğinden daha az olduğundan veritabanları da bu yönde optimize edilmelidir. Çok fazla bilgi girişi yapılmayan ve genellikle veri okunan durumlardaki veritabanı ayarlaması farklıdır. Bu yüzden web için yeniden yazılan veritabanları bu konuda uyum sağlamakta biraz geri kalmış durumdalar. Genel amacı web kullanımı olan veritabanlarıyla genel amacı muhasebe, müşteri bilgileri ya da banka işlemleri olan veritabanlarının kullanımı arasında fark vardır.

Bu diller genellikle veritabanı üreticileri tarafından geliştirildiklerinden dolayı sadece o üreticinin veritabanıyla sorunsuz çalışıyorlar. Microsoft'un ürettiği MSSQL ve ASP, Sybase ve Powerdynamo, Oracle ve PowerBuilder karşısında birbirinden bağımsız geliştirilen Php ve MySQL bu büyük yazılım üreticilerine karşı şaşırtıcı bir üstünlük sağlıyor. Php'nin ve MySQL'in hem Unix hem de NT platformunda çalışabiliyor ve Php'nin Sybase'den MSSQL'e, Oracle'den mSQL'e kadar tüm veritabanlarıyla sorunsuz kullanılabiliyor olması bu konudaki yarışta rakiplerini zaten sollamasını sağlıyor. Performansını da gözler önüne serince Php ve MySQL ikilisi web için kullanılabilecek veritabanı ve dil tercihinde tek alternatif oluyor.

Microsoft'un Windows masaüstü ve sunucu işletim sistemlerindeki en büyük rakibi olan Linux gibi bir üniversite projesi olarak başlayan Php (Personal Home Page Tool) hızla dünyada kabul görüyor. İnternet'in yaygınlaşmasıyla beraber web sitelerin önem kazanması, web siteleri arasında daha çok ziyaret edilen olabilmek için gereken devasa içerikler, çok hızlı güncellenmesi gereken haberler ve sürekli artan bilgi miktarları beraberinde sitelerde barındırılan bilginin arşivlenebiliyor olma ihtiyacı, interaktif site özellikleri web sitelerini statik HTML dosyalar yerine veritabanı üzerinden çalışabilen siteler olma yoluna itti. Web sunucularında web sayfası oluştururken veritabanlarından bilginin okunarak browserların anlayacağı dil olan HTML sayfasına dönüştürülmesi, kullanıcılardan web sitesi aracılığıyla alınan e-posta adresi, anket katılımı, ziyaretçi notları gibi bilgilerin veritabanına işleniyor olması için web sunucuyla veritabanı arasına bir dil gerekiyordu.

Php; diğer veritabanıyla konuşan dillerde olmayan tüm veritabanlarıyla çalışma, hem Unix hem de Windows işletim sistemlerinde çalışabilme ve üstün performansıyla üstünlük sağlıyor. Kolay geliştirilebilen bir dil olması sayesinde her geçen gün Php geliştiricileri sayısında da artış oluyor. Dünyada en çok tercih edilen web sunucusu Apache'yle tümleşik çalışabilme özelliği ve yakın zamanda açık kaynak olan MySQL veritabanıyla da bütünleşik olabilmesiyle web yazılım geliştiricileri için sorunsuz ve performanslı bir çözüm paketi oluşturuyor. Tümü İnternet'ten indirilebilen bu uygulamaların hem Windows hem Linux versiyonları her türden kullanıcıyı tatmin edebiliyor.

Php'nin yaygın olarak kullanılan Php 3 versiyonuna karşın geçtiğimiz aylarda çıkan Php4 versiyonu da bulunuyor. Php kullanan web sitelerinde genellikle dosya uzantısı .php3'tür. Php4'le birlikte bu uzantı .phtml ya da .php'ye dönüşmüş durumda. Her iki durumda Php dosyaları da standart Php komutlarını barındıran metin dosyalarından oluşuyorlar.

Dünyadaki sayılı ziyaretçi alan sitelerden olan Amazon'da sitesinin bazı bölümlerini yavaş yavaş Php'ye geçiriyor. (http://livebid.amazon.com/). Yahoo da sitesinin geliştirilmesinde MySQL'i tercih ediyor (http://www.mysql.com/information/users.html). Silicon Graphics'de web sitesinde veritabanı sunucu olarak MySQL kullanıyor.

 

Performans

Php ve Zend

Php4+

Zend Optimizer

Pentium III 650Mhz, 512MB Ram:

2.5 sn.

Php4

Pentium III 650Mhz, 512MB Ram:

3.2 sn.

Php3

Çift Pentium III 500Mhz, 512MB Ram:

7.6 sn.

Tüm bu olumlu gelişmeler ve artan talep tıpkı Linux'ta olduğu gibi Php geliştiricilerini de teşvik ediyor. Php'yi sürekli olarak dünyanın dört bir yanından İnternet üzerinden katılarak geliştiren Php geliştiricileri Zend adı altında Java'ya alternatif bir oluşumun da peşindeler. İki ay kadar önce Php'nin 4.0 versiyonu piyasaya sürüldü. Php4'ün hızına hız katan Zend adı verilen kod optimize ediciyle Php4, Zends'siz Php4'e bazı işlemlerde %40'la %100 arasında üstünlük sağlıyor. Php'nin eski sürümü olan Php3'le yapılan aynı kıyaslamada da Php4, Php3'e %100'den de fazla fark atarak Php'nin geldiği son noktayı ortaya koyuyor.

Yeni Silahlar

Php geliştiricilerinin durmak bilmeyen çabaları 2001'e girmeden iki yeni Php hızlandırıcı Zend ürününü piyasaya sürecek. Zend Cache adındaki web sunucu önbellekleme yazılımıyla diskde her istekte yapılacak olan yüzlerce dosya okuma işlemini engelleyerek web sunuculara ve yüksek ziyaretçi sayısına ulaşan portallara performans sağlanıyor. Ziyaretçilere daha hızlı sayfa sunabilmek ve sürekli değişmeyen sayfaları da Php kodu üzerinde çalıştırabilmek için Zend Cache karşı konulmaz bir güç. Php'nin web sunucu tarafından yorumlanmış bir hali hafızada depolanarak sürekli olarak tekrarlanan işlemlerde bu hazırlanmış kod kullanılıyor. Sunucudaki Php kodu yenilendiğinde Zend Cache bunu farkederek kodu tekrar hafızaya alıp kullanıcılara en son güncellenmiş haliyle Php'yi sunmaya devam ediyor.

 

Php'nin ikinci silahı Zend Compiler olacak. Php kodlarının derlenerek ayrı birer program gibi dağıtılmasına olanak sağlayacak. Bu sayede kaynak kodları görüntülenmemesi gereken özel yazılımlar daha rahat geliştirilip dağıtılabilecek. Zend Compiler'le birlikte daha profesyonel yazılım geliştiricileri de Php'ye yönelerek kendi yazılımlarını Php'de geliştirerek satabilecekler.

İnternet'te oldukça yaygın olarak kullanılan Microsoft'un NT+MSSQL+ASP üçlüsüne karşı ücretsiz olarak kullanılabilen Linux+MySQL+Php üçlüsünün performansı konusunda bir sürü denemeler ve kıyaslamalar yapılıyor. Aynı donanımda çalıştırılan iki rakip sistemde açık kaynak olarak geliştirilen ve ücretsiz sunulan üçlü açık ara üstünlük sağlıyor. Veritabanında 3 alanlı bir tabloya 5000 satır yerleştirmek için kullanılan ASP ve Php kodları aynı veriyi MSSQL 7.0'a 28 saniyede MySQL'e 3 saniyede yerleştirebiliyor. Aynı deney 500 satırın yerleştirilmesiyle yapıldığında da MySQL kronometreyle ölçülemeyecek bir sürede yaparken MSSQL'de işlem 3 saniyeye yakın sürüyor.

Son gelişmelerle Php artık ASP ve Coldfusion’a rakip olmaktan çıkarak Java ve C’ye rakip oluyor. Php’nin derlenebilmesiyle veri tabanı üzerinden çalışan web yazılımı geliştirmekte Java ve Php arasında fark kalmayacak. Java’nın client-server mimarisinde kullanılan applet özelliği ise bu gelişmelerde kulvar dışı kalacak.

Linux ve NT Veri Tabanlı Web Sunucu Sistemleri

Linux Sistem Özellikleri

NT Sistem Özellikleri

512 Mb Ram , Çift 550 MHz x86 işlemci

512 Mb Ram , Çift 550 MHz Xeon işlemci

RedHat 6.1

WinNT 4, sp6

Apache 1.3.9

IIS4

OpenSSL

PHPRC1 (module)

VBScript

MySQL 3.22.x

SQLServer 7 

Sonuç: 3 sn.

Sonuç: 28 sn.

Php Nasıl Çalışıyor?

Php dosyaları temelde web sunucuda yer alan metin dosyalarından farklı birşey değildir. Web sunucu ayarına bağlı olarak .php3, .phtml ya da .php uzantısıyla tanımlanırlar. Bu metin dosyasında Php komutları ve HTML yer alır. Web sunucusu Php olarak tanımlanmış örneğin .php3 uzantılı bir dosya çağrıldığı zaman bu dosyayı önce Php derleyicisine gönderir. Php derleyicisi aslında metin dosyası olan .php3 dosyasındaki komutları çalıştırarak HTML'e dönüştürür. Ortaya çıkan HTML kodu da web sunucu aracılığıyla isteği gönderen kullanıcıya iletilerek işlem tamamlanmış olur.

Php derleyicisi kendisine ulaşan metin dosyasında "<?" ya da "<?php" kelimelerine rastlayana kadar olan tüm HTML kodu web sunucuya aynen gönderir. Php komutlarının başladığını belirten "<?" ya da "<?php"'den sonra "?>"'ya kadar olan bölümü işleterek çıkan sonuçları, ki bunlar HTML komutları yerine düz metin de olabilir, da web sunucuya iletir. İstenirse Php dosyası ASP'de kullanılan <% ve %> notasyonunu kullanarak da yazılabilir. Bir Php dosyası sadece HTML'den, hem HTML hem Php komutlarından ya da sadece Php komutlarından oluşabilir. Php'nin esnekliği aslında hem HTML hem de Php komutlarının aynı dosyada kullanılabiliyor olmasından da gelir.

Php’nin Temelleri

Php temel olarak C dilinin notasyonu üzerine inşa edilmiştir. Tüm Php komutları ";" (noktalı virgül) işaretiyle sonlandırılmalıdır. Php dosyalarına açıklayıcı bilgiler eklemek için tek satırlık açıklamalarda //, birden çok satırı kapsayacak açıklamalarda /* ve */ işaretleri kullanılır. Ekrana basılacak olan metin ya da HTML kodlarında C'de olduğu gibi \n belirteci yeni bir satıra geçmek için, \t belirteci tab boşluğu vermek için kullanılır. Php'de esnek kodlama yapılabilir. Metin değişkenler ister tek ister çift tırnakla kullanılabilir. Php'de değişken ve komutlar küçük büyük harf duyarlıdır. Değişken tanımlarken metin ya da sayı olmasının çok fazla önemi yoktur. Metin olarak tanımlanan ama sayı içeren bir değişkende daha sonra matematiksel işlem yapabilmek mümkündür. Tüm diğer dillerde olduğu gibi Php'de de sayı, uzun sayı, metin, array ve obje tipi değişken tanımları yapılabilir. Bu değişkenlerin tiplerinin önceden tanımlanarak Php'ye bildirilmesi gerekmemekte.

Php'de yaygın olarak ekrana bilgi basmak için echo komutu kullanılır. Aynı işlem için print ya da printf de kulanılabilir. Ekrana basılacak bilgi metni içinde tekli ya da çiftli tırnak olması durumlarında öncesinde \ işareti kullanılmalıdır. Aksi takdirde echo komutunun metin ayıracı olan çift ya da tekli tırnaklı basılacak bilgideki tırnaklar karışabilir.

 

 

<?

echo "Deneme seee seee bir kiii<br>\n"; // Tek satır açıklamalarında çift slaş yeterlidir.

/* Çoklu satır açıklamalarında

tek slaş ve yıldız işareti kullanılır*/

echo "\t<br>Satır sonlarında noktalı virgül olmalıdır. Özel işaretlerde \ kullanılmalıdır.";

echo ("1");

echo "2";

echo '3';

// Yukardaki üç satır da aynı işlevi görüyorlar

?>

 

 

 

Değişkenler ve Kıyaslama İşlemleri

Php'de kullanılacak olan değişkenlerin harflerle başlaması ve içinde sayı ve harfin dışında karakter barındırmaması gerekiyor. Her değişkenin $ işaretiyle başlaması şart. Değişkenlerin sayı içermesi durumunda değişkene direkt olarak sayı değeri atanırken metin atanacağı durumunda çift ya da tek tırnakla bilgilerin ayrılması gerekiyor. Değişkenlerin birbirleriyle olan etkileşimleri de değişkenin türüne göre değişir. Bir metin değişkeniyle diğer bir metin değişkenini birleştirmek için . işareti kullanılır. Sayısal içerik barındıran değişkenler için de işlemler tamamen matematiksel işaretlerle yapılır. Aşağıdaki örnekte değişken 4 içinde sayısal değişken barındırmasına rağmen artık bir metin değişkenidir. Değişkenlere önceden değer istendiğinde = işareti kullanılır.

 

$degisken1 = "Her balık ";

$degisken2 = 31415;

$degisken3 = " turşu yemez";

$degisken4 = $degisken1.$degisken2.$degisken3;

 

Değişkenler kıyaslanmak istendiğinde kullanılan işaretler de == ve <>'dir. Eğer bir değişkenin diğer bir değişkenin içeriğine eşit olduğunun denetlenmesi gerekiyorsa ==, eğer farklı olduğunun denetlenmesi gerekiyorsa != kullanılır. Ünlem işareti her zaman doğru değeri yanlış, yanlış değeri doğruya çevirir. Eğer değişkenler birbirine eşitse 1 yani doğru, değilse 0 yani yanlış sonucu oluşur. Aşağıdaki ilk satırda değişken 1 ve 2 birbirlerine eşit olmadıklarından 0 yani yanlış sonucu verirken ikinci satır 1 yani doğru sonucunu verir.

 

echo $degisken1 == $degisken2

echo $degisken1 != $degisken2

Dizi Değişkenler

Php ve diğer yazılım dillerinde dizi değişkenler olan array'ler oldukça önemlidir. Dizi değişkenlere en güzel örnek kişi ve yaş değişkeni barındıran dizi değişken verilebilir. a kişisinin yaşı 22, b kişisinin yaşı 18, c kişisinin yaşı 24 olsun. Bu durumda bu kişilerin isimlerini ve yaşlarını barındıran dizi değişken;

 

$yaslar["a"] = 22;

$yaslar["b"] = 18;

$yaslar["c"] = 24;

 

şeklinde tanımlanabilir. Dizi değişkenler tekli ve çoklu dizili olarak tanımlanabilirler. Bir dizi değişkene sonradan yeni bir değer eklenerek dizideki değişkenlerin sayısı arttırılabilir. Dizi değişken array'lerdeki değişken sayısı count komutuyla öğrenilebilir. Array'e aktarılan değişkenler

Mantıksal Denetleme ve Döngüler

Her bilgisayar dilindeki en önemli komutlar mantıksal döngü komutlarıdır. Bu komutlar eğer, iken, değilse ve hepsi için kelimelerinin bilgisayardaki karşılıklarıdır. "Bir işlem sonucu doğru gelirse" diye başlayan mantıksal döngüler bir sonuç için belli sayıda tekrarlanarak bilgisayar programlarını oluştururlar. En çok kullanılan mantıksal kıyaslama türü if türüdür. Bu komutla belli bir durumun doğruluğu denetlenir ve istenen durumda farklı bir komut çağrılır. Eğer mantıksal denetlemeden yanlış sonucu dönerse else komutuyla yanlış duruma göre istenen komut çağrılır. Çağrılan komut bir ya da birden çok olabilir. Komut dizilerini birbirinden ayırmak için matematik parantezi kullanılır.

 

if ($degisken1 == $degisken2)

{

echo ("Değişkenler birbirlerine eşitler.");

}

else

{

echo ("Değişkenler birbirlerine eşit değiller.");

}

 

Mantıksal döngüler de belli bir sonuç için sürekli tekrarlanan işlemlerde kullanılırlar. En yaygın olarak tercih edilenleri while-do ve for döngüleridir. Bu döngüler genelde aynı işlemin belli bir sayıda tekrar edilmesi durumunda oldukça kullanışlıdırlar. Birden 10'a kadar sayıların ekrana basılması için gereken döngüde bir sayaç kullanılarak sayacın değeri her ekrana basma işlemi sonucunda bir arttırılır. Sayaç değeri while komutuyla kontrol edilerek eğer 10 sayısından küçük ve eşitse döngüye tekrar girilir. Sayaç 10'dan büyük bir değer aldığında döngüden çıkılarak işlem bitirilir.

 

$s = 1;

while ($s <= 10)

{

print $s++;

}

 

For komutuyla yapılan mantıksal döngüler de while-do döngülerine oldukça benzerler. Diğer döngü ve denetleme komutlarında olduğu gibi belli bir koşul gerçekleştikçe işlemin yapılmasına devam eder. Aşağıdaki for döngüsü de 1'den 10'a kadar olan sayıları ekrana basıyor. For döngüsünün noktalı virgüle kadar olan ilk kısmı döngü öncesinde çağırılan komut, ikinci kısım döngünün devam etme şartı üçüncü kısım da döngü sonunda çağırılması gereken komut olarak kullanılır. For döngüsünden sonra gelen matematiksel parantezler içinde kalan kısımda döngü boyunca çalıştırılan komutlar bulunur.

 

for ($s = 1; $s <= 10; $s++)

{

print $s;

}

 

Döngünün bitirilmesi gereken durumlarda break komutu kullanılır. Bazı durumlarda döngünün acilen sona erdirilmesi gerekir. Örneğin 1'den 100'e kadar ekrana sayıların basılacağı durumda eğer sayının hem 2'ye hem 3'e hem de 11'e bölünmesi durumunda döngüden çıkılması isteniyorsa break komutu kullanılmalıdır. Bunun için sayacın o anda aldığı sayı değerinin 2'ye 3'e ve 11'e bölününce kalanın 0 olması gerekmektedir. Eğer bu üç bölümden de sonuç 0 gelirse bunların tümünün aynı anda 0 olduğu durumda doğru olan mantıksal ifade (!($s % 2) and !($s%3) and !($s%11)) olacaktır. Yüzde işareti Php'de matematiksel mod işlemi için kullanılır.

 

for ($s = 1; $s <= 100; $s++)

{

print $s;

if (!($s % 2) and !($s%3) and !($s%11))

{

break;

}

}

Fonksiyonlar

Kullanıcının belli işlemleri sık yapmaya başladığı durumlarda bunların fonksiyonlarda toplanarak gruplanması faydalı olabilir. Örneğin hep bazı sayıların belli koşulları sağlaması durumunda 10 eksiltilmesi gerekiyorsa bir fonksiyon tanımlanarak bu işlem otomatize edilebilir. Aşağıdaki fonksiyon sayının 2, 3 ve 11'e bölünebildiği durumlarda sayıdan 10 eksitiyor. Eğer sayı bu rakamlara bölünemiyorsa fonksiyona giren sayı aynen geri döndürülüyor. Fonksiyonun çağrılması için isminin ve gönderilecek olan değişkenin yazılması yeterli. Fonksiyonu tanımlarken kullanılan değişken isminin fonksiyonun içinde de aynen yer alması önemli. Fonksiyonun sonucunda üretilecek olan değişkenin return kullanılarak geriye gönderilmesi gerekiyor.n

 

function eksiltici ($sayi)

{

if (!($sayi % 2) and !($sayi%3) and !($sayi%11))

{

$sayi = $sayi - 10;

}

echo $sayi;

}

eksiltici(15);

Fonksiyon Kütüphaneleri

Php kullanılarak site geliştirilirken belli fonksiyonlar sitede her Php dosyasında kullanılıyor olabilir. Her Php dosyasında tekrar tekrar o fonksiyonun tanımlanması yerine bir ortak dosyada bu fonksiyonun tutularak diğer Php dosyaları tarafından çağrılıyor olması tercih edilebilir. Bu sayede bir fonksiyonda yapılacak değişiklik için tüm Php dosyaları açılarak gereken düzeltme yapılması durumu ortadan kaldırılır. Php'de ortak dosya kullanımı için include ya da require komutu kullanılır. Bu komutlar sayesinde Php dosyalarına dışarıdan fonksiyon kütüphanesi dosyaları ya da başka ortak bilgiler içeren dosyalar katabilmek mümkün olur. Örneğin bir sitede kullanılan 15 farklı Php dosyasının ilk satırından

 

include("potortakkoy.php3");

 

komutu çağırılıyor olsun. Bu sayede tüm Php'lerde kullanılan ortak fonksiyonlar potortakkoy.php3 dosyasında değişiklik yapılarak düzeltilmiş olur.

MySQL ve Php

Php'nin yaygınlaşmasındaki kuşkusuz en büyük yardımcılarından biri de MySQL oldu. Windows ve Unix versiyonları ücretsiz olarak dağıtılan MySQL'in Php'yle beraber gelişmesi sayesinde hem Php hem de MySQL karlı çıktılar. Gelişmiş veritabanı sistemlerinde olan ilişkisel veri tabanı mantığıyla geliştirilen MySQL, çoklu bağlantı desteği ve performansıyla uzunca süreden beri İnternet'te adını duyurmayı başarmıştı. Kısa bir süre önce GPL lisansıyla kaynak kodları açıklanan MySQL'in Php'yle stratejik işbirliği sayesinde Php 4 ve MySQL birlikte diğer veritabanı ve dil ikililerien karşı konulamaz performans üstünlüğü sağlıyorlar.

Php'nin, MySQL ve Apache'yle birlikte derlenerek kullanıldığı sistemlerde veritabanı ve web sunucu arasında kurulan kalıcı bağlantılar (persistent connection) sayesinde web sunucu ve veritabanı tek bir yazılımmış gibi çalışabiliyorlar. Bu sayede çalışan iki ayrı yazılıma göre %400'lere varan performans üstünlüğü de sağlanmış oluyor. Kısa bir süre önce İnternet'te dünyanın en çok kullandığı site olan Yahoo'da bazı bölümlerinde MySQL kullanmaya başladı.

MySQL Komutları

Php yaygın kullanılan her türlü veritabanı kullanıcısına veritabanına özel Php komutlarıyla kullanım imkanı sağlar. Php kullanım klavuzunda incelendiğinde veritabanları arasında en çok Php komutunun MySQL daha sonra Oracle için olduğu görülecektir. MySQL komutlarından birçoğu özel durumlarda gerekli olurken 10 kadar komut her türlü MySQL işleminde daha yaygın olarak kullanılırlar.

Bir Php dosyasında MySQL veritabanı kullanılmak istendiğinde mutlaka veritabanı sunucusuna bağlanılmalı ve bir veritabanı seçilmelidir. Genellikle bir Php dosyasında bir veritabanına bağlantı yapılacağı için veritabanı sunucusuna bağlandıktan sonra bir veritabanı ismi verilerek tüm diğer MySQL işlemleri o veritabanı sunucusu ve o veritabanı üzerinde yapılabilir. Eğer istenirse birden çok veritabanı sunucusundaki birden çok veritabanına da bağlantı yapılabilir.

Aşağıdaki komutlarda mysql_connect() komutuyla veritabanı sunucusuna ip, kullanıcı adı ve şifre verilerek bağlantı sağlanır. Daha sonraki mysql_select_db() komutuyla da dosyadaki tüm MySQL işlemlerinde kullanılacak olan veritabanı tercihi belirtilmiş olur.

 

mysql_connect("localhost","root","sifre") or die("Alete ulaşamadım...");

mysql_select_db("potdb") or die("Veritabanına ulaşamadım...");

 

Php dosyasında tüm veritabanı işlemlerinden önce veritabanı sunucusuyla bağlantı kurulmalıdır. Php'de MySQL'e sorgu göndermek için mysql_query() komutu kullanılır. Parantezler içindeki alana SQL dilinde MySQL'in anlayacağı veritabanı sorgulama komutları girilmelidir. MySQL'de oluşabilecek hataları kullanıcının Php içinde farkedebilmesi için Php'nin özel komutları vardır. Bu komutlar sayesinde veritabanı sorgulamasında oluşan sonuçlar hata numarasıyla birlikte farkedilebilir. Hata gösterge komutları kullanılmadan Php, MySQL'e dair hiçbir hata mesajı vermeden işleme devam eder. MySQL'in sorgulanmasından geriye dönen sonuç tablosundaki veriler de mysql_result() komutuyla alınır.

 

$isimler = mysql_query(select * from ogrenciler");

if (mysql_error()) {echo ("MySQL hatası oluştu. Hata no :"); echo mysql_error();}

 

$ad = mysql_result($isimler,$i,"ad");

$soyad = mysql_result($isimler,$i,"soyad");

 

Veritabanından dönen tablodaki ilk satırın satır numarası 0'dır. Her sonucun bir satır olduğu bu tabloda tablo alanının ismiyle satır numarası verilerek sonuçlar çağırılabilir. Öğrenci numarası, adı ve soyadının bulunduğu "ogrenciler" isimli tabloya yapılacak olan genel sorguda geriye dönen sonuç tablosunun her satırında bir öğrenci numarası, ad ve soyad bulunacaktır. Bu sonuç tablosundan sonuçların birer birer alınarak kullanılması için genellikle while döngüsü kullanılır. Sonuç tablosundaki satır sayısını öğrenmek için mysql_numrows() komutu kullanılır.

 

$isimler = mysql_query(select * from ogrenciler");

if (mysql_error()) {echo ("MySQL hatası oluştu. Hata no :"); echo mysql_error();}

$sayi = mysql_numrows($isimler)

$i = 0;

while ( $i < $sayi) :

$ad = mysql_result($isimler,$i,"ad");

$soyad = mysql_result($isimler,$i,"soyad");

echo ("Ad : $ad Soyad : $soyad");

$i++;

endwhile;

 

Sonuç tablosunun Php'de kullanılmasını sağlayan mysql_query() komutuyla tüm tablodaki değerler bir sayı kullanılarak tanımlanır. Sonuçlarsa mysql_result() kullanılarak metin değişkenine atanırlar. Eğer sonuçların bir dizi değişkeninde (array) toplanması isteniyorsa mysql_fetch_array() komutu kullanılır.

SQL Komutları

Php ile herhangi bir veritabanını kullanırken bilinmesi gereken en önemli ayrıntı SQL (Structured Query Language) adı verilen veritabanı yönetim ve sorgulama dilidir. Bu dilin detayları hakkında bilgi sahibi olunarak veritabanını performanslı ve hızlı şekilde kullanabilmek mümkün olur. Çoğu zaman orta derecede SQL kullanılan sitelerde performans kaybı ve gereksiz sorgularla karşılaşılır. Veritabanından sonucu tek sorguda çekmekle iki sorguda çekmek arasında oldukça büyük performans kaybı oluşacaktır. Ayrıca SQL kullanılarak yapılan işlemleri Php'yle yapmak güç kaybına da yol açar.

Öğrenci sınav sonuçlarının bulunduğu bir tablo göz önünde bulundurulduğunda birinci, ikinci ve üçüncü sınav sonuçlarının Php'de toplanmasıyla performans ve memory kaybı vardır. SQL'de sınav sonuçlarının toplanması her zaman için daha hızlı olacaktır.

 

select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar

 

Bu SQL komutuyla üç sınavın bulunduğu sınav sonuçları "sinavlar" tablosundan as komutuyla belirtilen "sinavsonuc" adında bir alanla çekilebilecektir. "select" komutu sonuç çekmek için kullanılır. "from" komutuyla sonuçların çekileceği tablo adı belirtilir. "select"'ten sonra gelen isimler sonuçların çekileceği tablodaki alan adlarıdır. Eğer tablodaki tüm alanlar çekilmek isteniyorsa

 

select * from sinavlar

 

kullanılmalıdır. Sınav sonuçlarında en yüksek olan kişinin bulunması istendiğinde de max() komutu kullanılabilir.

 

select max(sinav1+sinav2+sinav3) as sinavsonuc from sinavlar

 

Bu sayede sınav sonuçlarında en iyi sonuç öğrenilmiş olur. Dikkat edilmesi gereken nokta aynı sınavsonuç toplamına sahip birden fazla kişi olmasına rağmen sadece en yüksek toplamı elde eden ilk sonucun listeleneceğidir. En yüksek kişi seçilmek istendiğinde de order by komutu kullanılmalıdır.

 

select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar order by sinavsonuc desc

 

Bu sayede ortaya çıkan tablodaki ilk kişi en yüksek puanı alan kişi olacaktır. Birden çok aynı yükseklikte puan alan kişiler alfabetik sırada sıralanacaklardır. "order by" komutundan hemen sonra sonuçların sıralanacağı alan adı verilmelidir. "desc" komutu sayesinde de en yüksekten en düşüğe doğru sıralama yapılır. "desc" kullanılmassa sıralama en azdan en çoğa doğru olur. Eğer sınav sonuçlarında en yüksek puanı alan 10 kişi belirlenmek isteniyorsa limit komutu kullanılabilir.

 

select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar order by sinavsonuc desc limit 0,10

 

"limit" komutuyla belirtilen ilk sayı sıralamanın başlayacağı sayıdır. Yani sıfırıncı kayıttan itibaren 10 tane sonuç getirmek istendiğinde limit 0,10 kullanılır. Limit sonuç tablosunda gereksiz kayıt barındırılmak istenmediği durumlarda kullanışlı olur. Php'de kullanılacağından fazla kayıdı veritabanından çekmek hem boş hafıza miktarını azaltır hem de veritabanını gereksiz yere zorlamış olur.

Eğer sınav sonuçlarının ortalaması alınmak isteniyorsa avg() komutu kullanılır. Ortalaması alınmak istenen alan adı belirtilerek veritabanından ortalamalar kolaylıkla çekilebilir.

 

select avg(sinav1+sinav2+sinav3) as sinavsonuc from sinavlar

Eğer belli koşulların sağlanacağı sonuçlar tablodan çekilecekse "where" komutu kullanılır. Örneğin sınav sonuçları toplamı 150 ve üzerinde kişiler seçilecekse

 

select sinav1+sinav2+sinav3 as sinavsonuc from sinavlar where sinav1+sinav2+sinav3 > 150

 

sorgusu kullanılmalıdır. Birden çok koşul da sorgudan verilebilir. Eğer her sınavdan 50 ve üzeri almış kişiler seçilecekse

 

select sinav1, sinav2, sinav3 from sinavlar where sinav1 > 49 and sinav2 > 49 and sinav3 > 49

 

kullanılmalıdır. "and" komutuyla koşullar birbirleriyle mantıksal ve anlamında birleştirilir. Aynı şekilde "or" da kullanılarak mantıksal veya kullanılmış olur.

Sorgular daha da karmaşıklaştırılarak her sınavda sınav ortalamasını geçen kişilerin listesi gibi zor gözüken işlemler de SQL kullanılarak çekilebilir. Bu işlemlerin Php'de yapılması her ne kadar kolay olsa da SQL'le veritabanından direkt verilerin formatlanarak çekilmesi işlemlerin hem kolay hem de hızlı yapılmasını sağlar.

MySQL’e Veri Girişi

Veritabanına girilmesi gereken veriler olduğu durumlarda "select" komutuna karşı gelen "insert" komutu kullanılır. Bu komut sayesinde veritabanında belirtilen tabloya istenen sonuçlar yerleştirilebilir.

 

insert into sinavsonuc values('48','50','75','85')

 

Bu komutla tablo sıralaması öğrenci numarası, ilk sınav sonucu, ikinci sınav sonucu ve üçüncü sınav sonucu olan bir tabloya 48 numaralı öğrencinin notları 50, 75 ve 85 olarak giriliyor. İstenirse bu girilen sonuçlar daha sonradan değiştirilebiliyor. Eğer üçüncü sınav henüz gerçekleştirilmediyse bu sınavın notu "null" komutu kullanılarak boş değer girilebilir. Dikkat edilmesi gereken nokta her alanın boş değer kabul etmeyebileceğidir. Tablo oluşturulurken bazı veri alanları boş değer almayacak şekilde önceden tanımlanabilir.

Eğer sınav sonuçlarında sonradan değişiklik yapılması gerekirse "update" komutu kullanılır.

 

update sinavsonuc set sinav3 = 90 where ogrencino = 48

 

Bu komutla öğrenci numarası 48 olan öğrencinin sınav sonucu 90'a dönüştürülüyor. "set" komutuyla güncellenecek yani değiştirilecek olan alanın hangi değeri alacağı belirtilir. "where" komutu da her zamanki gibi bir koşul belirterek koşulu sağlayan öğrencilerin getirilmesini sağlar.

Veritabanından sonuç silinmesi gereken durumlarda "delete" komutu kullanılır.

 

delete from sinavsonuc where ogrencino = 98

 

Bu sorguyla sinavsonuc tablosunda öğrenci numarası 98 olan öğrencinin tüm kaydı siliniyor. Silme ve güncelleme için kullanılan "delete" ve "update" komutları veritabanındaki bilgiler üzerinde değişiklik yaptıklarından geri dönüşü imkansız veri kayıplarına yol açabilirler. Bu yüzden bu komutların dikkatle kullanılması gerekir.

Birden Fazla Tablo Kullanımı

SQL'de birden fazla tablodan veri çekmekte özel bir notasyon kullanılır. Tabloların birbirine bağlanması işlemine "join" adı verilir. Birleştirmenin "left join" ve "right join" olmak üzere iki çeşidi vardır. Öğrenci sınav sonuçlarının bulunduğu bir tabloyla öğrenci ad, soyad ve diğer bilgilerinin bir arada olduğu tabloda ortak noktayı sağlayan bir alan olmalıdır. Her iki tabloda da öğrenci numarası ortak alan olarak belirtilmelidir. Bu sayede öğrenci numarası belirtilerek sınav sonuçları bulunan tablodan sınav sonuçları, diğer bilgilerin bulunduğu tablodan da isim soyad bilgileri çekilebilir.

 

select ad, soyad, sinav1, sinav2, sinav3 from sinavsonuc, bilgi where sinavsonuc.ogrencino = bilgi.ogrencino

 

Bu sorguyla bilgi tablosundan ad, soyad, sinavsonuc tablosundan sinav1, sinav2 ve sinav3 alanları çekiliyor. İki farklı tablodan bilgi çekildiği için "from" alanında her iki tablo isminin de belirtilmesi gerekiyor. Sorgudaki "where" alanında her iki tabloda eş olması gereken alanın belirtilmesi için farkı bir formatta yazılım kullanılıyor. Sınav sonuçları tablosundaki öğrenci numarası için "sinavsonuc.ogrencino", diğer bilgilerin yer aldığı bilgi tablosundaki öğrenci numarası için de bilgi.ogrencino kullanılıyor. En sonda yer alan "where" bölümü sayesinde bilgiler eşleştirilerek veritabanından çekilebiliyor.

MySQL Yönetimi

Tüm SQL işlemleri için Php kullanılabileceği gibi veritabanı sunucusunda veritabanı, tablo oluşturmak, değiştirmek ya da diğer işlemler için farklı arayüzler kullanmak zaman kazandırıcı olabilir. Php kullanılarak geliştirilen PhpMyAdmin sayesinde web sunucu aracılığıyla tüm MySQL özelliklerini yönetebilmek mümkündür. Hem Unix hem de Windows ortamları için PhpMyAdmin tavsiye edilir. Windows'da da MySQL'i yönetmek için myAdmin adındaki yazılım da oldukça kullanışlıdır. MySQL'e ve Php'ye yeni başlayan kullanıcılar için veritabanını tanımak amacıyla ayrı bir yazılım kullanmaları tavsiye edilebilir.

Örnek Uygulama : Anket

Php kullanılarak geliştirilebilecek bir çok uygulama bulunuyor. Web'de kullanıcılarla etkileşimi sağlayan her türlü uygulama ve site yönetim sistemleri Php kullanılarak geliştirilebilir. Php'yi web yazılımı geliştirirken etkili olarak kullanabilmek için gereken en önemli nokta HTML bilgisidir. Yeterli bir HTML bilgisine sahip olmadan Php'yle yazılım geliştirebilmek zor olabilir. Çok ziyaretçi ağırlayan büyük ve orta ölçekteki portallarda yaygın olarak kullanılan ziyaretçi anketlerinin geliştirilmesinde de Php kullanmak hızlı ve performanslı anketler için tercih edilebilir. Forumlar, anketler, bilgi giriş formları, site yönetim panelleri, site haritaları gibi bir çok uygulama için Php oldukça mantıklı bir tercihtir.

Amacı web sitesini ziyaret eden kullanıcıların bir konu hakkındaki yorumlarını şıklar belirtilerek almak olan bir Php uygulaması için bilgilerin depolanabileceği bir veritabanı ya da metin dosyası gerekiyor. Sunucunun konfigürasyonuna bağlı olarak beş seçenekli bir anket için kullanıcılardan gelecek yorumları toplamak için veritabanı sunucusu kullanmak tercih edilmelidir.

Ziyaretçilerin hangi rengi daha çok sevdiklerini ortaya çıkaracak bir ankette beş farklı renk alternatifini kullanıcılara sunan bir anket uygulaması için veritabanında bu şıkların kaçar kez tercih edildiklerini saklayan bir tablo oluşturulmalıdır. Bu tabloda secenek1 rengin adına, sayi1 rengin kaç kez oylandığını gösteren sayıyı temsil ediyor. Tüm diğer beş renk için de secenek2, secenek3 sıralamasıyla diğer seçenekler ve oylanma sayıları temsil edilmelidir. İstenirse veritabanında anketin konusu da metin olarak saklanabilir. Eğer hazırlanacak anket birden çok yerde farklı farklı konularla aynı şekilde değerlendirilecekse aynı Php farklı soru ve seçeneklerle tekrar kullanılabilir. Bunun için her ankete bir kimlik numarası da verilebilir. Bazı durumlarda anketin ilk başlatıldığı tarih de önem kazandığından dolayı anketin oluşturulma tarihi de veritabanında saklanmalıdır. Anketin verilerini depolayacağı veritabanı tablosunda "anketid, soru, secenek1, sayi1, secenek2, sayi2, secenek3, sayi3, secenek4, sayi4, secenek5, sayi5, tarih" adında alanlar oluşturulacaktır. Örnek tablo için SQL'le tablo oluşturma komutları aşağıdaki gibi olabilir.

 

CREATE TABLE anketci (

anketid int(11) DEFAULT '0' NOT NULL auto_increment,

soru text,

secenek1 text,

sayi1 int(11),

secenek2 text,

sayi2 int(11),

secenek3 text,

sayi3 int(11),

secenek4 text,

sayi4 int(11),

secenek5 text,

sayi5 int(11),

tarih date DEFAULT '0000-00-00' NOT NULL,

PRIMARY KEY (anketid)

);

 

Hazırlanacak olan Php dosyasının üç görevi yerine getirecek. İlk görev, kullanıcıya veritabanından istenilen anketi sorusuyla ve şıklarıyla göstermek, ikinci görev kullanıcının tercih ettiği seçenek ya da seçeneklerin sayı değerlerini veritabanından bularak arttırmak, üçüncü ve son görev de kullanıcı değerleri veritabanına girildikten sonra o anki sonuçları kullanıcıya göstermek olacak. Tüm bu işlemler Php'de fonksiyon kullanılarak daha rahat halledilebileceğinden üç görevi de yerine getiren fonksiyonlar hazırlamak zaman kazandırıcı olur.

 

İlk Görev : Kullanıcıya Anket Formu Oluşturma

Web sayfalarında kullanılan temelde iki farklı tür anket vardır. Bunlar birden çok seçenek seçilmesine olanak sağlayan "checkbox"'lu çoklu anket ve sadece birtek seçeneğin seçilmesine izin veren "radio" tekli ankettir. Hazırlanacak olan anket HTML formatında aslında bir tablo içine yerleştirilmiş HTML form özelliklerinden başka birşey değildir. Veritabanında önceden hazırlanan 1 numaralı anketin tekli ya da çoklu seçime izin veren formatta web sayfasından sunulması tercih edilebilir. Fonksiyonda $tur adındaki değişkenle çoklu anket için 1 tekli anket için 2 numaralı değerler atanarak fonksiyonun üreteceği HTML çıktı değiştirilebilir.

Aşağıdaki tabloda yer alan anketyap fonksiyonuna iki değer gönderilmek zorunda. Bunlardan biri anketin türünü belirleyen $tur değişkeniyken diğeri de veritabanındaki anketin sıra numarası olan $anketid değişkenidir.

HTML formunda anketin sonuçlarının gönderileceği Action'a da iki numaralı görevi yerine getirecek olan Php dosyası bulunmalıdır.

Anketyap fonksiyonu kabaca veritabanından belirtilen anket kimlik numarasına karşılık gelen soru ve seçenekleri çekerek velirtilen türde anket formu oluşturur.

 

// Anket Seçtirme Fonksiyonu

function anketyap($anketid,$tur)

{

$secilianket = mysql_fetch_row(mysql_query("select soru, secenek1, secenek2, secenek3, secenek4, secenek5 from anketci where anketid='$anketid'"));

if (mysql_error()) {echo mysql_error();}

?>

<table border="0" cellspacing="0" cellpadding="0"><tr><td bgcolor="#000000">

<table width="150" border="0" cellspacing="2" cellpadding="2"><tr>

<td align="center" bgcolor="SteelBlue"><font face="Tahoma, Verdana, Arial" size="2" color="White"><b>A N K E T</b></font></td>

</tr><tr>

<td bgcolor="#A9AC75"><form action="anketsonucgoster.php3?anketid=<?echo $anketid;?>" method="post">

<font face="Tahoma, Verdana, Arial" size="2" color="black">

 

<?

echo $secilianket[0]."<br><br>";

$i = 1;

while ( $i < 6) :

if ($secilianket[$i])

{

if ($tur < 2)

{

echo ("<input type=\"checkbox\" name=\"secenek$i\">$secilianket[$i]<br>");

}

if ($tur > 1)

{

echo ("<input type=\"radio\" name=\"radyocu\" value=\"$i\">$secilianket[$i]<br>");

}

}

 

$i++;

endwhile;

?>

<input type="hidden" name="anketid" value="<?echo $anketid?>">

<br><center><input type="submit" name="gonderim" value="Gönder"></center>

</font>

</td></tr></table></td></tr></table></form>

<?

}

 

İkinci Görev : Tercihleri Veritabanına İşleme

Formda Action'la belirtilen Php dosyasına form değişkeni olarak gönderilen değerler işlenerek veritabanına yerleştirilir. Anket oluşturulurken tekli seçime izin veren anket için tercih edilen "radio" türü alanlar için atanan $radyocu değişkeni için bir veritabanı güncelleme SQL'si, çoklu seçime izin veren "checkbox" içinse birbaşka SQL güncellemesi gerekmektedir. Çoklu seçim esnasında atanan değerlerin veritabanında teker teker bir arttırılması için de while döngüsü kullanılmalıdır.

 

// Ankete yeni sonuçları ekleme

if ($radyocu)

{

mysql_query("update anketci set sayi$radyocu = sayi$radyocu +1 where anketid = '$anketid'");

if (mysql_error()) {echo mysql_error();}

}

else

{

$secenek = array ($secenek1, $secenek2, $secenek3, $secenek4, $secenek5);

$i = 0;

while ( $i < 5) :

if ($secenek[$i])

{

$k = $i +1;

mysql_query("update anketci set sayi$k = sayi$k +1 where anketid = '$anketid'");

if (mysql_error()) {echo mysql_error();}

}

$i++;

endwhile;

}

 

Üçüncü Görev : Anket Sonuçları Gösterme

Değerler veritabanına girildikten sonra sonuçların en son güncellenmiş halleriyle veritabanından tekrar çekilerek kullanıcıya gösterilmesi gerekebilir. Bu durumda aşağıdaki anketsonucgoster fonksiyonuna anketin kimlik numarasını belirten $anketid değişkeni gönderilerek sonuçlar çekilir. İstenilen formatta HTML olarak şekillendirilerek kullanıcıya sunulur.

 

// Anket sonuçları gösterme

function anketsonucgoster($anketid)

{

$secilianket = mysql_fetch_row(mysql_query("select * from anketci where anketid = '$anketid'"));

if (mysql_error()) {echo mysql_error();}

$toplamoy = $secilianket[3] + $secilianket[5] + $secilianket[7] + $secilianket[9] + $secilianket[11];

?>

<table border="0" cellspacing="0" cellpadding="0"><tr><td bgcolor="#000000">

<table border="0" cellspacing="2" cellpadding="2">

<tr><td colspan="3" align="center" bgcolor="#f0e68c"><font face="Tahoma, Verdana, Arial" size="4"><?echo $secilianket[1];?></font></td></tr>

<?

$i = 2;

while ( $i < 12) :

if ($secilianket[$i])

{

if (!($i % 2))

{

echo "<tr><td bgcolor=\"#FFFFFF\"><font face=\"Tahoma, Verdana, Arial\" size=\"2\"><b>".$secilianket[$i].": </b></font></td>";

}

else

{

$gosterge = floor($secilianket[$i]*100/$toplamoy);

$uzunluk = $gosterge * 3;

echo "<td bgcolor=\"#FFFFFF\"><font face=\"Tahoma, Verdana, Arial\" size=\"2\"><img src=\"bos.gif\" width=\"$uzunluk\" height=\"5\" border=\"1\">%$gosterge</td>";

echo "<td bgcolor=\"#FFFFFF\"><font face=\"Tahoma, Verdana, Arial\" size=\"2\">$secilianket[$i] oy</td></tr>";

}

}

$i++;

endwhile;

echo "<tr><td align=\"center\" bgcolor=\"#FFFFFF\" colspan=\"3\"><font face=\"Tahoma, Verdana, Arial\" size=\"2\">$secilianket[12]'den beri toplam oy $toplamoy</td></tr>";

?>

</table></td></tr></table>

<?

}

?>

 

Tüm bu hazırlanan üç ayrı Php kodu, web sitesi kullanıcılarına anket hizmeti vermek için yeterlidir. Yukarıda anlatılan kodlar www.baslangic.net adresinde kullanılan anketlerin hazırlanmasında kullanılmıştır. Anketlerde kullanıcıların birden çok oy atmasını engellemeye yönelik cookie, IP ya da session kontrolleri özellikle eksik bırakılmıştır. Ankete katılımın arttırılması ve mümkün olduğunca çok katılımcıya izin vermek için bu tarz kontrolleri dünyaca ünlü Times'da kullanmıyor. İstenilirse yukardaki kodlara üçer satırlık if döngüleri eklenerek IP, cookie veya session kontrolleri de eklenebilir. Aynı kodların daha geliştirilmiş olanları da Türk programcıların hazırladığı tek anket sunucu olan dünyadaki örneklerine benzeyen anket.baslangic.net adresinde de kullanılıyor.

Online Kişi Sayısı

Web sitesi programcılığında yapılan oyunlardan biri olan siteye bakan kişi sayısını gösterme numarası genellikle bir tahminden öteye gidemez. Bu tahmin siteye bakılan kişi sayısını belirli bir süre boyunca ölçeceğinden sitede 15 dakikalık beklemeden sonra devam eden bir kullanıcı, online kullanıcı sayısını saptırabilir.

Genellikle cookie ya da sessionlar aracılığıyla yapılan bu ölçümlerde kullanılan mantık hep aynıdır. ASP sitelerinde çokça görülen bu özellik Php’de de benzer bir mantıkla kullanılabilir. Aşağıdaki Php koduyla siteyi ziyaret eden kullanıcıya HTML içinden Javascipt’le cookie atılıyor. İstenirse Php cookie komutlarının başındaki // işaretleri kaldırılarak sisteme Php’yle de cookie atılabilir. Sisteme gelen her kullanıcıya belirtilen süre sonunda yokolacak cookie atılıyor. Eğer cookie’li bir kullanıcı gelirse sistem onu farklı bir kişi olarak algılamadan online kişi sayısını sabit tutuyor. Eğer cookie’siz bir kullanıcı sisteme gelirse kişi sayısı artırılmadan önce en son atılan cookie’nin atılma anına bakılıyor. Eğer en son cookie atılma anı bakılma anından belirtilen süre kadar önceyse sistemde 0 kullanıcı kalmış ve yeni gelen kullanıcı 1 numaralı kullanıcıdır mantığıyla hareket ediliyor. Belirtilen süre ne kadar küçükse tahminlerin doğruluğu da o oranda artıyor. Aşağıdaki kodda bir dakika karşılığı 60 saniye ya da Java script için milisaniye cinsinden 60000 milisaniye süre kullanılıyor.

$surem = 60000; // Saniye cinsinden geçen süre * 1000 ...

$sure = $surem / 1000;

if (!isset($onlinekisi))

{

$istekani = time();

// $bitis = time()+$sure;

// setcookie("onlinekisi",$istekani,$bitis);

?>

<script language="JavaScript" type="text/javascript"><!--

if (document.cookie.indexOf("onlinekisi") == -1)

{

var expdate = new Date((new Date()).getTime() + <?echo $surem;?>);

document.cookie="onlinekisi=on; expires=" + expdate.toGMTString() + "; path=/;";

}

//--></script>

<?

$sorgu = mysql_query("select * from online");

$sonistek = mysql_result($sorgu,0,"sonistek");

$oncekiistek = mysql_result($sorgu,0,"oncekiistek");

$sayi = mysql_result($sorgu,0,"sayi");

if (($istekani - $sonistek) > $sure)

{

mysql_query("update online set oncekiistek = sonistek , sonistek = '$istekani', sayi = 1");

echo ("1");

}

if (($istekani - $sonistek) < $sure)

{

if (($istekani - $oncekiistek) > $sure)

{

mysql_query("update online set oncekiistek = sonistek , sonistek = '$istekani', sayi = 2");

echo ("2");

}

else

{

mysql_query("update online set sonistek = '$istekani', sayi = sayi + 1");

echo $sayi+1;

}

}

}

else

{

echo mysql_result(mysql_query("select sayi from online"),0,"sayi");

}

?>

 

Türkiye’de Php Kullanımı

Yakın zamanda kurulan Php kullanıcıları grubunda 300'e yakın sayıda Php kullanıcısı ve yeni öğrenenler hızla Türkiye'de Php'nin daha fazla kullanılması için çaba gösteriyor. Klasik anlamda daha çok markalı ürünleri kullanmayı tercih eden teknoloji ve web yazılım geliştirme şirketleri de yanılgılarını çabuk farkederek Php'yle web yazılımı geliştirme yönünde adım atıyorlar.

phptr.baslangic.net ve lilali.net adresinde başlayan iki farklı Php kullanıcıları grubu oluşumları kısa zamanda birleşerek www.php.org.tr adresinde çalışmalarına devam ediyorlar. Amaçları Php’nin kullanımının yaygınlaştırılması olan kullanıcılar Eylül ayında Pclife dergisiyle birlikte verilecek olan Php kitapçığının hazırlıklarına da katıldılar. Dünyada Php hakkında çıkmış kitap sayısı henüz 20’lere varmamışken farklı Türk kullanıcıları da kendi kitaplarını Türk Php severlere sunabilmek için birbirleriyle yazışıyorlar.

Türkiye'de Php Kullanan Bazı Siteler

www.iyi.net :

Web sayfaları zinciri

evreka.interprobis.com.tr :

Türkçe arama motoru

www.sekreter.org :

Mesleksel gelişim sitesi

www.baslangic.net :

Online bilgisayar dergisi

www.okulaile.net :

Online okul - aile iletişimi

www.stv.com.tr :

Samanyolu Televizyonu

my.sanane.com :

Online Gaming Community

stats.sanane.com :

Sanane'nin istatistik verileri

www.turkmarket.net :

Online Satış Sitesi

www.ofra.com.tr :

Online Satış Sitesi

www.yapimedya.com :

Türkiye Yapı Rehberi

www.gelecek.com.tr :

Gelecek A.Ş.

www.simteks.com.tr :

 

www.linux.org.tr :

Linux Türkiye

www.turkvista.com :

Arama motoru ve Portal

www.wap3.gen.tr :

Wap Portal

www.logispot.com

Türk ve Avrupa Tır eşleştirme

sitesi

phptr@egroups.com adresinde günde onlarca soru ve cevabın el değiştirdiği listeye üye olarak Php kullanımı hakkında her türlü sorunda yardımcı olmak isteyen orta ve ileri düzey Php kullanıcılarına ulaşılabilir.

Php yazılımı geliştiricilerinin dünyada en çok kullandıkları editör bir Türk'e ait. İsrail'li bir grup yazılımcı tarafından geliştirilen Php'nin İsrail'li yaratıcılarının da büyük beğenisini toplayan PHPed'in geliştiricisi Ergin Soysal aslında Ankara'da yaşayan ürolog doktor hekim. Kendi web sitesi www.soysal.com’dan tüm dünyadaki Php geliştiricilerine kendi geliştirdiği Windows editörünü ücretsiz olarak sunuyor.

Ergin Soysal, Itbusiness Weekly’ye yaptığı bir röpörtajda : "PHPEd ile yaşadığım en ilginç olay, PHPEd'in ilk sürümünden iki ay sonra, henüz bu konuda günde 2-3 mail alırken, tesadüfen girdiğim bir web sayfasının altında "Built with PHPEd" (PHPEd ile hazırlanmıştır) ibaresi ve sitemin linkiyle karşılaştım. İnanın o an hissettiklerim PHPEd üzerinde yıllarca çalışmaya yeter. PHP konusunda bilgi vermek için kurulan bazı sitelerde PHP/apache/mysql/PHPEd dörtlüsü şeklinde anlatılması ya da ana linkler arasında sayılması gurur verici. Başka bir ilginç olay, PHPEd'in ilk sürümden sonra PHP'nin yaratıcıları benimle temas kurdu.. PHPEd için önerilerde bulundular. O zaman için bu bana çok heycanlandırıcı gelmişti. Şimdi her gün sadece övgü için yazılmış pek çok e-posta alıyorum. PHPEd'de görmek istedikleri özellikleri aktarıyorlar. Buldukları hataları gönderiyorlar. Bu yolla Tayvan'dan Brazilya'ya kadar pek çok ülkeden pek çok arkadaş edindim." Ifadelerini kullanıyor.

Dökümantasyon ve Örnek Kodlar

 

Php’nin çok çabuk öğrenilerek kullanımında kuşkusuz en büyük etken çok iyi dökümante edilmiş olması. Php’nin manualindeki bilgilerin dahi tek başına Php öğrenmek için yeterli olduğu söylenebilir. En son Php manualine her zaman www.php.net’deki sitede www.php.net/manual/ adresinden ulaşılabilir.

Ayrıca php.net'de her gün yüzlerce Php'yle ilgili mailin döndüğü Php listesinin arşivleri de online olarak : http://marc.theaimsgroup.com/?l=php3-general&r=1&w=2 http://www.geocrawler.com/lists/4/Web/1/0/

Faydalı olabilecek kod arşivleri ve İngilizce tutorial siteleri adresleri aşağıda yer alıyor.Kod değişim sitelerinde yüzlerce örnek kod ve uygulama yer alıyor.

· http://www.php.net/

· http://www.phpwizard.net/

· http://www.phpbuilder.com/

· http://www.hotscripts.com/PHP/Scripts_and_Programs/

· http://hotwired.lycos.com/webmonkey/programming/php/

· http://www.faqts.com/knowledge-base/index.phtml/fid/51/

 

Php’ye Hızlı Başlangıç

 

1) Önce php.net'e gider oradan sistemime uygun en son sürüm Php interpreter'i çekerim.

2) Sonra apache.org 'a gider oradan en son sürüm Apache web sunucusunu çekerim.

3) Daha sonra bir Php kodlarını yazarken kullanmak üzere ya phpED'I (www.soysal.com) yada Homesite'ı (www.allaire.com) çekerim.

4) POT sayfalarındaki Projeler altında yer alan örnek kodları inceler anlamaya çalışırım. (www.php.org.tr)

5) phpTR mailliste üye olarak sorularımı sorar, cevaplarını öğrendiğim sorunlarımı diğer insanlarla paylaşırım. (phptr@egroups.com)

Php'de kullanılabilecek MySQL Komutları

mysql_affected_rows :

Bir önceki işlemde etkilenen satır sayısı

mysql_close :

Belirtilen MySQL bağlantısını kapatır

mysql_connect :

Sunucuya veritabanı bağlantısı açar

mysql_create_db :

MySQL'de veritabanı açar

mysql_data_seek :

Sonuç satırında belirtilen sıraya geçer

mysql_db_query :

MySQL'e sorgu gönderir

mysql_drop_db :

Sunucudan veritabanı siler

mysql_errno :

Bir önceki işlemdeki MySQL hata numarasını verir

mysql_error :

Bir önceki işlemdeki MySQL hata mesajını verir

mysql_fetch_array :

Sonuçları dizi değişkeni olarak alır

mysql_fetch_field :

Sonuç tablosundaki alan adını obje olarak alır

mysql_fetch_lengths :

Sonuç tablosundaki dizi değişkenin uzunluğunu alır

mysql_fetch_object :

Sonuç satırını obje olarak alır

mysql_fetch_row :

Sonuç tablosundan dizi değişkeni olur

mysql_field_name :

Sonuç tablsundaki sonucun tablodaki alan adını verir

mysql_field_seek :

Sonuç tablosunda sıra indisini belirtilen yere götürür

mysql_field_table :

Alan adı verilen sonucun tablo adını verir

mysql_field_type :

Sonuçtaki alanın hangi tip olduğunu belirtir

mysql_field_flags :

Sonuçtaki alanın hangi tür ekstra parametrelerle tanımlandığını belirtir

mysql_field_len :

Sonuçtaki alanın veritabanındaki uzunluğunu verir

mysql_free_result :

Sonuçlar için atanan hafızayı boşaltır

mysql_insert_id :

Bir önceki veri yerleştirmede oluşan otomatik veri değerini verir

mysql_list_fields :

Sonuçtaki tüm tablo alanlarını listeler

mysql_list_dbs :

Sunucudaki tüm veritabanlarını listeler

mysql_list_tables :

Veritabanındaki tüm tabloları listeler

mysql_num_fields :

Sonuçtaki alan sayısını verir

mysql_num_rows :

Sonuçtaki satır sayısını verir

mysql_pconnect :

Sunucuya kalıcı bir bağlantı tanımlar

mysql_query :

Veritabanına sorgu gönderir

mysql_result :

Sorgudan dönen sonuçları alır

mysql_select_db :

Sunucudan veritabanı seçer

mysql_tablename :

Verilen alanın ait olduğu tablo adını verir

Seminer Notları Hakkında

1. Yazıda geçen tüm kodlar orijinallerinden kopyala-yapıştır yöntemiyle alınmıştır. Herşeye rağmen gözden kaçabilecek hatalardan dolayı kodlarda hatalar bulunabilir. Kodların tam çalışır halleri ve bu döküman www.baslangic.net/bilisim2000 adresinden indirilebilir.

2. Dökümandaki metnin bazı bölümleri Pcnet dergisi Eylül sayısında da Php’nin Temelleri yazısında da kullanılmaktadır. Ayrıca giriş ve performans bilgilerinin yer aldığı bölüm de Türkiye’nin ilk Linux ve Serbest Yazılım dergisi GNU/Linux’da da kullanılmaktadır.

3. Yazar gözden kaçmış kelime hataları ve cümle düşüklükleri için peşinen özür diler.

4. Bu metin tamamen ya da kısmen Kayra Otaner’e haber verilmek kaydıyla her türlü yayında kullanılabilir.

5. Yazara www.kelalaka.net adresindeki web sayfasındaki ulaşım bilgilerini kullanarak ya da kayra@baslangic.net adresine e-posta atarak ulaşabilirsiniz.