Usuário com melhor resposta
Recuperar infromações enviadas por um formulário pelo metodo post

Pergunta
-
Eu estou com um problema no desenvolvimento de uma página.
Eu criei uma página de logon com usuário e senha, enviados por um formulário de método post.
No entanto quero que apareça na página de entrada somente informações do usuário logado atual.
Para isso uso um "binding" q filtra as informações q aparecerão na página.
No entanto, está ocorrendo um erro:
ADODB.Field error '800a0bcd'
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
/site/entrada.asp, line 418
Peço q alguem me de uma sugestão de como resolver esse problema. Eu acredito ser de IIS.
Grato pela compreensão.
Respostas
-
Leandro... pra falar a verdade, o pouco que eu sei eu aprendi sozinho...
Mas tem aqueles "guias rápidos" da editora novatech que ajudam bastante quando vc não acha algo.
Também tenho "ASP - Guia Completo" da editora O´Reilly mas o meu é uma versão bem antiga... ASP 1.0, não sei se tem versão nova...
O segredo tá na prática
Abraços
Todas as Respostas
-
-
Obrigado por me responder Mauro, no entanto, eu naum sei como resolver esse erro.
Se vc souber o q gera esse erro, pq eu acredito q o campo q eu direcionei no recordset estah errado entendeu.
Eu acho q a variavel do Request.Form("var") estah errada.
Por favor me ajude a resolver esse problema, obrigado pela atenção.
-
Coloque o seu código aqui, sem tags HTML...
Se quiser antes, faça uns teste exibindo as variáveis que você recebe na tela...
Se o conteúdo delas for vazio e sua consulta se basear nelas, muito possívelmente nenhum registro será encontrado...Outra coisa: Você está programando em ASP ou ASP.NET ???
-
Ola Leandro!
Seguindo como base o que o nosso amigo escreveu, esse erro é de record set, sugiro que vc vá na linha onde esta a query Sql e imprima ela, os imprima as variveis de valores atribuidos...
Ex: Sql= "Select nome from Cadastro where Id = 1 "
'imprima o query para ver as condições
response.write Sql
Set Rs=Conexão.execute (Sql)
Valor = Rs("Nome")
response.write Valor
Esse erro não é de formulario, mais em vias das duvidas verifique os nomes dos formularios, acho que qd se trata de nome de formulario pelo que me lembre ele imprime na tela "Object Required" or "Reponse.write request.form("nome sublinhado do form")"
Espero ter ajudado alguma coisa, outra amigo , vc esta em ASP.Net ou ASP ?
Grato
Fica com DEUS! -
Obrigado a todos pela ajuda
Estou usando asp e não asp.net ok.
Eu vou colocar esse codigo q o Caio me passou
Pra vcs terem uma noção maior vou passar algumas informções:
Na pagina de logon eu tenho um formulario chamado "formulario" e dois campos e um botão
Um dos campos chama login o outro senha e o batão submit.
Na página carregada quando o login foi efetuado com sucesso eu criei um recordset.
Nele eu criei um código SQL dessa forma:
Select * from medico where crm = 'Parametro'
depois eu criei essa variavel parametro e coloquei default value = 1 e o run-time dela é Request.Form("login")
O que vocês acham?
Obrigado pela compreensão e me ajudem. -
Leandro, acho que você está invertendo a ordem...
Segue essa Linha de raciocinio:
Dim login
login = request.form("login")
dim sql
sql = "SELECT * FROM Medico WHERE crm='"&login&"'"
abrir recordset, etc, etc, etcO recordset só será vazio se o login não constar na tabela
se não funcionar poste o seu código...
-
Mauro eu acho q entendi o erro do recordset, mas ainda não consegui resolver, ai está o código para voce dar uma olhada:
<%
Dim Recordset1__Parametro
Recordset1__Parametro = "1"
If (Request.Form("login") <> "") Then
Recordset1__Parametro = Request.Form("login")
End If
%>
<%
Dim Recordset1
Dim Recordset1_numRowsSet Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_medico_conexao_STRING
Recordset1.Source = "SELECT * FROM medico WHERE crm = '" + Replace(Recordset1__Parametro, "'", "''") + "'"
Recordset1.CursorType = 0
Recordset1.CursorLocation = 2
Recordset1.LockType = 1
Recordset1.Open()Recordset1_numRows = 0
%>Eu alterei o código acima da seguinte forma:
Dim Recordset1__Parametro
Recordset1__Parametro = "1"
If (Request.Form("login") <> "") Then
Recordset1__Parametro = Request.Form("login")
else
Recordset1__Parametro = "12345"
End If
%>
<%
Dim Recordset1
Dim Recordset1_numRowsSet Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_medico_conexao_STRING
Recordset1.Source = "SELECT * FROM medico WHERE crm = '"&Recordset1__Parametro&"'"O valor 12345 é um valor válido no banco de dados.
Depois dessas mudanças descobri que ele não está conseguindo recuperar o valor da variável login (em azul)Obrigado
-
A lógica está certa...
O erro sem dúvida é nessa recuperação da variável login... tenta o seguinte
no formulário cooca o nome e a id idênticos e verifique a diferença entre maiúsculas e minúsculas<form name="frmLogin" action="suapagina.asp">
<input type="text" name="login" id="login">
<input type="submit" value="Entrar">e pra recuperar
var = request.form("login")não tem porque ocorrer erro
Algumas dicas:
Use nome de variáveis menor, estão mto grande.
Tente especificar a variável. Recordset1 ----> RSMedico
Você não precisa fechar e abrir blocos pois a execução é linear %><%Pra fazer o teste tenta
var = request.form("login")
response.write(var)
qualquer coisa posta aí -
Mauro, eu mudei o nome das variáveis para facilitar a localização do código.
No entanto ainda não deu certo, mas eu estava analizando o seu último post e percebi algo diferente no meu formulário da página de login:<form name="formulario" action="<%=MM_LoginAction%>">
<input type="text" name="login" id="login">
<input type="password" name="senha" id="senha" >
<input type="submit" id="submit" value="Entrar">O action do form não está indicando minha próxima página caso o login obter sucesso, q no caso chamei de entrada.asp.
Isso tem alguma coisa a ver ou não?
Porque talvez o formulario não esteja sendo encontrado por causa disso e não pelas variáveis entendeu?
Post aí para me dar uma ajuda, obrigado
Leandro
-
Leandro,
Não sei o conteúdo dessa sua variável MM_LoginAction mas, se, ao clicar no submit a página esperada for chamada, então está certo...Se você omitir o action do formulário... o submit será dado na mesma página...
Faz o teste... Retira o action (ou coloca o nome da própria página) e no código digita isso...if Request.ServerVariables("CONTENT_LENGTH")<>0 then
login = request.form("login")
senha = request.form("senha")if login = "" or senha = "" then
response.write("Digite o login e a senha")
else
response.write("Login Digitado: " & login)
response.write("Senha Digitada: "& senha)
end ifTenta especificar o método no formulario
<form name="frmLogin" id="frmLogin" method="post">Depois posta o q aconteceu...
-
Eu fiz essas modificações na minha página.
Ocorreu tudo certo Mauro, quando a página é carregada aparece escrito (Escreva o login e a senha) já que os campos possuem valor inical nulo.
Depois eu escrevi o login e senha e ocorreu tudo certo também, apareceu escrito o meu login e senha, estou utilizando o método post.Eu estou procurando uma apostila de asp também, pois eu aprendi a escreve em VB, no entanto muito pouco e não fiz curso de asp.
Estou usando o Dreamweaver MX 2004 para criar, mas quero escrever o código, pois é muito ruim o sistema do programa.estive trabalhando na página e fiz um teste:
criei uma página e nela inseri o seguinte form:
<form name="form1" method="post" action="teste3.asp">
<p>Login <input name="var_login" type="text" id="var_login"> </p>
<p>Senha <input name="var_senha" type="text" id="var_senha"> </p>
<p> <input type="submit" name="Submit" value="Submit"> </p>
</form>Então criei a página teste3.asp e nela pedi pra recuperar os valores usando o request.form e dpois escreve-los na tela. Ocorreu tudo certo, então cheguei a uma conclusão:
No formulário da minha página de login o action está definido como uma função (<%=MM_LoginAction%>), ou seja, todos os dados do formulário estão sendo enviados para essa função e não para a próxima página, logo, a página seguinte não conseguirá receber os dados.
O que penso em fazer é um formulário com o action para a página de entrada, e nessa página eu fazer a comparação com os valores do banco de dados. Daí acredito que vai dar certo. Daí surge outro problema:
Qual código deve escrever para eu comparar os valores que foram enviados com os do BD.
Me de uma ajuda porque acho que o pro´blema é exatamente isso.
Obrigado posta aí faz favor.
-
Nossa, meio confuso... ahiuahuiah
Eu achei q a sua MM_LoginAction fosse uma variável, não uma função..
Faz o teste:
response.write(MM_LoginAction) e vê o que ela retorna
pelo lugar que ela está, não tem o porque de ser uma função, o action só informa pra qual página será dado o post...E pra comparar com o banco... se é isso que vc quer é o seguinte:
Depois que vc recupera as variáveis pelo request.form vc cria uma consulta sql e executa isso numa função no banco, populando um recordset...
sql = "SELECT * FROM Tabela WHERE Login='"&Login&"' AND Senha='"&Senha&"'"
RS.open sql,conn,,,1
If not RS.eof then
response.write("Registro encontrado")
end ifSe o login e a senha existirem num mesmo registro, a msg "Registro encontrado" aparecerá...
É isso daí...
Se tiver alguma dúvida com conexão e recordset crie outros tópicosEspero ter ajudado
-
-
Ainda não resolvi o problema.
O q eu consegui foi faze uma página de login correta. O que eu mudei foi o seguinte:
Primeiro criei uma página chamada login.asp, nela coloquei um form e em action eu coloquei direcionando para a página entrada.asp.
Então nessa página eu coloquei o código de comparação com o banco de dados. Até aí tudo bem, funcionou corretamente.No entanto agora surgiu um outro erro:
Essa página (entrada.asp) mostra os exames recentes do médico logado. Mas eu coloquei para aparecer no máximo 10 registros por vez. Funcionou corretamente, mas quando vc clica no link para ir para a próxima página de registros ocorre log out.
Na verdade o q ocorre é: A página ao ser recarregada não enxerga os campos de usuário e senha, já q eles não foram enviados para a página seguinte (meio complicado). Então a página recusa e redireciona para a página login.asp outra vez (já q isso está no código!).
Entendeu? Ficou meio confuso!!!
Posta aí, por favor.
-
Entendi,
O mais certo, seria vc logar o usuário (fazer a verificação com o banco) na primeira página, ou em uma outra pagina (logar.asp) por exemplo. E então redirecionar para a sua entrada.asp com os exames dos médicos.
O que acontece é que, quando vc clica para exibir a nova lista de exames, vc dá um submit na página, porém, os campos login e senha não são enviados como parâmetros mais e, como tudo está na mesma página, a verificação para logar vai ser incorreta, e não será logado.
3 saídas:
1) Fazer o que eu disse em cima, separar isso em 2 ou três páginas
2) Na página entrada, logar o usuário somente se for a primeira vez que a página está sendo executada (porém, qualquer link jogando para a página vai tentar logar de novo) - não recomendo
3) Salvar os campos Login e Senha num campo tipo hidden no formulário e, a cada submit, vc continuará tendo os valores login e senha (não recomendo nunca deixar senha e login salvos no formulário).Usa a primeira dica, faz o login na mesma página que a pessoa digita o login e senha, pelo "CONTENT_LENGHT" que citei mais acima e redireciona para a segunda
Aí tudo certo, Até...
-
Tá certo Mauro, eu pensei e resolvi fazer do jeito q vc me aconselhou (efetuar a comparação com o banco na página de login mesmo).
O único problema é que eu ainda não sei mexer com esse "content_lenght".Não tem como vc me explicar como funciona. Muito obrigado.
Leandro
-
Simples:
if Request.ServerVariables("CONTENT_LENGTH") = 0 then
.
.Código que deve ser executado quando a página é carregada pela primeira vez
.
else
.
.Código que deve ser executado quando a página sofre um refresh, postback, submit, ação de post, etc
.Consultar seu banco, logar e redirecionar para outra página
.
end ifpra ficar mais simples
if Request.ServerVariables("CONTENT_LENGTH") <> 0 then
.
.Código que deve ser executado quando a página sofre um refresh, postback, submit, ação de post, etc
.Consultar seu banco, logar e redirecionar para outra página
.
end ifBoa Sorte
Se ajudou, marca aí... -
-
-
Eu consegui fazer funcionar com esse content_lenght (foi só para pra pensar um pouco).
Agora está funcionando corretamente, já q criei uma session para os valores q desejo armazenar, assim não uso o request.form na página entrada.asp e sim session("var"). Gostaria de agradecer muito a sua ajuda, pois me deu uma visão maior dos comandos de asp.
Uma última coisa q gostaria de pedir, será q vc não conhece algum livro ou apostila bom para aprender o código???
Pois já lí 3 apostilas e um livro (no entanto este livro era só sobre visual do site), e nada me ajudou muito mesmo. Me de uma indicação de site ou livro para comprar, muito obrigado.Leandro
-
Leandro... pra falar a verdade, o pouco que eu sei eu aprendi sozinho...
Mas tem aqueles "guias rápidos" da editora novatech que ajudam bastante quando vc não acha algo.
Também tenho "ASP - Guia Completo" da editora O´Reilly mas o meu é uma versão bem antiga... ASP 1.0, não sei se tem versão nova...
O segredo tá na prática
Abraços