Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro ao consultar String


Easrml

Pergunta

Galera boa noite,

Estou com um problema e gostaria de pedir a ajuda de vocês ... tenho um script feito em PHP/MySQL/AJAX para consulta no BD e preenchimento automatico dos campos... nesse BD tem um campo codigo que é do tipo VARCHAR (Se mudo pra INT beleza funciona) que é a chave primaria.. o problema é que quando esse campo é uma string não me retorna nada... Acredito que seja nessa parte do Js que não deixa passar.

var codigo = document.getElementById('codigo').value.replace(/[^0-9]/g,"");

Alguém saberia me dizer o que pode ta errado ?

Desde já agradeço

Obrigado!

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

dae easrml,

cara, com o codigo tem nada de errado não.

var codigo = document.getElementById('codigo').value.replace(/[^0-9]/g,"");

veja q var codigo, entende-se q vai armazenar uma valor numerico por ser codigo.

ele pega o elemento do html com nome "codigo",

e faz um replace, ou seja, modifica.

no codigo ele já diz tudo:

replace(/[^0-9]/g,"")

veja q primeiro ele informa o q vai ser alterado, e em seguida o novo valor,

ou seja,

/g = pegar todos os valores repetidos,

/[^0-9] = o elemento ^ significa negaçao, ou seja, todos os valores q não estejam entre 0 e 9.

sendo assim ele vai tirar todas os caracteres não numeros mesmo.

se é isso q ele ta fazendo é porque ta funcionando mesmo.

isso se chama expressoes regulares, caso você queira procurar no google pra estudar o assunto.

pra resolver teu problema, ou seja, para aceitar valores não numericos,

tu pode acrescentar os valores alfa na sua expressao regular, algo do tipo:

[^a-zA-Z0-9] = assim ele ira ignorar apenas caracteres especiais como arroba, virgulas, asteriscos...

ou então, pra facilitar, você apenas tira a funcao replace do codigo:

var codigo = document.getElementById('codigo').value;

é isso,

sucesso ai.

Link para o comentário
Compartilhar em outros sites

  • 0
dae easrml,

cara, com o codigo tem nada de errado não.

var codigo = document.getElementById('codigo').value.replace(/[^0-9]/g,"");

veja q var codigo, entende-se q vai armazenar uma valor numerico por ser codigo.

ele pega o elemento do html com nome "codigo",

e faz um replace, ou seja, modifica.

no codigo ele já diz tudo:

replace(/[^0-9]/g,"")

veja q primeiro ele informa o q vai ser alterado, e em seguida o novo valor,

ou seja,

/g = pegar todos os valores repetidos,

/[^0-9] = o elemento ^ significa negaçao, ou seja, todos os valores q não estejam entre 0 e 9.

sendo assim ele vai tirar todas os caracteres não numeros mesmo.

se é isso q ele ta fazendo é porque ta funcionando mesmo.

isso se chama expressoes regulares, caso você queira procurar no google pra estudar o assunto.

pra resolver teu problema, ou seja, para aceitar valores não numericos,

tu pode acrescentar os valores alfa na sua expressao regular, algo do tipo:

[^a-zA-Z0-9] = assim ele ira ignorar apenas caracteres especiais como arroba, virgulas, asteriscos...

ou então, pra facilitar, você apenas tira a funcao replace do codigo:

var codigo = document.getElementById('codigo').value;

é isso,

sucesso ai.

Olá Mestre SAM,

Fiz como você mencionou mais o problema ainda continua... eu acho agora que deve ser outra coisa, porque tirei o replace mais mesmo assim quando tento consulta a string não retorna nada e os numeros tudo tranquilo... vou te passar os scripts.

Desde já mais uma vez obrigado...

getClient.php

<?php

/* Replace the data in these two lines with data for your db connection */

$connection = mysql_connect("xxxxxx","xxxxxxxx","xxxxxxxx");

mysql_select_db("xxxxxxx",$connection);

if(isset($_GET['getClientId])){

$res = mysql_query("select * from xxxxxx where codigo='".$_GET['getClientId']."'") or die(mysql_error());

if($inf = mysql_fetch_array($res)){

echo "formObj.modelo.value = '".$inf["modelo"]."';";

echo "formObj.ano.value = '".$inf["ano"]."';\n";

echo "formObj.valor.value = '".$inf["valor"]."';\n";

}else{

echo "formObj.modelo.value = '';";

echo "formObj.ano.value = '';";

echo "formObj.valor.value = '';";

}

}

?>

form.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Untitled Document</title>

<style type="text/css">

body{

background-repeat:no-repeat;

font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;

height:100%;

background-color: #FFF;

margin:0px;

padding:0px;

background-image:url('/images/heading3.gif');

background-repeat:no-repeat;

padding-top:85px;

}

fieldset{

width:500px;

margin-left:10px;

}

</style>

&lt;script type="text/javascript" src="ajax.js"></script>

&lt;script type="text/javascript">

/************************************************************************************************************

Ajax client lookup

Copyright © 2006 DTHMLGoodies.com, Alf Magne Kalleland

This library is free software; you can redistribute it and/or

modify it under the terms of the GNU Lesser General Public

License as published by the Free Software Foundation; either

version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public

License along with this library; if not, write to the Free Software

Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

Dhtmlgoodies.com., hereby disclaims all copyright interest in this script

written by Alf Magne Kalleland.

Alf Magne Kalleland, 2006

Owner of DHTMLgoodies.com

************************************************************************************************************/

var ajax = new sack();

var currentClientID=false;

function getClientData()

{

var codigo = document.getElementById('codigo').value;

if(codigo.length==4 && codigo!=currentClientID){

currentClientID = codigo

ajax.requestFile = 'getClient.php?getClientId='+codigo; // Specifying which file to get

ajax.onCompletion = showClientData; // Specify function that will be executed after file has been found

ajax.runAJAX(); // Execute AJAX function

}

}

function showClientData()

{

var formObj = document.forms['clientForm];

eval(ajax.response);

}

function initFormEvents()

{

document.getElementById('codigo').onblur = getClientData;

document.getElementById('quantidade').focus();

}

window.onload = initFormEvents;

</script>

</head>

<body>

<form name="clientForm" action="ajax-client_lookup.html" method="post">

<table width="704" align="center">

<tr>

<td width="60"><label for="codigo">

Quant.:<br>

<input name="quantidade" type="text" id="quantidade" size="10" />

</label></td>

<td width="60">Código:<br><input name="codigo" id="codigo" size="10"/></td>

<td width="316">Modelo:<br>

<input name="modelo" id="modelo" size="20" maxlength="255" style="width:98%" /></td>

<td width="60">Ano:<br>

<input name="ano" id="ano" size="8" maxlength="255" /></td>

<td width="90">Valor Uni.:<br>

<input name="valor" id="valor" size="10" maxlength="255" /></td>

<td width="90">Valor Total:<br>

<input name="valor_total" type="text" id="valor_total" size="10" /></td>

</tr>

</table>

</form>

<p> </p>

</body>

</html>

ajax.php

/* Simple AJAX Code-Kit (SACK) v1.6.1 */

/* ©2005 Gregory Wild-Smith */

/* www.twilightuniverse.com */

/* Software licenced under a modified X11 licence,

see documentation or authors website for more details */

function sack(file) {

this.xmlhttp = null;

this.resetData = function() {

this.method = "POST";

this.queryStringSeparator = "?";

this.argumentSeparator = "&";

this.URLString = "";

this.encodeURIString = true;

this.execute = false;

this.element = null;

this.elementObj = null;

this.requestFile = file;

this.vars = new Object();

this.responseStatus = new Array(2);

};

this.resetFunctions = function() {

this.onLoading = function() { };

this.onLoaded = function() { };

this.onInteractive = function() { };

this.onCompletion = function() { };

this.onError = function() { };

this.onFail = function() { };

};

this.reset = function() {

this.resetFunctions();

this.resetData();

};

this.createAJAX = function() {

try {

this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e1) {

try {

this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e2) {

this.xmlhttp = null;

}

}

if (! this.xmlhttp) {

if (typeof XMLHttpRequest != "undefined") {

this.xmlhttp = new XMLHttpRequest();

} else {

this.failed = true;

}

}

};

this.setVar = function(name, value){

this.vars[name]= Array(value, false);

};

this.encVar = function(name, value, returnvars) {

if (true == returnvars) {

return Array(encodeURIComponent(name), encodeURIComponent(value));

} else {

this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);

}

}

this.processURLString = function(string, encode) {

encoded = encodeURIComponent(this.argumentSeparator);

regexp = new RegExp(this.argumentSeparator + "|" + encoded);

varArray = string.split(regexp);

for (i = 0; i < varArray.length; i++){

urlVars = varArray.split("=");

if (true == encode){

this.encVar(urlVars[0], urlVars[1]);

} else {

this.setVar(urlVars[0], urlVars[1]);

}

}

}

this.createURLString = function(urlstring) {

if (this.encodeURIString && this.URLString.length) {

this.processURLString(this.URLString, true);

}

if (urlstring) {

if (this.URLString.length) {

this.URLString += this.argumentSeparator + urlstring;

} else {

this.URLString = urlstring;

}

}

// prevents caching of URLString

this.setVar("rndval", new Date().getTime());

urlstringtemp = new Array();

for (key in this.vars) {

if (false == this.vars[key][1] && true == this.encodeURIString) {

encoded = this.encVar(key, this.vars[key][0], true);

delete this.vars[key];

this.vars[encoded[0]] = Array(encoded[1], true);

key = encoded[0];

}

urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];

}

if (urlstring){

this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);

} else {

this.URLString += urlstringtemp.join(this.argumentSeparator);

}

}

this.runResponse = function() {

eval(this.response);

}

this.runAJAX = function(urlstring) {

if (this.failed) {

this.onFail();

} else {

this.createURLString(urlstring);

if (this.element) {

this.elementObj = document.getElementById(this.element);

}

if (this.xmlhttp) {

var self = this;

if (this.method == "GET") {

totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;

this.xmlhttp.open(this.method, totalurlstring, true);

} else {

this.xmlhttp.open(this.method, this.requestFile, true);

try {

this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")

} catch (e) { }

}

this.xmlhttp.onreadystatechange = function() {

switch (self.xmlhttp.readyState) {

case 1:

self.onLoading();

break;

case 2:

self.onLoaded();

break;

case 3:

self.onInteractive();

break;

case 4:

self.response = self.xmlhttp.responseText;

self.responseXML = self.xmlhttp.responseXML;

self.responseStatus[0] = self.xmlhttp.status;

self.responseStatus[1] = self.xmlhttp.statusText;

if (self.execute) {

self.runResponse();

}

if (self.elementObj) {

elemNodeName = self.elementObj.nodeName;

elemNodeName.toLowerCase();

if (elemNodeName == "input"

|| elemNodeName == "select"

|| elemNodeName == "option"

|| elemNodeName == "textarea") {

self.elementObj.value = self.response;

} else {

self.elementObj.innerHTML = self.response;

}

}

if (self.responseStatus[0] == "200") {

self.onCompletion();

} else {

self.onError();

}

self.URLString = "";

break;

}

};

this.xmlhttp.send(this.URLString);

}

}

};

this.reset();

this.createAJAX();

}

Link para o comentário
Compartilhar em outros sites

  • 0
e qual é o erro?

var codigo = document.getElementById('codigo').value;

abaixo dessa linha coloca:

alert( codigo );

veja se o conteudo aparece como você desejava.

dai pra frente não sei, o que tu ta tentando fazer e não ta acontecendo?

Tipo eu to fazendo um form que quando digito um codigo ele me traz os resultados... vou te passar o link da demostração.

Exemplo de formulário

Tente digita 1001 pra você ve ele preenche todo o form com os dados do BD mais se os dados forem strings e tirverem cadastrados também no bd ele não retorna nada...

Obs.: no BD passei o valor VARCHAR para o campo...

Grande abraço, obrigado...

Link para o comentário
Compartilhar em outros sites

  • 0

cara

tu colocou o alert la como eu falei?

pra saber se os dados estao chegando ali?

eu to achando que tu mudou só o tipo do campo na tabela de int pra varchar,

ai não vai mudar nada, não adianta só alterar o tipo da coluna.

tu quer digitar campo alfa pra pegar valores da onde?

tu alterou isso no php?

Link para o comentário
Compartilhar em outros sites

  • 0
cara

tu colocou o alert la como eu falei?

pra saber se os dados estao chegando ali?

eu to achando que tu mudou só o tipo do campo na tabela de int pra varchar,

ai não vai mudar nada, não adianta só alterar o tipo da coluna.

tu quer digitar campo alfa pra pegar valores da onde?

tu alterou isso no php?

Coloquei o Alert o que acontece é o seguinte dai... quando consulto um numero ele mostra dentro do alert e preenche os campos normalmente... quando consulto uma string ele mostra o valor dentro do alert mais num preenche os inputs...

sim alterei também dentro do php ele ta funcionando beleza o unico problea que num consigo resolver é essa parada da string... ainda pra ajudar o sistema que to fazendo usa string e int juntos ex.: CDP-0123.

Cara que zica num sei mais o que possa ser dentro desse script.

você teria mais alguma sugestão ?

Grande abraço, obrigado pela força...

Link para o comentário
Compartilhar em outros sites

  • 0

dae easrml,

olhando seu codigo com mais calma,

vi o seguinte:

function getClientData()

{

var codigo = document.getElementById('codigo').value;

if(codigo.length==4 && codigo!=currentClientID){

currentClientID = codigo

ajax.requestFile = 'getClient.php?getClientId='+codigo; // Specifying which file to get

ajax.onCompletion = showClientData; // Specify function that will be executed after file has been found

ajax.runAJAX(); // Execute AJAX function

}

essa parte do codigo onde você tirou o replace e colocou o alert,

ele não é o retorno do php.

é a chamada do php, ou seja, só agora depois de tirar o replace é q seu codigo

CDP-0123 esta chegando no php para a consulta.

antes com replace só chegava 0123 no php.

aparentemente não tem nenhum outro filtro que impeça o funcionamento do codigo.

o q precisava ver com cuidado é seu arquivo php.

o getClient.php quando recebe getClientId faz alguma validacao?

como esta sendo feito essa consulta no banco? o mysql esta convertendo algum campo para int?

se você imprimir na tela usando echo depois do retorno do sql, os dados

estao todos ali? os dados q deveriam ir pra tela?

faz um passo a passo ai, porque no codigo q você postou não encontrei nenhum problema.

beleza!?

Link para o comentário
Compartilhar em outros sites

  • 0
dae easrml,

olhando seu codigo com mais calma,

vi o seguinte:

function getClientData()

{

var codigo = document.getElementById('codigo').value;

if(codigo.length==4 && codigo!=currentClientID){

currentClientID = codigo

ajax.requestFile = 'getClient.php?getClientId='+codigo; // Specifying which file to get

ajax.onCompletion = showClientData; // Specify function that will be executed after file has been found

ajax.runAJAX(); // Execute AJAX function

}

essa parte do codigo onde você tirou o replace e colocou o alert,

ele não é o retorno do php.

é a chamada do php, ou seja, só agora depois de tirar o replace é q seu codigo

CDP-0123 esta chegando no php para a consulta.

antes com replace só chegava 0123 no php.

aparentemente não tem nenhum outro filtro que impeça o funcionamento do codigo.

o q precisava ver com cuidado é seu arquivo php.

o getClient.php quando recebe getClientId faz alguma validacao?

como esta sendo feito essa consulta no banco? o mysql esta convertendo algum campo para int?

se você imprimir na tela usando echo depois do retorno do sql, os dados

estao todos ali? os dados q deveriam ir pra tela?

faz um passo a passo ai, porque no codigo q você postou não encontrei nenhum problema.

beleza!?

Olhando o código aqui suspeitei de uma coisa...

Nessa linha

if(codigo.length==4 && codigo!=currentClientID){

ele ta pedindo que digite 4 digitos ou que se diferente do que foi digitado mostre novamente o outro... no exemplo que vi tinha la 1001 certo, ou seja, 4 digitos. no exemplo CDP-0123 são 8 digitos... eu acredito q seja esse o meu problema... não sei ainda porque não testei o script modificado so vou testar quando chegar em casa heheh...

vou testar ele e te digo....

Editado por Easrml
Link para o comentário
Compartilhar em outros sites

  • 0

ah bom,

axei q esse codigo era seu mesmo, intencional.

ele pergunta se o campo possui 4 caracteres e se é diferente do codigo atual.

currentClientID supostamente contem os dados do cliente q já estao na tela,

então se o novo codigo q você esta procurando tem tamanho 4 e é diferente do atual,

procure!

mas então é isso,

pode colocar algo como codigo.length>0 ao invés de codigo.length==4

agora sim, chamando a pagina php o negocio anda melhor. hehe

sucesso ai.

Link para o comentário
Compartilhar em outros sites

  • 0
ah bom,

axei q esse codigo era seu mesmo, intencional.

ele pergunta se o campo possui 4 caracteres e se é diferente do codigo atual.

currentClientID supostamente contem os dados do cliente q já estao na tela,

então se o novo codigo q você esta procurando tem tamanho 4 e é diferente do atual,

procure!

mas então é isso,

pode colocar algo como codigo.length>0 ao invés de codigo.length==4

agora sim, chamando a pagina php o negocio anda melhor. hehe

sucesso ai.

Funcionou perfeitamente hhauahaauhaua...

Cara mt obrigado pela paciencia e pela ajuda... Agora vou pra outra parte do projeto hehehe.... em PHP...

Grande abraço

Obrigado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...