2009-02-17 154 views
3

我想在用戶在#sid字段中輸入值之後立即用數據庫中的值填充表單字段。這裏是我的jQuery/HTML例如:jQuery JSON問題

<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> 

這是我處理腳本(test.php的它獲取由.getJSON方法調用)

<? 
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參數是通過就好了到test.php的和JSON對象回來就好了:

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

但是什麼也沒有發生在頁面上,我收到以下錯誤信息回:

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)})}}); 

這是我與jQuery阿賈克斯首次嘗試,所以任何輸入將不勝感激!

感謝,

  • 尼古拉斯
+0

順便說一句,當你打開/關閉腳本標記在同一行時,它會截斷你的代碼。打破他們到單獨的線路。 – bendewey 2009-02-18 03:08:56

回答

7

可愛的小注入攻擊等候在那裏發生;)

嘗試改變

$.each(data.items, 

到:

$.each(data, 

編輯:回答你的評論,我喜歡我的名字字段中的相同數據項:

<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) 
}) 
+0

注射攻擊=沒有消毒輸入的結果,是嗎? (在這個例子中沒有打算加入這個) - 你說的沒錯,小小的改變解決了我的問題!謝謝! – 2009-02-17 23:57:28

+1

這給我帶來了另一個問題,但是...有沒有更好的方法來做到這一點?至少要動態填充字段,所以我不必拼出每一個字段,而只是「漫遊」JSON對象來確定填充哪些字段以及使用哪些值? – 2009-02-17 23:59:30

+0

太棒了,感謝編輯 - 我只是注意到了這一點,那正是我一直在尋找的。 – 2009-02-18 06:27:00

0

不知道,但我確實看到了一個巨大的SQL注入漏洞。

+0

當然,我沒有對這個例子的輸入進行清理;) – 2009-02-17 23:55:59

1

我同意以前的repliers。該腳本是等待發生的SQL注入。您應該使用PDO等準備好的語句或至少像pg_escape_string這樣的東西。

0

我不相信這裏的答案是正確的。

的這裏的問題是,PHP(和Per​​l)庫編碼您提供他們,而不是其他的JSON。

因此,如果給所述編碼函數的陣列,它會輸出:

[ element1, element2, element3] 

這是一個數組正確的編碼,但它是不一個正確JSON響應。正確的JSON響應必須是http://json.org/概述的對象。

因此,你需要做一個包裝對象,在你的數組,然後進行編碼,並作出迴應。

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

echo json_encode($json); 
?>