Ir para conteúdo

POWERED BY:

Arquivado

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

Tiago j.a

[Resolvido] JQuery

Recommended Posts

Bom dia pessoal!

Eu estou com um código diponibilizado pelo Willian, sobre ajax, no qual ele demonstra como fazer para imprimir determinados dados num campo determinado do formulário partindo de um select.

Fiz uns testes semelhantes ao script dele aqui, e funcionou tranquilo, só que para o que eu estou precisando, não estou conseguindo alterar para a minha necessidade.

Neste primeiro código, imprimo os dados no select:

function montaSelect2()
        {
			
	    $con2 = odbc_connect("testando","","") or die("Erro na conexão com o Database");
		$sql2 = odbc_exec($con2,"SELECT * FROM [OS - lista de instrumentos]")or die("Erro na conexão com o Database");	
				$c=0;
				if ($c == 0)
				{
		 				while(odbc_fetch_row($sql2)) {
	     				$instrumento[$c] = odbc_result($sql2, 1);
		 				$opt2 .= '<option value="'.$instrumento[$c].'">'.$instrumento[$c].'</option>';
		  				$c++;
						}
				}
                else
                $opt2 = '<option value="0">Nâo foram encontrados instrumentos.</option>';
                return $opt2;
        }
Até ai tranquilo, está imprimindo corretamente, só que o outro, não sei a sintaxe correta para imprimir em dois campos, outros valores puxados do banco. Quando seleciono uma opção no select, ele imprime no campo a mensagem de aguardando mas não imprime os valores relacionados a essa opção.

Segue abaixo o código:

function retorna2( $id_instrumento=null )
        {
				$id_instrumento = (int)$instrumento;
			    $con2 = odbc_connect("testando","","") or die("Erro na conexão com o Database");
		        $sql2 = odbc_exec($con2,"SELECT * FROM [OS - lista de instrumentos]")or die("Erro na conexão com o Database");
                if( $id_instrumento != null )
                $sql2.= "WHERE `instrumento` = {$id_instrumento} ";

                //$json = 'var dados = ';
                $json2 .= ' [';
							
               $y=0;
				if ($y == 0)
				{
		 				while(odbc_fetch_row($sql)) {
	     				$t_padrao[$y] = odbc_result($sql2, 2);
						$custo_unit[$y] = odbc_result($sql2, 3);
						$json2 .= ' ['; $json2 .= "{t_padrao: '{$t_padrao[$y]}', custo_unit: '{$custo_unit[$y]}'}";;
		  				$y++;
						}					
                }
                else
                        $json2 = 'h: não encontrado';

                $json2 .= ']';
                //$jston .= ';';

                return $json2;
        }

E na página index, chamo a função da seguinte forma:

<script type="text/javascript" src="jquery-1.2.2.pack.js"></script>
<script type="text/javascript">
$(document).ready(function(){
                $("select[name='instrumento']").change(function(){
                        $("input[name='t_padrao']").val('Aguarde');
                        $("input[name='custo_unit']").val('Aguarde');
                        $.getJSON(
                                'function.php',
                                {instrumento: $(this).val()},
                                function(data){
                                        $.each(data, function(i, obj){
                                                $("input[name='t_padrao']").val(obj.t_padrao);
                                                $("input[name='custo_unit']").val(obj.custo_unit);
                                        })
                                });
                });
        });
</script>
Desculpem a má identação do código!!!

Desde já agradeço a ajuda e compreensão de todos!

Grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro debug o php, acesse diretamente lá:

 

function.php?id_instrumento=1

 

veja oque aparece. Se forem erros php, vá arrumando.

 

Aqui:

$opt2 .= '<option value="'.$instrumento[$c].'">'.$instrumento[$c].'</option>';
você está trabalhando apenas com strings ?

 

veja bem o cast que é feito na retorna2()

$id_instrumento = (int)$instrumento;
é melhor você trabalhar com IDs (INT), nos values dos options do select.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Willian, fiz o procedimento que você me pediu e colocando o id_instrumento, ele não me imprime nada

mas colocando apenas instrumento, ele me imprime o seguinte:

Warning: odbc_fetch_row() expects parameter 1 to be resource, null given in C:\xampp\htdocs\lab1\function.php on line 101

[]

Em relação aos ID´s, é o seguinte. Estou tendo que implementar um sistema em php com access aqui, o sistema que tinha aqui foi todo feito em access, e eles preferiram manter por um tempo.

Por isso não mexi na estrutura das tabelas.

 

esse erro consegui arrumar, ele me imprimiu o seguinte:

[ [{t_padrao: '30', custo_unit: '35.0000'} [{t_padrao: '20', custo_unit: '11.0000'} [{t_padrao: '60', custo_unit: '150.0000'} [{t_padrao: '60', custo_unit: '280.0000'} [{t_padrao: '30', custo_unit: '54.0000'} [{t_padrao: '20', custo_unit: '38.0000'} [{t_padrao: '20', custo_unit: '38.0000'} [{t_padrao: '30', custo_unit: '55.0000'} [{t_padrao: '30', custo_unit: '75.0000'} [{t_padrao: '15', custo_unit: '30.0000'} [{t_padrao: '20', custo_unit: '54.0000'} [{t_padrao: '30', custo_unit: '25.0000'} [{t_padrao: '60', custo_unit: '55.0000'} [{t_padrao: '30', custo_unit: '30.0000'} [{t_padrao: '30', custo_unit: '14.7000'} [{t_padrao: '60', custo_unit: '45.0000'} [{t_padrao: '120', custo_unit: '150.0000'} [{t_padrao: '30', custo_unit: '25.0000'} [{t_padrao: '30', custo_unit: '18.0000'} [{t_padrao: '30', custo_unit: '55.0000'} [{t_padrao: '30', custo_unit: '55.0000'} [{t_padrao: '30', custo_unit: '55.0000'} [{t_padrao: '30', custo_unit: '24.0000'} [{t_padrao: '30', custo_unit: '24.0000'} [{t_padrao: '30', custo_unit: '24.0000'} [{t_padrao: '30', custo_unit: '4.0000'} [{t_padrao: '30', custo_unit: '4.0000'} [{t_padrao: '30', custo_unit: '18.0000'} [{t_padrao: '30', custo_unit: '14.0000'} [{t_padrao: '30', custo_unit: '24.0000'} [{t_padrao: '30', custo_unit: '22.0000'} [{t_padrao: '30', custo_unit: '45.0000'} [{t_padrao: '30', custo_unit: '12.0000'} [{t_padrao: '3', custo_unit: '3.0000'} [{t_padrao: '30', custo_unit: '42.0000'} [{t_padrao: '30', custo_unit: '35.0000'} [{t_padrao: '30', custo_unit: '35.0000'} [{t_padrao: '30', custo_unit: '18.0000'} [{t_padrao: '30', custo_unit: '17.0000'} [{t_padrao: '10', custo_unit: '4.0000'} [{t_padrao: '30', custo_unit: '15.0000'} [{t_padrao: '30', custo_unit: '18.0000'} [{t_padrao: '30', custo_unit: '30.0000'} [{t_padrao: '30', custo_unit: '20.0000'} [{t_padrao: '30', custo_unit: '22.0000'} [{t_padrao: '30', custo_unit: '20.0000'} [{t_padrao: '30', custo_unit: '22.0000'} [{t_padrao: '30', custo_unit: '14.0000'} [{t_padrao: '60', custo_unit: '35.0000'} [{t_padrao: '60', custo_unit: '55.0000'} [{t_padrao: '60', custo_unit: '.0000'} [{t_padrao: '15', custo_unit: '.0000'} [{t_padrao: '20', custo_unit: '20.0000'} [{t_padrao: '30', custo_unit: '30.0000'} [{t_padrao: '30', custo_unit: '13.0000'} [{t_padrao: '30', custo_unit: '28.0000'} [{t_padrao: '30', custo_unit: '22.0000'} [{t_padrao: '30', custo_unit: '25.0000'} [{t_padrao: '360', custo_unit: '320.0000'} [{t_padrao: '30', custo_unit: '8.0000'} [{t_padrao: '30', custo_unit: '22.0000'} [{t_padrao: '30', custo_unit: '24.0000'} [{t_padrao: '60', custo_unit: '.0000'} [{t_padrao: '60', custo_unit: '75.0000'} [{t_padrao: '30', custo_unit: '25.0000'} [{t_padrao: '60', custo_unit: '160.0000'} [{t_padrao: '30', custo_unit: '18.0000'} [{t_padrao: '20', custo_unit: '38.0000'} [{t_padrao: '60', custo_unit: '.0000'} [{t_padrao: '60', custo_unit: '.0000'} [{t_padrao: '30', custo_unit: '.0000'} [{t_padrao: '60', custo_unit: '45.0000'} [{t_padrao: '30', custo_unit: '17.0000'} [{t_padrao: '60', custo_unit: '40.0000'} [{t_padrao: '60', custo_unit: '75.0000'} [{t_padrao: '60', custo_unit: '75.0000'} [{t_padrao: '30', custo_unit: '28.0000'} [{t_padrao: '45', custo_unit: '45.0000'} [{t_padrao: '60', custo_unit: '35.0000'} [{t_padrao: '30', custo_unit: '4.0000'} [{t_padrao: '30', custo_unit: '35.0000'} [{t_padrao: '30', custo_unit: '35.0000'} [{t_padrao: '30', custo_unit: '.0000'} [{t_padrao: '30', custo_unit: '.0000'} [{t_padrao: '30', custo_unit: '.0000'} [{t_padrao: '30', custo_unit: '.0000'} [{t_padrao: '120', custo_unit: '380.0000'}]
Acredito que seja todos os dados da tabela, certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, agora está correto o retorno.

Mostre onde você chamou a função retorna2().

 

fez o $_GET certinho?

retire o cast de int que eu fiz:

//$id_instrumento = (int)$instrumento;

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função retorna2, chamaria ela na página do formulário?

<script type="text/javascript" src="jquery-1.2.2.pack.js"></script>
<script type="text/javascript">
$(document).ready(function(){
                $("select[name='instrumento']").change(function(){
                        $("input[name='t_padrao']").val('Aguarde');
                        $("input[name='custo_unit']").val('Aguarde');
                        $.getJSON(
                                'function.php',
                                {instrumento: $(this).val()},
                                function(data){
                                        $.each(data, function(i, obj){
                                                $("input[name='t_padrao']").val(obj.t_padrao);
                                                $("input[name='custo_unit']").val(obj.custo_unit);
                                        })
                                });
                });
        });
</script>
seria essa, ou tenho que chamar ela na pagina index da mesma forma que a montaSelect?

 

Estou tentando aqui, mas ele só não mostra os dados de cada item na tela, apenas fica com a mensagem de carregando!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Releia o código original.

 

a função é 'chamada' no arquivo function.php poste o codigo do seu completo aqui. Fica o 'carregando', pois o retorno AJAX não está correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o código de retorno, logo abaixo postei o código onde mostro os dados no select.

Abraço

function retorna( $id=null )
        {
			    $id = (int)$id;
			    $con3 = odbc_connect("fornecedores","","") or die("Erro na conexão com o Database");
		        $sql3 = odbc_exec($con3,"SELECT * FROM Fornecedores")or die("Erro na conexão com o Database");
                if( $id != null )
                $sql3 .= "WHERE `ID` = '$id' ";

                //$json = 'var dados = ';
                //$json .= ' ['; $json .= "{Fornecedor: '{$dados['Fone']}', ID: '{$dados['Fax']}'}";;
							
               $i=0;
			   $json .= ' ['; 
				if ($i == 0)
				{
		 				while(odbc_fetch_row($sql3)) {
	     				$forne[$i] = odbc_result($sql3, 2);
						$fone[$i] = odbc_result($sql3, 3);
						$endereco[$i] = odbc_result($sql3, 5);
						$complemento[$i] = odbc_result($sql3, 6);
						$cidade[$i] = odbc_result($sql3, 7);
						$estado[$i] = odbc_result($sql3, 8);
						$cep[$i] = odbc_result($sql3, 9);
						$cgc[$i] = odbc_result($sql3, 10);
						$insc_estadual[$i] = odbc_result($sql3, 11);
						$internet[$i] = odbc_result($sql3, 12);
						$contato[$i] = odbc_result($sql3, 13);
						$json .= ' ['; $json .= "{forne: '{$fornecedor[$i]}', fone: '{$fone[$i]}', endereco[$i]: '{$endereco[$i]}', complemento: '{$complemento[$i]}', cidade: '{$cidade[$i]}', estado: '{estado[$i]}', cep: '{$cep[$i]}', ccg: '{$cgc[$i]}', ie: '{$insc_estadual[$i]}', internet: '{$internet[$i]}', contato: '{$contato[$i]}',}";;
		  				$i++;
						}
                }

                else
                        $json = 'fornecedor não encontrado';

                $json .= ']';
                //$jston .= ';';

                return $json;
        }
function montaSelect()
        {
			
	    $con = odbc_connect("fornecedores","","") or die("Erro na conexão com o Database");
		$sql = odbc_exec($con,"SELECT * FROM Fornecedores")or die("Erro na conexão com o Database");	
				$i=0;
				if ($i == 0)
				{
		 				while(odbc_fetch_row($sql)) {
						$id[$i] = odbc_result($sql, 1);
	     				$Fornecedor[$i] = odbc_result($sql, 'Fornecedor');
		 				$opt .= '<option value="'.$Fornecedor[$i].'">'.$Fornecedor[$i].'</option>';
		  				$i++;
						}
				}
                else
                        $opt = '<option value="0">Nâo foram encontrados clientes</option>';
                return $opt;
        }

Estou fazendo alguns testes, e pelo que estou vendo, ele não está retornando o json, que seria eu acho o responsável para imprimir na tela os valores, isso?

Tentei fazer com que ele não entrasse no if, e sim no else, que retornaria fornecedor não encontrado, ele segue apenas carregando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A formação do jSON está errada.

 

novamente, acessando o arquivo diretamente, oque acontece ?

 

Oque você fez com o meu trecho da chamada da função?

/* só se for enviado o parâmetro, que devolve o combo */
if( isset($_GET['idCliente']) )
{
        echo retorna( $_GET['idCliente'] );
}
? releia o script original.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei desta forma:

http://localhost/lab1/function.php?ID
E ele me retorna todos os fornecedores que tenho na tabela com todos os seus dados.

Este trecho coloquei abaixo da função, da mesma forma que você colocou no seu script

<?php if( isset($_GET['ID']) )
{
        echo retorna( $_GET['ID'] );
}
?>

poderia dizer então que este erro está na parte do json?

Pois mostrando os dados está, certo?

Estaria apenas nesta função?

function retorna( $id=null )
        {
			    $id = (int)$id;
			    $con3 = odbc_connect("fornecedores","","") or die("Erro na conexão com o Database");
		        $sql3 = odbc_exec($con3,"SELECT * FROM Fornecedores")or die("Erro na conexão com o Database");
                if( $id != null )
                $sql3 .= "WHERE `ID` = '$id' ";

                //$json = 'var dados = ';
                //$json .= ' ['; $json .= "{Fornecedor: '{$dados['Fone']}', ID: '{$dados['Fax']}'}";;
							
               $i=0;
			   $json .= ' ['; 
				if ($i == 0)
				{
		 				while(odbc_fetch_row($sql3)) {
	     				$forne[$i] = odbc_result($sql3, 2);
						$fone[$i] = odbc_result($sql3, 3);
						$endereco[$i] = odbc_result($sql3, 5);
						$complemento[$i] = odbc_result($sql3, 6);
						$cidade[$i] = odbc_result($sql3, 7);
						$estado[$i] = odbc_result($sql3, 8);
						$cep[$i] = odbc_result($sql3, 9);
						$cgc[$i] = odbc_result($sql3, 10);
						$insc_estadual[$i] = odbc_result($sql3, 11);
						$internet[$i] = odbc_result($sql3, 12);
						$contato[$i] = odbc_result($sql3, 13);
						$json .= "{forne: '{$fornecedor[$i]}', fone: '{$fone[$i]}', endereco[$i]: '{$endereco[$i]}', complemento: '{$complemento[$i]}', cidade: '{$cidade[$i]}', estado: '{estado[$i]}', cep: '{$cep[$i]}', ccg: '{$cgc[$i]}', ie: '{$insc_estadual[$i]}', internet: '{$internet[$i]}', contato: '{$contato[$i]}',}";;
		  				$i++;
						}
                }

                else
                        $json .= 'fornecedor não encontrado';

                $json .= ']';
                //$jston .= ';';

                return $json;
        }
Na parte onde chamo no index, e digo em quais campos deverão aparecer os dados, não está né?

Pois ele imprime o carregando.

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora você alterou o jSON, antes estava sobrando um $json .= ' ['; dentro do while. Agora acredito que está correto.

 

Como aparece o jSON para você, se você acessar diretamente, passando um valor para o parâmetro na querystring ?

possivelmente, qndo você vai para a página de frente, o valor que está sendo enviado, está incorreto.

 

debug o script, colocando alert() nas partes sensíveis.

eu não havia notado antes, mas no teu primeiro jSON, estava errado aparecer 2 [[

[ [{t_padrao:

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe a ignorância amigo, mas como faço para colocar este alert?

e para acessar diretamente, faço como tinha feito, apenas coloco um valor como parametro?

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, acesse diretamente colocando um valor

 

e exemplo de debug:

<script type="text/javascript">
$(document).ready(function(){
                $("select[name='instrumento']").change(function(){
                        $("input[name='t_padrao']").val('Aguarde');
                        $("input[name='custo_unit']").val('Aguarde');
                        alert( $(this).val() );//alert aqui para ver oque está enviando
                        $.getJSON(
                                'function.php',
                                {instrumento: $(this).val()},// * 
                                function(data){
                                        alert( data );//alert aqui, para ver oque retornou
                                        $.each(data, function(i, obj){
                                                $("input[name='t_padrao']").val(obj.t_padrao);
                                                $("input[name='custo_unit']").val(obj.custo_unit);
                                        })
                                });
                });
        });
</script>
function.php?instrumento=1

 

precisa 'bater' oque você colocar na linha em que coloquei o * e a forma com que você tenta receber:

if( isset($_GET['instrumento']) )
{
        echo retorna( $_GET['instrumento'] );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colocando este alert:

alert( $(this).val() );

 

ele me retornou corretamente os nomes selecionados, colocando na função data, ele não me retornou nada.

Fazendo o teste da url diretamente, ele sempre me mostra todos campos, independente se colocar paramentro ou não.

Abraço , desde já obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

os nomes selecionados

 

nomes

! então você está trabalhando com strings!]

 

porque você voltou no erro de usar o cast para (int) ??

$id = (int)$id;
?? se você não entender como o script funciona, vai ser impossível de você implementá-lo !

 

retire o cast de int que eu fiz:

//$id_instrumento = (int)$instrumento;
já tinhamos arrumado isso!

 

você precisa que ao acessar o arquivo diretamente, com parâmetros seja retornado os registros filtrados !

continue acessando diretamente, até conseguir isso!

 

para debug:

$sql3 .= "WHERE `ID` = '$id' ";
echo $sql3;//adicione essa linha por agora, depois comente ela

você faz um WHERE ID, mas manda uma string, que é o nome do Fornecedor ?

assim não vai funcionar nunca mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oii Wiliian :D

Troquei toda estrutura do banco, exportei todas as tabelas que estavam em access para mysql, inclui os id´s nelas, adaptei o código, e funfou perfeitamente!!!!

Desculpa a ignorância, valeu pelas dicas e atençãooO!

Grande abraçoO!

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Apenas uma última dúvida, tenho vários campos, onde esse select pode ser impresso uma, ou 1000 vezes.

Como fiz aqui, ele insere em todos os campos unit_preco, mas gostaria que preenche-se apenas no seu determinado campo, ex:

instrumento 1: taltal -- -- -- -- custo1: 1.60

instrumento 2: taltal -- -- -- -- custo1: 1.80

Como que faria isso no javascript?

Teria que fzer algum loop?

Abraço e brigado mais uma vez!

<script type="text/javascript" src="jquery-1.2.2.pack.js"></script>
        <script type="text/javascript">
        $(document).ready(function(){
                $("select[name='instrumento']").change(function(){
                        $("input[name='custo_unitario']").val('Carregando...');
                        $("input[name='telefone']").val('Carregando...');

                        $.getJSON(
                                'function_ajax.php',
                                {id: $(this).val()},
                                function(data){
                                        $.each(data, function(i, obj){
                                                $("input[name='custo_unitario']").val(obj.custo_unitario);
                                                $("input[name='telefone']").val(obj.telefone);
                                        })
                                });
                });
        });
        </script>

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.