Ir para conteúdo


Foto

Combobox buscando do BD [PHP]


  • Por favor, faça o login para responder
4 respostas neste tópico

#1 CRC

CRC

    Novato

  • Membros
  • PipPip
  • 14 posts

Postado 01 April 2009 - 13:27

Consegui fazer e estou compartilhando:

// database.php
<?php
$task = '';

if (isset($_POST['task']))
{
  $task = $_POST['task'];
}
  
switch($task)
{
case "ESTADOS":
  estados();
  break;
case "CIDADES":
  cidades();
  break;
default:
  $mens = "Tarefa indefinida";
  echo "{success:false, mens:'$mens'}";
  break;
}

function estados()
{
  require("bd.inc.php");
  
  $sql = "SELECT DISTINCT estado, estado as uf FROM cidades ORDER BY estado";
  
  $query = mysql_query($sql);
  
  if($rec = mysql_fetch_array($query))
  {
    do{
        $rec['estado'] = utf8_encode($rec['estado']);
        $arr[] = $rec;
      }while($rec = mysql_fetch_array($query));

    $jsonresult = JEncode($arr);
    echo '({"total":"'.$linhas.'","results":'.$jsonresult.'})';
  } else {
    echo '({"total":"0", "results":""})';
  }

}

function cidades()
{
  require("bd.inc.php");
  
  $estado = $_POST['estado'];
  
  $sql = "SELECT id_cidade, nome_cidade FROM cidades WHERE estado = '$estado'";
  
  $query = mysql_query($sql);
  
  if($rec = mysql_fetch_array($query))
  {
    do{
        $rec['nome_cidade'] = utf8_encode($rec['nome_cidade']);
        $arr[] = $rec;
      }while($rec = mysql_fetch_array($query));

    $jsonresult = JEncode($arr);
    echo '({"total":"'.$linhas.'","results":'.$jsonresult.'})';
  } else {
    echo '({"total":"0", "results":""})';
  }

}

// Encodes a SQL array into a JSON formated string
function JEncode($arr){
  if (version_compare(PHP_VERSION,"5.2","<"))
  {    
    require_once("./JSON.php"); //if php<5.2 need JSON class
    $json = new Services_JSON();//instantiate new json object
    $data=$json->encode($arr);  //encode the data in json format
  } else
  {
    $data = json_encode($arr);  //encode the data in json format
  }
  return $data;
}
?>

// Acesso ao banco de dados de Cidades
// teste.js

estadosStore = new Ext.data.Store({
    id: 'estadosStore',
    proxy: new Ext.data.HttpProxy({
              url: 'database.php', 
              method: 'POST'
          }),
          baseParams:{task: "ESTADOS"}, 
    reader: new Ext.data.JsonReader({
      root: 'results',
      totalProperty: 'total',
      id: 'id'
    },[{name: 'estado', mapping: 'estado'},
      {name: 'uf', mapping: 'uf'}
    ]),
    sortInfo:{field: 'estado', direction: "ASC"}
  });

  estadosStore.load();

  cidadesStore = new Ext.data.Store({
    id: 'cidadesStore',
    proxy: new Ext.data.HttpProxy({
              url: '/portal/testes.humberto/novo_classificados/database.php', 
              method: 'POST'
          }),
          baseParams:{task: "CIDADES"}, 
    reader: new Ext.data.JsonReader({
      root: 'results',
      totalProperty: 'total',
      id: 'id'
    },[ 
      {name: 'id_cidade', mapping: 'id_cidade'},
      {name: 'nome_cidade', mapping: 'nome_cidade'}
    ]),
    sortInfo:{field: 'nome_cidade', direction: "ASC"}
  });

// teste.js
// Ext.form.FormPanel....

.....},{
			xtype: 'combo', 
			tabIndex: 5,
			fieldLabel: 'Estados',
			id: 'estado',
			loadingText: '-- Carregando Estados --',
			store: estadosStore,
			valueField: 'uf',
			displayField:'estado',
			mode: 'local',
			triggerAction: 'all',
			allowBlank:false,
			emptyText:'-- Selecione o Estado --',
			selectOnFocus:true,
			listeners:{
				select:{
						fn:function(combo, value){
						  Ext.getCmp('comboCidade').clearValue();
						  Ext.getCmp('comboCidade').enable();
						  cidadesStore.load({params: {estado: combo.getValue()}});
						}
					   }					   
					  }					  
		},{
		    xtype: 'combo', 
			tabIndex: 6,
			fieldLabel: 'Cidades',
			disabled: true,
			id: 'comboCidade',
			loadingText: '-- Carregando Cidades --',
			store: cidadesStore,
			valueField: 'id_cidade',
			displayField: 'nome_cidade',
			mode: 'local',
			triggerAction: 'all',
			allowBlank:false,
			width: 250,
			emptyText:'-- Selecione o Estado --',
			selectOnFocus: true
        },{.....


#2 Rodrigo, Kptão Nascimento

Rodrigo, Kptão Nascimento

    Member Avançado

  • Expert User
  • 2472 posts
  • LocationTres Coroas, RS

Postado 01 April 2009 - 14:38

Opa,

tu já tentou passar o utf8_encode no teu json?
pq, percebi ali, q tu tem q fazer um loop nos teus selects pra fazer um utf8_encode nos campos certo? n seria mais pratico pegar o resultado trasnforma-lo em json e dai codificar?

é só uma dica... claro... se for possivel ser implementado pra ti...


eu uso assim:

echo utf8_encode(json_encode($this->select($SQL)->GetAll()));


$this->select($SQL)->GetAll() me retorna um array da consulta do sql em $SQL... ou seja pego o array resultante da consulta e dai o codifico em utf8, evita varios loops na minha aplicação...

abraços
Sempre que um tópico for resolvido clique no botão MARCAR COMO RESOLVIDO localizado ao lado do botão RESPONDER.

http://blog.rkn.com.br
http://twitter.com/blogrkn

Atualize seu navegador
http://imasters.uol....br/crossbrowser

#3 Nom4d3

Nom4d3

    Member Avançado

  • Membros
  • PipPipPip
  • 952 posts
  • LocationAraras/SP/Brasil

Postado 01 April 2009 - 16:53

Rodrigo, eu tenho uma funcao bem complexa pra gerar meu json certinho com o utf8_encode, html_entity_decode e afins, mas aqui eu nao consigo fazer o utf8_encode 'encodar' o json diretamente. qq acentuacao ele corta o texto.

ex: TESTE 123ÃÔÁÁÁ
ele só traz TESTE 123

por isso acabo tendo que passar o utf8_encode em cada campo separadamente e somente depois encodar com o json. fazendo o que o CRC fez tb. Ai funciona certinho a acentuacao?

#4 Rodrigo, Kptão Nascimento

Rodrigo, Kptão Nascimento

    Member Avançado

  • Expert User
  • 2472 posts
  • LocationTres Coroas, RS

Postado 01 April 2009 - 16:57

é, realmente, a função json_encode corta a acentuação, n me lembrava, é que depois disso passei a usar meu banco de dados em utf8, dai fica tudo perfeito...

abraços
Sempre que um tópico for resolvido clique no botão MARCAR COMO RESOLVIDO localizado ao lado do botão RESPONDER.

http://blog.rkn.com.br
http://twitter.com/blogrkn

Atualize seu navegador
http://imasters.uol....br/crossbrowser

#5 jorenilson

jorenilson

    Member Avançado

  • Membros
  • PipPipPip
  • 91 posts
  • LocationManaus/AM

Postado 16 July 2011 - 07:36

Kra,
estou louco, mas muito loucoooo.... Estou a 72 horas em frente ao computador tentando descobrir como faço a mesma coisa, só que em asp. Estou usando asp clássico e preciso popular um combo. meu código é esse. Por favor, me ajuda brother, preciso dormir tranquilo.

vlw
by Jorenilson Santos




0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos