Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcosbin

Não deixar repetir o campo email

Recommended Posts

Olá. Acredito que minha dúvida seja simples e já existam tópicos a respeito, mas procurei e, pelo menos com os termos utilizados na busca, não achei resposta.

 

Estou fazendo uma promoção e criei um banco de dados em Access com dois campos: email (chave primária) e resposta. Quero que a pessoa participe apenas uma vez com seu e-mail. Se repeti-lo, aparece um "alert" dizendo algo do tipo: "Seu e-mail já está cadastrado. você pode participar com outra conta."

 

Estou utilizando os seguintes comandos em ASP:

 

<%

vemail=Request.Form("email")

vresposta=Request.Form("resposta")

Set condb = Server.CreateObject("ADODB.Connection")

StrConn = "DRIVER={Microsoft Access Driver (*.mdb)}; "

StrConn = StrConn & "DBQ=D:\meucaminho\db.mdb"

condb.Open StrConn

set recta = condb.execute("insert into promocao (email, resposta) values ('"+vemail+"', '"+vresposta+"')")

set recta = nothing

condb.close

%>

 

Além do script, gostaria de saber se devo mesmo deixar o email como chave primária ou se vale mais a pena criar um campo ID com autonumeração.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz assim:

sql = "select * from promocao where email = '"&vemail&"'"
set rs = condb.execute (sql)

ai você poem assim:

if rs.eof then

'aki voce coloca o codigo que adiciona

else

'aqui voce poem alguma função de erro

end if

espero ter ajudado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo, não, tá dando erro:

 

Erro de compilação do Microsoft VBScript (0x800A0401)

Fim da instrução esperado

/marcosgoes/cgi-bin/promocao_receive.asp, line 12, column 9

aki voce coloca o codigo que adiciona

 

Eu nem mudei o seu texto, só estava testando. Mas na verdade eu queria fazer uma function que fosse verificada ao clicar em Enviar, no formulário. Se o e-mail da pessoa já estivesse no Access, seria emitido um alert "Seu e-mail já está cadastrado". Não sei se dá para fazer isso, acho que sim...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Augusto. Botei um "response.write" e não dá mais erro na hora de cadastrar, mas o sistema continua permitindo a duplicação dos e-mails. Veja o código completo:

 

<%

vnome=Request.Form("nome")

vemail=Request.Form("email")

vresposta=Request.Form("resposta")

Set condb = Server.CreateObject("ADODB.Connection")

StrConn = "DRIVER={Microsoft Access Driver (*.mdb)}; "

StrConn = StrConn & "DBQ=D:meucaminho\db.mdb"

condb.Open StrConn

set recta = condb.execute("insert into promocao (nome, email, resposta) values ('"+vnome+"', '"+vemail+"', '"+vresposta+"')")

sql = "select * from promocao where email = '"+vemail+"'"

set rs = condb.execute (sql)

if rs.eof then

Response.Write("Seu e-mail ja esta cadastrado. <a href='../promocao.asp'>Voltar</a>")

else

Response.Write("Cadastro efetuado. <a href='../promocao.asp'>Voltar</a>")

end if

set recta = nothing

condb.close

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce fez ao contrário!

 

ao invés de:

 

if rs.eof then

Response.Write("Seu e-mail ja esta cadastrado. <a href='../promocao.asp'>Voltar</a>")

else

Response.Write("Cadastro efetuado. <a href='../promocao.asp'>Voltar</a>")

end if

 

use:

 

if rs.eof then

Response.Write("Cadastro efetuado. <a href='../promocao.asp'>Voltar</a>")

else

Response.Write("Seu e-mail ja esta cadastrado. <a href='../promocao.asp'>Voltar</a>")

end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Augusto.

 

Não fiz ao contrário não. Se eu faço desse jeito que você falou, sempre que cadastro um participante novo aparece a mensagem "Seu e-mail ja esta cadastrado". você deve estar se confundindo com o comando "if not" ou outra coisa. Mas, de qq forma, isso não vai interferir no resultado que quero, que é a não-duplicação dos valores do campo e-mail, e isso está acontecendo de uma forma ou de outra. Veja alguns cadastros que fiz, estão iguais:

 

Nome Email Resposta

Marcos Bin marcosbin@gmail.com ai ai

Marcos Bin marcosbin@gmail.com aaa

 

Isso foi copiado do Access. Não tá funfando não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue:

 

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

 

[Microsoft][ODBC Microsoft Access Driver] 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.

 

/cgi-bin/promocao_receive.asp, line 28

Compartilhar este post


Link para o post
Compartilhar em outros sites

perfeito!

 

agora voce sabe que sempre que o email for duplicado vai da um erro, ai é só você identificar!

ai você faz assim logo depois da linha do erro:

 

response.write err.number

response.end

 

ai você vai ter o numero do erro, ai voce apaga isso e

coloka assim:

 

if err.number = numerodoerro then

 

'codigo de erro de email duplicado!

end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.