2010-09-27 4 views
0

g, день. может кто-нибудь помочь мне понять, почему мой код не сохраняет результаты в json? Я уверен, что в моем коде есть ошибка, но, похоже, не может найти ее. предполагается, что значения $ dept и $ box должны быть возвращены в предупреждении, но этого не происходит. благодаряjson не возвращается данные

<?php 

function runSQL($rsql) { 
$hostname = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "sample"; 
$connect = mysql_connect($hostname,$username,$password) or die ("Error: could not connect to database"); 
$db = mysql_select_db($dbname); 
$result = mysql_query($rsql) or die ('test'); 
return $result; 
mysql_close($connect); 
} 
$new = 1; 

$items = rtrim($_POST['items'],","); 
$sql = "SELECT * FROM `boxes` WHERE id IN ($items)"; 
$result = runSQL($sql); 


$i = 0; 
$rows = mysql_num_rows($result); 
while ($row = mysql_fetch_array($result)) { 
    if ($i < $rows) { 

     $dept .= $row['department'] . "," ; 
     $box .= $row['custref'] . "," ; 
    } else { 

    $dept .= $row['department']; 
    $box .= $row['custref']; 
    } 
    $i++; 
} 


/*$items = rtrim($_POST['items'],","); 
$sql = "UPDATE `boxes` SET status = 'Deleted' WHERE id IN ($items)"; 
$result = runSQL($sql);*/ 

//$sql = "INSERT INTO `act` (`item`) VALUES (\''.$box.'\')"; 
//$result = runSQL($sql); 

$total = count(explode(",",$items)); 
$result = runSQL($sql); 
$total = mysql_affected_rows(); 
/// Line 18/19 commented for demo purposes. The MySQL query is not executed in this case. When line 18 and 19 are uncommented, the MySQL query will be executed. 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
header("Content-type: text/x-json"); 
$json = ""; 
$json .= "{\n"; 
$json .= "dept: '".$dept.",'\n"; 
$json .= "box: '".$box."'\n"; 
$json .= "}\n"; 
echo $json; 
?> 

на основе AJAX

success: function(data){ 
dept = data.dept; 
box = data.box; 
alert("You have successfully deleted\n\r\n\rBox(es): "+data.dept+data.box); 
$("#flex1").flexReload(); 
    } 
+1

** ПОЧЕМУ ** вы генерации JSON самостоятельно, вместо того, чтобы использовать один из десятков расширений или библиотек, что делает это для вас? –

+0

привычка :-) Я действительно из-за ограничений времени должен найти ошибку в этом коде. спасибо –

ответ

0

Ваш JSON неверен. Он отформатирован так:

{ 
dept: '...' 
box: '...' 
} 

Оно должно быть:

{ 
"dept": "..." 
"box": "..." 
} 

Идентификаторы нужны кавычки вокруг них, и строки заключены в кавычки, а не апострофов.

0

RFC4627 определяет тип носителя для JSON как «application/json».

1
$sql = "SELECT * FROM `boxes` WHERE id IN ($items)"; 

Уязвимость SQL-инъекций. Вы должны указать mysql_real_escape_string каждый отдельный элемент, если они являются строками, или убедиться, что они являются только цифрами, если это то, что они должны были (например, с intval()). Или используйте параметризованные запросы.

header("Content-type: text/x-json"); 

application/json.

$json .= "dept: '".$dept.",'\n"; 

Помимо JSON, нуждающийся в кавычках ключей и строковых значений, то необходимо будет также значения JavaScript-строка-буквальной эвакуационными впрыскивается в строку. В противном случае apostrophe/quote/backslash/newline сломает строку. Вы можете в основном сделать это с помощью addslashes().

Но на самом деле, нет необходимости строить собственные значения JSON (или другие литералы JavaScript). PHP дает вам json_encode(). Это проще, быстрее и надежнее. Используй это.

echo json_encode(array(
    'dept'=>$dept, 
    'box'=>$box 
)); 
+0

bobince. Я изменил код таким образом: –

+0

header («Content-type: application/json»); $ json. = "Dept: '". $ Dept.»," \ П "; echo json_encode (массив ( 'dept' => $ dept, 'box' => $ box )); и это вызывает ошибку: Неустранимая ошибка: Вызов неопределенной функции: json_encode() Я использую php4.4.7 –

+0

Eek! Да, у PHP4 нет json_encode, я боюсь. Вам действительно нужно обновить: PHP4 больше не поддерживается (и не был довольно долгое время); с тех пор было зафиксировано множество защитных отверстий. – bobince

0

Вы писали

$json .= "dept: '".$dept.",'\n"; 

Так, 1. Вы должны добавить двойные кавычки для ключа и значения.
2. После окончания значения ключа нет запятой (,). Вы добавляете его внутри цитаты. т. е. код будет создавать этот json,

dept: 'department,' 

См. там место запятой.

попробовать это:

$json .= "\"dept\": \"".$dept."\",\n"; 
Смежные вопросы