Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sasuke Uchiha

Gerar arquivo json consultando ao banco de dados

Recommended Posts

Primeiramente bom dia a todos, praticamente estou pedindo pra vocês fazerem porque eu já tentei de tudo e não consegui resolver ainda. Encontrei alguma soluções porém nenhuma serviu pra resolver meu problema.

 

Tem um site que entreguei já a algum tempo onde nele tem um mapa com todos os pontos de vendas do cara. Porém esse mapa, acontece que ele é alimentado por um arquivo json e esse arquivo eu faço ele manualmente.

 

Como funciona? Toda semana eu acesso o banco de dados do cara e faço uma consulta já num padrão ok e copio e colo no json pra lançar no FTP. Mas quero me livrar desse compromisso, quero que o json seja gerado automaticamente. Porém já tenho uma noção disso, mas ainda não consegui faze-lo funcionar.

 

O json atual que eu tenho é esse:

 

pontos.json

[
	{
		"Id": 1,
        "Latitude": -28.677553,
        "Longitude": -49.372264,
		"Descricao": "Session Store"
    },
    {
		"Id": 2,
        "Latitude": -28.677505,
        "Longitude": -49.371491,
		"Descricao": "Backdoor Skate Surf Sop"
	},

    ......... o arquivo continua nesse padrão .................

]

E a consulta que eu tenho que fazer nessa situação seria:

<?php

$query = mysql_query("SELECT * FROM ". BD_PREFIXO . TB_TERCEIROS ." WHERE " . CONDICAO_PARA_EXIBIR_NO_MAPA . " ORDER BY cadastro_nome_fantasia ASC");

while($l=mysql_fetch_assoc($query)){
	
	$num = $num + 1;
	$lat = $l["localizacao_latitude"];
	$lon = $l["localizacao_longitude"];
	$des = $l["cadastro_nome_fantasia"];
	
}

?>

Onde:

Id = $num
Latitude = $lat
Longitude = $lon
Descricao = $des

Qualquer ajuda é bem vinda, desde já agradeço a contribuição de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

json_encode();

Estive fazendo varias tentativas com essa função, porém como monstrei no exemplo eu preciso algo definido assim: "[ {" e essa função gera algo do tipo: "[ texto: {" e fazendo os testes no meu plug-in não foi algo funcional. Não sei se isso está sendo uma deficiência minha, se teria como remover esse texto, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim:

while($l = mysql_fetch_assoc($query)){
    $array[] = $l;
}
 
echo json_encode($array);

esse foi o resultado pra uma tabela de testes que tenho:

 

[{"id":"1","nome":"uva","preco":"1.5","preco2":"-1"},{"id":"2","nome":"uva","preco":"2","preco2":"-1"},{"id":"3","nome":"uva","preco":"2.9","preco2":"-1"},{"id":"4","nome":"uva","preco":"1.9","preco2":"-1"},{"id":"5","nome":"pera","preco":"1.6","preco2":"-1"},{"id":"6","nome":"pera","preco":"3.6","preco2":"6"},{"id":"7","nome":"pera","preco":"2.61","preco2":"-1"},{"id":"8","nome":"banana","preco":"12.61","preco2":"-1"},{"id":"9","nome":"banana","preco":"1.61","preco2":"-1"}]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em todo caso, tem sempre a gambiarra (caso o exemplo acima não funcione):

$result = mysql_query("SELECT * FROM ". BD_PREFIXO . TB_TERCEIROS ." WHERE " . CONDICAO_PARA_EXIBIR_NO_MAPA . " ORDER BY cadastro_nome_fantasia ASC");
 
$gambiarra = "[";
$total = mysql_num_rows($query);
 $num = 1;
while ($ln = mysql_fetch_assoc($result)) {
 
    $gambiarra.= "{'Id':'". $num ."',";
    $gambiarra.= "'Latitude':". $ln['localizacao_latitude'].",";
    $gambiarra.= "'Longitude':". $ln['localizacao_longitude'].",";
    if($num<$total) $gambiarra.= "'Descricao':'".$ln['descricao']."'},";
    else $gambiarra.= "'Descricao':'".$ln['descricao']."'}";
    $num++;
}
 
$gambiarra .= "]";
 
echo $gambiarra;

Mais ou menos assim a gambiarra :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não está na função json_encode e sim na forma que você está montando a lista. A solução já foi apresentada no post #4.

 

Todavia, entender o json, é importante: http://www.json.org

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.