Jump to content
Fórum Script Brasil
  • 0

Função de JavaScript valida campos


AlbertoRT

Question

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.

Edited by AlbertoRT
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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!!

Edited by AlbertoRT
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...