Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo Berto

[Resolvido] Preencher campos após CPF

Recommended Posts

Ola boa noite

 

Estou com uma duvida de como trazer os dados de RG e nome de uma tabela usando o jquery.

 

Gostaria que o formulário fosse completado após ser digitado o CPF, completado com o nome e o RG cadastrados no banco, mas os dados não podem ser alterados, apenas para visualizar.

 

Tabela do BD


CREATE TABLE `responsavel` (
	`idResp` INT(11) NOT NULL AUTO_INCREMENT,
	`cpfResp` CHAR(14) NOT NULL COLLATE 'latin1_general_ci',
	`rgResp` VARCHAR(13) NULL DEFAULT NULL COLLATE 'latin1_general_ci',
	`celularResp` CHAR(14) NULL DEFAULT NULL COLLATE 'latin1_general_ci',
	`foneComercialResp` CHAR(14) NULL DEFAULT NULL COLLATE 'latin1_general_ci',
	`nmResp` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_general_ci',
	`nmTrabalhoResp` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_general_ci',
	`Profissao_id_profissao` INT(11) NOT NULL,
	PRIMARY KEY (`idResp`),
	UNIQUE INDEX `cpfResp_UNIQUE` (`cpfResp`),
	INDEX `fk_Responsavel_Profissao` (`Profissao_id_profissao`)
)
COLLATE='latin1_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT

 

Formulário

 


<table border="0" cellpadding="0" cellspacing="0" width="850"
	bgcolor="#F9FBFE" class="caixaformulario">
	<TBODY>
		<TR>
			<TD colspan="7" class="Tituloformulario">Dados do Responsável
			- 1/3</TD>
		</TR>
		<TBODY>
			<TR>
				<TD width="29">
				<TD width="819">
				<table width="100%" border="0">
					<tr>
						<td width="18%" class="TxtC">CPF:</td>
						<td width="36%"><span id="cpf_resp1"> <label for="cpfResp"></label>
						<input name="cpfResp" type="text" id="cpfResp" /> <span
							class="textfieldValidMsg"><img src="public/imagens/ok.png"
							width="14" height="13" alt="OK" /></span> <br />
						<span class="textfieldRequiredMsg">Campo Obrigatório!</span><span
							class="textfieldInvalidFormatMsg">CPF Inválido.</span></span></td>
					</tr>
					<tr>
						<td width="15%" class="TxtC">Nome:</td>
						<td colspan="3"><span id="nm_resp1"> <label for="nmResp"></label>
						<input name="nmResp" type="text" id="nmResp"
							onkeypress="mascara(this,texto)"
							onkeyup="mascara( this, toUpper )" size="80" maxlength="50" readonly="readonly" />
						<span class="textfieldValidMsg"><img src="public/imagens/ok.png"
							width="14" height="13" alt="OK" /></span></span></td>
						</tr>
						<tr>
						<td class="TxtC">RG:</td>
						<td width="31%"><span id="rg_resp1"> <label for="rgResp"></label>
						<input name="rgResp" type="text" id="rgResp"
							onkeypress="mascara(this,mrg)" readonly="readonly" /> <span
							class="textfieldValidMsg"><img src="public/imagens/ok.png"
							width="14" height="13" alt="OK" /></span></span></td>
					</tr>
					<tr>
						<td class="TxtC">Grau Parentesco:</td>
						<td><span id="parentesco_resp1"> <label for="ParentescoResp"></label>
						<select name="ParentescoResp" id="ParentescoResp">
							<option selected="selected">Escolha uma opção</option>
							<option value="3">Avó</option>
							<option value="4">Avô</option>
							<option value="1">Mãe</option>
							<option value="2">Pai</option>
							<option value="7">Representante Legal</option>
							<option value="5">Tia</option>
							<option value="6">Tio</option>
						</select> <span class="selectValidMsg"><img
							src="public/imagens/ok.png" width="14" height="13" alt="OK" /></span>
						<br />
						<span class="selectRequiredMsg">Selecione um item.</span></span></td>
						<td class="TxtC"></td>
						<td></td>
				</tr>
			</table>
			</td>
		</tr>
		<tr>
			<td height="13" colspan="5"></td>
		</tr>
	</tbody>
</table>

Alguem saberia como eu poderia trazer esses dados, a pagina não pode ser atualizada, se tiverem um modelo para tentar entender e aplicar.

 

É para um sistema de projeto final que estou desenvolvendo. :)

www.pequenoencanto.net/netschool

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você postar o formulário e a estrutura do seu banco de dados é parte do que precisamos para te ajudar.

 

O mais importante é como você tentou fazer, pois em cima disso é que vamos trabalhar na solução, buscando te ensinar onde errou (se errou), porquê errou e como fazer certo. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você postar o formulário e a estrutura do seu banco de dados é parte do que precisamos para te ajudar.

 

O mais importante é como você tentou fazer, pois em cima disso é que vamos trabalhar na solução, buscando te ensinar onde errou (se errou), porquê errou e como fazer certo. ;)

 

 

No meu formulário já tem essas buscas que estão funcionando.

 


$(document).ready(function(){

$("#anoTurma").load("include/anoTurma.php");

//combo box Turno
$("select[name=anoTurma]").change(function(){
$("select[name=turno]").html('<option value="">Carregando.......</option>');

$.post("include/turno.php",
{anoTurma:$(this).val()},
function(valor){
$("select[name=turno]").html(valor);})
})

//combo box serie
$("select[name=turno]").change(function(){
$("select[name=serie]").html('<option value="">Carregando.......</option>');

$.post("include/serie.php",
{turno:$(this).val(), anoTurma:$("#anoTurma").val()},
function(valor){

$("select[name=serie]").html(valor);})
})

//combo box turma
$("select[name=serie]").change(function(){
$("select[name=turma]").html('<option value="">Carregando.......</option>');

$.post("include/turma.php",
{serie:$(this).val(),turno:$("#turno").val(), anoTurma:$("#anoTurma").val()},
function(valor){
$("select[name=turma]").html(valor);})
})	
});

Mas com base nessas eu não consegui alterar para fazer, tinha feito uma, mas como não deu certo acabei deletando ela.

 

 

Um exemplo dessa consulta que esta funcionando no sistema. Mas só com a opção de select.

 

consulta turma.php

<?php
include("connect_data_base.php");
$serie = $_POST['serie'];
$anoTurma = $_POST['anoTurma'];
$turno = $_POST['turno'];

$sql=mysql_query("SELECT turma FROM turma WHERE serie = '$serie' 
				  and turno = '$turno'
				  and anoturma = '$anoTurma' ORDER BY turma ASC") or die(mysql_error());

if(mysql_num_rows($sql) == 0){
echo  '<option value="">'.htmlentities(utf8_decode('Nada Encontrado')).'</option>';
}else{
echo  '<option value="">'.htmlentities('Escolha uma opção').'</option>';
while($result_sql = mysql_fetch_object($sql)){
$turma=ucfirst($result_sql->turma);
echo '<option value="'.$result_sql->turma.'">Turma '.$turma.'</option>';
}
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, pode ser preferência da minha parte, mas eu não gosto de retornar HTML (retorno XML) quando uso AJAX. Pelo menos nesses casos de autocomplete.

 

Na parte do PHP você apenas mudaria a saída. Ao invés de ecoar os <option>'s, você estruturaria um XML como, por exemplo:

 

<students>
    <CPF>xxx.xxx.xxx-xx</CPF>
    <RG>xx.xxx.xxx-x</CPF>
    <name>Earl Sinclair</name>
    <address>Pangea Street, 0</address>
    <email>earl.sinclair@wesayso.com</email>
</students>
Assim, com um único $.ajax você obteria todas as informações de uma fez e poderia preencher o campos (com .val() ) usando-se dos seletores que a jquery oferece e, se necessário, o método find().

 

P.S.: Earl Sinclair é o Dino da Silva Sauro :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você postar o formulário e a estrutura do seu banco de dados é parte do que precisamos para te ajudar.

 

O mais importante é como você tentou fazer, pois em cima disso é que vamos trabalhar na solução, buscando te ensinar onde errou (se errou), porquê errou e como fazer certo. ;)

 

Segue alguns moledos que fiz, um deles com base em um tópico que achei aqui no forum.

 

Se poderem ver tem muitos erros, mas não consegui resolver.

 

O primeiro tentei fazer com um modelo aqui do forum que vi em um tópico postado, mas não esta trazendo os dados, apenas alterar para Carregando dados.

 

Tela do sistema e formulário a ser peenchido - (Aba Dados Responsáveis)

http://www.pequenoencanto.net/netschool/index.php?action=page&task=cadastrarAluno

 

Formulário - São 3 formulários para serem peenchidos e cada um tera CPFs diferentes para busca dos dados.

<table border="0" cellpadding="0" cellspacing="0" width="850"
        bgcolor="#F9FBFE" class="caixaformulario">
        <TBODY>
                <TR>
                        <TD colspan="7" class="Tituloformulario">Dados do Responsável
                        - 1/3</TD>
                </TR>
                <TBODY>
                        <TR>
                                <TD width="29">
                                <TD width="819">
                                <table width="100%" border="0">
                                        <tr>
                                                <td width="18%" class="TxtC">CPF:</td>
                                                <td width="36%"><span id="cpf_resp1"> <label for="cpfResp"></label>
                                                <input name="cpfResp" type="text" id="cpfResp" /> <span
                                                        class="textfieldValidMsg"><img src="public/imagens/ok.png"
                                                        width="14" height="13" alt="OK" /></span> <br />
                                                <span class="textfieldRequiredMsg">Campo Obrigatório!</span><span
                                                        class="textfieldInvalidFormatMsg">CPF Inválido.</span></span></td>
                                        </tr>
                                        <tr>
                                                <td width="15%" class="TxtC">Nome:</td>
                                                <td colspan="3"><span id="nm_resp1"> <label for="nmResp"></label>
                                                <input name="nmResp" type="text" id="nmResp"
                                                        onkeypress="mascara(this,texto)"
                                                        onkeyup="mascara( this, toUpper )" size="80" maxlength="50" readonly="readonly" />
                                                <span class="textfieldValidMsg"><img src="public/imagens/ok.png"
                                                        width="14" height="13" alt="OK" /></span></span></td>
                                                </tr>
                                                <tr>
                                                <td class="TxtC">RG:</td>
                                                <td width="31%"><span id="rg_resp1"> <label for="rgResp"></label>
                                                <input name="rgResp" type="text" id="rgResp"
                                                        onkeypress="mascara(this,mrg)" readonly="readonly" /> <span
                                                        class="textfieldValidMsg"><img src="public/imagens/ok.png"
                                                        width="14" height="13" alt="OK" /></span></span></td>
                                        </tr>
                                        <tr>
                                                <td class="TxtC">Grau Parentesco:</td>
                                                <td><span id="parentesco_resp1"> <label for="ParentescoResp"></label>
                                                <select name="ParentescoResp" id="ParentescoResp">
                                                        <option selected="selected">Escolha uma opção</option>
                                                        <option value="3">Avó</option>
                                                        <option value="4">Avô</option>
                                                        <option value="1">Mãe</option>
                                                        <option value="2">Pai</option>
                                                        <option value="7">Representante Legal</option>
                                                        <option value="5">Tia</option>
                                                        <option value="6">Tio</option>
                                                </select> <span class="selectValidMsg"><img
                                                        src="public/imagens/ok.png" width="14" height="13" alt="OK" /></span>
                                                <br />
                                                <span class="selectRequiredMsg">Selecione um item.</span></span></td>
                                                <td class="TxtC"></td>
                                                <td></td>
                                </tr>
                        </table>
                        </td>
                </tr>
                <tr>
                        <td height="13" colspan="5"></td>
                </tr>
        </tbody>
</table>

 


$("input[name='cpfResp']").blur(function(){

$("input[name='nmResp']").val('Carregando dados ......');
$("input[name='rgResp']").val('Carregando dados ......');

$.getJSON('include/responsavel.php',
{cpf: $(this).val()},

function(data){
$.each(data, function(i, obj){
$("input[name='nmResp']").val(obj.nmResp);
$("input[name='rgResp']").val(obj.rgResp);
})
});
});

responsavel.php

<?php
include("connect_data_base.php");

function responsavel()
{

$sql = mysql_query("SELECT rgResp, nmResp FROM responsavel where cpfResp = '$cpf' ") or die(mysql_error());

$json .= ' [';

if(mysql_num_rows($sql) > 0)
{
while ( $result_sql = mysql_fetch_assoc( $sql ) )
{
$json .= "{rgResp: '{$result_sql['rgResp']}', nmResp: '{$result_sql['nmResp']}'}";;
}
}
else

$json = 'nmResp: Responsável não cadastrado';

$json .= ']';

return $json;
}

?>

Este segundo traz os dados, mas esta tudo vindo RG e o nome na mesma linha, como eu faria para seprara.


$("input[name='cpfResp2']").blur(function(){

$("input[name='nmResp2']").val('Carregando dados ......');
$("input[name='rgResp2']").val('Carregando dados ......');

$.post('include/responsavel1.php',
{cpf2: $(this).val()},

function(valor){
$("input[name='nmResp2']").val(valor);
$("input[name='rgResp2']").val(valor);
});
});

Responsavel1.php


<?php
include("connect_data_base.php");

$cpf = $_POST['cpf2'];

$sql=mysql_query("SELECT rgResp, nmResp FROM responsavel where cpfResp = '$cpf'") or die(mysql_error());

if(mysql_num_rows($sql) == 0){
$valor = 'Responsável não cadastrado';
echo "$valor";
}else{
while($result_sql = mysql_fetch_object($sql)){
$rgResp=ucfirst($result_sql->rgResp);
$nmResp=ucfirst($result_sql->nmResp);

echo "$nmResp";
echo "$rgResp";

}
}

?>

Olha, pode ser preferência da minha parte, mas eu não gosto de retornar HTML (retorno XML) quando uso AJAX. Pelo menos nesses casos de autocomplete.

 

Na parte do PHP você apenas mudaria a saída. Ao invés de ecoar os <option>'s, você estruturaria um XML como, por exemplo:

 

<students>
    <CPF>xxx.xxx.xxx-xx</CPF>
    <RG>xx.xxx.xxx-x</CPF>
    <name>Earl Sinclair</name>
    <address>Pangea Street, 0</address>
    <email>earl.sinclair@wesayso.com</email>
</students>
Assim, com um único $.ajax você obteria todas as informações de uma fez e poderia preencher o campos (com .val() ) usando-se dos seletores que a jquery oferece e, se necessário, o método find().

 

P.S.: Earl Sinclair é o Dino da Silva Sauro :lol:

 

 

Teria algum modelo para que eu possa tentar entender?

 

Se tiver um parecido com os dados passado na resposta anterior, para ver qual fica mais pratico de se aplicar.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha um pronto de outro sistema que fiz, ou se eu tenho não estou mais encontrando :P

 

Mas é fácil.

 

Leia sobre o $.ajax, eu acho melhor que $.post, já que tem mais recursos, e sobre o find(), que é mais fácil do que construir um mega seletor com base em XPath.

 

O XML você tem diversas formas de montar. Com PHP tem a SimpleXML, a DOM, a XmlWriter ou você pode fazer manualmente, com dezenas de echo/print literalmente mal organizados.

 

No final, depois de todo XML construído, você ecoa ele para que se tenha acesso via AJAX.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tentou fazer com XML?

 

Primeiro tenha um arquivo, acessível por uma URL, que receba o CPF via POST, consulte o banco e monte o XML.

 

Esse XML pode, inclusive conter dentro do nó principal um filho caso ocorra algum erro (requisição não é pode -st, o CPF não foi encontrado...)

 

Com o XML montado, ecoado, seguido de um exit (para não haver reenvio de cabeçalhos), no JavaScript, faça a requisição $.ajax (ou $.post que por ter menos argumentos é mais simples) apontando para essa URL e passando o CPF.

 

Perceba o tanto $.ajax como $.post têm um argumento success onde você define uma função a ser executada quando a requisição se completar (quinto exemplo de $.post).

 

Nessa função, você vai usar o find() sobre o parâmetro com a resposta (no exemplo, o data).

 

E é nessa função que você preenche os devidos campos.

 

Se você quiser a mensagem "Carregando...", atribua esse valor ANTES da requisição e, dentro dela, o outro val() sobrescreverá o primeiro, da mensagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tentou fazer com XML?

 

Primeiro tenha um arquivo, acessível por uma URL, que receba o CPF via POST, consulte o banco e monte o XML.

 

Esse XML pode, inclusive conter dentro do nó principal um filho caso ocorra algum erro (requisição não é pode -st, o CPF não foi encontrado...)

 

Com o XML montado, ecoado, seguido de um exit (para não haver reenvio de cabeçalhos), no JavaScript, faça a requisição $.ajax (ou $.post que por ter menos argumentos é mais simples) apontando para essa URL e passando o CPF.

 

Perceba o tanto $.ajax como $.post têm um argumento success onde você define uma função a ser executada quando a requisição se completar (quinto exemplo de $.post).

 

Nessa função, você vai usar o find() sobre o parâmetro com a resposta (no exemplo, o data).

 

E é nessa função que você preenche os devidos campos.

 

Se você quiser a mensagem "Carregando...", atribua esse valor ANTES da requisição e, dentro dela, o outro val() sobrescreverá o primeiro, da mensagem.

 

Não, com XML não tentei ainda, apenas com os codigos que informei acima.

 

o responsavel1 traz os dados e apresenta no formulário, mas fica tudo junto o nome e o RG, ainda não consegui mecher em mais algo, mas acho que o problema deve ser bem simples. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então tenta com XML, como as informações virão estruturadas cada uma em sua própria tag você usar um find() para cada informação, já atribuindo ao campo correspondente com val().

 

Honestamente, eu acho que retornar algo diferente de XML é gambiarra, afinal AJAX é Asynchronous JavaScript and XML. Mas pode ser apenas birra ou má interpretação de minha parte.

 

Mas que fica bem mais fácil, isso fica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então tenta com XML, como as informações virão estruturadas cada uma em sua própria tag você usar um find() para cada informação, já atribuindo ao campo correspondente com val().

 

Honestamente, eu acho que retornar algo diferente de XML é gambiarra, afinal AJAX é Asynchronous JavaScript and XML. Mas pode ser apenas birra ou má interpretação de minha parte.

 

Mas que fica bem mais fácil, isso fica.

 

Vou dar uma pesquisa a respeito.

 

O problema maior é que estou correndo contra o tempo. :D

 

Pois tenho que apresentar o sistemas até dezembro. :)

 

Mas vou pesquisar um modelo e tentar entender e fazer.

 

Obrigado Bruno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver por enquanto.!!!!!!

 

 

Vejam como ficou o código. Agora so falta diminuir o tamanho dele. :D

 

 

Preenchedo o CPF e completando nome e RG do responsável.

$("input[name='cpfResp']").blur(function(){

$("input[name='nmResp']").val('Carregando dados ......');
$("input[name='rgResp']").val('Carregando dados ......');

$.post('include/responsavel.php',
{cpf: $(this).val()},

function(valor){
	responsavel = valor.split("-");
	$("input[name='nmResp']").val(responsavel[0]);
	$("input[name='rgResp']").val(responsavel[1]);
});
});

$("input[name='cpfResp2']").blur(function(){

$("input[name='nmResp2']").val('Carregando dados ......');
$("input[name='rgResp2']").val('Carregando dados ......');

$.post('include/responsavel.php',
{cpf: $(this).val()},

function(valor){
	responsavel = valor.split("-");
	$("input[name='nmResp2']").val(responsavel[0]);
	$("input[name='rgResp2']").val(responsavel[1]);
});
});

$("input[name='cpfResp3']").blur(function(){

$("input[name='nmResp3']").val('Carregando dados ......');
$("input[name='rgResp3']").val('Carregando dados ......');

$.post('include/responsavel.php',
{cpf: $(this).val()},

function(valor){
	responsavel = valor.split("-");
	$("input[name='nmResp3']").val(responsavel[0]);
	$("input[name='rgResp3']").val(responsavel[1]);
});
});

arquivos de consulta.

responsavel.php

<?php
include("connect_data_base.php");

$cpf = $_POST['cpf'];

$sql=mysql_query("SELECT rgResp, nmResp FROM responsavel where cpfResp = '$cpf'") or die(mysql_error());

if(mysql_num_rows($sql) == 0){
$valor = utf8_encode('Responsável não cadastrado')."-". utf8_encode('Não cadastrado');

echo "$valor";

}else{

while($result_sql = mysql_fetch_object($sql)){
$rgResp=ucfirst($result_sql->rgResp);
$nmResp=ucfirst($result_sql->nmResp);

$valor = $nmResp ."-". $rgResp;

echo $valor;

	}
}

?>

Obrigado a todos!!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com base no script acima que consegui montar, surgiu uma duvida.

 

como ele está em blur, se o usuário selecionar o input e não digitar nada ele tenta fazer a busca, mas apresenta que os dados não foram localizados.

 

Mudei os valor para change, com o intuito de que só depois que o usuário digitar os dados de CPF ele tenta efetuar a busca, mas isso não acontece.

 

O que pode esta acontecendo para não funcionar com o change?

 

Alguem teria alguma ideia?

 

Com base no script acima que consegui montar, surgiu uma duvida.

 

como ele está em blur, se o usuário selecionar o input e não digitar nada ele tenta fazer a busca, mas apresenta que os dados não foram localizados.

 

Mudei os valor para change, com o intuito de que só depois que o usuário digitar os dados de CPF ele tenta efetuar a busca, mas isso não acontece.

 

O que pode esta acontecendo para não funcionar com o change?

 

Alguem teria alguma ideia?

 

Até o momento consegui fazer assim.

$("input[name='cpfResp']").keyup(function(){

var minimo = 14
var quantidade = $(this).val().length;

if (quantidade == minimo){

$("input[name='nmResp']").val('Carregando dados ......');
$("input[name='rgResp']").val('Carregando dados ......');

$.post('include/responsavel.php',
{cpf: $(this).val()},

function(valor){
	responsavel = valor.split("-");
	$("input[name='nmResp']").val(responsavel[0]);
	$("input[name='rgResp']").val(responsavel[1]);
})
}else{
$("input[name='nmResp']").val('');
$("input[name='rgResp']").val('');
}
});

$("input[name='cpfResp2']").keyup(function(){ 
var minimo = 14
var quantidade = $(this).val().length;

if (quantidade == minimo){

$("input[name='nmResp2']").val('Carregando dados ......');
$("input[name='rgResp2']").val('Carregando dados ......');

$.post('include/responsavel.php',
{cpf: $(this).val()},

function(valor){
	responsavel = valor.split("-");
	$("input[name='nmResp2']").val(responsavel[0]);
	$("input[name='rgResp2']").val(responsavel[1]);
})
}else{
$("input[name='nmResp2']").val('');
$("input[name='rgResp2']").val('');
}
});

$("input[name='cpfResp3']").keyup(function(){
var minimo = 14
var quantidade = $(this).val().length;

if (quantidade == minimo){

$("input[name='nmResp3']").val('Carregando dados ......');
$("input[name='rgResp3']").val('Carregando dados ......');

$.post('include/responsavel.php',
{cpf: $(this).val()},

function(valor){
	responsavel = valor.split("-");
	$("input[name='nmResp3']").val(responsavel[0]);
	$("input[name='rgResp3']").val(responsavel[1]);
	})
}else{
$("input[name='nmResp3']").val('');
$("input[name='rgResp3']").val('');
}
});

Vcs podem avaliar e dar criticas ou sugestões?

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.