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

Função de JavaScript valida campos


AlbertoRT

Pergunta

Tenho a página Lab10_1.asp que está gravando perfeitamento os registros no banco de dados mas os campos com * se não forem preenchidos aparece a mansagem do "alert" "O campo xxxx não pode ficar em branco" e clicando em "OK" informa o seguinte erro:

Tipo de erro:

Microsoft JET Database Engine (0x80040E14)

Erro de sintaxe na instrução INSERT INTO.

/serieweb/Nasp/Laboratorios/ResLab10_1.asp, line 42

-----

Deseculpe não informei ateriormente que a linha 42 é essa:

Set rsLivros = conexaoDataBase.Execute(strINS)
O código da página Lab10_1.asp é esse:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!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=utf-8" />
<title>Inserido livros na tabela livros </title>

&lt;script language="javascript">

function validaForm() {
if (document.formLivro.txtCodigo.value.length <1)
{alert ("O campo ISBN não pode ficar em brando. ");
formLivro.txtCodigo.focus();
return false;
}
if (document.formLivro.txtCategoria.value.length <1)
{alert ("O campo Código da Categoria não pode ficar em branco.");
formLivro.txtCodCategoria.focus();
return false;
}
if (document.formLivro.txtTitulo.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formLivro.txtTitulo.focus();
return false;
}
if (document.formLivro.txtAutor.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formLivro.txtAutor.focus();
return false;
}
if (document.formLivro.txtPreco.value.length <1)
{alert ("O campo Preço não pode ficar em branco.");
formLivro.txtPreco.focus();
return false;
}
if (document.formLivro.txtCapa.value.length <1)
{alert ("O campo Capa não pode ficar em branco.");
formLivro.txtCapa.focus();
return false;
}
return true;
}
</script>

</head>

<body>
<form name="formLivro" method="post" action="ResLab10_1.asp" onsubmit="return validaForm(this);">
Inclusão de Livros<br /><br />
Informe os dados do livro a ser inserido. Os campos com (*) são de digitação obrigatória.<br />

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="20%">ISBN: </td>
<td width="80%"> <input name="txtCodigo" type="text" />
 *</td>
</tr>

<tr>
<td width="20%">Código da Categoria:</td>
<td width="80%"> <input type="text" name="txtCategoria" /> *</td>
</tr>

<tr>
<td width="20%">Título:</td>
<td width="80%"> <input type="text" name="txtTitulo" /> *</td>
</tr>

<tr>
<td width="20%">Autor:</td>
<td width="80%"> <input type="text" name="txtAutor" /> *</td>
</tr>

<tr>
<td width="20%">Número de páginas:</td>
<td width="80%"> <input type="text" name="txtNPaginas" /></td>
</tr>

<tr>
<td width="20%">Formato:</td>
<td width="80%"> <input type="text" name="txtFormato" /></td>
</tr>

<tr>
<td width="20%">Preço:</td>
<td width="80%"> <input type="text" name="txtPreco" /> *</td>
</tr>

<tr>
<td width="20%">Resenha:</td>
<td width="80%"> <textarea name="txtResenha" rows="5" cols="40"></textarea></td>
</tr>

<tr>
<td width="20%">Lançamento (S/N): </td>
<td width="80%"> <input type="text" name="txtLancamento" /></td>
</tr>

<tr>
<td width="20%">Data Publicação: </td>
<td width="80%"> <input type="text" name="txtDataPub" /></td>
</tr>


<td width="20%"></td>
<td width="80%">
<input type="submit" value="Inserir" name="btInsere" />
<input type="reset" value="Limpa campos" name="btLimpa" />
</td>
</tr>
</table>
</form>

</body>
</html>
O código da página que informa erro ResLab10_1.asp é esse:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Option Explicit 
%>
<!--#Include file="../dbConexao.inc"-->
<%
Dim conexaoDataBase
Dim strIns, rsLivros
Dim varCodigo, varCategoria, varTitulo, varAutor, varNPaginas, varFormato, varPreco, varResenha, varLancamento, varDataPub 

VarCodigo = TRIM(Request.Form("txtCodigo"))
VarCategoria = Request.Form("txtCategoria")
VarTitulo = TRIM(Request.Form("txtTitulo"))
varAutor = TRIM(Request.Form("txtAutor"))
VarNPaginas = Request.Form("txtNPaginas")
VarFormato = TRIM(Request.Form("txtFormato"))
VarPreco = Request.Form("txtPreco")
VarResenha = Request.Form("txtResenha")
VarLancamento = TRIM(Request.Form("txtLancamento"))
VarDataPub = TRIM(Request.Form("txtDataPub"))
varTitulo = REPLACE(varTitulo, "'", " ")
varAutor = REPLACE(varAutor, "'", " ")
VarFormato = REPLACE(VarFormato, "'", " ")
VarResenha = REPLACE(VarResenha, "'", " ")
VarPreco = REPLACE(VarPreco, ",", ".")
strINS = "INSERT into Livros "
strINS = strINS & "(codLivro, Categoria, titulo, autor, npaginas, formato, preço, resenha, lancamento, dataPub)"
strINS = strINS + "VALUES ('" + varCodigo + "',"
strINS = strINS + "'" + varCategoria + "',"
strINS = strINS + "'" + varTitulo + "',"
strINS = strINS + "'" + varAutor + "',"
strINS = strINS + varNPaginas + ","
strINS = strINS + "'" + varFormato + "',"
strINS = strINS + varPreco + ","
strINS = strINS + "'" + varResenha + "',"
strINS = strINS + "'" + varLancamento + "',"
strINS = strINS + "'" + varDataPub + "')"


Call abreConexao
'Response.Write(strINS)
Set rsLivros = conexaoDataBase.Execute(strINS)
%>
<!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=utf-8" />
<title>Inserindo dados em uma tabela</title>
</head>

<body>
O Livro: "<strong><% = varTitulo %></strong>" foi cadastrado com sucesso 
</body>
</html>
<%
Call fechaConexao
Set rsLivros = Nothing
%>

Essa validação é muito importante.

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

5 respostass a esta questão

Posts Recomendados

  • 0

Não entendi a sua pergunta.

A function validaForm já verifica cada campo se é menor que (<1) caracter. Se por exemplo eu não digitar o preço abre a mensagem "O campo preço não pode ficar em branco". Até ai tudo bem está funcionando. So que clicando em "OK" dessa mensagem o curso deveria voltar o foco para esse campo (preço) e isso não está acontecendo. Abre uma mansagem de erro informando:

Tipo de erro:

Microsoft JET Database Engine (0x80040E14)

Erro de sintaxe na instrução INSERT INTO.

/serieweb/Nasp/Laboratorios/ResLab10_1.asp, line 42

A linha 42 é essa:

Set rsLivros = conexaoDataBase.Execute(strINS)

Como está dando erro em INSERT INTO creio que postei no lugar errado.

Obrigado.

Se tiver que remanejar essa postagem para a área ASP como devo fazer?

Analisando a function você vêm algum erro?

Link para o comentário
Compartilhar em outros sites

  • 0

O erro do ASP na verdade ocorre em consequência do envio do formulário com dados incompletos (o que não deveria acontecer). Na verdade, o problema está na validação realizada pelo Javascript. Segue abaixo a explicação (enviada anteriormente por MP para o Alberto) caso alguém esteja com um problema parecido:

O que acontece é o seguinte: a mensagem de erro é mostrada, mas o formulário (com campos em branco) é enviado mesmo assim (o que não deveria acontecer). Quando o ASP resgata os dados do formulário anterior para montar a query, caso os campos "txtNPaginas" ou "txtPreco" estiverem em branco irá ocorrer o mencionado erro, já que a query ficará mais ou menos assim:

INSERT into Livros(codLivro, Categoria, titulo, autor, npaginas, formato, preço, resenha, lancamento, dataPub) 'valor de varCodigo', 'valor de varCategoria', 'valor de varTitulo', 'valor de varAutor', , 'valor de varFormato', ...)
Como os outros campos aparecem na query com aspas, não há problema se ficarem em branco. No entanto, com o campo "txtNPaginas" em branco a expressão ficará com duas vírgulas seguidas, sem nenhum valor entre elas. O mesmo acontece para o campo "txtPreco". De qualquer forma recomendo que faça uma nova validação no ASP para evitar campos em branco (não somente os campos previamente citados, mas todos). Dessa forma, caso o navegador não tenha suporte a Javascript, o usuário não será surpreendido com uma mensagem de erro padrão do ASP.
O correto seria:
document.formLivro.txtCodigo
Ao invés de:
formLivro.txtCodigo
O mesmo é válido para os outros campos. Alterando isso, a validação já passa a funcionar. No entanto, ao escrever:
return validaForm(this)
Você já está passando o formulário como um parâmetro para a função, de forma que ao invés de se referir ao form como document.formLivro é possível simplesmente recuperar esse parâmetro:
function validaForm(formulario) {
//a partir de agora é possível usar formulario.NomeDoCampo ao invés de document.formLivro.NomeDoCampo
A função modificada ficaria assim:
function validaForm(formulario) {
if (formulario.txtCodigo.value.length <1)
{alert ("O campo ISBN não pode ficar em brando. ");
formulario.txtCodigo.focus();
return false;
}
if (formulario.txtCategoria.value.length <1)
{alert ("O campo Código da Categoria não pode ficar em branco.");
formulario.txtCodCategoria.focus();
return false;
}
if (formulario.txtTitulo.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formulario.txtTitulo.focus();
return false;
}
if (formulario.txtAutor.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formulario.txtAutor.focus();
return false;
}
if (formulario.txtPreco.value.length <1)
{alert ("O campo Preço não pode ficar em branco.");
formulario.txtPreco.focus();
return false;
}
if (formulario.txtCapa.value.length <1)
{alert ("O campo Capa não pode ficar em branco.");
formulario.txtCapa.focus();
return false;
}
return true;
}

Obs:

O campo "txtNPaginas" (que também pode causar o erro no ASP) não está sendo validado, mas basta repetir o código para esse campo.

Link para o comentário
Compartilhar em outros sites

  • 0

Muito bom! Mas estou cometendo algum erro ainda.

Fui lendo passo a passo a sua Função e depois para evitar erros copiei toda a sua função.

Testando, não digitei o "CodLivro", fui validado (O campo ISBN não pode ficar em brando.) mas ao clicar em "OK" a página fechou e abrir a página de erro:

Tipo de erro:
Microsoft JET Database Engine (0x80004005)
O campo 'Livros.CodLivro' não pode ser uma seqüência de caracteres de comprimento nulo.
/serieweb/Nasp/Laboratorios/ResLab10_1.asp, line 42
Depois que postei continuei a pesquisar e tentei com a função abaixo com apenas um campo para validar:
&lt;script>
function valida(formLivro) {
if (formLivro.txtTitulo.value=="") {
alert("Preencha o nome corretamente.");
formLivro.txtTitulo.focus();
return false;
}
}
</script>
Funcionou! Criticou por não ter digitação o Titulo e clicando em "OK" o formulário ficou na tela e o focu foi para o campo Titulo. Contudo esse código que ainda estou errando é uma questão de honra. Vou informar tudo como está: O Banco de dados com o nome "dbEditora.mdb" tem uma tabela com nome de "Livros" com os campos: CÓD - Tipo - Numeração Automática CodLivro - Tipo - Texto categoria - Tipo - Texto Titulo - Tipo - Texto Autor - Tipo - Texto NPaginas - Tipo - Número preço - Tipo - Unidade Monetária resenha - Tipo - Memorando Lancamento - Tipo - Texto dataPub - Tipo - Data/Hora A Página de entrada de dados ( Lab10_1.asp) e validação dos dados está assim (coloquei comentários nas funções que estava tentando):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!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=utf-8" />
<title>Inserido livros na tabela livros </title>

<!-- Ainda tem erro na critica dos campos 
&lt;script language="javascript">
function validaForm() {
if (document.formLivro.txtCodigo.value.length <1)
{alert ("O campo ISBN não pode ficar em brando. ");
formLivro.txtCodigo.focus();
return false;
}
if (document.formLivro.txtCategoria.value.length <1)
{alert ("O campo Código da Categoria não pode ficar em branco.");
formLivro.txtCategoria.focus();
return false;
}

if (document.formLivro.txtTitulo.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formLivro.txtTitulo.focus();
return false;
}
if (document.formLivro.txtAutor.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formLivro.txtAutor.focus();
return false;
}
if (document.formLivro.txtPreco.value.length <1)
{alert ("O campo Preço não pode ficar em branco.");
formLivro.txtPreco.focus();
return false;
}
if (document.formLivro.txtCapa.value.length <1)
{alert ("O campo Capa não pode ficar em branco.");
formLivro.txtCapa.focus();
return false;
}

return true;
}
</script>
-->

<!-- Esse código funciona 

<!-- Funcionaou -->

<!-- Indicada pelo Jonathan Queiroz --->
&lt;script>
function valida(formLivro) {
if (formLivro.txtTitulo.value=="") {
alert("Preencha o nome corretamente.");
formLivro.txtTitulo.focus();
return false;
}
}
</script>
-->
&lt;script language="javascript">
function validaForm(formulario) {
if (formulario.txtCodigo.value.length <1)
{alert ("O campo ISBN não pode ficar em brando. ");
formulario.txtCodigo.focus();
return false;
}
if (formulario.txtCategoria.value.length <1)
{alert ("O campo Código da Categoria não pode ficar em branco.");
formulario.txtCodCategoria.focus();
return false;
}
if (formulario.txtTitulo.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formulario.txtTitulo.focus();
return false;
}
if (formulario.txtAutor.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formulario.txtAutor.focus();
return false;
}
if (formulario.txtPreco.value.length <1)
{alert ("O campo Preço não pode ficar em branco.");
formulario.txtPreco.focus();
return false;
}
if (formulario.txtCapa.value.length <1)
{alert ("O campo Capa não pode ficar em branco.");
formulario.txtCapa.focus();
return false;
}
return true;
}
</script>


</head>

<body>
<form name="formLivro" method="post" action="ResLab10_1.asp" onsubmit="return valida(formulario);">
Inclusão de Livros<br /><br />
Informe os dados do livro a ser inserido. Os campos com (*) são de digitação obrigatória.<br />

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="20%">ISBN: </td>
<td width="80%"> <input name="txtCodigo"  type="text" />
 *</td>
</tr>

<tr>
<td width="20%">Código da Categoria:</td>
<td width="80%"> <input type="text" name="txtCategoria" /> *</td>
</tr>

<tr>
<td width="20%">Título:</td>
<td width="80%"> <input type="text" name="txtTitulo" /> *</td>
</tr>

<tr>
<td width="20%">Autor:</td>
<td width="80%"> <input type="text" name="txtAutor"  /> *</td>
</tr>

<tr>
<td width="20%">Número de páginas:</td>
<td width="80%"> <input type="text" name="txtNPaginas" /></td>
</tr>

<tr>
<td width="20%">Formato:</td>
<td width="80%"> <input type="text" name="txtFormato" /></td>
</tr>

<tr>
<td width="20%">Preço:</td>
<td width="80%"> <input type="text" name="txtPreco" /> *</td>
</tr>

<tr>
<td width="20%">Resenha:</td>
<td width="80%"> <textarea name="txtResenha" rows="5" cols="40"></textarea></td>
</tr>

<tr>
<td width="20%">Lançamento (S/N): </td>
<td width="80%"> <input type="text" name="txtLancamento" /></td>
</tr>

<tr>
<td width="20%">Data Publicação: </td>
<td width="80%"> <input type="text" name="txtDataPub" /></td>
</tr>


<td width="20%"></td>
<td width="80%">
<input type="submit" value="Inserir" name="btInsere" />
<input type="reset" value="Limpa campos" name="btLimpa" />
</td>
</tr>
</table>
</form>

</body>
</html>
A página com a INSERT INTO. (ResLab10_1.asp) que indica o erro na linha 42, ou seja:
Set rsLivros = conexaoDataBase.Execute(strINS)
Todo o codigo da ResLab10_1.asp
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Option Explicit 
%>
<!--#Include file="../dbConexao.inc"-->
<%
Dim conexaoDataBase
Dim strIns, rsLivros
Dim varCodigo, varCategoria, varTitulo, varAutor, varNPaginas, varFormato, varPreco, varResenha, varLancamento, varDataPub 

VarCodigo = TRIM(Request.Form("txtCodigo"))
VarCategoria = Request.Form("txtCategoria")
VarTitulo = TRIM(Request.Form("txtTitulo"))
varAutor = TRIM(Request.Form("txtAutor"))
VarNPaginas = Request.Form("txtNPaginas")
VarFormato = TRIM(Request.Form("txtFormato"))
VarPreco = Request.Form("txtPreco")
VarResenha = Request.Form("txtResenha")
VarLancamento = TRIM(Request.Form("txtLancamento"))
VarDataPub = TRIM(Request.Form("txtDataPub"))
varTitulo = REPLACE(varTitulo, "'", " ")
varAutor = REPLACE(varAutor, "'", " ")
VarFormato = REPLACE(VarFormato, "'", " ")
VarResenha = REPLACE(VarResenha, "'", " ")
VarPreco = REPLACE(VarPreco, ",", ".")
strINS = "INSERT into Livros "
strINS = strINS & "(codLivro, Categoria, titulo, autor, npaginas, formato, preço, resenha, lancamento, dataPub)"
strINS = strINS + "VALUES ('" + varCodigo + "', "
strINS = strINS + "'" + varCategoria + "', "
strINS = strINS + "'" + varTitulo + "', "
strINS = strINS + "'" + varAutor + "', "
strINS = strINS + varNPaginas + ","
strINS = strINS + "'" + varFormato + "', "
strINS = strINS + varPreco + ", "
strINS = strINS + "'" + varResenha + "', "
strINS = strINS + "'" + varLancamento + "', "
strINS = strINS + "'" + varDataPub + "')"


Call abreConexao
'Response.Write(strINS)
Set rsLivros = conexaoDataBase.Execute(strINS)
%>
<!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=utf-8" />
<title>Inserindo dados em uma tabela</title>
</head>

<body>
O Livro: "<strong><% = varTitulo %></strong>" foi cadastrado com sucesso 
</body>
</html>
<%
Call fechaConexao
Set rsLivros = Nothing
%>

Muito obrigado e desculpe alguma coisa.

Se eu não ficar aguardando não é por falta de interesse.

Sou diabético e tenho que controlar minhas horas de alimentação.

Mas estarei aqui ainda hoje. Caso tenha algo ótimo caso contrário aguardo.

Abraço Jonathan e a todos do forum.

Sucesso!!

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

  • 0

Não sei se entendi muito bem, mas ao invés da função valida o correto seria utilizar a função validaForm. Além disso, deve-se colocar o parâmetro formulario apenas na definição da função (isto é, no código dentro da tag <script>), mas no <form> deve ser utilizado o validaForm(this) mesmo, como já estava sendo feito antes.

<script language="javascript">
function validaForm(formulario) {
if (formulario.txtCodigo.value.length <1)
{alert ("O campo ISBN não pode ficar em brando. ");
formulario.txtCodigo.focus();
return false;
}
if (formulario.txtCategoria.value.length <1)
{alert ("O campo Código da Categoria não pode ficar em branco.");
formulario.txtCodCategoria.focus();
return false;
}
if (formulario.txtTitulo.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formulario.txtTitulo.focus();
return false;
}
if (formulario.txtAutor.value.length <1)
{alert ("O campo Título não pode ficar em branco.");
formulario.txtAutor.focus();
return false;
}
if (formulario.txtPreco.value.length <1)
{alert ("O campo Preço não pode ficar em branco.");
formulario.txtPreco.focus();
return false;
}
if (formulario.txtCapa.value.length <1)
{alert ("O campo Capa não pode ficar em branco.");
formulario.txtCapa.focus();
return false;
}
return true;
}
</script>
...
<form name="formLivro" method="post" action="ResLab10_1.asp" onsubmit="return validaForm(this);">

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...