JSON ve PHP

Php & JSON Mustafa Ahmet KARA

PHP ve JSON ile mysql veritabanında bulunan kayıtları çekelim ve bir div içinde sayfada gösterelim.

listele.php sayfamız veriyi verecek sayfa olsun ve veriyi alıp yazan kısım aşağıdaki gibi olacaktır.

PHP:
  1. $link = mysql_pconnect("ajax-tr", "test", "testuser") or die("Bağlantı kurulamadı");   
  2. mysql_select_db("test") or die("Veritabanı seçilemedi");   
  3.  
  4. $arr = array();   
  5. $rs = mysql_query("SELECT id, name, surname FROM person_data WHERE active = 'true'");   
  6.  
  7. while($obj = mysql_fetch_array($rs))   
  8. {   
  9. $arr[] = $obj;   
  10. }   
  11.  
  12. echo '{"employees":'.json_encode($arr).'}';

json.html sayfamız veriyi alıp gösterecek olan sayfa olsun ve içeriği ise aşağıdaki gibi olsun :

PHP:
  1. <html>
  2. <head>
  3.      <script type="text/javascript" src="json-php_demo.js"></script>
  4. </head>
  5. <body>
  6.    <div id="jsonTarget">
  7.    </div>
  8. </body>

Herhangi bir kütüphane kullanmadan yazılan json-php_demo.js dosyamızın içeriği ise aşağıdaki gibi olacaktır.

PHP:
  1. //Ajax requesti yapmamızı sağlayan fonksiyon
  2. function DoRequest (URL, callBackFunction, postData){
  3.  
  4.      var xmlHttp = (window.XMLHttpRequest)?new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP");
  5.      var result = null;
  6.  
  7.      try{
  8.           xmlHttp.onreadystatechange = function () {
  9.                 if (xmlHttp.readyState == 4){
  10.  
  11.                     //çağrımız geldi sonucu alalım
  12.                     txtResult = xmlHttp.responseText;
  13.  
  14.                     //JSON dönüşümüne maruz bırakalım
  15.                     result = eval('(' + txtResult+')');
  16.  
  17.                     //Geri dönüş fonksiyonumuz var ise bunu parametre olarak gönderelim
  18.                     if (callBackFunction){
  19.                           callBackFunction(result);
  20.                     }
  21.                 }
  22.           }
  23.           //Post datası var ise çağrı metodunu ayarla
  24.           var method = (postData) ? "POST":"GET";
  25.  
  26.           //Asenkron olarak sayfayı yükle
  27.           xmlHttp.open(method,URL,true);
  28.          
  29.           //Çağrıyı yap
  30.           xmlHttp.send(postData);
  31.      }catch(e){
  32.          alert("Veri alımında hata oluştu..." + e.description);
  33.      }
  34. }
  35.  
  36. //Datayı html içine koyma sırasında kullanılacak olan şablonlarımız
  37.  
  38. var HeaderTemplate = "<table border='1'><thead><tr><td>ID</td><td>Adı</td><td>Soyadı</td></tr></thead><tbody>";
  39. var DetailTemplate = "<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>";
  40. var FooterTemplate ="</tbody></table>";
  41. var NoRowsTemplate="<div style='color:#ff0000;font-weight:bold;'>!!!Kayıt Bulunamadı!!!</div>";
  42.  
  43. //Adresten veri yüklenildikten sonra bu fonksiyon otomatik olarak çağrılır.
  44. //JsonData nesnesi içinde employees datası bulunur.
  45.  
  46. function CallbackFunction(JsonData){
  47.      var target = document.getElementById("jsonTarget");
  48.      var innerHtml = "";
  49.      
  50.       if (JsonData.employees && JsonData.employees.length == 0){
  51.  
  52.           //Hiç kayıt yok boş satır mesajını göster
  53.           innerHtml = NoRowsTemplate;
  54.       }else{
  55.  
  56.           //kayıt var Header ve Footeri ekle ve dizinin her bir elemanı için  DetailTemplate 'i çalıştır. İç içe iki adet dizi bulunmaktadır
  57.           for(var i=0;i<JsonData.employees.length;i++){
  58.  
  59.                //id her bir employeenin 0. indeksli elemanı, adı 1. elemanı, soyadı 2. elemanıdır
  60.                var row = DetailTemplate;
  61.  
  62.                for(var j = 0;j<JsonData.employees[i].length;j++){
  63.                       row = row.replace( '{' + j + '}' , JsonData.employees[i][j] );
  64.                }
  65.                innerHtml += row;
  66.           }
  67.       }
  68.       target.innerHTML = innerHtml;
  69. }
  70.  
  71. //Sayfa yüklendikten sonra listele.php sayfasına asenkron olarak çağrı yap ve CallbackFunction ile işle.
  72. window.onload = function(){
  73.  
  74.    DoRequest ("listele.php", CallbackFunction);   
  75.  
  76. }

Sunucudan aktarılan data aşağıdaki gibi olacaktır.

{employees:[ [ 1, "Erhan","Burhan"] , [ 2, "Erhan", "Yakut"] ] }

Bu sayfayı çağırdığınızda aşağıdaki gibi görünecektir.

ID Adı Soyadı
1 Erhan Burhan
2 Erhan Yakut

Yukarıda PHP ile JSON ile sunucuda bulunan mysql veritabanından verileri alıp clienta JSON ile yazdırmanın bir örneğini yaptık. Takip eden sayfada ise PHP üzerinde tanımlı kütüphanelerin karşılaştırmalarını inceleyeceğiz.

PHP ve JSON ile güzel bir resim galerisi apisi olan PhotoFolder sitesine bakabilir ve kodları indirerek inceleyebilir veya sitenizde kullanabilirsiniz.

Sayfalar: 1 2 3

Toplamda 6120 kez okunmuş.
Şu an 2 kişi okuyor.
En fazla 7 kişi aynı anda okumuş.
Bugün 27 kez okunmuş.

Etiketler:

1 oy2 oy3 oy4 oy5 oy (16 oy, ortalama 4.56) Oylanıyor ... Oylanıyor ...

  1. PHP ve Yerleşik DOM Sınıfları
  2. Sağlamlığı Kanıtlanmış Tekniklerle Web 2.0 AJAX
  3. Same Origin Policy ( Aynı Kaynak Politikası)

Trackback Yorumları takip et Baskı Önizleme

19 yorum var

  1. # Hamza Saglam | 31 Ağustos 2007, 00:02 Gravatar

    Onceki makaledeki sabirsiz yorumum icin ozur dilerim :)

  2. # Mustafa Kara | 31 Ağustos 2007, 00:33 Gravatar

    Hamza gerçekten özür dilemene hiç gerek yok aslında çok yardımcı oldun. JSON’un bir çok dilde kullanımı hakkında yazılar hazırlama düşüncem vardı ama hangisi olacağı konusunda karar verememiştim. PHP ilk oldu sonuçta, senin sayende. Asıl ben teşekkür ederim, hangi dil sorusuna cevap verdiğin için.

  3. # solskajer | 31 Ağustos 2007, 14:27 Gravatar

    vallahi ne söliiim mükemmel bir anlatım olmuş bilgine ve emeğine sağlık bir haftadır araştırıyorum bu JSON olayını böyle bir anlatım bulamadım.

    çok teşekkürler kolay gelsin…

  4. # illumunati | 01 Eylül 2007, 00:09 Gravatar

    abi kusra kalmayın biraz acemiyim bu jsonları nerede kullanabiliriz yani açıklarsanız sevinirim..

  5. # Mustafa Kara | 01 Eylül 2007, 16:51 Gravatar

    AJAX ile sunucudan veri almak istediğin heryerde JSON kullanabilirsin.

    http://ajax-tr.com/ajax-ne-gibi-durumlarda-kullanilmali/ yazısına bakar isen AJAX’î hangi durumlarda kullanabileceğin ayrıntılı anlatılmış durumda. Sunucudan veri aktarımında ise JSON u kullanabilirsin.

    Örnek vermek gerekirse şehir listesini AJAX ile arka planda yüklemek istiyorsun, bu durumda sunucudan veriyi JSON formatında gönderebilirsin.

    Dinamik form yapmak istiyorsun, form alanları sunucudan JSON formatında gelebilir.

    Form post yapacaksın, JSON formatında yapabilirsin.

    Tabii tüm bunları XML, HTML ile de yapabilirsin. JSON sadece veri aktarımında ve dönüştürülmesinde kolaylıklar ve veri boyutlarında azalmaya neden olan bir format. Diğerlerine göre daha yeni olduğu için ve tam standartları oturmadığı için bazı problemleride mevcut, bunlardan JSON yazısının sonunda zaten bahsedeceğim.

    Umarım yardımcı olabilirmişim.

  6. # illumunati | 02 Eylül 2007, 15:35 Gravatar

    saol hocam.”şehir listesini AJAX ile arka planda yüklemek istiyorsun, bu durumda sunucudan veriyi JSON formatında gönderebilirsin.” bu acıklama benim için yeterli oldu. abi okuyup öğreneceğiz inş. saolasın hemen başlıyorum . Paylaşım için ve dha önemlisi exstara açıklama için(benim gibi acemilere) teşekkürler. sağlıacakla kal.

  7. # Strefrextor | 21 Eylül 2007, 11:16 Gravatar

    ilk oalrak herkese merhabalar . Ben şu ajax işinde türkçe karater hatasını bir türlü düzeltemedim :( . Çalışmalarımda her ajax da hep gelen veriler türkçe karakterler soru işaretli olarak çıkıyor . Yardımcı olursanız çok sevinirim . Ayrıca projeleriniz geçekten çok harika . başarılarınzın devamını dilerim. Umarım devamı gelir :)

  8. # mustafa_kara | 21 Eylül 2007, 21:22 Gravatar

    Merhabalar,

    Türkçe problemini aşmak için sunucudan gönderdiğin verinin unicode olarak geldiğine dikkat etmen yeterli ama eğer elinde olmayan sebeplerle unicode olarak gönderemiyorsan ki başıma gelmişti bir kere sunucudan ç için |c|, İ için |I| gönderiyordum ve istemci tarafında aşağıdaki gibi bir kod çalıştırıyordum

    var resposeText = xmlHttp.responseText;
    if (responseText) responseText = responseText.replace(/|c|/g,”ç”).replace(/|I|/g,”İ”);

    Bu şekilde bu sorunu aşmıştım ama unicode olarak göndermek en iyisi tabiiki.

  9. # Strefrextor | 22 Eylül 2007, 14:29 Gravatar

    Cevabınız için çok saolun fakat bu işlerde ben bayağı yeni olduğum için bu kodu tam olarak nereye ekleyeceğimide söylerseniz çok daha memnun olacağım . Şimdiden teşekkürler :)

  10. # çağrı | 01 Ekim 2007, 19:54 Gravatar

    diziler için iyi bir sonuç teşekkürler

  11. # wmwebtr ödüllü seo yarışması | 04 Kasım 2007, 19:21 Gravatar

    Banada oldukça yeni geldi bu konu. Açıklayıcı anlatımlarınız için teşekkürler .

  12. # mustafa | 02 Aralık 2007, 17:25 Gravatar

    Türkçe problemini aşmak için sunucudan gönderdiğin verinin unicode olarak geldiğine dikkat etmen yeterli ama eğer elinde olmayan sebeplerle unicode olarak gönderemiyorsan ki başıma gelmişti bir kere sunucudan ç için |c|, İ için |I| gönderiyordum ve istemci tarafında aşağıdaki gibi bir kod çalıştırıyordum

  13. # ilhan k | 08 Aralık 2007, 18:25 Gravatar

    json_encode ve decode sadece utf8 de çalışıyormuş.
    Veritabanından latin 5 olarak çektiğimiz veriyi bastırırken nasıl UTF8 e çevirebiliriz ki? Yani bu |ç| |İ| çevirimi yeterli değil ki.

  14. # mustafa | 10 Aralık 2007, 08:22 Gravatar

    PHP üzerinde utf8_decode ve utf8_encode fonksiyonlarına bakmanı öneririm.

    iso-8859-1 ile otomatik olarak çalışan bu fonksiyonların yorumlarında polonyaca vs. dönüşümleri için güzel örnekler var. Code-page’i alıp dönüşüm fonksiyonunu kendin yazman gerekecek.

    http://us2.php.net/manual/en/function.utf8-encode.php
    http://us2.php.net/manual/en/function.utf8-decode.php

    Kolay Gelsin,
    Mustafa

  15. # ilhan k | 15 Aralık 2007, 14:36 Gravatar

    $json = ‘{”aİ”:1,”bÜ”:2,”c”:3,”d”:4,”e”:5}’;

    $a= print_r(json_decode(utf8_encode($json)),true);
    echo utf8_decode($a);

    gibi bir kullanım söz konusu ama yetersiz. Türkçe karakterler json da büyük sorun.

  16. # ilhan k | 17 Aralık 2007, 17:17 Gravatar

    Türkçe kullanımıyla ilgili herbişeyi (veritabanı, dosyalar, html çıktılar) UTF-8 yapılınca çözüm sağlanıyor.

    Peki, stringin içinde \n gibi bir karakter olunca, daha doğrusu içeriğin bilemediğimiz bir html dizgisi gelecek olursa JSON kullanımı nasıl olacak?
    Örneğin;
    {”tip”: “Hizmet”, “html_verisi”:”Yapılacak iş
    başka br iş
    Arada bir paragraf ve rastgele

    alt satırlar

    ” }

  17. # Ahmet USLU | 28 Aralık 2007, 15:14 Gravatar

    Ya arkadaşlar kusura bakmayın ben bu örnekten birşey anlamadım.Kafam karıştı diye bilirim.
    Bu kadar uğraşcağımıza direk veritabından php ile yazdırmak daha kolay.
    Bu örnekte json bize ne gibi avantajlar sağlamıştır biri bana açıklıya bilirmi.

  18. # Ramazan | 25 Ocak 2008, 23:57 Gravatar

    Ne güzel yazmışsın çok tebrik ediyorum.Sanırım ana fikir şu ki önemli olan javascript içinde en rahat kullanılabilecek veri tipleri json ile oluşturluyor ve bu bize istemci tarfında büyük kolaylıklar sağlıyor.Sağol.
    Sorum ise şu php kodları üzerinde fare ile gezdirirken her bir php komutu için ayrı bir link tanımlanmış ben sanmıyorum ki bu tek tek tanımlansın bunu nasıl yaptın birde bunu cevaplarsan çok sevinirim. Şimdiden teşekkürler.

  19. # eburhan.com » jQuery ve JSON işlemleri | 08 Mart 2008, 10:32 Gravatar

    […] JSON ve PHP […]

Yorum yazın

sayfa sayacı