2016-02-11 4 views
2

У меня есть следующий вопрос, мой PHP код получает необходимые данные из дБ:PHP массив/MySQL запись в JSON файл

<?php 

require('dB_connect.php'); 

$reportID = intval($_GET['q']); 


$sql = "SELECT nmech, nelect, nplant, ncivil FROM `flashreport` WHERE ID = '".$reportID."'"; 
$result = mysqli_query($dbc, $sql); 

$emparray = array(); 
while($row =mysqli_fetch_assoc($result)) 
{ 
    $emparray[] = $row; 
} 
file_put_contents("newport.json", json_encode($emparray,JSON_FORCE_OBJECT)); 

mysqli_close($dbc); 

?> 

Как вы видите, это пишет в файл JSON - результаты:

{"0":{"nmech":"2.00","nelect":"2.00","nplant":"2.00","ncivil":"2.00"}} 

Когда я использую следующий код JS, чтобы извлечь из JSon файла:

$.getJSON('newport.json', function(data) { 
console.log(data); 

бревно консоли с помощью хрома отображает ВОЛП ноль:

[Object] 
0: Object 
nmech: "3.00" 
__proto__: Object 
length: 1 

только показывает первую пару ключ/значение и не все 4 пары К/В? Может кто-нибудь объяснить, что я делаю неправильно, пожалуйста.

+1

Попробуйте 'console.log (данные [0]);' –

+1

вы проверили, удалось ли file_put_contents? Вы просто предполагаете, что обновленный файл json был написан. –

+0

Ваше значение для nmech неверно в вашем примере при ведении журнала консоли и в файле. – themightysapien

ответ

1

Запись результатов в файл json является излишним, ИМХО. Почему бы просто не добавить json в шаблон или представление страницы (PHP).

<script> 
    // Create settings from PHP/Session and 
    // Initialize Registration Namespace 
    var registrationSettings = <?php echo (!empty($data)) ? @json_encode($data) : json_encode(array()); ?>; 
    Registration.init({ settings: window.registrationSettings }); 
</script> 

Очевидно, что у вас нет объекта регистрации пространства имен, но это всего лишь пример подхода к настройке параметров из PHP при первой загрузке страницы.

Все, что вам действительно нужно для вывода некоторых данных.

<script> 
    var newport = <?php echo (!empty($emparray)) ? @json_encode($emparray) : json_encode(array()); ?>; 
</script> 

Возможно, более простой способ написать это будет.

<script> 
    var newport = <?php echo (!empty($emparray)) ? @json_encode($emparray) : '[]'; ?>; 
</script> 

Я вижу, как вы пытаетесь загрузить (или кешировать) результаты. Вероятно, вы должны просто написать метод AJAX в вашем контроллере PHP для обработки запроса. Данные могут быть кэшированы на стороне сервера в Memcached или какой-либо другой быстрый обработчик данных. Большинство фреймворков PHP поддерживают memcached.

+0

взял ваш совет и написал метод AJAX, работает, не уверен, почему jQuery не работает? –

+0

Возможно, сервер не обслуживает json-файл с правильным заголовком. С PHP вы должны установить заголовок вручную с помощью: header ('Content-type: application/json'); echo json_encode ($ output); – jjwdesign

0

Это нормально, потому что ваш PHP массив выглядит следующим образом:

<?php 
$arr = [ 
    [ 
     "key1" => "value1", 
     "key2" => "value2", 
    ] 
] 

Вы должны использовать данные [0] [ 'ключ'], чтобы получить доступ к key1 часть первого элемента.

Другое (лучшее решение) заключается в том, чтобы не использовать цикл while в php, так как вы ожидаете, что из вашего mysql будет возвращен 1 элемент в вашем случае. Используйте так:

<?php 
require('dB_connect.php'); 
$reportID = intval($_GET['q']); 

$sql = "SELECT nmech, nelect, nplant, ncivil FROM `flashreport` WHERE ID = '".$reportID."'"; 
$result = mysqli_query($dbc, $sql); 

//Get first row from db. 
$emparray = mysqli_fetch_assoc($result); 
file_put_contents("newport.json", json_encode($emparray,JSON_FORCE_OBJECT)); 

mysqli_close($dbc); 
?> 

Теперь ваши данные будут отображаться в javascript, так, как вы ожидали при начале.

+0

попробовали то, что вы предложили, и это не сработало, все же выводит только тот же объект {nmech: "3.00"} –

Смежные вопросы