Ir para conteúdo

POWERED BY:

Arquivado

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

valter_djr

Consulta ao BD sem refresh na pagina

Recommended Posts

Boa tarde amigos do fóum.

Estou com um problema aqui. Tenho um formulário onde o usuário vai se cadastrar e precisa digitar um código secundário (que não é chave primaria da tabela), porém preciso fazer uma consulta a fim de verificar se não há duplicidade.

Fiz uma função, porem não está funcionando e não sei o que estou fazendo de errado. Abaixo segue o trecho do código.

<script language="javascript" charset="utf-8" type="text/javascript">
  function pesquisa(str) {
	if (str == "") {
  	    document.getElementById("txt_codigo").innerHTML = "";
  	    return;
  	} 
			
	if (window.XMLHttpRequest) {
	    xmlhttp=new XMLHttpRequest();
  	} else {
	    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
			
	xmlhttp.onreadystatechange=function() {
  	   if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    	      document.getElementById("txt_codigo").innerHTML = xmlhttp.responseText;
    	   }
  	}
			
	xmlhttp.open("GET","pesquisa.php?q=" + str, true);
	xmlhttp.send();
  }
</script>

<?php $q = $_GET["q"]; $dbconn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); if (!$dbconn) { mensagem("",$dbconn,1); } $_query = "SELECT codigo FROM clientes WHERE codigo = '".$q."'"; $_result = mysqli_query($dbconn,$_query); if (mysqli_num_rows($_result) == 1) { // caso encontre o codigo exibe um "alert" notificando o usuario de que // o codigo digitado já existe. mensagem("","",16); } mysqli_close($dbconn); ?>
<tr>
<td>Codigo secundario::</td>
<td> <input type="text" name="txt_codigo" value="" maxlength="7" onchange="pesquisa(this.value)"/> </td>
</tr>

Alguém poderia me ajudar? Onde estou errando?

Grato e abraço a todos

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, a função mensagem é uma função que criei em JS só pra mostrar através de ALERTS, as diversas mensagens do sistema e já foi testada. funciona de boa. O meu problema realmente é essa que função que criei aí pra consulta interativa ao banco. Não dá nem sinal de vida. Já tentei com diversos eventos - onchange, onfocus, onblur - mas ela não me dá o bendito retorno. O script pesquisa.php é que ficou mal postado aí acima, então estou postando de novo aqui.

 

<?php

	$q = $_GET["q"];

	$dbconn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

	if (!$dbconn) {
	    mensagem("",$dbconn,1);
	}

	$_query = "SELECT codigo FROM clientes WHERE codigo = '".$q."'";
	$_result = mysqli_query($dbconn,$_query);
	
	if (mysqli_num_rows($_result) == 1) {
	    mensagem("","",16);
	}
		
	mysqli_close($dbconn);
	
?>

 

Samuel, o problema é que não conheço quase nada de JQuery, mas se puder me ajudar agradeceria imensamente.

Fico no aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, a função mensagem é uma função que criei em JS [...]

 

 

	if (mysqli_num_rows($_result) == 1) {
	    mensagem("","",16);
	}

 

 

Tá aqui o problema. Você está tentando chamar uma função JavaScript dentro do PHP. Isso não existe!

 

Não sei se vai resolver seu problema - acho eu que ainda não - mas a primeira coisa que você tem que fazer é escrever essa chamada à função mensagem na página de resposta

echo "mensagem('', '', 16);";

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tá aqui o problema. Você está tentando chamar uma função JavaScript dentro do PHP. Isso não existe!

 

Não sei se vai resolver seu problema - acho eu que ainda não - mas a primeira coisa que você tem que fazer é escrever essa chamada à função mensagem na página de resposta

echo "mensagem('', '', 16);";

 

Evandro, me expressei mal, a função mensagem é em php, só que lá dentro da função utilizo o JS. Segue trecho do codigo.

 

function mensagem($pagina,$conn,$tipomsg) {
		
  switch($tipomsg) {
   case 1:
	echo "<script language='javascript' type='text/javascript'>;";
	echo "alert(unescape('Falha na conex\u00e3o com o Banco de Dados !'));";
	echo "</script>;";
	break;
   case 2:
	echo "<script language='javascript' type='text/javascript'>;";
	echo "alert('Falha na consulta ao Banco de Dados !');";
	echo "</script>;";	
	break;

   ...
   ...
   ...
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abra no navegador a URL [inline]presquisa.php?q=qualquer+coisa+aqui[/inline] e veja se a resposta é o que você estava esperando. Se não for, poste a saída aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abra no navegador a URL [inline]presquisa.php?q=qualquer+coisa+aqui[/inline] e veja se a resposta é o que você estava esperando. Se não for, poste a saída aqui.

Pois é Evandro... fiz o que voce me orientou aí, e quando coloco lá uma codigo já cadastrado ele retorna direitinho a mensagem. Então, o problema com certeza está lá no script do AJAX...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

	xmlhttp.onreadystatechange=function() {
  	   if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    	      document.getElementById("txt_codigo").innerHTML = xmlhttp.responseText;
    	   }
  	}

 

 

xmlhttp.onreadystatechange = function () {
    if (this.readyState === 4 && this.status == 200) {
        window.alert(this.responseText);
    }

Veja se continua recebendo uma resposta satisfatória. Caso positivo, o problema está em tentar exibir alertas num elemento do DOM.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

xmlhttp.onreadystatechange = function () {
    if (this.readyState === 4 && this.status == 200) {
        window.alert(this.responseText);
    }

Veja se continua recebendo uma resposta satisfatória. Caso positivo, o problema está em tentar exibir alertas num elemento do DOM.

 

Vou testar aqui e já te dou retorno.

Abraço e obrigado

 

Vou testar aqui e já te dou retorno.

Abraço e obrigado

Evandro, com essa modificação aí no código, agora parece que funcionou, pelo menos deu o retorno. Quando digito um codigo já cadastrado eles retorna de boa. Mas o problema é o ALERT sai todo c@g@ado... rsrsrsr. Tem como contornar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testando melhor aqui, surgiram outros dois problemas.

1- Quando digito um código já cadastrado, ele retorna acusando perfeitamente. Porém quando o código é válido, ele também está apresentando um ALERT, só que vazio.

2 - Quando é digitado um código já cadastrado, o foco precisa se manter no campo, porém isso não está acontecendo.

Uma outra coisa, estou usando "onchange" no html. Está correto, ou deveria usar outro tipo de controle?

Estou postando novamente os códigos atuais.

Grato a todos.

function pesquisa(str) {
   if (str == "") {
      document.getElementById("txt_codigo").innerHTML = "";
      return;
   } 
			
   if (window.XMLHttpRequest) {
      xmlhttp=new XMLHttpRequest();
   } else {
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
			
   xmlhttp.onreadystatechange = function () {
      if (this.readyState === 4 && this.status == 200) {
          // coloquei esse "if" para tentar impedir a exibição do ALERT vazio, mas não
          // surtiu efeito 
          if (this.responseText != "") {
	     window.alert(this.responseText);
          }
      }
   }
				
   xmlhttp.open("GET","getuser.php?q=" + str, true);
   xmlhttp.send();

}

 

 

 

<?php
   require_once("include/dbcvars.php");

   $q = $_GET["q"];

   $dbconn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

   if (!$dbconn) {
      echo "Falha na conexão com o Banco de Dados !";
   } else {
      echo "";
   }

   $_query = "SELECT codigo FROM clientes WHERE codigo = '".$q."'";
   $_result = mysqli_query($dbconn,$_query);
	
   if (mysqli_num_rows($_result) == 1) {
      echo "Codigo já cadastrado !";
   } else {
      echo "";
   }
		
   mysqli_close($dbconn);
	
?>
<tr>
   <td>Razão Social:</td>
   <td>
      <input type="text" name="txt_razao" value="" />
   </td>						    
</tr>

<tr>
   <td>Codigo secundario:</td>
   <td>
       <input type="text" name="txt_codigo" value="" maxlength="7" onchange="pesquisa(this.value)"/>
   </td>
</tr>	

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

1- Quando digito um código já cadastrado, ele retorna acusando perfeitamente. Porém quando o código é válido, ele também está apresentando um ALERT, só que vazio.

Se continua alertando é porque está havendo algum retorno. Veja que vazio [inline]""[/inline] é diferente de em branco [inline]"{espaço}{tab}{enter}"[/inline].

2 - Quando é digitado um código já cadastrado, o foco precisa se manter no campo, porém isso não está acontecendo.

Depois deste alerta, utilize o método focus

Uma outra coisa, estou usando "onchange" no html. Está correto, ou deveria usar outro tipo de controle?

]

Quem vai dizer se o evento é o mais apropriado é você mesmo. A validação está se comportando conforme desejado??

 

https://developer.mozilla.org/en-US/docs/DOM/element.onchange

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se continua alertando é porque está havendo algum retorno. Veja que vazio [inline]""[/inline] é diferente de em branco [inline]"{espaço}{tab}{enter}"[/inline].

Depois deste alerta, utilize o método focus

 

Quem vai dizer se o evento é o mais apropriado é você mesmo. A validação está se comportando conforme desejado??

 

https://developer.mozilla.org/en-US/docs/DOM/element.onchange

Bom dia Evandro.

 

Pois então, meu camarada. Já coloquei a instrução com o método focus depois do alert e mesmo assim ele não volta pro campo. Já não sei mais o que fazer com esse negócio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Evandro.

 

Pois então, meu camarada. Já coloquei a instrução com o método focus depois do alert e mesmo assim ele não volta pro campo. Já não sei mais o que fazer com esse negócio.

Evandro, acho que já resolvi o nó todo. O responseText estava retornando a string com um monte de espaços em branco.

Resolvi o problema usando "req.responseText.replace(/\s/g,"")".

Agora resta testar com a budega do IE pra ver se não vai ter mais encrencas.

Abraço e mais uma vez, obrigado pelas dicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, acho que já resolvi o nó todo. O responseText estava retornando a string com um monte de espaços em branco.

Resolvi o problema usando "req.responseText.replace(/\s/g,"")".

Agora resta testar com a budega do IE pra ver se não vai ter mais encrencas.

Abraço e mais uma vez, obrigado pelas dicas.

 

Se for só este o problema, não há de ter dores de cabeça com IE. Se o problema for IE, mesmo, daqui pra frente terá que buscar ajuda nas sessões de JavaScript e Webstandards.

 

De qualquer forma, são participantes com iniciativa e que nos ajudam a ajudá-los que mantém a nossa vontade de colaborar. Boa sorte! :joia:

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.