Nis
9
2010

Actionscript 3.0 – Php – MySql veri alışverişi

Merhaba arkadaşlar. Bu yazımda Actionscript 3.0 ve php ile veritabanından veri çekmeyi, veritabanına veri göndermeyi anlatacağım. Tabi bunu çok basit düzeyde ve amatörce anlatacağım. Bu şekilde anlatacağım çünkü öncelikle bu kullanımı bilmeliyiz. Daha sonra veri alışverişleri için daha farklı yöntemler sınıflar araçlar kullanabiliriz.

Şimdi anlatıma başlayalım.

Bu örneği bir soru için hazırlamıştım. Aranılan kişinin puanını ekranda gösteren bir uygulama.

Öncelikle aşağıdaki gibi bir sahne oluşturalım.


Burada ilk text kutusunun instance name’i “aramaTxt” butonunkisi “veriGetirBtn” alttaki textarea’nınki ise “sonucTxt”.
Bu işlemden sonra veritabanını oluşturalım. Veritabanı işlemleri için sqlyog programını kullanıyorum. Phpmyadmin den çok daha kullanışlı ve pratik. Şu adresten kendisine ulaşabilirsiniz.

Tablomuzun ismi puantaj. Ve son görüntüsü şu şekilde:

Şimdide flash içinde kodlamaya başlayalım. Kodlarımızı satır satır açıklayacağım.

Actionscript:
  1. var yol:String = "http://localhost/veriCek.php";
  2. //nereden veri çekileceğini belirttik. siz isteğinize göre değiştirebilirsiniz bu yolu...
  3.  
  4. kisileriGetir();
  5.  
  6. function kisileriGetir():void
  7. {
  8. var adres:URLRequest = new URLRequest(yol);
  9. //önceden belirlediğimiz yoldaki php dosyasına istek göndermak için adres isimli bir URLRequest nesnesi tanımladık.
  10. var veriler:URLVariables = new URLVariables();
  11. //göndereceğimiz veriyi taşıması için bir URLVariables değişkeni tanımladık.
  12. veriler.islem = "hepsi";
  13. //yapılacak işlemi seçmek için birde islem isimli değişken oluşturduk.
  14. adres.method = URLRequestMethod.POST;
  15. //URLRequest nesnemizin hangi yolla verileri göndereceğini belirledik.
  16. adres.data = veriler;
  17. //URLRequest nesnemize verilerimizi ekledik.
  18. sendToURL(adres);
  19. //ve son olarak gönderdik.
  20. var yukle:URLLoader = new URLLoader();
  21. //yukle isimli URLLoader nesnemizi tanımladık. bunla php den dönen verileri alıcaz.
  22. yukle.load(adres);
  23. yukle.addEventListener(Event.COMPLETE, yuklendi);
  24. //yukle isimli URLLoader nesnemiz verileri yüklediğinde yuklendi fonksiyonu çalışacak.
  25. }
  26.  
  27. veriGetirBtn.addEventListener(MouseEvent.CLICK,veriGetirFnk);
  28. //butona click olayı sonucunda çalıştıracağı fonksiyonu atadık.
  29.  
  30. function veriGetirFnk(e:MouseEvent):void
  31. {
  32. var adres:URLRequest = new URLRequest(yol);
  33. var veriler:URLVariables = new URLVariables();
  34. veriler.aranan_isim = aramaTxt.text;
  35. veriler.islem = "tektek";
  36. adres.method = URLRequestMethod.POST;
  37. adres.data = veriler;
  38. sendToURL(adres);
  39. var yukle:URLLoader = new URLLoader();
  40. yukle.load(adres);
  41. yukle.addEventListener(Event.COMPLETE, yuklendi);
  42. }
  43.  
  44. function yuklendi(e:Event):void
  45. {
  46. sonucTxt.text = "";
  47. //sonucların yazılacağı metin alanını temizledik.
  48. var gelenler:URLVariables = new URLVariables(URLLoader(e.target).data);
  49. //gelen verileri almak için URLVariables değişkeni tanımladık ve yüklenen veriyi uygun şekilde ona aktardık.
  50. if (gelenler.sonuc == "yok")
  51. {// eğer gelen bişey yok ise kayıt yok diyecek.
  52. sonucTxt.text = "Böyle bir kayıt yok.";
  53. }
  54. else
  55. {//varsa uygun şekeilde yazacak.
  56. sonucTxt.htmlText = gelenler.sonuc;
  57. }
  58. aramaTxt.text = "";
  59. }

Tüm açıklamaları yukarıda tek tek yazdım. Şimdi php kısmına bir göz atalım. Yukarıdaki veriler objesinde taşınan verilerimiz bizim için çok değerli. Phpde ona uygun şekilde çekmemiz gerekiyor. Şimdi php kodlarını gene açıklamalı olarak yazalım.

PHP:
  1. <?php
  2. $baglanti = mysql_connect("localhost","root","");
  3. mysql_select_db("asphpiletisim", $baglanti);
  4. //
  5. //Veritabanı bağlantısını kurduk.
  6.  
  7. $islem = $_POST['islem'];
  8. //flash içinden gönderilen veriyi çektik.
  9.  
  10. if($islem=="tektek")
  11. {
  12. $isim=$_POST['aranan_isim'];
  13. $sorgu = mysql_query("select * from puantaj where isim='$isim'");
  14. $gelen = mysql_fetch_assoc($sorgu);
  15. //bu veriyi veritabanından sorgulattık.
  16.  
  17. if($gelen)//dönen bir veri var ise
  18. {
  19. echo "sonuc=".$isim."-&amp;gt;".$gelen['puan'];
  20. //sonuc=100 şeklinde yazdırdık.
  21. //flash içinde de gelen verileri gelenler.sonuc şeklinde çekmiştik. buradan ona uygun şekilde gönderdik çünkü.
  22. }
  23. else//herhangi bir kayıt yoksa
  24. {
  25. echo "sonuc=yok";
  26. }
  27. }
  28. elseif($islem=="hepsi")
  29. {
  30. $sorgu = mysql_query("select * from puantaj");
  31. $sonuclar="sonuc=";
  32. while($gelen = mysql_fetch_assoc($sorgu))
  33. {
  34. $sonuclar .= $gelen['isim']."-&amp;gt;".$gelen['puan']."&amp;lt;br /&amp;gt;";
  35. //her bir satırdaki veriyi altalta gelecek şekilde bir değişkene attık.
  36. }
  37. echo $sonuclar;
  38. //daha sonra bunları ekrana yazdırdık.
  39. }

Php dosyamızda bu şekilde gene açıklamaları direkt olarak altlarına yazdım. Bu işlemler sonucunda arama ve ekrana yazdırma işlemlerini yapabiliyoruz. Olay bundan ibaret ama sizinde gördüğünüz gibi çok karışık. Bunun yerine bir veritabanı sınıfı yada aracı kullanmanız zamanınızı kısaltacak size saç baş yoldurtmayacaktır :) Bu yöntemde bir yerde hata çıkması demek hatayı bulana kadar sinir olmak demektir :)

Bu çalışmanın tüm dosyalarını şuradan indirebilirsiniz.

Kolay gelsin. Takıldığınız noktalarda soru sormaktan çekinmeyin…

( Not: Yakın bir zamanda bu konuyla ilgili daha anlaşılır ve daha zengin içeriğe sahip bir makale yayınlayacağım. )
( Not2: Bu konu ile ilgili daha basit ve anlaşılır olan makalem şurada: Php – AS3 veri iletişimi [Actionscript PhpData Class] )

Related Posts

About the Author:

2010 Dokuz Eylül Mezunu | Flash/Flex Developer | Actionscript Lover | Addicted to Php/MySql | Junior Android&iOS Developer

27 Comments + Add Comment

  • selamlar.farzedinki flash dosyamızda iki ayrı text kutusu var ve bu iki ayrı text kutsundaki isimlerin puanlarını çekecez.(sonuctxt1 ve sonuctxt2 adlarında)
    şöyle yaptım olmadı

    var yol:String=”veriCek.php”;
    var adres:URLRequest = new URLRequest(yol);
    var veriler:URLVariables = new URLVariables();
    veriler.aranan_isim=sonuc1txt.text;
    adres.method=URLRequestMethod.POST;
    adres.data=veriler;
    sendToURL(adres);
    var yukle:URLLoader = new URLLoader();
    yukle.load(adres);
    yukle.addEventListener(Event.COMPLETE, yuklendi);
    function yuklendi(e:Event):void{
    var gelenler:URLVariables = new URLVariables(URLLoader(e.target).data);
    sonuc1txt.text=sonuc1txt.text+” “+gelenler.sonuc;
    sonuc2txt.text=sonuc2txt.text+” “+gelenler.sonuc
    }

    • sonuctxt1 ve sonuctxt2 adlarında demişsiniz ama gönderdiğiniz veri buna uygun değil veriler.aranan_isim=sonuc1txt.text; yazmışsınız.

      yani “veriler.aranan_isim = sonuctxt1.text” olmalı isimlerde hata var.

  • hocam, flash dosyamın içinde bir adet text kutusu var ve adı sonuctxt1
    bu yazı kutusundaki isimin puanı aşağıdaki kodlarla çekiliyor.burada bir sıkıntı yok. ama bir text kutusu daha var ve adı sonuctxt2. istediğim bu kutu içinde yazan isminde puanını aynı anda çekmek. işte sıkıntı burada başlıyor .bir kutudan veri çekildiği halde ikincisinden çekemiyorum.

    var yol:String=”veriCek.php”;
    var adres:URLRequest = new URLRequest(yol);
    var veriler:URLVariables = new URLVariables();
    veriler.aranan_isim=sonuc1txt.text;
    adres.method=URLRequestMethod.POST;
    adres.data=veriler;
    sendToURL(adres);
    var yukle:URLLoader = new URLLoader();
    yukle.load(adres);
    yukle.addEventListener(Event.COMPLETE, yuklendi);
    function yuklendi(e:Event):void{
    var gelenler:URLVariables = new URLVariables(URLLoader(e.target).data);
    sonuc1txt.text=sonuc1txt.text+” “+gelenler.sonuc;

  • isimleri düzeltiyorum.özür dilerim
    sonuctxt1 ve sonuctxt2 olacak. buraya yanlış yazmışım sorunun bununla alakası yok

    • veriler.aranan_isim=sonuctxt1.text; den sonra birde veriler.aranan_isim2=sonuctxt2.text; eklemelisiniz. yani diğer textteki veriyide göndermelisiniz php ye. daha sonra php tarafında buna göre işlem yapıp göndermelisiniz.
      php tarafında da:
      $isim2= $_POST['aranan_isim2']; demeniz yeterli olacaktır.

    • veriler.aranan_isim=sonuc1txt.text;
      veriler.aranan_isim2=sonuc2txt.text;

      şeklinde olmalı

    • $isim2= $_POST['aranan_isim2'];
      şeklinde de php den çekeceksiniz. daha sonra her bir isim için ayrı ayrı sorgulama yapmalısınız. bence önce php de iki farklı isim ile deneyin. veritabanından iki farklı ismin puanlarını çekebiliyorsanız sorunsuzca bunları flasha göndermek için sadece kurallı şekilde ekrana yazdırmak gerekiyor. önce sadece php ile deneyin derim.

      • sorgulama işlemini ikinci isim içinde yapıp farklı bir değişkene atmanız lazım.
        daha sonra bu verileri birleştirip flash içinde tekrardan çözümlemeniz gerekecek. yada tüm verileri xml şeklinde yazdırabilirsiniz. bu şekilde flash içerisinde xml kullanır gibi verileri alabilirsiniz.

  • hocam kısac şöyle açıklayayım.farzedinki iki adet flashta text kutusu bu textin içinde isimler yazılı ve o isimlerin puanları(bunlar daha önce vt ye kaydedilmiştir)bulup puanlarını flasha çekmek.
    yani sizin örnekte gönderdiğiniz çalışmanın bu sefer iki text kutulusunu düşünün.iki ayrı text kutusunda yazılmış isimlerin puanlarını aynı anda flasha balmalıyım

  • özür dileirm aynı anda yazmışız cevabınızı okuyamadım.dediğiniz şeyi zaten yaptım.onu denedim
    veriler.aranan_isim=sonuc1txt.text;
    veriler.aranan_isim=sonuc2txt.text;
    iknci veride undefined çıktısı alıyorum

  • denedim.sonuç değişmedi

  • php kodunda ikinci bir post tanıttık diyelim.ve böyle oldu peki sorguda nasıl bir değişiklik yapmamız lazım o zaman burada da bir değişiklik yapmamız gerekir
    $sorgu = mysql_query(“select * from tablo where ilkad=’$isim’”);

  • $baglanti = mysql_connect(“localhost”,”root”,”");
    mysql_select_db(“updatee”, $baglanti);
    //
    //Veritabanı bağlantısını kurduk.

    $isim = $_POST['aranan_isim'];
    $isim 2= $_POST['aranan_isim2'];

    //flash içinden gönderilen veriyi çektik.

    $sorgu = mysql_query(“select * from tablo where ilkad=’$isim’”);
    $gelen = mysql_fetch_assoc($sorgu);
    //bu veriyi veritabanından sorgulattık.

    if($gelen)//dönen bir veri var ise
    {
    echo “sonuc=”.$gelen['yas'];
    }
    else //herhangi bir kayıt yoksa
    {
    echo “sonuc=böyle bir kayıt yoktur”;
    }

  • hocam çalışmanızın dosyalarini indirdim ama calistirdigim zaman flash icindeki kodlamada php dosyasinin yolunu belirttigimiz kodda hata aliorum.

    var yol:String = “http://localhost/deneme/veriCek.php”;

    bu kisimda xamp ile bir localhost oluşturmadan php dosyasinin yolunu nasil gosterebilirim. yani php dosyasi masaustumdeki bir klasörde olduguna göre dosya yolu olarak yukardaki kodlama kisminda tirnak icine ne yazmaliyim. aşagidaki gibi yaziyorum ama olmuyor..

    var yol:String = “C:\Users\gkhnmr\Desktop\as3_php_iletisim\veriCek.php”;

    • xampp ‘ı kullanmak zorundasınız. php dosyasının çalıştırılabilmesi için bu şart. masaüstündeki php dosyası ile işlem yapamazsınız.

  • teşekkürler..

  • php dosyalarını hostumuza atıp çalıştırsak ?

    • olur fakat “http://localhost/deneme/veriCek.php” bölümünü hostunuzdaki dosyanın yolu ile değiştirmelisiniz.

  • Hocam biz bunu sözlük olarak kullanıcaz.Kelime aratıp anlamları çıkacak şekilde.Yalnız buna bir de kelime ekleme bölümü yapmak istiyoruz.Veritabanına flash üzerinden bu veri eklemeyi nasıl yaparız ?

    • yine aynı şekilde flash ile verilerinizi post ediyorsunuz. php den bu verileri çekiyorsunuz. (php bilginizin olduğunu farzediyorum.) daha sonra veritabanına kayıt için ilgili mysql kodlarını kullanıyorsunuz. mysql_query(“insert into ……”) şeklinde php+sql yardımı ile işlemi gerçekleştiriyorsunuz. php konusunda sıkıntı yaşarsanız öncelikle sadece php den veritabanına kayıt yapmaya çalışın. bunu çözdükten sonra gerisi çok kolay olacaktır.

  • [...] önce şu yazımda anlattığım olayı birazcık basitleştiren bir sınıf yazdım. Daha doğrusu ben bu işte çok [...]

  • Selamlar öncelikle yapılan yorumlara kısa sürede cevap veridğiniz için ilginizden dolayı teşekkür ederim. Flash içine mysql den direk olarak veri çekilemediğini sanıyordum arada XML olması gerekli diye duymuştum fakat burada aktarıldığı gözüküyor. Bu mantıkla flash ile bir blog hazırlanabilir mi? sizin kodlarınızda puan kısmına bir metin girdim fakat görüntülenirken türkçe karakter sorunu ile karşılaştım “System.useCodePage = true ;” kullandım ama düzelmedi sebebi nedir acaba şimdiden teşekkürler…

    • Flash içine mysql den veri çekilebilir ama bir ara dosya kullanmanız gerekir. bu php den alacağınız text, xml, json vb çıktılar şeklinde olabilir. Blog hazırlanabilir elbette. fakat xml veya json hem performans hem de güvenlik açısından zayıf kalacaktır. bu noktada amfphp yi araştırmanızı öneririm. xml deki türkçe karakter dosyanın karakter kodlamasından da kaynaklanıyor olabilir. o kodlamayı utf-8 yapmalısınız. notepad++ ile bunu görüp değiştirebilirsiniz. son olarak bu konu ile ilgili yazdığım daha güncel ve anlaşılır makale için şuraya göz atmanızı öneririm. http://blog.ismailsimsek.com/php/php-%e2%80%93-as3-veri-iletisimi-actionscript-phpdata-class.html

  • Yönlendirmeniz için teşekkür ederim. AMFPHP olayını bi araştırayım. sizin örneğnizde direk olara mysql deki puan kısmına girdiğim text i çekip görüntüleyebildiğimi görünce arada birşey olmasına gerek yok diye düşündüm.

  • ismail server üzerinde swf ve php dosyalarını aynı klasöre koyup
    var yol:String = “veriCek.php”; tanımlamayı bu şekilde yaptım.herhangi bir izin vermemize gerek varmı? çünkü bir türlü veri alışverişi sağlayamıyorum.php dosyası tek başına database erişiyor fakat flash ile php arasında alışveriş yok.dosyalarınızı değiştirmeden kullandım. database user name şifre gibi değişikleri yaptım.
    Saygılar

  • Gayet başarılı bir çalışma olmuş. Teşekkürler ellirinize sağlık devamını bekliyorum.

Leave a comment

Kategoriler