12 Aralık 2008

Jquery ile sekmeler oluşturmak

Birçok web sayfasında sayfa yenilenmeden geçiş yapılan sekmeler görmüşsünüzdür. Bunlar basitçe javascript ile yapılabilir. Bu yazımda size jquery ile basit bir şekilde nasıl sekmeler oluşturabileceğinizi bir örnekle göstereceğim. Aslında sekmeler aynı sayfada bulunan ancak biri görünür olduğunda diğerleri gizli hale getirilen sayfa öğelerinden ibarettir. Yani örnek olarak bir sayfada ardarda oluşturduğunuz div öğelerinden birini gösterip diğerlerini gizleyerek ve bu işlemi sekme başlıklarının tıklanmasıyla tetikleyerek basit bir sekme sistemi oluşturmuş olursunuz.

İlk önce sekmeler için kullanacağımız css sınıflarını, sekme başlıklarını ve sekme içeriklerini oluşturalım:
[xml]
<style type="text/css">
.sekme_baslik{border:2px solid gray;cursor:pointer;}
.aktif_sekme_baslik{border:2px solid red;}
.sekme_icerik{border:1px dashed gray;}
</style>
<div>
<span id="sekme_1">Sekme 1</span>
<span id="sekme_2">Sekme 2</span>
<span id="sekme_3">Sekme 3</span>
</div>

<div id="sekme_1_icerik">
Sekme 1 içeriği
</div>
<div id="sekme_2_icerik" style="display:none;">
Sekme 2 içeriği
</div>
<div id="sekme_3_icerik" style="display:none;">
Sekme 3 içeriği
</div>
[/xml]



İlk sekme içeriği haricindeki sekme içeriklerinin gizlendiğine dikkat edin. Şimdi de sekmeleri aktif hale getirecek javascript kodumuzu yazalım:
[js]
$(function(){
$(".sekme_baslik").click(function(){
// önce seçilen sekme dışındaki tüm sekme başlıklarından aktif_sekme_baslik sınıfını kaldırıyoruz
$(".sekme_baslik").not($(this)).removeClass("aktif_sekme_baslik");
// seçilen sekme başlığına aktif_sekme_baslik sınıfını ekleyelim
$(this).addClass("aktif_sekme_baslik");
// seçilen sekme başlığının id değerini alıp bu değere "_icerik" ilave ederek içerik div öğesinin idsini bulalım
var icerik_id = $(this).attr("id") + "_icerik";
// içerik sekmemizi nesne olarak kaydedelim
var $sekme = $("#"+icerik_id);
// şimdi de göstermek istediğimiz sekme dışındaki sekmeleri gizleyelim
$(".sekme_icerik").not($sekme).hide();
// ve son olarak göstermek istediğimiz seçilen sekmeyi gösterelim:
$sekme.show();
});
});
[/js]



Bu basit bir sekme örneğiydi. Elbette Sekme başlıkları ve içerik için istediğiniz gibi css biçimlendirmesi uygulayarak sekmelerin daha gerçekçi görünmesini sağlayabilirsiniz.

5 Aralık 2008

Xml verisini diziye dönüştürmek

Geçenlerde yazdığım bir XML dönüştürme sınıfını sizlerle paylaşmak istiyorum. Bu sınıf ile xml verisini parametre olarak kullanarak ağaç yapısında bir dizi elde edebilirsiniz.

XML Parser (XML to array) : http://www.phpclasses.org/browse/package/4954.html

Bu sınıfı kullanırken xml verisini iki şekilde aktarabilirsiniz:

  1. XML verisini yapılandırıcı parametresi olarak kullanıp ardından parse() işlevini çağırarak:
    [php]
    $parser = new XmlParser($xml_input);
    $result = $parser->parse();
    [/php]

  2. Sınıfı parametresiz oluşturup parse() işlevine parametre olarak xml verisini aktararak:
    [php]
    $parser = new XmlParser();
    $result = $parser->parse($xml_input);
    [/php]


Elbette bu sınıfın hataları, eksikleri olabilir. Hata/eksiklik vs. bulduğunuzda bana bildirebilirsiniz.

16 Kasım 2008

Firebug ile hata ayıklama

Her yazılım alanında olduğu gibi web programlamada da hata ayıklama programcı için önemli bir süreçtir. Bu yazımda hata ayıklama sürecini geliştiriciler için kolaylaştırmak için kullanabileceğiniz Firebug eklentisinden bahsetmek istiyorum. Bu eklenti firefox tarayıcısı için geliştirilmiştir ve şu adresten kolayca indirip kurabilirsiniz: https://addons.mozilla.org/en-US/firefox/addon/1843 . Firebug 'ın IE, Opera, ve Safari için kullanabileceğiniz bir Lite sürümü de vardır ancak bunun firefox için geliştirilen orjinal eklenti kadar iyi olduğunu sanmıyorum.

Firebug ile tarayıcıyı ilgilendiren her kod üzerinde hata ayıklama ve izleme yapabilirsiniz. Yani izlediğiniz sayfada bulunan Html, Css ve Javascript kodlarını düzenleyip değişiklikleri eşzamanlı olarak görebilirsiniz. Ayrıca firebug ile sunucuya yapılan çağrıları da (post/get) izleyebilirsiniz. Aşağıda firebug eklentisinin örnek bir görüntüsü bulunuyor. Eklentiyi kurduktan sonra firebug 'ı açmak için tarayıcının sağ alt köşesindeki firebug böcek resmini tıklayabilir yada F12 tuşunu kullanabilirsiniz.

Firebug 'ı ister yeni bir pencerede ister tarayıcının alt kısmında çalıştırabilirsiniz.Css sekmesini kullanarak sayfanızdaki öğelerin biçimlendirmesini anlık olarak değiştirebilirsiniz. Net sekmesini kullanarak sayfanızın yaptığı çağrıların tümünü ms cinsinden yüklenme zamanlarıyla ve ayrıntılı başlık ve yanıt bilgileriyle izleyebilirsiniz. Ayrıca Javascript sekmesini kodlarınızı düzenleyebilir ve hata ayıklama işlemleri yapabilirsiniz. Bununla birlikte performans ölçümü yaparak kodlarınızın nerede tıkandığını görebilirsiniz. Sayfanızın işleyişi boyunca herhangi bir hata oluştuğunda tarayıcı pencerenizin sağ alt köşesinde oluşan hata sayısıyla birlikte bir uyarı görürsünüz. DOM sekmesini kullanarak sayfanızın nesne yapısını inceleyebilirsiniz. Firebug 'ın ilginç bir özelliği de doğrudan javascript kodu çalıştırabilmenizdir. Bunu yapmak için konsol sekmesini açıp en altta çıkan ve başında >>> bulunan satırı kullanabilirsiniz. Ayrıca bu satırın en sağındaki ok işaretini kullanarak kod yazabileceğiniz bölümü genişletebilirsiniz. Özet olarak Firebug bir geliştirici olarak karşılaşabileceğiniz hataları bulup düzeltmek için kullanışlı bir araçtır.

11 Kasım 2008

Doğrusal diziyi ağaç yapısına dönüştürme

Php gibi sunucu taraflı dillerin ilk ortaya çıkan kullanım alanları muhtemelen form verilerini işlemektir. Bunlara iletişim formları ve çeşitli kayıt formlarını örnek verebiliriz. Ancak formların kullanımı bunlarla sınırlı değildir. Karmaşık veri yapılarını oluşturmak üzere kullanıcıdan giriş kabul etmek amacıyla da form girişi istenebilir. Böyle durumlarda karşılaşabileceğiniz bir sorun doğrusal bir dizi olarak elde ettiğiniz veriyi ($_POST, $_GET, $_REQUEST dizileri) kullanmak için önce bu diziyi yapısal bir halde sınıflandırmaktır. Özellikle kullanıcının giriş yapacağı formda javascript ile yeni alanlar eklemesine izin verecekseniz bu dizi daha da uzun ve karmaşık bir hal alacaktır. Bu sorunla başa çıkmayı kolaylaştırmak üzere bir işlev yazmaya karar verdim:
[php]
function array2tree($arr,$seperator='->')
{
$arr2 = array();
foreach($arr as $key=>$value){
$root = &$arr2;
$levels = explode($seperator,$key);
$n = count($levels);
$i = 0; foreach($levels as $level){
$i++;
if( !isset($root[$level])){ //seviye daha önceden tanımlı değilse
if($i==$n)//hedef seviye ise değeri aktar
$root[$level]=$value;
else //hedef seviye değilse dizi olarak tanımla
$root[$level]=array();
}
$root = &$root[$level];
}}
return $arr2;
}
[/php]
Bu işlev, adından da tahmin edeceğiniz gibi doğrusal olarak verilen bir diziyi yapısal bir dizi halinde dönüyor. Ancak bu işlevi kullanmak için dizinizdeki elemanların sayısal değil ilişkisel indisli (associative array) olması gerekiyor. Eğer bu işlevi giriş paragrafında açıkladığım örnekteki gibi form verisi üzerinde kullanacaksanız zaten bu koşulu sağlamış olursunuz. Bu durumda dizimizin anahtar değerleri formdaki name değerleri olacaktır. Örnek olarak aşağıdaki şekilde bir $_POST verimiz olduğunu varsayalım.
[php]
$_POST = array(
"type"=>"list",
"children->child1->name"=>"eleman 1",
"children->child1->value"=>12,
"children->child2->name"=>"eleman 2",
"children->child2->value"=>56
);
[/php]
Anahtar değerlerine yani form elemanlarının isimlerine dikkat edin. İsimlendirme yapılırken bazı elemanlarda -> ayracının kullanıldığını görürsünüz. Şimdi bu dizi üzerinde array2tree işlevini çalıştıralım ve sonucu print_r işlevi ile gösterelim:
print_r( array2tree( $_POST ) );

Bu çağrıyı yaptığınızda aşağıdaki sonucu elde edersiniz. İsimleri -> ayracı ile ayrılan elemanların alt öğeler haline geldiğini görüyorsunuz. children->child2->value elemanı children dizisi içindeki child2 dizisinin value elemanına dönüşmüştür. İşlevde varsayılan ayraç olarak -> kullanıldı ancak ikinci parametreyi kullanarak istediğiniz ayracı kullanabilirsiniz.
Array(   [type] => list   [children] => Array   (       [child1] => Array           (               [name] => eleman 1               [value] => 12           )       [child2] => Array           (               [name] => eleman 2               [value] => 56           )   ))

2 Kasım 2008

Php ile Javascript arasında veri aktarımı

Daha önce bir yazımda json veri yapısından bahsetmiştim. Bu yazımda da php ile javascript arasında bilgi aktarımının nasıl yapılabileceğini bir örnekle açıklamaya çalışacağım. Önce javascriptdeki nesne yapısından bahsedeyim. Javascriptte bir nesne şu şekilde tanımlanabilir:


obj = new Object;

Şimdi de bu nesneye bazı öğeler ekleyelim:


obj.x = 1;
obj.y = 2;

Bu iki ifadeyle nesnemize x ve y adlarında iki değişken eklemiş olduk. Bu örnekte sınıf kullanmadan sadece veri içeren bir nesne oluşturmuş olduk. (Konumuz veri aktarımı olduğu için şimdilik bununla yetiniyorum. Ama tabiki işlevler içeren bir nesne de oluşturabilirsiniz.).

Oluşturduğumuz bu nesneyi Object kelimesini kullanmadan da oluşturabiliriz:


obj = {"x":1,"y":2};

Tanıdık geldi mi? Bu tanımlama aynı nesnenin daha önce bahsettiğim json yapısı ile tanımlanmış halidir. Zaten json kelimesinin açılımı javascript object notation yani javascript nesne gösterimi demektir. Aşağıdaki gibi bir kodla deneme yapabilirsiniz:


obj = {"x":1,"y":2};
alert( "obj.x="+obj.x );
alert( "obj.y="+obj.y );

Bu kod obj nesnesinin x ve y elemanlarını uyarı vererek bildirecektir. İlk gösterdiğim yöntemdeki gibi her eleman için teker teker atama yapmak yerine json tanımlamasını kullanarak nesne oluşturmanın daha kolay olduğunu görüyorsunuz.

Şimdi asıl meselemiz olan php ile javascript arasında veri aktarımına geçebiliriz. Bunun için php 5.2 sürümünden itibaren kurulum gerektirmeden kullanılabilen json_encode ve json_decode işlevlerini kullanabiliriz. Bu işlevler adlarından tahmin edeceğiniz gibi sırasıyla veriyi json biçiminde kodlayan ve kodlanmış halini php veri yapısına çeviren işlevlerdir. json_decode işlevinin kullanımına bir örnek verelim:

$json_data = '{"x":1,"y":2}';
$php_data = json_decode($json_data);
print_r($php_data);

Burada basitçe json verimizi bir değişkene atayıp json_decode işlevini uygulayarak elde ettiğimiz veriyi (nesneyi) print_r ile yazdırıyoruz. Bunun sonunda şu çıktıyı elde ederiz:

stdClass Object
(
[x] => 1
[y] => 2
)

Tahmin edeceğimiz gibi standart bir php nesnesi elde ettik. Sınıfın türü hariç aynı sonucu veren bir php kodu şu şekilde olur:

class Obj{
var $x=1;
var $y=2;
}
$obj = new Obj();
print_r($obj);

Bunun çıktısı da yukarıdaki gibi olur ancak nesnemiz kendi tanımladığımız Obj sınıfından oluşturulduğu için stdClass yerine Obj adını görürsünüz.

Hazır gelmişken bu kez de tersten gidelim ve oluşturduğumuz bu Obj nesnesini json_encode ile kodlayarak bir json çıktısı elde edelim:

class Obj{
var $x=1;
var $y=2;
}
$obj = new Obj();
$json_data = json_encode($obj);
echo $json_data;

Bu kodu çalıştırarak en baştaki javascript kodumuzda obj nesnesini oluştururken kullandığımız json nesnesini elde ederiz:

{"x":1,"y":2}

Artık json dönüşümlerinin nasıl yapıldığını biliyorsunuz. Ancak hala php ve javascript arasında nasıl veri aktarımı yapılacağından bahsetmedik. Aslında bunun nasıl yapılacağı sizin ihtiyaçlarınıza ve aktarımın hangi yönde (php 'den javascript 'e yada javascript 'den php 'ye ) olacağına bağlıdır. Önce php'den javascript'e yapılan bir aktarım örneği verelim:

<?
$php_data_1 = array( 'a',1,'php','json',2008 );
$php_data_2 = array( 'a'=>1, 'b'=>2, 'c'=>'php', 'd'=>'javascript' );

$json_data_1 = json_encode($php_data_1);
$json_data_2 = json_encode($php_data_2);
?>
<script type="text/javascript">
var nesne_1 = <?=$json_data_1?> ;
var nesne_2 = <?=$json_data_2?> ;
</script>

Bu kodun çıktısı şöyle olur:
var nesne_1 = ["a",1,"php","json",2008] ;
var nesne_2 = {"a":1,"b":2,"c":"php","d":"javascript"} ;

Bu örnekte php tarafında iki adet dizi tanımladık ve bunları json_encode ile kodlayarak javascript kodumuzdaki javascript değişkenlerine atama yapılacak şekilde kullandık. Burada fark edeceğiniz gibi birinci json verisi bir dizidir (öğeler köşeli parantezler içinde) ancak ikincisi nesnedir (öğeler küme parantezleri içinde). Bunun nedeni php'deki array verisinin isimli anahtar değerlerinden oluşması halinde (associative array) aslında bir çeşit nesne olmasıdır. Yani herhangi bir sınıftan türetmediğimiz halde ikinci dizimiz aslında bir nesnedir.

Yukarıdaki örnekte php ile tanımladığımız veriyi javascript koduna aktarmış olduk. Şimdi de bunun tersine, yani javascript ortamından php ortamına (sunucuya) verinin aktarılmasına geçelim. Bu aslında öncekinden daha zordur çünkü öncelikli olarak işlenen kod sunucuda çalıştırılan php kodlarıdır. Javascript kodları ise sunucunun tarayıcıya verdiği çıktının yorumlanması ile çalıştırılır. Önceki örneğimizdeki aktarım yönü bu sıraya uygundu ancak şimdi tarayıcıda oluşturulan yada işlenen verinin sunucuya aktarılması gerekiyor. Bunun için ya json kodunu bir karakter dizisi (string) olarak sunucuya gönderip sunucuda bu veriyi json_decode ile açarız yada veriyi ajax ile POST yada GET yöntemlerinden biriyle gönderip sunucuda $_POST, $_GET yada $_REQUEST ile erişebiliriz. Yada daha karmaşık veri aktarım durumlarında bu ikisinin bir karışımını kullanarak verinin bazı öğelerini parametrelere ayırıp post/get elemanları olarak göndeririz, bir kısmını da json olarak paketleyip yine bu parametrelerden biri olarak aktarabiliriz.

Javascript 'den php 'ye (genel olarak tarayıcıdan sunucuya) veri aktarımı yapılırken sayfanın yenilenmesini istemiyorsak AJAX (Asynchronous JavaScript and XML) kullanmamız gerekiyor. Bu konuyu ise başka bir yazıya bırakıyorum.

1 Kasım 2008

Google Chrome web tarayıcısı

Google 'ın Chrome adında yeni bir internet tarayıcısı yayınladığını belki duymuşsunuzdur. Bu tarayıcının bana (ve başka web yazılımcılarına) göre ilk dikkat çeken özelliği diğer tarayıcılara göre üstün bir javascript yorumlama hızına sahip olması. Bu konuda diğerlerinden farkı javascript kodlarını önce derleyip (V8 adını verdikleri javascript makinası ile) sonra çalıştırıyor olması. Bunun yanında adres çubuğuna (tarayıcı geçmişinden değil google 'dan alınan verilerle) adres önerileri sunması farklı bir özellik olarak öne çıkıyor. Ayrıca çökme kontrolü, gizli sekme özelliği gibi yeniliklerle henüz tam sürümü çıkmamış olmasına rağmen gayet iddialı bir çıkış yapmış gibi görünüyor.

Aşağıda google 'ın Chrome ile ilgili açıklamasını bulabilirsiniz:

Bizler Google'da zamanımızın büyük bir kısmını bir Internet tarayıcısı kullanarak geçiriyoruz. Aynı tarayıcıda arama yapıyor, chatleşiyor, e-posta gönderip alıyor ve birlikte çalışıyoruz. Herkes gibi biz de boş zamanlarımızda alışveriş yapıyor, banka hesabımızı kontrol ediyor, haberlere göz gezdiriyor ve arkadaşlarımızla konuşuyoruz. Bütün bu işlemler için de bir tarayıcı kullanıyoruz. İnsanlar her geçen gün zamanlarının daha büyük bir kısmını Internet'te geçiriyor ve 15 yıl öncesinde Internet'in ilk günlerinde akla hayale gelmeyecek şeyler yapıyor.

Internet'te bu kadar uzun zaman geçirdiğimizi gördükçe eğer sıfırdan bir tarayıcı yaratılsa nasıl olurdu diye düşünmeye başladık.

Fark ettik ki Internet, basit metin sayfalarından gelişerek zengin ve interaktif uygulamaların olduğu bir yer haline gelmişti ve bu nedenle geliştireceğimiz Internet tarayıcısını sil baştan düşünmemiz gerekiyordu.

Artık ihtiyacımız olan sadece bir tarayıcı değil, web sayfaları ve uygulamaları için modern bir platformdu ve biz de bu amaçla yola çıktık.

Çalışmalarımızın sonunda yeni bir açık kaynaklı Internet tarayıcısının beta versiyonunu yayınlıyoruz: Google Chrome.

Dışarıdan bakıldığında akıcı ve basit bir tarayıcı bir tasarladık. Bir çok insana göre Internet tarayıcısı önemli olmayan, sadece web sayfalarını ve uygulamalarını çalıştırmak için kullandığımız bir araçtır. Klasik Google ana sayfası gibi Google Chrome da hızlı ve sade. Yolunuzdan çekiliyor ve sizi gitmek istediğiniz yere götürüyor.

Yakından incelendiğinde, günümüzün karmaşık Internet tabanlı uygulamalarını çok daha iyi çalıştıran bir Internet tarayıcısının temellerini atmayı başardık. Her bir sekmeyi ayrı bir "sandbox"ta tutarak bir sekmenin diğer bir sekmeyle çakışmasını engelleyip sakıncalı web sitelerine karşı çok daha gelişmiş bir koruma sağladık. Hızı ve yanıt verebilirliği arttırdık ve ayrıca günümüz tarayıcılarında kullanımı mümkün olmayan yeni nesil internet uygulamalarını desteklemesi için daha güçlü bir JavaScript makinası olan V8'i kurduk.

Bu daha sadece başlangıç, Google Chrome varacağı noktadan çok uzak. Bu Windows için uyumlu beta versiyonunu daha geniş bir tartışma başlatmak ve en yakın zamanda sizin fikirlerinizi öğrenmek için yayınlıyoruz. Mac ve Linux uyumlu versiyonlarını da hayata geçirmek için çalışıyoruz ve Google Chrome'u çok daha hızlı ve güçlü hale getirmek için çalışmaya devam edeceğiz.

Açık kaynak projelere çok şey borçluyuz ve onların yolundan devam ediyoruz. Apple'ın WebKit ve Mozilla'nın Firefox bileşenlerinden faydalandığımız kaynaklardan sadece ikisi ve biz de bütün kodlamamızı açık kaynak yapıyoruz. Internet'in ilerlemesi için bütün açık kaynak (yazılım) topluluğu ile birlikte çalışmayı umuyoruz.

Internet artan seçenekler ve yenilikler ile sürekli gelişiyor. Google Chrome da yeni bir seçenek ve umuyoruz ki Internet'in daha da gelişmesine katkıda bulunacak.

Bu kadar anlatmak yeter. En iyisi bir de siz kendiniz Google Chrome'u test edin.

23 Ekim 2008

PhpMyAdmin Türkçe karakter sorunu

PhpMyadmin kullananlar genelde veri aktarımı yaparken (ör: başka bir sunucudan veritabanı alırken) Türkçe karakter sorunundan şikayetçidirler. Aynı sorun yakın zamanda benim de başıma gelmişti ve biraz denemeden sonra bir çözüm buldum. Phpmyadmin ile aktarmak istediğim veritabanı utf8 olarak kodlanmıştı ve bunu başka bir sunucuya kopyalamam gerekiyordu. İçeri aktar bölümünde bazı denemeler yaptım ancak birçok karakter setini denesem de değişik biçimlerde bozulmuş olan Türkçe karakterler elde ettim. En sonunda aklıma binary seçeneği geldi ve bu işe yaradı. Meğer phpmyadmin bu aktarma işlemine başlamadan önce seçilen karakter setine göre bir set names sorgusu çalıştırıyormuş. Bu yüzden kaynak veritabanı utf8 olduğunda listeden de utf8 seçtiğimde gereksiz bir dönüşüm yapmaya çalışıp Türkçe karakterleri bozuyormuş. Başka bir karakter seti seçtiğimde ise verinin gösterildiği sitenin kodlaması farklı olduğu için bozuk karakterler elde ediyordum. Sonuç olarak eğer PhpMyadmin ile içeri aktarma işlemi yapacaksanız ve kaynak veritabanının kodlaması yeni sunucuda kullanmak istediğiniz kodlamayla aynı ise karakter seti olarak binary seçin. Yalnızca farklı bir karakter setine dönüşüm yapmak istiyorsanız elde etmek istediğiniz karakter setini seçin.

jquery.ui.dialog eklentisini kullanarak pencere içinde resim göstermek

Eğer jquery.ui hakkında bilginiz varsa muhtemelen ui.dialog eklentisini duymuşsunuzdur. Bu eklenti sayfanızda sürüklenebilir ve boyutlandırılabilir pencereler oluşturmanızı sağlar. Ancak bu eklentiyi kullanırken içeriğe göre pencerenin boyutunu önceden belirlemeniz ve eklentiye aktarmanız gerekiyor. Geçenlerde dialog eklentisiyle boyutu belli olmayan bir resmi göstermek üzere bir çalışma yaptım ve paylaşmak istedim. Aşağıdaki işlevlerden newid() işlevi sayfada benzersiz id değeri oluşturan basit bir işlev. Takip eden pageWidth ve pageHeight işlevleri de (internetten buldum) sayfanın görünür boyutunu almak için kullandığım işlevler. newWindow işlevi ise daha sonra oluşturacağımız pencere için yeni bir div oluşturup ona ait seçici ifadesini dönüyor. showImageWindow işlevi de parametre olarak aldığı dosya adını ve başlık değerini kullanarak yeni bir pencere oluşturuyor ve pencerenin boyutlarını resim ekrana sığacak şekilde küçültmek üzere boyut oranını koruyarak img imindeki width yada height değerlerini ayarlıyor. Bu yöntemle genel lightbox eklentilerinin aksine aynı anda birden fazla resim penceresi gösterilebiliyor.



var uid=0;

function newid (){ return ++uid;}

function pageWidth() {
return window.innerWidth != null? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
}

function pageHeight() {
return window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
}

function newWindow(title){
var id;
var t;
t='';
if(title!=undefined){
t=' title="'+title+'" ';
}
id = 'dialog_'+newid();
$('body').append('<div id="'+id+'" '+t+'class="flora"></div>');
return '#'+id;
}

function showImageWindow(file,title){
$imgWindow = $(newWindow(title));
img = new Image();
img.src=file;
img.onload=function(){
w = img.width;
h = img.height;
r = w/h;
pagew = pageWidth();
pageh = pageHeight();
attr =null;
val ='';
if(w>(pagew-20)){
w=pagew-20;
h = w/r;
attr ="width";
val = w;
}
if(h>(pageh-50)){
h=pageh-50;
w=h*r;
attr ="height";
val = h;
}
$imgWindow.hide().html(" <img src='"+file+"' /> ");
$imgWindow.find("img[src='"+file+"']").click(function(){
$imgWindow.dialog("destroy");
});
if(attr!=null){
$imgWindow.find("img[src='"+file+"']").attr(attr,val);
}
$imgWindow.show().dialog(
{
width:parseInt(w)+20,
height:parseInt(h)+50,
modal: true,
overlay: {
opacity: 0.5,
background: "black"
}
});
$(".ui-dialog-titlebar-close").blur();
};
}

19 Ekim 2008

Live Query eklentisi

Bu yazıda size faydalı bir jquery eklentisi olan Live Query 'den bahsetmek istiyorum. Kısaca açıklamak gerekirse Livequery jquery 'de kullanılan seçicileri dinamik hale getirir. Jquery'de bir seçici ile sayfanın DOM (document object model) kapsamındaki bir yada daha fazla öğesini seçtiğinizde bu öğelerin o anda mevcut olması gerekir. Ancak livequery bu zorunluluğu ortadan kaldırır. Livequery ile yapılan seçme işlemi sayfaya sonradan eklenen öğeleri de kapsar. Örneğin sayfanıza ajax ile içerik eklediğinizde bu içerikteki öğeler daha önce kullandığınız seçicilere uysa bile artık iş işten geçmiştir çünkü siz sayfanızdaki nesneleri seçtiğinizde yeni eklenen içerik yoktu. Ancak bu seçme işlemini livequery ile yaparsanız daha sonra eklenen içerikteki uygun öğeler de bu seçime dahil olacaktır. Örneğin aşağıdaki kodu kullanarak sayfanıza daha sonradan eklenecek olan bağlantıların da tıklandığında uyarı vermesini sağlayabilirsiniz:



$('a').livequery('click', function(event){
alert('tıklandı');
return false;
});

Ayrıca livequery ile seçicinize uyan bir nesne eklendiğinde ve kaldırıldığında çalışmak üzere işlevler tanımlayabilirsiniz:



$('li').livequery(function(){
// yeni öğe eklendiğinde çalışacak olan işlev:
$(this)
.hover(function(){
$(this).addClass('hover');
},function(){
$(this).removeClass('hover');
});
},
function() {
// öğe kaldırıldığında çalışacak olan işlev:
$(this)
.unbind('mouseover')
.unbind('mouseout');
}
);

JSON doğrulama

Eğer json kullanıyorsanız ve bazen nerede hata yaptığınızı bulamıyorsanız bu site size göre:

www.jsonlint.com

Bu sitede kolayca json kodlarınızı doğrulatabilir ve hatalı olan kısımları öğrenebilirsiniz. Ayrıca json yapısını öğrenirken denemeler yapmak için faydalı olacağını düşünüyorum.

14 Ekim 2008

PHP sayfalama örneği

Sitenizde bir tabloya ait kayıtların listesini göstermek istediğinizde çoğunlukla sayfalama işlemi yapmanız gerekir. Aşağıda bunun için yazılmış basit bir örnek olarak "liste" tablosundaki kayıtları sayfalandırma işlemi yaparak listeleyen bir örnek bulabilirsiniz:


[php]
$p=intval($_GET['p']); //sayfa parametresi

$toplam_sayfa = 1;
$n = 5; // bir sayfada listelenecek kayıt sayısı
$toplam=0;
$basla = 0;

$db-&gt;query("SELECT COUNT(*) as x FROM `liste` ");
if($db-&gt;fetch_data()){
$toplam = $db-&gt;data['x'];
}

$toplam_sayfa = ceil( $toplam/$n );
$basla = ($p-1)*$n;

$db-&gt;query("SELECT * FROM `liste` LIMIT {$basla},{$n}");
while($db-&gt;fetch_data()){
// satır gösterilecek bölüm ...
}

//sayfa numaraları bölümü
for($i=1;$i&lt;=$toplam_sayfa;$i++){
echo ($p==$i)?"{$i} ":"{$i} ";
}
[/php]

Örneğimizde ilk önce sayfa parametresini $p değişkenine kaydediyoruz. (Aslında sayfa numarasını bu şekilde belirlemek yerine parametre yoksa yada pozitif tamsayı bir değer değilse sayfa numarasını 1 kabul etmek gerekir.) Daha sonra listemizdeki toplam kayıt sayısını belirliyoruz (8-11). Burada kullanılan $db daha önceden tanımlanmış bir veritabanı sınıfı nesnesidir. 13.satırda toplam sayfa sayısını belirleyip sayfamızdaki ilk satırın tablodaki sırasını belirliyoruz (13-14). Bundan sonra satırlarımızı bir döngü içinde listeleyip (16-19) ardından tüm sayfalar için sayfa numarası bağlantılarını oluşturuyoruz. Mevcut sayfaya ait sayfa noyu sabit sayı olarak diğerlerini bağlantı olarak yazıyoruz.

Sayfalama işlemi temelde bu örnekteki mantığa dayanır. Önemli olan bir sayfada kaç kayıt gösterileceğini belirleyip istenilen sayfa için başlangıç indisini hesaplamaktır. Sorgudaki LIMIT a,b için a değeri ilk satırın indisini, b ise bu kayıttan itibaren kaç kayıt alınacağını belirlemek için kullanılır.

3 Ekim 2008

Php 'de çıktı tamponu (output buffer) kullanımı

Normalde herhangi bir php kodu çalıştırdığınızda oluşan çıktı işlem anında tarayıcıya gönderilir ve bu şekilde kodun çalışmasının bitmesi beklenmeden çıktı verilmeye başlanmış olur. Ama bazı durumlarda çıtının hemen gönderilmesini istemeyiz. Örneğin, içeriği oluşturduğumuz kodun sonunda yaptığımız bir kontrol ile o ana kadar üretilen çıktının ne biçimde kullanılacağı, yada gösterilip gösterilmeyeceği gibi durumlara karar vermek isteyebiliriz. Yada sayfanın bir yerinde oluşturduğumuz çıktıyı başka bir yerde kullanmak isteyebiliriz. Bu örneklere bütün sayfa içeriğinin en başta oluşturulup daha sonra istediğimiz bir biçimde (sayfa şablonu kullanımı vb durumlar için ) kullanıcıya aktarılmasını da ekleyebiliriz. Bu gibi durumlarda çıktı tamponlama kullanabiliriz. Php 'de bunu gerçekleştirmek için çıktı tamponlaması yapılır.

Çıktı tamponu oluşturmak için öncelikle çıktının başladığı noktayı belirtmemiz gerekir. Bunun için ob_start işlevi kullanılır. Çoğunlukla bu işlevin parametreleri kullanılmaz. Çıktıyı sonlandırmak için ise kullanılabilecek çeşitli işlevler vardır. Çıktıyla ne yapmak istediğimize göre bunlardan birini kullanırız. Örneğin çıktıyı herhangi bir işlemden geçirmeden olduğu gibi aktarmak için ob_flush yada ob_end_flush işlevlerini kullanabilirsiniz. ob_end_flush işlevi çıktıyı istemciye gönderip çıktı tamponunu sonlandırır. ob_flush ise aynı işlevi çıktı tamponunu sonlandırmadan gerçekleştirir. (Ayrıca php kodunun çalışması bittiğinde çıktı sonlanmış olur ve çıktı istemciye verilir yani herhangi bir hata durumunda veya işlem bittiğinde eğer çıktı tamponunda çıktı kalmışsa istemciye gönderilir.)

Çıktıyı istemciye vermek yerine içeriğini alıp istediğimiz gibi kullanabiliriz. Bunun için ob_get_contents yada ob_get_clean işlevlerini kullanabilirsiniz. ob_get_contents işlevi çıktı tamponunun içeriğini döner. ob_get_clean ise bununla birlikte çıktı tamponunu sonlandırır. ob_get_clean işlevini çağırmak, ob_get_contents kullanıp ardından ob_clean işlevini kullanmakla aynı işlevi görür.

Çıktı tamponlaması yaparken kullanabileceğiniz bazı yardımcı işlevler de bulunmaktadır. Örneğin ob_get_length işlevi çıktı tamponundaki verinin uzunluğunu döner. ob_get_level işlevi ise mevcut tamponun derinlik seviyesini döner (İçiçe çıktı tamponları başlatabilirsiniz). ob_get_status işlevi de çıktı tamponunun durumu hakkında bilgiler içeren bir dizi döner.

Çıktı tamponu sisteminin çok kullandığı bir durum da kodun herhangi bir yerinde url yönlendirmesi yapılan kodlardır. Yönlendirme yapmak için header işlevi kulanılır ve bu işlev ile çıktının başlık bilgileri düzenlenir. Ancak bu düzenlemeyi yapabilmek için önceden istemciye herhangi bir çıktının verilmemiş olması gerekir. Eğer yönlendirme yapılan çağrıya kadar herhangi bir çıktı verilmişse başlık bilgisinin zaten gönderilmiş olduğunu belirten bir hata mesajı alırsınız. Eğer kodunuzun başında çıktı tamponu başlatırsanız ve yönlendirme yapılan çağrıya kadar herhangi bir çıktı vermezseniz böyle bir hatayla karşılaşmazsınız ve yönlendirme gerçekleşir.

Çıktı tamponlamanın (output buffering) kullanıldığı birçok başka durumla karşılaşabilirsiniz. Çıktı tamponlamayla ilgili php işlevlerinin listesi için:

http://tr2.php.net/manual/en/ref.outcontrol.php

21 Ağustos 2008

JSON veri biçimi (JavaScript Object Notation)

JSON (JavaScript Object Notation) hafif bir veri değişim biçimidir. Javascript dili üzerine oluşturulmuştur ancak bugün birçok programlama dilinde kullanılmaktadır.

Temel mantık olarak XML 'e benzer ancak XML 'de olduğu gibi imler kullanılmaz. Bu yüzden daha hafif bir yapıya sahiptir ve bu özelliğiyle tercih sebebi olmaktadır. Json biçiminin bir avantajı da yapı olarak programlama dilleriyle uyum içinde olmasıdır. En başta javascript olmak üzere C türevi dillerde kullanılmak üzere uygun bir yapıya sahiptir. Json hakkında ayrıntılı bilgiye http://www.json.org/json-tr.html adresinden ulaşabilirsiniz.

Aşağıda örnek bir json verisi verilmektedir:


{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
}

Günümüzde bu iki yapı (xml ve json) veri aktarımında sıkça kullanılmaktadır. Json biçiminde xml 'de olduğu gibi imler kullanılmadığı için veri daha az yer kaplar. Çok miktarda veri aktarımı yapılan uygulamalarda json ile xml arasındaki boyut farkı daha belirgin olmaktadır.

Json yapısını kullanırken (kodlama ve açma işlemleri için) dönüştürücü işlevlere ihtiyaç duyarsınız. Bunun için php dilinde json_encode ve json_decode işlevleri kullanılır. Javascript dilinde ise herhangi bir kütüphaneden bağımsız dönüştürme işlevleri bulabileceğiniz gibi Jquery gibi bir kütüphane için yazılmış eklentiler de kullanabilirsiniz. Ama veriyi javascript kodunuzda kendiniz oluşturuyorsanız doğrudan json yapısını kullanabilirsiniz. Bu durumda dönüştürme yapmanıza gerek yoktur.

Php ile json_encode kullanarak bir veriyi dönüştürdüğünüzde tek satırlık bir json veri yapısı elde edersiniz. Json verisini girintili olarak rahat okunabilir bir biçimde elde etmek için bu amaçla yazdığım aşağıdaki işlevi kullanabilirsiniz.


function format_json_line($json){
$json = str_split($json);
$formatted = '';
$level = 0;

foreach($json as $char){
$after="";
$before="";
$tabs="";
if($char=='{'){
$level++;
$after="n";
for($i=0;$i<$level;$i++){
$after.="t";
}
}
if($char=='}'){
$before="n";
$level--;
for($i=0;$i<$level;$i++){
$before.="t";
}
}
if($char==','){
$after="n";
for($i=0;$i<$level;$i++){
$after.="t";
}
}
$formatted.=$before.$char.$after;
}
return $formatted;
}

19 Ağustos 2008

Php 'de Mysql kullanımı

Php gibi sunucu taraflı bir dil kullanılan sitelerin çoğu veri depolamak için bir veritabanı sistemi kullanır. Şu an kullanımda olan çeşitli veritabanı sunucuları arasında php ile birlikte en sık kullanılanı MySQL dir. Bu yazıda php kodları ile nasıl mysql sunucusuna bağlanıp sorgu işlemleri gerçekleştireceğinizi ilgili işlevleri açıklayarak örneklerle anlatmaya çalışacağım. Mysql ile ilgili ayrıntılı bilgiye MySQL in resmi sitesi olan www.mysql.com 'dan ulaşabilirsiniz. Ayrıca php.net de bu konuda açıklayıcı bilgi veren ve ilgili php işlevlerini liste halinde görebileceğiniz http://tr2.php.net/mysql adresini kaynak olarak kullanabilirsiniz.

Php ile mysql işlemleri gerçekleştirebilmemiz için ilk önce mysql sunucusuna bağlanmamız gerekir. Bunun için mysql_connect işlevini kullanırız:



$link = mysql_connect($server, $username, $password);

Bu ifadedeki parametrelerimiz sırasıyla sunucu adresi, veritabanı kullanıcı adı ve şifremizdir. mysql_connect işlevi elde edilen bağlantıya ait bir kaynak döner ancak çoğu zaman bunu kullanmaya ihtiyaç duymayız. Ancak aynı kod içinde birden fazla veritabanına eşzamanlı olarak bağlantı sağlamak istiyorsak varsayılan olarak en son yapılan bağlantı kullanıldığı için bunun haricindeki bağlantılarla ilgili sorgulamalarda ilgili kaynak değişkenini kullanırız. Çoğu zaman böyle bir durumla karşılaşmazsınız. Bağlantının başarısız olması durumunda dönüş değeri FALSE olur.

Bağlantı sağlandıktan sonra ilk yapmamız gereken veritabanı seçimi yapmaktır. Bunun için mysql_select_db işlevini kullanırız.



bool mysql_select_db ( string $database_name [, resource $link_identifier ] )


Zorunlu olan tek parametre veritabanı adıdır. İkinci parametre ise kullanmak istediğimiz bağlantıya ait kaynak bağlantı değişkenidir. Bu işlev de başarılı olma durumunda TRUE , hata durumunda FALSE değerini döner.

Veritabanı seçimi de başarıyla tamamlandığında artık sorgulama yapabiliriz. Bunun için ise mysql_query işlevi kullanılır.



resource mysql_query ( string $query [, resource $link_identifier ] )

Bu işlevi bir örnekle açıklayalım:


$sonuc = mysql_query("SELECT * FROM `uyeler` WHERE `id`=12 ");

Bu ifadeyle uyeler tablosunda id değeri 12 olan kaydı elde etmek üzere sorgulama yapıyoruz. Birden fazla bağlantı açtığımız özel bir durum olmadığı sürece ikinci parametreyi kullanmaya ihtiyacımız olmayacak. Bu işlev ile sorgudan elde edilen sonucu bir değişkene kaydediyoruz. Bu sonuç değişkeni sorguyla elde ettiğimiz kayıtları toplu halde içerir ve bu kayıtları sırayla elde etmek için kayıt getirme işlevlerinden birini kullanırız. Bunlar mysql_ fetch_ row, mysql_ fetch_ assoc, mysql_ fetch_ array ve mysql_ fetch_ object işlevleridir. Bu işlevlerin herbiri sonuç verimizin içinden bir kayıt satır çeker.

Elde etmek istediğimiz satırı
mysql_fetch_row işleviyle sayısal indisli bir dizi olarak,
mysql_fetch_assoc işleviyle tablodaki sütun adlarıyla ilişkili bir dizi olarak,
mysql_fetch_array işleviyle ister sayısal, ister ilişkisel, ister her iki türde indisli bir dizi olarak,
mysql_fetch_object işleviyle ise sütun adlarında değişkenlere sahip bir nesne olarak
elde ederiz.

mysql_fetch_assoc işlevi ile bir örnek gösterelim:




$satir = mysql_fetch_assoc($sonuc);
$kullanici_adi = $satir['kullanici_adi'];
...

Bu şekilde elde ettiğimiz satırın sütunlarına erişebiliriz. mysql_fetch_object işlevini kullanmış olsaydık kullanıcı adını

$kullanici_adi = $satir->kullanici_adi ;

şeklinde bir nesne öğesi olarak elde edecektik. Birden fazla kayıt elde etmek için ise aşağıdaki gibi bir döngü kullanabiliriz:


while($satir = mysql_fetch_assoc($sonuc) ){
echo 'Kullanıcı adı: '.$satir['kullanici_adi'];
}

Sorgu sonucuna ait bütün satırlar bittiğinde mysql_fetch_assoc (yada diğer işlevlerden biri) FALSE döneceğinden döngü sona erecektir. Bu şekilde elde ettiğimiz verileri istediğimiz şekilde kullanabiliriz.

Sorgu sonucuna ait veriyi serbest bırakmak için mysql_ free_ result işlevini kullanabilirsiniz. Ama bunun yerine aynı sonuç değişkenini başka sorgularda da kullanabilirsiniz.

Bağlantıyı bitirmek istediğinizde mysql_ close işlevini kullanabilirsiniz. Bu genelde pek kullanılmaz çünkü kodun çalışması sona erdiğinde bağlantı zaten kesilecektir.

18 Ağustos 2008

JQuery Javascript kütüphanesi hakkında

Jquery basitçe John Resig tarafından geliştirilmeye başlanmış ve bugüne kadar birçok kişi tarafından eklentisi yazılmış olan kullanımı kolay bir javascript kütüphanesi olarak tanımlanabilir. Jquery.com anasayfasında basit bir örnek var ve bu örnek çok kısa bir javascript koduyla nasıl ilginç ve faydalı şeyler yapabileceğinizi göstermek üzere yazılmış uygulamalı bir tanıtım kodu. Jquery ile belgenizdeki herhangi bir öğeye erişmek için fazla çaba sarfetmenize gerek yok. Kolayca herhangi bir öğeye erişebilir, içeriğini değiştirebilir, css özelliklerini değiştirebilir, animasyon uygulayabilirsiniz. Bunun yanında çok faydalı bir kullanım alanı da ajax uygulamaları geliştirmek. Kütüphanenin son sürümünün (v1.2.3) boyutu yaklaşık 100 kb ama paketlenmiş hali 30kb yani birçok web sitesinde bulunan resim dosyaları kadar. Bu yüzden verimli bir şekilde kullanılabiliyor.

Jquery, yapısı gereği eklenti yazmaya çok uygun. Jquery için yazılmış eklentileri sitesindeki plugins bölümünde bulabilirsiniz. Aklınıza gelebilecek her türlü ihtiyaç için eklentiler yazılmış. Jquery ifadeleri klasik yapısal programlama ifadelerinden biraz farklı bir yapıya sahip. Herşeyden önce ihtiyacınız olan işlemleri yapmak için farklı ifadeler kullanmak yerine zincirleme bir işlemler dizisi kullanabilirsiniz. Çünkü herhangi bir işleve yapılan çağrı yine bir jquery nesnesi döndürüyor ve bu sayede üzerinde tekrar tekrar işlem yapabileceğiniz zincirleme ifadeler oluşturabilirsiniz. Jquery.com da yer alan örnek ifadeye bir göz atalım:


$("p.surprise").addClass("ohmy").show("slow");

Burada ilk dikkatinizi çeken $ işareti aslında jquery nesnesini oluşturan temel işlevin adı. Bazı kaynaklarda bunun yerine jquery() kullanıldığını görebilirsiniz. $ şeklindeki kullanımın işleri kolaylaştırmak için sonradan eklendiğini tahmin ediyorum.

Parametre olarak verilen "p.surprise" ise bir seçici sözcesi. Yeri gelmişken, jquery 'deki query kelimesi Türkçe'de sorgu anlamına geldiğini söylemeliyim. Jquery ile sanki bir veritabanında sorgulama yapıyormuş gibi sayfanızın tamamında yada herhangi bir bölümünde istediğiniz koşullara uyan öğelere erişebilirsiniz. Bu sizi şaşırtmasın çünkü jquery ile sadece sayfanızdaki herhangi bir öğeye değil aslında bir eşlemeye uyan tüm öğelere erişirsiniz. Yani jquery içsel bir döngüyle çalışır. Hatta each işlevi ile bu sorgudan dönen sonuçlar üzerinde bir döngü kurabilir ve her öğe üzerinde işlem yapabilirsiniz.

Örneği açıklamaya devam edelim. İfademizin ilk kısmı olan $("p.surprise") ile surprise sınıfıyla tanımlanmış tüm p imlerine yani tüm paragraf öğelerine erişiyoruz. Yani bu ifade ile sayfamızda bulunan


<p class="surprise">merhaba jquery</p>

şeklinde bir öğeyi (ve varsa diğerlerini de) elde ederiz. Zincirin ikinci kısmı olan .addClass("ohmy") ile bu öğeye ohmy sınıfını ekliyoruz. Paragrafımızın yeni hali şöyle oluyor:


<p class="surprise ohmy">merhaba jquery</p>

İfademiz, zincirimizin son parçası olan .show("slow") ile tamamlanıyor. Burada paragraf öğemizi bir efekt kullanarak görünür kılıyoruz ve hızını da parametre olarak verdiğimiz değerle ayarlıyoruz. Bu değer örnekteki gibi öntanımlı sabitlerden biri de olabilir (slow,normal,fast) ms cinsinden zaman da olabilir. Ayrıca jquery ile kendi animasyonlarınızı da oluşturabilirsiniz. Sayısal olarak arttırılabilir değerlerden oluşan iki grup css sınıfı arasında belirli bir zaman içinde geçiş yaparak istediğiniz animasyonları oluşturabilirsiniz.

Yazımın sonunda ilgilenenler için çok faydalı olacağını düşündüğüm görsel bir jquery rehberi sitesinin adresini vermek istiyorum. Visualjquery.com adresinde jquery kütüphanesinin işlevlerini kategorilere ayrılmış olarak listeleyen ve örneklerle açıklayan bir rehber bulabilirsiniz. Sitenin kendisinin jquery ile oluşturulduğunu belirtmeme gerek yoktur sanırım.

17 Ağustos 2008

PHP Hakkında

Php, sunucu taraflı betiksel (script, scripting) bir programlama dilidir. Nesneye yönelik programlamayı destekler ve C tarzı bir sözdizime sahiptir. Daha önce C, C++, Java gibi bir dille ilgilendiyseniz Php 'ye çok kolay uyum sağlayabilirsiniz. Sürekli geliştirilir ve ücretsizdir. Ayrıca neredeyse bütün işletim sistemleri ve platformlarda çalışabilir.

Php kelimesi ilk başta "Personal Home Page" kelimelerinin kısaltması olarak ortaya çıktı ancak daha sonra aynı GNU (Gnu is Not Unix) gibi özyinelemeli (recursive) bir üslupla Php Hypertext Preprocessor (PHP) haline geldi.

Php esnek bir dildir. Örneğin java gibi sıkı tip denetimine sahip değildir. Bir değişkeni kullanmak için onu önceden tanımlamış olmanız gerekmez. Kullanmaya başladığınız anda o değişken tanımlanmış olur ve ona uyguladığınız işlemlere göre biçim değiştirir. Örneğin bir sayı değişkenini karakter katarıyla bitiştirip aynı değişkene atadığınızda o artık bir sayı değil bir karakter katarıdır. Bu konuda ayrıntıya girmeyeceğim ama şunu bilin ki bu ve bunun gibi birçok esneklik programcıya oluşturmak istediği yazılıma odaklanırken kolaylık sağlar ancak bu imkanlar hata yaptığınızda onu farketmenizi zorlaştırır. Bu yüzden sadece sunucunun vereceği olası hata mesajlarına itibar ederek hata almadığınız sürece hızla ilerlemek yerine kontrollü bir şekilde ve sürekli test ederek yazılımınızı geliştirmeye deam etmelisiiniz.

Hazır "yazılım" kelimesinin yeri gelmişken bir konuya açıklık getirmek istiyorum: Php bazılarının düşündüğü gibi sadece bir web sitesi geliştirme şablon aracı değildir. İlk çıktığında belki amacı bu yöndeydi ama sürekli geliştirilmesiyle günümüzde internet üzerinde kullanıma yönelik her türlü yazılımın geliştirme ortamı olmuştur. Php web sitesi oluşturmada şablon oluşturma amacının dışında veritabanı uygulamaları -aslında veritabanı kullanmayan büyük ölçekli php yazılımı yok gibidir- , kontrol panelleri, çok kullanıcılı sistemler (forumlar, paylaşım siteleri vs.), alışveriş siteleri, bazı türde oyun siteleri, kurumsal kaynak planlama yazılımları ve şu an aklıma gelmeyen birçok alanda, özet olarak doğrudan kullanıcı - donanım etkileşimi gerektirmeyen ve kullanım arayüzü sistemi olarak web tarayıcılarının yeterli olduğu her yazılım türü için php dili kullanılabilir. Ayrıca birçok masaüstü yazılımının da php veya benzeri bir dille yazılmış sunucu taraflı bileşenleri vardır.

Php dili için asıl kaynak php dilinin resmi sitesi olan Php.net dir. Bu adreste dilin özellikleri ve yapısı hakkında her türlü bilgiye ulaşılabileceği gibi muhtemelen en çok sevilen özelliği olan arama motorunu kullanarak istediğiniz işlevlere, sınıf özelliklerine, standart değişken tanımlamalarına ve bunlar gibi php ile ilgili ihtiyacınız olan bilgilere kolayca erişebilmenizdir. Bunun yanında başvuru niteliğinde ve örneklerle zenginleştirilmiş bir php kitabı alarak (mysql kullanımı ve apache kurulum bilgileri de içermesi tercih sebebidir) düzenli bir sıra ile konuları takip edebilirsiniz.

Kripto paralar hakkında

Kripto paralar, merkezi olmayan, şifrelenmiş ve dağıtılmış bir veritabanı olan blok zinciri teknolojisi kullanılarak oluşturulan dijital par...