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

Erro login duplicado Cadastro com ativação por e-mail


Guest Carlito

Pergunta

Olá amigos(as). Peguei esse script aqui no Script Brasil "Cadastro com ativação por e-mail" com CDONTS e o adaptei para utilizar CDOSYS. Ele cadastrA os dados do usuário e envia o e-mail de confirmação normalmente, ou seja, está tudo funcionando ok, porém, se o usuário resolve colocar um login que já existe na base de dados (access), ocorre o seguinte erro:

------------------- erro-----------------------------------------------------

Microsoft JET Database Engine error '80004005'

The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.

/cadastro/cadastrar.asp, line 144

--------------------fim erro-------------------------------------------------

-------------------código parcial--------------------------------------------

'é aberta a conexao

Call abreConexao

Set rsInsert = conexao.Execute(strInsert) <------------ Line 144

'é fechada

Call fechaConexao

Set rsInsert = Nothing

Response.redirect("enviado_cadastro.asp") 'redireciona para uma página que avise que a chave de ativação foi enviada no e-mail do destinatário.

On Error Resume Next

If err.number <> 0 then

Response.redirect("aviso.asp")

end if

----------------fim código parcial-------------------------------------

Não sei porque quando ele verifique que o login já existe o "If err.number <>0" não é capturado e redirecionado para "Response.redirect("aviso.asp")" ou, nem mesmo o Call Erro("Já existe um usuário cadastrado com esse nome",Err.description), recupera a página.

O banco de dados tem a chave primária como "AutoNumerica" e a coluna login não permite duplicação de dados.

Seria preciso criar uma regra de validação no banco de dados que é em access?

Se for preciso? Como faria essa regra?

Ou o código está incorreto?

Há outra forma de fazer isso, para que a mensagem de "login já existente" apareça?

AGRADEÇO QUEM PUDER ME AJUDAR.

-------------Código completo-----------------------------------------

<!--#include file="conexao.asp"-->

<%

Dim conexao

site = "www.meusite.com.br" 'aqui vem o nome do seu site

seumail = "faleconosco@meusite.com.br" 'aqui o e-mail de quem está enviando a chave de ativação para o usuário

'abaixo as variáveis criadas para cara requisição dos formulários da página cadastro.asp

Login = Request.form("txtLogin")

Senha = Request.form("txtSenha")

email = Request.form("txtMail")

Ende = Request.form("txtEnd")

Num = Request.form("txtNum")

Endereco = Ende&", "&Num 'aqui é uma montagem do endereço, "Ende" é o endereço seguido de vírgula ", " e acrescentado o número "Num".

Cep1 = Request.form("txtCep1")

Cep2 = Request.form("txtCep2")

Cep = Cep1&"-"&Cep2 'mesmo idéia de cima

Cidade = Request.form("txtCidade")

Estado = Request.form("txtEstado")

Tel = Request.form("txtDDD") &"-"& Request.form("txtFone")

DDD = Request.form("txtFone")

Nome = Request.form("txtNome")

codigo = day(date)&month(date)&year(date)&"abc"&Login&month(date)&year(date)&minute(date) 'aqui é o código que irá ser enviando para o usuário, poderia ser qualquer coisa, desde de que respeite um diferencial dos demais, teria ques er randômico, ou ter algo que o diferendcie dos demais...como no exemplo, tem o "Login" mais algumas datas e umas letras abc só para enrolar, poderia por um código para cada tempo, se quiser incrementar...

não = "não" 'esse não é que vai decidir se o usuário está livre para navegar nas páginas restritas... quando ele terminar de cadastar ativando seu cadastro pelo e-mail, aí ele terá uma atualização para 'sim'.

data = day(date)&"/"&month(date)&"/"&year(date) 'aqui a data que foi efetuado o cadastro

IP = Request.ServerVariables("REMOTE_ADDR") 'aqui é o IP da máquina de quem efetuou o cadastro

if Request.form("txtNome") = "" then 'caso a pessoa não coloque o nome, a mensagem de boas vindas no e-mail, irá ser para o login do usuário

user = Login

else

user = Nome

end if

corpo = "Olá "&user&","& vbcrlf

corpo = corpo & vbcrlf

corpo = corpo & vbcrlf

corpo = corpo & "Agora só precisa ativar seu cadastro, clique no link abaixo para fazê-lo:"& vbcrlf

corpo = corpo & "http://"&site&"/cadastro/cadastrar1.asp?id="&codigo& vbcrlf

corpo = corpo & vbcrlf

corpo = corpo & "Caso o link não esteja ativo, copie o link acima utilizando o comando Ctrl+C para copiar e Ctrl+V para colar em seu navegador." & vbcrlf

corpo = corpo & vbcrlf

corpo = corpo & "Para ter acesso ao conteúdo exclusivo dos participantes, guarde as informações baixo." & vbcrlf

corpo = corpo & vbcrlf

corpo = corpo & "Login: "& Login & vbcrlf

corpo = corpo & "Senha: "& Senha & vbcrlf

corpo = corpo & vbcrlf

corpo = corpo & "Para se logar visite o site através de http://"&site&"/cadastro/cadastro.asp" & vbcrlf

corpo = corpo & vbcrlf

corpo = corpo & "Obrigado por fazer parte da Vital Ritmus." & vbcrlf

corpo = corpo & vbcrlf

corpo = corpo & site & vbcrlf

'aqui irá enviar para o e-mail do usuário

'cria o objeto para o envio de e-mail

Set objCDOSYSMail = Server.CreateObject("CDO.Message")

'cria o objeto para configuração do SMTP

Set objCDOSYSCon = Server.CreateObject ("CDO.Configuration")

'SMTP

objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.meusite.com.br"

'porta do SMTP

objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

'porta do CDO

objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'timeout

objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30

objCDOSYSCon.Fields.update

'atualiza a configuração do CDOSYS para o envio do e-mail

Set objCDOSYSMail.Configuration = objCDOSYSCon

'e-mail do remetente

objCDOSYSMail.From = seumail

'e-mail do destinatário

objCDOSYSMail.To = email

'assunto da mensagem

objCDOSYSMail.Subject = site&" - Chave para ativação de cadastro"

'conteúdo da mensagem

objCDOSYSMail.TextBody = corpo

'objCDOSYSMail.fields.update

'envia o e-mail

objCDOSYSMail.Send

'destrói os objetos

Set objCDOSYSMail = Nothing

Set objCDOSYSCon = Nothing

'aqui são preenchimentos dos espaços vazios, no caso do usuário não colocar tudo corretamente

if Endereco = ", " then

Endereco = "Sem endereço"

end if

if Cep = "-" then

Cep = "sem cep"

end if

if Cidade = "" then

Cidade = "sem cidade"

end if

if Estado = "" then

Estado = "sem estado"

end if

if Tel = "-" then

Tel = "sem telefone"

end if

if Nome = "" then

Nome = "sem nome"

end if

'aqui é inserido tudo na base

strInsert = " INSERT into usuarios "

strInsert = strInsert & "(nome, login, senha, email, cidade, estado, cep, endereco, telefone, data, libera, IP, codigo)"

strInsert = strInsert + "VALUES ('" + Nome + "',"

strInsert = strInsert + "'" + Login + "',"

strInsert = strInsert + "'" + Senha + "',"

strInsert = strInsert + "'" + email + "',"

strInsert = strInsert + "'" + Cidade + "',"

strInsert = strInsert + "'" + Estado + "',"

strInsert = strInsert + "'" + Cep + "',"

strInsert = strInsert + "'" + Endereco + "',"

strInsert = strInsert + "'" + Tel + "',"

strInsert = strInsert + "'" + data + "',"

strInsert = strInsert + "'" + não + "',"

strInsert = strInsert + "'" + IP + "',"

strInsert = strInsert + "'" + codigo + "')"

'é aberta a conexao

Call abreConexao

Set rsInsert = conexao.Execute(strInsert)

'é fechada

Call fechaConexao

Set rsInsert = Nothing

Response.redirect("enviado_cadastro.asp") 'redireciona para uma página que avise que a chave de ativação foi enviada no e-mail do destinatário.

on error resume next

if Err.number <> 0 then

Call Erro("Já existe um usuário cadastrado com esse nome",Err.description)

end if

'no caso de haver um erro, pode se fazer uma página "aviso.asp" avisando do erro com um "meta refresh redirect de 8 segundos, mais ou menos", logo em seguida redirecionando para o cadastro.asp

'If err.number <> 0 then

'Response.redirect("aviso.asp")

'end if

%>

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

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