jQuery JSON Sorunu

4 Cevap php

Ben kullanıcı # sid alanında bir değer girdiğinde hemen sonra bir veritabanından değerleri ile form alanları doldurmak istiyor. İşte benim jQuery / HTML örnek:

<script src="jquery-1.3.1.min.js"></script>
<script type="text/JavaScript">
$(document).ready(function()
{
  $('#sid').bind("change", function(){
    $.getJSON("test.php?sid=" + $("#sid").val(), 
    function(data)
    {
      $.each(data.items, 
      function(i, item)
      {
        if (item.field == "saffil")
        {
              $("#saffil").val(item.value);
        }
        else if (item.field == "sfirst")
        {
              $("#sfirst").val(item.value);
        }
      });
      });
   });
});
</script>

İşte benim işleme komut dosyası (. GetJSON yöntemi tarafından çağrılır dnm.php) olduğunu

<?
require_once("db_pers.inc");

$ssql = "SELECT * FROM contacts_mview WHERE sempid = '".$_GET['sid']."'";

$rres = pg_query($hdb, $ssql);
pg_close($hdb);

$ares = pg_fetch_assoc($rres);

$json = array(array('field' =>	'saffil',
    		'value'	=>	$ares['saffil']),
    	  array('field'	=>	'sfirst',
    		'value'	=>	$ares['sfirst']));

echo json_encode($json);
?>

GET param Firebug göre dnm.php için sadece iyi geçti ve JSON nesne gayet geri geliyor:

[{"field":"saffil","value":"Admin"},{"field":"sfirst","value":"Nicholas"}]

Ancak hiçbir şey sayfada olur ve aşağıdaki hata iletisini geri almak:

G is undefined
init()()jquery-1....1.min.js (line 12)
(?)()()test.html (line 15)
I()jquery-1....1.min.js (line 19)
F()()jquery-1....1.min.js (line 19)
[Break on this error] (function(){var l=this,g,y=l.jQuery,p=l.....each(function(){o.dequeue(this,E)})}});

Bu yüzden herhangi bir giriş çok jQuery ile ajax benim ilk bıçak takdir edilmektedir!

Teşekkürler,

  • Nicholas

4 Cevap

Orada ne bekliyor Nice küçük enjeksiyon saldırısı ;)

Değiştirmeyi deneyin

$.each(data.items,

için:

$.each(data,

Edit: Yorum cevaplamak için, benim tarlalar veri anahtarı olarak aynı isim istiyorum:

<input type="text" name="saffil" value="" />
<input type="text" name="sfirst" value="" />

var data = {saffil:'foo', sfirst:'bar'};
$.each(data, function(key, value) {
   $('[name='+key+']').val(value)
})

Ben önceki repliers katılıyorum. Bu komut ne bekliyor bir SQL enjeksiyon. Muhtemelen hazırlanan tablolarda veya pg_escape_string en azından gibi bir şey ile PDO gibi bir şey kullanmak gerekir.

Emin değilim, ama ben büyük bir SQL Injection bir delik görüyorum.

Ben burada cevaplar doğru inanmıyorum.

Burada sorun, PHP (ve Perl) kütüphaneler bunları sağlamak JSON, ve başka bir şey kodlamak olmasıdır.

Eğer kodlama işlevini bir dizi verirseniz Böylece, bu çıktısı:

[ element1, element2, element3]

Bu, bir dizi için doğru kodlama, ancak not doğru JSON yanıttır. http://json.org/ de tarif edildiği gibi bir cevap doğru JSON must, bir nesne olabilir.

Böylece, sizin dizideki etrafında, bir kapsayıcı nesnesi yapmak ve sonra kodlamak ve bu ile cevap vermek gerekir.

<?php
$json = array('items' =>
              array(
                    array('field' =>  'saffil',
                          'value' =>      $ares['saffil']),
                    array('field' =>      'sfirst',
                          'value' =>      $ares['sfirst'])
              )
        );

echo json_encode($json);
?>