Ir para conteúdo

POWERED BY:

Arquivado

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

Galuschka

[Resolvido] Problema ao carregar combobox

Recommended Posts

Opa

queria carregar um combobox apartir de outro, mas quando eu clico em um, os dados correspondentes do banco aparecem em um único option no outro que não da nen pra selecionar, alguém pode me ajudar?

acredito que o problema esteja no javascript, por isso estou postando aqi. Por favor me corrija se eu estiver errado.

servico.php

<script src="js/jquery.js" type="text/javascript"></script>

<script type="text/javascript">
	$(document).ready(function(){
		$('#rede').blur(function(){
			$('#posto').load('validacao.php?campo=rede&valor='+$("#rede").val() );

		});
	});

</script>
<?php
	$pega_rede="SELECT id_pessoa_juridica, razao_social FROM pessoa_juridica where tipo_pessoa='2'";
	$resultado = executa_consulta($pega_rede);
	echo'<p>';
	echo'<select name="rede" id="rede" />';
	while ($linha = mysql_fetch_assoc($resultado))
	{
		$id_rede=$linha['id_pessoa_juridica'];
		$razao=$linha['razao_social'];
		if($linha==0)
		   echo"<option value=$id_rede selected='selected'> $razao</option>";
		else
		   echo"<option value=$id_rede > $razao</option>";
	}
	echo'</select></p><p>';
	echo"<select name='posto' id='posto'>
	<option value='0'>Selecione uma rede</option>
	</select>";
...

validacao.php

$campo = utf8_decode($_GET['campo']);
$valor = utf8_decode($_GET['valor']);

if ($campo=="rede")
{

  conecta("xxxxxx");
  $consulta_posto = "SELECT P.`id_pessoa_juridica`,P.`razao_social`,P.cidade,P.estado,P.cnpj
				  FROM pessoa_juridica P 
				  JOIN pj_pj 
				  WHERE P.`tipo_pessoa`= '1234' 
				  AND pj_pj.id_destino='$valor'
				  AND P.id_pessoa_juridica = pj_pj.id_origem ";
					  
  $resultado_posto = executa_consulta($consulta_posto);
  while ($linha = mysql_fetch_assoc($resultado_posto))
  {
	  $id_posto=$linha['id_pessoa_juridica'];
	  $razao=$linha['razao_social'];
	  echo"<option value=$id_posto>$razao </option>";
  }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa cara, nunca vi usar o método load() dessa forma.

 

veja uma maneira melhor de fazer isso:

http://forum.imasters.com.br/index.php?/topic/365795-combos-dependentes-ajax-jquery/

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei usar seu script mas só apareceu o primeiro alert,

script:

<script src="js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){//inicio o jQuery
		$("select[name='rede']").blur(function(){
		var idCombo1 = $(this).val();//pegando o value do option selecionado
		alert(idCombo1);//apenas para debugar a variável
		
				$.getJSON(//esse método do jQuery, só envia GET
						'teste.php',//script server-side que deverá retornar um objeto jSON
						{idCombo1: idCombo1},//enviando a variável

						function(data){
						alert(data);//apenas para debugar a variável
								
								var option = new Array();//resetando a variável
								
								resetaCombo('posto');//resetando o combo
								$.each(data, function(i, obj){
										
										option[i] = document.createElement('option');//criando o option
										$( option[i] ).attr( {value : obj.id} );//colocando o value no option
										$( option[i] ).append( obj.nome );//colocando o 'label'

										$("select[name='posto']").append( option[i] );//jogando um à um os options no próximo combo
						});
				});
		});
});     

/* função pronta para ser reaproveitada, caso queira adicionar mais combos dependentes */
function resetaCombo( el )
{
		$("select[name='"+el+"']").empty();//retira os elementos antigos
		var option = document.createElement('option');                                  
		$( option ).attr( {value : '0'} );
		$( option ).append( 'Escolha' );
		$("select[name='"+el+"']").append( option );
}
</script>

teste.php:

<?php
function intGet( $campo ){
                return isset( $_GET[$campo] ) ? (int)$_GET[$campo] : 0;
        }       
function retorno( $id )
{
		$sql = "SELECT P.`id_pessoa_juridica`,P.`razao_social`
		  FROM pessoa_juridica P 
		  JOIN pj_pj 
		  WHERE P.`tipo_pessoa`= '3' 
		  AND pj_pj.id_destino='$id'
		  AND P.id_pessoa_juridica = pj_pj.id_origem ";
			   
		conecta("sistema"):
		
		$q = executa_consulta( $sql ); 
	  
		$json = ' [';
		if( mysql_num_rows( $q ) > 0 )
		{
				while( $dados = mysql_fetch_assoc( $q ) )
				{
						$json .= '{"nome'.$campo.'":"'.$dados['razao_social'].'",
                                                "id'.$campo.'":"'.$dados['id_pessoa_juridica'].'"}, ';
				}
		}
		else
				$json .= '{"nome'.$campo.'": "Não Encontrado"}';
				
		$json .= ']';
		
		return $json;
}
echo retorno( intGet('idCombo1') );
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

acessa diretamente lá:

 

localhost/teste.php?idCombo1=2

 

 

arrume os erros php, até o json voltar corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpa,mas oque é a variavel $campo?,para que serve?como é passado o parâmetro?

os erros que faltaram é pq ela não ta setada

//$json .= '{"nome'.$campo.'":"'.$dados['nome'].'","id'.$campo.'":"'.$dados['id'].'"}, ';
vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode remover... =X

 

é que eu tinha uma outra implementação aqui, e acabei esquecendo de simplificar completamente antes de postar.

 

pode tirar essa variavel..

 

"id":"'.$dados['id_pessoa_juridica'].'"}, ';
				}
		}
		else
				$json .= '{"nome": "Não Encontrado"}';

Compartilhar este post


Link para o post
Compartilhar em outros sites

William , eu peguei esse seu codigo , mas nao consigo fazer com que apareça no segundo combobox, verifiquei como você falou para desbugar , e o php , funciona direitinho.

 

tbm tentei debugar com alerts que tem no codigo , apenas aparece o do valor do combo , o alert da data nao aparece. pode me ajudar ?

 

sem nenhumas modificações no seu codigo principal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

gremio10, veja meu post em #4

http://forum.imasters.com.br/index.php?/topic/402213-problema-ao-carregar-combobox/page__view__findpost__p__1576054

 

acesse diretamente o arquivo, e veja se aparecem erros php, ou o jSON formatado corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

gremio10, veja meu post em #4

http://forum.imasters.com.br/index.php?/topic/402213-problema-ao-carregar-combobox/page__view__findpost__p__1576054

 

acesse diretamente o arquivo, e veja se aparecem erros php, ou o jSON formatado corretamente.

 

Eu fiz isso , e arrumei todo o erro de php , e ele mostra direitinho os dados do banco , ai qndo ele procura no primeiro combo e acha os estados , e do o change e aparece o alert do valor dele , mas o segundo alert nao aparece

Compartilhar este post


Link para o post
Compartilhar em outros sites

então pode ser que o caminho para o arquivo de ação, esteja errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom , eu vou colocar aqui os codigos , ok ?

 

jquery.php

 

<html>
<head>
        <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
        <script type="text/javascript">
        $(document).ready(function(){//inicio o jQuery
                $("select[name='combo1']").change(function(){
                var idCombo1 = $(this).val();//pegando o value do option selecionado
                //alert(idCombo1);//apenas para debugar a variável
                
                        $.getJSON(//esse método do jQuery, só envia GET
                                'function.inc.php',//script server-side que deverá retornar um objeto jSON
                                {idCombo1: idCombo1},//enviando a variável

                                function(data){
                                //alert(data);//apenas para debugar a variável
                                        
                                        var option = new Array();//resetando a variável
                                        
                                        resetaCombo('combo2');//resetando o combo
                                        $.each(data, function(i, obj){
                                                
                                                option[i] = document.createElement('option');//criando o option
                                                $( option[i] ).attr( {value : obj.id} );//colocando o value no option
                                                $( option[i] ).append( obj.nome );//colocando o 'label'

                                                $("select[name='combo2']").append( option[i] );//jogando um à um os options no próximo combo
                                });
                        });
                });
        });     
        
        /* função pronta para ser reaproveitada, caso queira adicionar mais combos dependentes */
        function resetaCombo( el )
        {
                $("select[name='"+el+"']").empty();//retira os elementos antigos
                var option = document.createElement('option');                                  
                $( option ).attr( {value : '0'} );
                $( option ).append( 'Escolha' );
                $("select[name='"+el+"']").append( option );
        }
        </script>
        
</head>
<body>
<form action="" method="post">
        <fieldset>
                <label><select name="combo1">
                        <option value="0">Escolha</option>
                        <option value="1">Item 1</option>
                        <option value="2">Item 2</option>
                        <option value="3">Item 3</option>
                </select></label>
                
                <label><select name="combo2">
                        <option value="0">Escolha</option>
                </select></label>
        </fieldset>
        <input type="submit" value="Testar">
</form>
</body>
</html>

esse é o function.inc.php

 

<?php
        header("Content-Type: text/html; charset=ISO-8859-1");

        function intGet( $campo ){
                return isset( $_GET[$campo] ) ? (int)$_GET[$campo] : 0;
        }       
        function retorno( $id )
        {
                $sql = "SELECT `id`, `nome` 
                        FROM `combo2` 
                        WHERE `idCombo1` = {$id} ";
                $sql .= "ORDER BY `nome` ";
                
                
                $mysqli = new mysqli("localhost", "root", "", "ajax");
                //$con = mysql_connect('localhost', 'root', '123');
                //mysql_select_db( 'ajax', $con );
                
                
                $q = $mysqli->query( $sql ); 
                //$q = mysql_query( $sql );
                
                
                $json = ' [';
                if( $q->num_rows > 0 )
                //if( mysql_num_rows( $q ) > 0 )
                {
                        while( $dados = $q->fetch_object() )
                        //while( $dados = mysql_fetch_assoc( $q ) )
                        {
                                $json .= '{"nome'.$campo.'":"'.$dados->nome.'","id'.$campo.'":"'.$dados->id.'"}, ';
                                //$json .= '{"nome'.$campo.'":"'.$dados['nome'].'","id'.$campo.'":"'.$dados['id'].'"}, ';
                        }
                }
                else
                        $json .= '{"nome'.$campo.'": "Não Encontrado"}';
                        
                $json .= ']';
                
                return $json;
        }
        
        echo retorno( intGet('idCombo1') );

o problema é que no meu trabalho eu consegui fazer funcionar , utilizando o XP , agora na minha casa , usando o 7 , nao funcionou de jeito nenhum , até suspeito que possa ser comflito com OS , mas acho dificil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique as configurações de instalação do php, do apache e do mysql.

 

você tem MySQLi habilitado tanto na tua casa como no teu trabalho ?

você ao menos entendeu como o script funciona ?

 

Não há problemas no script. Apenas remova a variavel $campo

$json .= '{"nome":"'.$dados->nome.'","id":"'.$dados->id.'"}, ';
                                //$json .= '{"nome":"'.$dados['nome'].'","id":"'.$dados['id'].'"}, ';
                        }
                }
                else
                        $json .= '{"nome": "Não Encontrado"}';

nessas situações, prefira criar um tópico específico para sua dúvida.

Fica mais fácil de organizar e responder.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok , criarei um topico , para uma organização.

 

Consegui fazer funcionar via local , era um erro de aspas , incrivel , mas era , agora estou falando com o servidor , e tentarei configurar meu pc para mysqli , obrigado William

Compartilhar este post


Link para o post
Compartilhar em outros sites

gremio10 você pode mostrar onde estava o erro? eu estou com o mesmo problema, o segundo alert ainda não aparece...

o json ta direitinho

 

eu estava usando as funcçoes do php_mysql, daí mudei pra php_mysqli e funcionou direitinho

vlw pela ajuda!! :clap:

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.