Ir para conteúdo

POWERED BY:

Arquivado

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

Cleiton Pereira

[Resolvido] Evento blur no php?

Recommended Posts

Gostaria de saber se existe alguma alternativa ao evento onBlur no php, pois preciso que quando um determinado input perca o foco, o seu atributo value seja usado em um SELECT para selecionar campos de uma tabela de acordo com o valor do input.

 

 

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

a linguagem q temos para tratar eventos é o javascript mesmo.

 

oq você tem q fazer é utilizar ajax, para fazer o teu select.

Exemplo:

http://wbruno.com.br/blog/2011/04/18/input-preenche-formulario-ajax/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado amigo. Vou dar uma estudada no exemplo para ver se é realmente o que preciso, qualquer dúvida eu posto aqui.

 

Desculpe amigo, mas não estou entendendo muito bem a sintaxe usada no php. Sou iniciante e por isso não entendo alguns métodos usados.

 

<?php  
   /** 
    * função que devolve em formato JSON os dados do cliente 
    */  
   function retorna( $nome, $db )  
   {  
       $sql = "SELECT `id`, `nome`, `telefone`, `endereco` 
           FROM `cliente` WHERE `nome` = '{$nome}' ";  

       $query = $db->query( $sql );  

       $arr = Array();  
       if( $query->num_rows )  
       {  
           while( $dados = $query->fetch_object() )  
           {  
               $arr['endereco'] = $dados->endereco;  
               $arr['telefone'] = $dados->telefone;  
           }  
       }  
       else  
           $arr['endereco'] = 'não encontrado';  

       return json_encode( $arr );  
   }  

/* só se for enviado o parâmetro, que devolve os dados */  
if( isset($_GET['nome']) )  
{  
   $db = new mysqli('localhost', 'root', '', 'teste');  
   echo retorna( filter ( $_GET['nome'] ), $db );  
}  

function filter( $var ){  
   return $var;//a implementação desta, fica a cargo do leitor  
}  
?>

 

O que são esses "->". Dei uma pesquisada em alguns sites e vi que não são operadores.

 

No trecho

 

$query = $db->query( $sql );

 

o nome query é uma variável?

 

No trecho

 

while( $dados = $query->fetch_object() ) 

 

isso seria o mesmo que fazer um

 

mysql_fetch_array($query)

 

 

No trecho

 

$db = new mysqli('localhost', 'root', '', 'teste');

 

seria o mesmo que fazer

 

$db = mysql_select_db('localhost', 'root', '', 'teste');

 

 

Desculpe-me tantas duvidas, é que, como eu disse, sou iniciante em php e meus meios de estudos não tive a oportunidade de aprender a desenvolver do modo em que está escrito esse arquivo php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

nesse script estou usando a lib mysqli:

 

http://php.net/mysqli

 

->query é um método do objeto

$db = new mysqli é onde instancio um novo objeto da class mysqli

 

 

while( $dados = $query->fetch_object() ) , é equivalente a:

while( $dados = mysql_fetch_object( $query ) ) contanto que você mude toda a estrutura para usar mysql_, no lugar de mysqli

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, para não lhe incomodar muito decidi passar o código php para MySQL, pois estudar o MYSQLi iria demorar alguns dias. Fazendo isso o código ficou mais "legível" para mim, mas mesmo assim não está funcionando.

 

O PHP: function.php

<?php  
mysql_select_db("localhost","root","","teste");

$nome = $_GET['nome'];
$campo = Array();

$sql = mysql_query("SELECT * FROM cliente WHERE nome='$nome'");
while($campodb = mysql_fetch_array($sql)){
	$campo['endereco'] = $campodb['endereco'];
	$campo['telefone'] = $campodb['telefone'];
}

json_encode($campo);

?>

 

O HTML: index.html. Não foi alterado.

 

<!DOCTYPE html>

<html>  

<head>  
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>  

   <script type="text/javascript">  
   $(document).ready(function(){  
       $("input[name='nome']").blur(function(){  
           var endereco = $("input[name='endereco']");  
           var telefone = $("input[name='telefone']");  

           $( endereco ).val('Carregando...');  
           $( telefone ).val('Carregando...');  

               $.getJSON(  
                   'function.php',  
                   { nome: $( this ).val() },  
                   function( json )  
                   {  
                       $( endereco ).val( json.endereco );  
                       $( telefone ).val( json.telefone );  
                   }  
               );  
       });  
   });  
   </script>  
</head>

<body>  
   <form action="" method="post">  
       <label>Nome: <input type="text" name="nome" /></label>  
       <label>Endereço: <input name="endereco" type="text" disabled="disabled" value="" /></label>  
       <label>Telefone: <input type="text" name="telefone" value="" /></label>  
   </form>  
</body> 

</html>  

 

E meu Banco de dados.(Uso o phpmyadmin, por isso irei postar uma foto)

 

37800914.png

 

 

Quando o evento blur ocorre, só é alterado o valor dos demais campos para "Carregando", como é citado no script que está no html.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faltou você usar o mysql_connect()

 

para debugar, acesse diretamente:

 

localhost/function.php?nome=Bruno

 

deve aparecer um jSON. Corrija até eliminar todos os erros php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inseri o mysql_connect e corrigi todos os erros, mas os inputs continuam não pegando o valor do banco de dados. Só pegam a sequencia de caracteres "Carregando..." que foi atribuído a eles.

 

 

 $( endereco ).val( json.endereco );  
$( telefone ).val( json.telefone );

 

De onde sairam os valores json.endereco e json.telefone que estão sendo setados no atributo value dos inputs? Acredito que esse seja o local do problema, ja que é aqui que os valores são atribuidos nos inputs.

 

Muito obrigado por estar respondendo. Em algum momento vou conseguir

Compartilhar este post


Link para o post
Compartilhar em outros sites

é um objeto JSON.

 

diga oque retornar destes alerts:

function( json )  
{
   alert( json );
   alert( json.endereco );

 

oq aparece agora, qndo você acessa o function diretamente, passando um nome q exista no teu banco ?

localhost/function.php?nome=Bruno

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde devo por essa function?

 

Pus elas após a primeira fction json e não apareceu nenhum alert.

 

function( json )  
                   {  
                       $( endereco ).val( json.endereco );  
                       $( telefone ).val( json.telefone ); 

                   }
function( json )  
                   {  
                       alert( json );
                       alert( json.endereco ); 

                   } 

 

Pus ela no lugar da primeira fuction json e apareceu um alert escrito null.

 

function( json )  
                   {  
                       alert( json );
                       alert( json.endereco ); 

                   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, adicione esse header no topo da página function:

 

header('Content-Type: text/html; charset=utf-8');

me diga oque voltar do alerta, e oque aparece qndo você acessa diretamente o function pelo servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda William. Você me encaminhou para o caminho certo e acabei conseguindo fazer o que queria usando o metodo $.ajax() do jQuery no lugar do $.getJSON.

 

O codigo ficou da seguinte maneira:

 

O HTML: index.html

 

<!DOCTYPE html>

<html lang="PT-BR">

<head>	
	<meta charset="UTF-8">	
	<title>Autocompletar Campos com Ajax, jQuery e PHP</title>

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

<body>	
	<form action="pessoas.php" method="post">
		<label for="nome">Nome: </label><br>
		<input type="text" id="nome" name="nome">
		<br>
		<label for="endereco">Endereco: </label><br>	
		<input type="text" id="endereco" name="endereco">	
		<br>
		<label for="telefone">Telefone: </label><br>
		<input type="text" id="telefone" name="telefone">		
	</form>	
</body>	
</html>

 

O Script: aplicacoes.js

 

$(function () {
$("#nome").blur(function () {
	var nome = $(this).val();
	$.ajax({
		type: "GET",
		url: "pessoas.php",
		data: "nome="+nome,
		success: function(pessoa){
			informacoesPessoa = pessoa.split("splitArray");
			$("#endereco").val(informacoesPessoa[0]);
			$("#telefone").val(informacoesPessoa[1]);
		}
	});
});
});

 

O PHP: pessoas.php

 

<?php	
$servidor = mysql_connect("localhost","root","");
$bd = mysql_select_db("teste", $servidor);

$nome = $_GET['nome'];
$cliente = Array();

$sql = mysql_query("SELECT * FROM cliente WHERE nome='$nome'");
while ($campo = mysql_fetch_array($sql)){
	$cliente[$nome]['endereco'] = $campo['endereco'];
	$cliente[$nome]['telefone'] = $campo['telefone'];
}

echo $cliente[$nome]['endereco'] ."splitArray". $cliente[$nome]['telefone'];
?>

 

Mais uma vez, obrigado pela ajuda. Sem sua ajuda não teria conseguido.

 

T+ camarada!

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.