PDA

Orijinalini görmek için tıklayınız : Flash - Php - Xml - Mysql


tepisenordek
08-11-2007, 20:39 PM
Konu başlığı "Eleman İlanına" benzesede, yazımız Macromedia Flash içine MySQL verilerinin runtime olarak aktarılması hakkındadır.

Senaryo şu şekildedir:

Flash veriyi bir php urlden talep eder. php ise mysql'e bağlanıp flash'ın talep ettiği verileri çeker ve tekrar flasha gönderir. Verilerin taşıma formatı XML dir. Çünkü Action Script XML nesnesine sahiptir.



Action Script'in XML nesnesi:

Action Script, JavaScript'in tüm nesnelerine(object) sahip olmakla birlikte, Kendine ait movieClip, TextField vs. nesnelere sahiptir. Bunlara ilave olarak XML nesnesi Action Script kütüphaneleri(library) içindedir. Bu nesne herhangi bir xml formatındaki texti parse(ayrıştırır, inceler) edebilir. Aşağıda örnek XML text bulunuyor;
XML:

1.
2. <?xml version="1.0" encoding="utf-8"?>
3. <mainroot>
4. <product>
5. <title>Kaşık</title>
6. <price>2.50</price>
7. <desc>Paslanmaz çelik, yemek kaşığı</desc>
8. </product>
9. <product>
10. <title>Tabak</title>
11. <price>4.75</price>
12. <desc>Seramik, desenli geniş tabak</desc>
13. </product>
14. </mainroot>


Bu şekilde gelen texti Action Script ile parse edelim;

KOD:

1.
2. var m_xml:XML = new XML(); //Yeni bir XML nesnesi istance'i(örneği) oluşturduk
3. /*
4. m_xml.Load(...) ile bir xml text yüklediğimizde, text stream(akış) halinde gelmeye başlayacaktır.
5. Bu bir süre alacaktır. Bu süre xml in boyutuna, bağlantı hızına vb. etmenlere göre değişir.
6. Aşağıda, bu sürenin bittiğini anlamak ve biter bitmez yapılacak işi belirtmek için XML nesnesinin
7. onload eventini(olayını) kullanıyoruz.
8. */
9. m_xml.onLoad = function () {
10. populate();
11. };
12.
13. // Şimdi xml texti talep edelim
14. m_xml.load("iste.php?tip=urun&enaz=2&encok=5");
15.
16. // Veri ulaştıktan sonra, xml i parse edip istediğimiz yerde kullanalım.
17. // (Sahnede txtGoster adında bir textField var)
18. function populate() {
19. level0 = m_xml.childNodes[0]; // xml in alt nodlarından 0. nodu level0 içine attık (mainroot)
20. for(i=0;i<=level0.childNodes.length-1;i++) {
21. //mainroot node_unun alt nodları kadar bir döngü yaptık.
22. //örneğimizde iki adet alt nodu var (product)
23. level1 = level0.childNodes[i]; // herbir product nodunu level1 içine atıyoruz
24. txtGoster.htmlText += "Ürün Adı :<b>"+level1.childNodes[0].firstChild.nodeValue +
25. "<b>";
26. txtGoster.htmlText += " Fiyatı :"+level1.childNodes[1].firstChild.nodeValue + " YTL.";
27. }
28. }



Şimdi örneğimizdeki xml texti hazırlayan php kodumuza bakalım;


PHP:

1.
2. //iste.php
3. <?php
4. $cn = mysql_connect('host', 'user', 'pass');
5. mysql_select_db('e_ticaret');
6. extract($_GET);
7. switch($tip) {
8. case "urun":
9. $result = mysql_query("select * from products where p_price>=$enaz and p_price >=$encok;");
10. $t = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
11. $t .= "<dataroot>";
12. while($row = mysql_fetch_array($result)) {
13. $t .="<product>";
14. $t .="<title>".$row['p_title']."</title>";
15. $t .="<price>".$row['p_price']."</price>";
16. $t .="<desc>".$row['p_desc']."</desc>";
17. $t .="</product>";
18.
19. }
20. $t .= "</dataroot>";
21. echo $t;
22. break;
23. }
24. ?>



Xml nodlarının isimleri önemli değildir. Action Script ile talep ettiğiniz şemaya uyması yeterlidir. iste.php içinde <title>...</title> yerine <urun_adi>....</urun_adi> yazmış olsaydık dahi uygulamamız çalışacaktı.