Herkese merhaba arkadaşlar. Bugün sizlere oldukça önemli bir konu hakkında yazmak istiyorum. Biliyorsunuz ki As3 tek başına veritabanına bağlantı sağlayamıyor. Zaten en büyük problemlerinden biri de bu. Sırf bu yüzden php kullanıyoruz. Fakat birçok kod, tekrar eden fonksiyonlar boşuna veri transferini yavaşlatıyordu. Sonra Flex teknolojileri çıktı, ardından da Php yi kullanarak daha da pratikleştiren sistemler. İşte AmfPhp de bunlardan biri…

Arkadaşlar AmfPhp sistemleri Flash dan yollanan verileri dizi şeklinde alır ve Php deki sınıf halindeki fonksiyonlarda çalıştırır. Yani tek tek veri yazmaya gerek yoktur. Diyelim ki A3 ile bir blog yaptınız. OOP nerede kullanılmalı yazımdaki gibi hemen islem isimli bir sınıfta yarattınız. İşte AmfPhp veriyi direkt islem isimli sınıftan işliyor. Bu sayede araya başka kodlar girmiyor. Hatta AmfPhp normal veri transferinden kat kat daha hızlı. Ayrıca Php nin sınıf halinde olması da cabası!

Eğer gözleriniz büyüdüyse ve ağzınızda bir kuruluk hissediyorsanız hemen alttan devam edelim;

Öncelikle nasıl kurulur ona bakıcaz. Hemen şu adresten AmfPhp 1.9 Beta yı indiriyoruz.

Sonra içerisindeki amfphp isimli klasörü localhosta ( veya kendi hostunuza ) atıyoruz. Sonra deneme amaçlı olarak http://localhost/amfphp/gateway.php adresini kontrol ediyoruz. Eğer ki;

amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash.

Diye bir girişi varsa herşey yolunda demektir! Değilse eğer klasörü tam attığınıza dikkat edin. Neyse devam edelim. Sonra; Load the service browser isimli linke tıklatıyoruz. Karşımıza bizden birşey isteyen ufak bir panel geliyor. Ona save diyoruz ve veri transferi için yolumuzu açıyoruz. Gördüğünüz gibi sistem paneli oldukça ferah. İşlemlerimizin çıktılarını da oradan alabileceğiz. Neyse bu sayfa açık olarak kalıyor ve şu Php dosyasını AmfPhp klasörü altındaki services isimli klasöre islem ismiyle kaydediyoruz;

<?
class islem {
function islem() {
$db = mysql_connect("localhost","root","");
mysql_select_db("sozluk",$db);
}
public function yap($veri) {
$values = array(
'sozcuk' =>$veri['sozcuk'],
'karsilik' =>$veri['karsilik']
);
$this->ekle('kelimeler',$values);

}
private function ekle($tablo,$veri) {
$sql = "INSERT INTO ".$tablo." (";
foreach($veri as $sutun=>$ekle) {
if($s_sql!="") $s_sql.=",";
$s_sql.=$sutun;
if($e_sql != "") $e_sql.=",";
$e_sql.="'".$ekle."'";
}
$sql.=$s_sql.") values (".$e_sql.")";
mysql_query($sql) or die ("Sorguda Problem Var!");
return true;
}
function al() {
return mysql_query("SELECT sozcuk,karsilik FROM kelimeler");
}
}
?>

Bu dosya bizim veri transferimizde hayati önem taşıyor. Bütün veriler buradan yapılacak. Öncelikle sınıfımızı tanımlıyor ve sınıf ile aynı isime sahip olan veritabanına bağlantı fonksiyonunu yazıyoruz. Sonra ( sözlük scriptimiz ) Flash dan verileri alıp, veritabanına yazdıran asıl fonksiyonu yazıyoruz. Buradan dizi halinde gelen verileri çekiyoruz ve ekle isimli fonksiyonu çalıştırıyoruz. Ekle fonksiyonunda veri tabanına veriler ekleniyor…

Ve ardından al isimli fonksiyon geliyor. Burada ise sozluk ve karsilik isimli sutunlar seçiliyor ve return ediliyor. Return ediyoruz çünkü geri dönen kodları Flash içerisinde anlamlı hale getireceğiz…

Öncelikle Flash ı açıyoruz. Sonra sozcuk ve karsilik isimli iki tane text alanı yaratıyoruz. Yolla isimli butonuda koyduktan sonra frameye şu kodları ekliyoruz;

yolla.addEventListener(MouseEvent.CLICK,veriyolla);
function veriyolla(event:MouseEvent){
var veriler:Object={sozcuk:sozcuk.text,karsilik:karsilik.text}
var baglanti:NetConnection= new NetConnection();
var geri:Responder = new Responder(basarili,sorunlu);
baglanti.connect("http://localhost/amfphp/gateway.php");
baglanti.call("islem.yap",geri,veriler);
}
function basarili(tamam:Object){
trace("İşlem Tamam!");
}
function sorunlu(sorun:Object){
trace("Bağlantı yapılamadı!");
}

Burada yolla isimli butona tıklandığı anda veriyolla isimli fonksiyonu çalıştırıyoruz. Öncelikle yollanacak veriler için bir obje tanımlıyoruz ve sutun->veri şeklinde verileri ekliyoruz. Ardından net bağlantısı tanımlıyoruz ve asıl kodlara geçiyoruz. Geri isimli anahtar ile sistemden geri gelen mesajlar alınıyor. Ardından baglanti isimli bağlantı ile gateway isimli asıl dosyaya bağlantı yapıyoruz ve ilk önce sınıf adımız olan islem ve onun altındaki yap isimli fonksiyona verilerimizi yollayacağımızı söylüyoruz. Geri kalanı ise başarılı ve sorunlu olarak kontrol etmek…

Bu kodlar sayesinde veri tabanına verilerimizi kaydedebiliriz. Peki veri okumak istersek?

var baglanti:NetConnection = new NetConnection();
baglanti.connect("http://localhost/amfphp/gateway.php");
var geri:Responder = new Responder(sonuc, sorun);
function sonuc(sonuclar:Object):void
{
var veriler:Array = sonuclar.serverInfo.initialData;
for(var i:uint=0; i<veriler.length; i++)
{
trace(veriler[i]);
}
}
function sorun(sonuclar:Object):void
{
for(var i in sonuclar)
{
trace(sonuclar[i]);
}
}
baglanti.call("islem.al", geri);

Kodlarını kullanıyoruz. Anlattığım kısımları geçerek asıl yere geliyorum. Geri gelen dizi şeklindeki verileri As3 ün anlayacağı bir diziye atıyoruz ardından yazdırıyoruz. Eğer sorunlu ise diziyi anlamlı hale getirip yazdırıyoruz. Bu arada islem altındaki al isimli fonksiyon çalışıyor…

Şimdi kapatmadığımız veri paneline geri dönüyoruz. Sayfayı yeniliyoruz ve islem.php yi görüyoruz. Altında ise al ve yap var. Ekle ise yok. Çünkü ekle private yani özel olarak tanımlandı… Neyse istersek oradan manuel çalıştırmada yapabiliriz. Mesela al isimli fonksiyonu seçip call dersek altta ufak bir tab menü açılacaktır. Info da veri transfer hızları, results da geri gelen sonuçlar, tree view da bu sonuçların ağaç halini almış düzenli şeklini, record set view da ise datagrid şeklindeki en anlamlı halini görüyoruz. Trace ise Php den gelen mesajlar yer alıyor…

Evet arkadaşlar şimdilik bu kadar. Ben kesinlikle sizlere AmfPhp yi öneriyorum. Ayrıca bir müjdem var. AmfPhp nin görsel dersi de yakında!

Şimdilik herkese iyi günler, iyi çalışmalar…