none
Recuperar infromações enviadas por um formulário pelo metodo post RRS feed

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

    quinta-feira, 4 de janeiro de 2007 00:23

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

    quarta-feira, 24 de janeiro de 2007 18:08

Todas as Respostas

  • Esse erro é de acesso a banco de dados.

    Lendo:
    Ambos início e fim do arquivo são verdadeiros ... ou seja, o registro não foi encontrado, e mesmo assim, você está tentando utilizar o registro do banco...

    Espero ter ajudado

    segunda-feira, 8 de janeiro de 2007 15:45
  • 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.

    segunda-feira, 8 de janeiro de 2007 15:53
  • 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 ???

    segunda-feira, 8 de janeiro de 2007 16:12
  • 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!
    segunda-feira, 8 de janeiro de 2007 17:21
  • 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.
    quarta-feira, 10 de janeiro de 2007 14:01
  • 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, etc

    O recordset só será vazio se o login não constar na tabela

    se não funcionar poste o seu código...

    quarta-feira, 10 de janeiro de 2007 15:53
  • 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_numRows

    Set 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_numRows

    Set 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

    quinta-feira, 11 de janeiro de 2007 01:08
  • 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í

    quinta-feira, 11 de janeiro de 2007 17:50
  • 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

    quinta-feira, 11 de janeiro de 2007 22:01
  • 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 if

    Tenta especificar o método no formulario
    <form name="frmLogin" id="frmLogin" method="post">

    Depois posta o q aconteceu...

    sexta-feira, 12 de janeiro de 2007 16:32
  • 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.

    sexta-feira, 12 de janeiro de 2007 21:13
  • 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 if

    Se 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ópicos

    Espero ter ajudado

    segunda-feira, 15 de janeiro de 2007 19:59
  • Leandro,

    Se sanou sua dúvida com relação ao método post, marque como respondida...

    Até

    terça-feira, 16 de janeiro de 2007 17:09
  • 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.

    quarta-feira, 17 de janeiro de 2007 00:33
  • 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é...

    quarta-feira, 17 de janeiro de 2007 15:47
  • 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

    quarta-feira, 17 de janeiro de 2007 18:41
  • 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 if

    pra 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 if

    Boa Sorte
    Se ajudou, marca aí...

    quarta-feira, 17 de janeiro de 2007 18:55
  • Brigadaum Mauro, eu vou fazer o teste, assim q der eu posto aqui o resultado.
    Acredito q até amanha já t dou uma resposta, valeu..
    sexta-feira, 19 de janeiro de 2007 16:00
  • Bom Mauro, eu fiz a página, mas estou com uma dúvida:

    O action do form indica pra minha próxima página?? No caso seria a entrada.asp.

    Pq toda hora eu caio na página entrada.asp, q coloquei como action do form.
    O devo fazer?

    Obrigado.

    sexta-feira, 19 de janeiro de 2007 18:25
  • 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

    sábado, 20 de janeiro de 2007 16:56
  • 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

    quarta-feira, 24 de janeiro de 2007 18:08