Ir para conteúdo

Arquivado

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

rcdesign

Buscar informação no banco de dados

Recommended Posts

certo.. vamos lá...

 

objetivo: Pegar dados digitados em um formulário e verificar no banco de dados, via javascript, se já existe informação semelhante retornando informação de erro em caso positivo, assim que o usuário deixa o campo (on Blur).

 

Na página do formulário inserir a chamada para o código java script:

<script src="nomedoarquivo.js"></script>

Campo do Form:

<input name="nome_do_campo" type="text" id="nome_do_campo" size="15" maxlength="14"  onBlur="if (this.value != '') { buscaCPF(this.value); }" />
	  <span id="resultado_campo"></span>

O arquivo javascript

function buscaCPF(valor) {	 
				url = "busca_info.php?nome_do_campo="+valor;
				req = null; 
				// Procura por um objeto nativo (Mozilla/Safari) 
				if (window.XMLHttpRequest) { 
						req = new XMLHttpRequest(); 
						req.onreadystatechange = processReqChange; 
						req.open("GET",url,true); 
						req.send(null); 
						// Procura por uma versão ActiveX (IE) 
				}
				else if (window.ActiveXObject) { 
						req = new ActiveXObject("Microsoft.XMLHTTP"); 
						if (req) { 
								req.onreadystatechange = processReqChange; 
								req.open("GET",url,true); 
								req.send(); 
						} 
				} 
		} 

		function processReqChange() {
				// apenas quando o estado for "completado" 
				if (req.readyState == 4) {
						// apenas se o servidor retornar "OK"
						if (req.status == 200) { 
								// procura pela div id="nome_do_campo" e insere o conteudo 
								// retornado nela, como texto HTML 
								document.getElementById('resultado_campo').innerHTML = req.responseText; 
						} 
						else { 
								alert("Houve um problema ao obter os dados:" + req.statusText); 
						} 
				} 
		}

O arquivo php

<?php
ob_start();
 
header("Content-Type: text/html; charset=ISO-8859-1",true);
require 'config.php'; // conexão com o banco de dados

		if(!empty($_GET["nome_do_campo"])) { 
				$dado = $_GET["nome_do_campo"];
				$seleciona = "SELECT * FROM nome_da_tabela WHERE campo_da_tabela = '" . $dado . "' LIMIT 0,1";
				$resultado = mysql_query($seleciona) or die (mysql_error());
				$linhas = mysql_num_rows($resultado);
				if ($linhas != 0) {
				echo "Mensagem de erro/duplicado";
				}
				else {
				 echo "";
				}
		} 
		else {
				echo "<script>alert('ERRO!');</script>";
		}
		
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

rcdesign, até que em fim heim? Meus parabéns.

Isso me fez lembrar o primeiro sisteminha que fiz aqui na intranet da minha empresa, à quase dois anos atrás,

ralei a beça, mas o resultado compensou

Compartilhar este post


Link para o post
Compartilhar em outros sites

é klay não foi fácil e sem a preciosa ajuda/orientação do GuttoSP não teria saído do lugar...

 

e na verdade a coisa toda não acabou ainda..

 

neste mesmo formulário tenho mais um campo pra fazer a mesma coisa - o campo de Login - e, neste mesmo site, ainda tem outros dois formulários que, obviamente também precisam ser validados.

 

e aí já começaram novamente os problemas... :mellow:

 

é claro que, inicialmente, eu tentei o óbvio.. duplicar os códigos alterando as informações dos campos é lógico, mas não funciona..

em seguida separei os códigos, para cada campo um grupo separado de códs./págs. mas também não funciona...

 

estou agora pesquisando sobre o assunto tentando achar a solução, mas pra quem não entende nada - ou quase nada - de javascript não tá fácil...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar o mesmo code, sem precisar duplicar, fazendo algumas alterações:

 

No formulário altere:

input name="nome_do_campo" type="text" id="nome_do_campo" size="15" maxlength="14"  onBlur="if (this.value != '') { buscaCPF(this.value); }" />

Para...

input name="nome_do_campo" type="text" id="id_do_campo" size="15" maxlength="14"  onBlur="if (this.value != '') { buscaCPF(this.name,this.value); }" />
Irá enviar o nome do campo e seu valor para a função js.

 

Na função js, altere:

function buscaCPF(valor) {

Para...

function busca(campo,valor) {
Como agora ela irá buscar diversos campos, não faz sentido chamá-la de buscaCPF. Acrescentamos um segundo parâmetro, campo, para sabermos qual campo ativou a chamada da função.

 

Agora altere:

url = "busca_info.php?nome_do_campo="+valor;

Para...

url = "busca_info.php?campo="+campo+"&valor="+valor;
Essa parte irá informar para o busca_info.php o campo e o valor pegos na função js.

 

No busca_info.php altere:

if(!empty($_GET["campo"]) && !empty($_GET["valor"])) { // Confere se os dados enviados não estão vazios
                $campo = $_GET["campo"];
                $valor = $_GET["valor"];
                $seleciona = "SELECT * FROM nome_da_tabela WHERE " . $campo . " = '" . $valor . "' LIMIT 0,1";
Claro que nesse caso o nome dos elementos do formulário (inputs, textareas, selects) devem ter o mesmo nome dos campos da tabela do BD.

 

Se for exibir o alerta no mesmo elemento do code inicial, não altera mais nada. Caso queira exibir as mensagens de retorno em elementos distintos, acrescente os devidos campos no formulário e referencie o mesmo na função js. Identifique cada um com nomes e ids únicos, para não exibir a mensagem: Erro em tempo de execução desconhecido.

 

Para objetos de formulário, inputs, selects... utilize value para exibir o resultado da consulta. Para divs, tds, utilize innerHTML.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem Gutto, mais uma vez obrigado.. eu pesquisei bastante sobre o assunto e tinha chegado até esse ponto:

onBlur="if (this.value != '') { buscaCPF(this.name,this.value); } { buscaCPF(this.name,this.value); }
mas não estava sabendo como passar para o JS e consequentemente ao PHP..

 

como isso a pesquisa está sendo feita corretamente.. só não estou conseguindo fazer com que cada informação seja apresentada no lugar correto dentro do form... na verdade acredito que o form esteja correto.. o problema é no JS mesmo.. acho que tem que usar if mas não consegui fazer, tentei criar uma variável pra separar os dados mas também não deu...

 

o código era assim:

function processReqChange() {
				// apenas quando o estado for "completado" 
				if (req.readyState == 4) {
						// apenas se o servidor retornar "OK"
						if (req.status == 200) { 
								// procura pela div id="verifica_cpf" e insere o conteudo 
								// retornado nela, como texto HTML 
								document.getElementById('resultado_cpf').innerHTML = req.responseText; 
						} 
						else { 
								alert("Houve um problema ao obter os dados:" + req.statusText); 
						} 
				} 
		}

incluindo apenas a referência ao outro campo, assim:

document.getElementById('resultado_cpf').innerHTML = req.responseText; 
document.getElementById('resultado_login').innerHTML = req.responseText;
a informação do erro é apresentada em ambos os campos independente se a busca foi no CPF ou no Login.. e é lógico isso, afinal o código está dizendo somente que é para lançar o resultado nesses campos...

tentei então fazer assim:

if( document.getElementById("resultado_cpf").innerHTML = req.responseText; 
if( document.getElementById("resultado_login").innerHTML = req.responseText;

mas assim está errado.. o erro não é mostrado..

 

alguma luz?

 

*obs: antecipadamente já vou adiantando minhas desculpas ao moderador do fórum por eventual bagunça neste post mas não vejo outra forma mais clara de explicar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

não consigo fazer com que a informação de erro/duplicidade aparece somente no lugar do referido erro..

erro no campo CPF aparecer somente no campo CPF, erro no campo login aparecer somente no campo login...

 

no post anterior ali eu coloquei duas das tentativas que eu fiz no JS.. que não deram certo...

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.