Gravando Dados com sujeira

12 respostas
M

Pessoal alguns formulários estão gravando as informações digitadas com caracteres nada haver!!! exemplo:

Digitei

Comercio de Alimentos Silva S/A
 100,00

Gravou no BD

Comercio%20de%20Alimentos%20Silva%20S/A
 100%2C00

O mais estranho de tudo é qdo recupero os dados em um input ele vem normal: Comercio de Alimentos Silva S/A ou 100,00, mas se eu apenos listo em um

ele vem Comercio%20de%20Alimentos%20Silva%20S/A ou 100%2C00.

Alguém pode me explicar o porque ocorre isto ?? e como resolver ??

Obrigado.

12 Respostas

fabiozoroastro

Verifique o collation do seu banco.
:slight_smile:
E se for web coloque isso no início da sua página:

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

%20 = espaço, %2C = vírgula
Veja se você não está usando algo como URLEncode ou coisa parecida no javascript que submete o form. Se for isso, você precisa reverter o processo para tratar o tal form.

M
thingol:
%20 = espaço, %2C = vírgula Veja se você não está usando algo como URLEncode ou coisa parecida no javascript que submete o form. Se for isso, você precisa reverter o processo para tratar o tal form.

Acho que é isso mesmo, mas o que eu tenho que mudar ??

//INICIALIZA AS VARIAVEIS PARA CONTROLE DA FILA
var ifila = 0
var fila = new Array();
//fila[X][0] - Div onde sera carregada a pagina
//fila[X][1] - Pagina que sera chamada
//fila[X][2] - Metodo de envio
//fila[X][3] - Campos do form concatenados no padrao para serem enviados. Null caso seja um link



//INICIALIZA O OBJETO QUE IRA FAZER AS SOLICITACOES
try{
    xmlhttp = new XMLHttpRequest();// Mozilla, Safari, Firefox, etc...
    try {
        if (xmlhttp.overrideMimeType) {
            //Se poss?vel, ignora cabecalho usado pelo servidor e forca o padrao &quot;text/xml&quot;. Alguns navegadores exigem esse padrao e pode dar erro se o servidor nao utilizar ele
            xmlhttp.overrideMimeType('text/html; charset=ISO-8859-1');
        }
    } catch (e1) { }
}catch(e2){
    try{
        xmlhttp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);// Internet Explorer
    }catch(e3){
        try{
            xmlhttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);// Internet Explorer
        }catch(e4){
            //tratamento para alguma outra forma de implementar XMLHTTP
            xmlhttp = false;
        }
    }
}
if (!xmlhttp){
    //Nao conseguiu instanciar o objeto xmlhttp para fazer as solicitacoes
    alert(&quot;AJAX error. Your browser must support XMLHttpRequest object or enable use of scripting.&quot;);
}



//GUARDA NA FILA O ID DO OBJETO E A URL QUE SERAO CARREGADOS PELO LINK CLICADO
function ajaxLink(id_target,url){
    
    //Exibe mensagem de que esta carregando a pagina no objeto de ID informado
    ajaxMensagemCarregando(id_target);

    //Adiciona a solicitacao na fila
    fila[fila.length]=[id_target,url,&quot;GET&quot;,null];

    //Se nao tem conexoes na fila, inicia a execucao
    if(fila.length==1){
        ajaxRun();
    }
    
    return;
}



//GUARDA NA FILA O ID DO OBJETO E O FORM QUE SERAO CARREGADOS PELO LINK CLICADO
function ajaxForm(id_target,id_form){
    //Pega a pagina que sera chamada pelo form
    var url = document.getElementById(id_form).action;
    //Busca metodo de envio definido no form
    var metodoEnvio = document.getElementById(id_form).method.toUpperCase();
    //Busca os elementos do form que serao enviados para a pagina solicitada
    var elementos_form = BuscaElementosForm(id_form);

    //Exibe mensagem de que esta carregando a pagina no objeto de ID informado
    ajaxMensagemCarregando(id_target);

    //Adiciona a solicitacao na fila
    fila[fila.length]=[id_target,url,metodoEnvio,elementos_form];

    //Se nao tem conexoes na fila, inicia a execucao
    if(fila.length==1){
        ajaxRun();
    }
    return;
}



//EXECUTA A PROXIMA SOLICITACAO DA FILA
function ajaxRun(){
    var url = fila[ifila][1];

    //Define o metodo de envio (GET ou POST)
    var metodoEnvio;
    if (fila[ifila][3]==null){
        //Se for Link, utiliza GET
        metodoEnvio = &quot;GET&quot;;
    }else{
        //Se for Form, define o metodo de envio e prepara a url
        metodoEnvio = fila[ifila][2];
        if (metodoEnvio==&quot;&quot; || metodoEnvio==null){
            //Se nao tiver definido nada, usa POST
            metodoEnvio = &quot;POST&quot;;
        }
        if (metodoEnvio==&quot;GET&quot;){
            //Metodo GET passa as informacoes na linha da url
            url = url + &quot;?&quot; + fila[ifila][3];
        }
    }

    //Abre a conexao
    xmlhttp.open(metodoEnvio,url,true);

    //Seta as funcoes que irao tratar a mudanca de estado do objeto XMLHTTP
    xmlhttp.onreadystatechange=ajaxXMLHTTP_StateChange;

    //Executa a solicitacao
    if (metodoEnvio==&quot;POST&quot;){
        //Metodo POST precisa definir este RequestHeader
        xmlhttp.setRequestHeader('Content-Type=text/html; charset=ISO-8859-1', 'application/x-www-form-urlencoded');
        //Metodo POST passa as variaveis pelo metodo Send
        xmlhttp.send(fila[ifila][3]);
    }else{
        xmlhttp.send(null);
    }
    return;
}



//FUNCAO EXECUTADA QUANDO ALTERAR O STATUS DA SOLICITACAO (readyState)
function ajaxXMLHTTP_StateChange() {
    //0-Nao inicializado, 1-Carregando, 2-Carregado, 3-Interativo, 4-Completo
    if (xmlhttp.readyState==1){
        ajaxXMLHTTP_StateChange_Carregando(fila[ifila][0]);//Quando iniciar a solicitacao
    }else{
        if (xmlhttp.readyState==4){
            ajaxXMLHTTP_StateChange_Completo(xmlhttp, fila[ifila][0]);//Quando estiver completa a solicitacao
        }
    }
}


//FUNCAO PARA PEGAR OS ELEMENTOS DO FORM
function BuscaElementosForm(idForm) {
    var elementosFormulario = document.getElementById(idForm).elements;
    var qtdElementos = elementosFormulario.length;
    var queryString = &quot;&quot;;
    var elemento;

    //Cria uma funcao interna para concatenar os elementos do form
    this.ConcatenaElemento = function(nome,valor) { 
                                if (queryString.length&gt0) { 
                                    queryString += &quot;&&quot;;
                                }
                                queryString += encodeURIComponent(nome) + &quot;=&quot; + encodeURIComponent(valor);
                             };

    //Loop para percorrer todos os elementos
    for (var i=0; i&lt;qtdElementos; i++) {
        //Pega o elemento
        elemento = elementosFormulario[i];
        if (!elemento.disabled) {
            //Trabalha com o elemento caso ele nao esteja desabilitado
            switch(elemento.type) {
                //Realiza a acao dependendo do tipo de elemento
                case 'text': case 'password': case 'hidden': case 'textarea': 
                    this.ConcatenaElemento(elemento.name,escape(elemento.value));
                    break;
                case 'select-one':
                    if (elemento.selectedIndex&gt;=0) {
                        this.ConcatenaElemento(elemento.name,escape(elemento.options[elemento.selectedIndex].value));
                    }
                    break;
                case 'select-multiple':
                    for (var j=0; j&lt;elemento.options.length; j++) {
                        if (elemento.options[j].selected) {
                            this.ConcatenaElemento(elemento.name,escape(elemento.options[j].value));
                        }
                    }
                    break;
                case 'checkbox': case 'radio':
                    if (elemento.checked) {
                        this.ConcatenaElemento(elemento.name,escape(elemento.value));
                    }
                    break;
            }
        }
    }
    return queryString;
}
>
M

thingol:
%20 = espaço, %2C = vírgula
Veja se você não está usando algo como URLEncode ou coisa parecida no javascript que submete o form. Se for isso, você precisa reverter o processo para tratar o tal form.

Thingol, obrigado pela ajuda, aliás, vou abusar um pouquinho dela !!! hehehehe.

O que quer dizer com precisa reverter o processo para tratar o tal form ??

leomc

Marcelo não sei se você tem alguma restrição mas o DWR iria te dar uma boa ajuda. Isso que você está fazendo aí é muito simples de fazer com DWR.

M

Vc tem alguma apostila ou tutorial sobre DWR em português ??

Obrigado.

leomc

Infelismente não tenho marcelo, mas o DWR é muito simples de ser utilizado. A documentação do próprio site tem muitos exemplos e acho que já vi algum exemplo aqui no fórum do GUJ também.

Em resumo você tem que fazer um configuração no web.xml
configurar o dwr.xml (super simples)
Criar Pojos que serão acessados das páginas html/jsp
Na sua página jsp você você terá que dar dois imports e usar.

Vale a pena!

Depois não deixe de olhar o DWRUtil, lá tem utilitários que fazem o que você tá tentando “fazer na mão”.

M

leomc:
Infelismente não tenho marcelo, mas o DWR é muito simples de ser utilizado. A documentação do próprio site tem muitos exemplos e acho que já vi algum exemplo aqui no fórum do GUJ também.

Em resumo você tem que fazer um configuração no web.xml
configurar o dwr.xml (super simples)
Criar Pojos que serão acessados das páginas html/jsp
Na sua página jsp você você terá que dar dois imports e usar.

Vale a pena!

Depois não deixe de olhar o DWRUtil, lá tem utilitários que fazem o que você tá tentando “fazer na mão”.

Leomc, andei pesquisando no google e li que o DWR é super complicado de usá-lo qdo o projeto é em MVC e este é o meu caso !!

O que vc me fala a respeito disso ??

leomc

Não tem nada disso não! Funciona perfeitamente! Uso DWR com Spring/Hivbrnate a dois anos. Como é sua arquitetura?

M

Até 5 meses atrás eu trabalhava com JSP + JavaBean, no momento to em MVC sem uso de framework, onde separo em VO, DAO, ACT e JSP. Mas estou estudando JSF depois vou ver Facelets, depois Spring, depois Tomahawk e depois Hibernate, pois andei pesquisando e vi que esta formação de framaworks (JSF + Facelets + Spring + Tomahawk + Hibernate) é produtiva!! Depois pretendo trocar JSF por Struts 2.0 por experiência !!!

abraços.[]s

leomc

Se você tiver interesse faço um tutorial introdutório de utilização do DWR e coloco no meu blog no fim de semana.

M

Cara isso seria massa !!! pois muita gente poderia se utilizar deste tutorial para dar o pontapé inicial em DWR !!!

Qdo vc fizer, por favor, coloque o link aqui.

Obrigado pela atenção !!!

Criado 7 de novembro de 2006
Ultima resposta 9 de nov. de 2006
Respostas 12
Participantes 4