Ir para conteúdo

POWERED BY:

Arquivado

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

kika

Cadastro de Usuários

Recommended Posts

Estou criando uma área de cadastro em meu site para que o cliente possa imprimir um cupom de desconto logo após o cadastro. Gostaria de saber se existe alguma forma segura de criar isso para que o cliente só tenha acesso a isso somente uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, tenho uma ideia, creio que dê para o que precisa....ao clicar no link de imprimir você cria um ID pra cada cupom...nesse ID você coloca o ID do usuario,um código do cupom,dia,mes,ano,hora,minuto,segundo que ele clicou. A cada clique no link de imprimir você verifica se já tem algo gravado, se tem então a session recebe o valor que tem na tabela, se não tem cria e grava.Quando imprimir você coloca esse ID gerado e quando for utilizar o cupom verifica se os dados impressos são iguais ao que estão gravados na tabela, se for então você faz um update na tabela e em outro campo você deixa ele como True, assim você não utilizará mais de uma vez um cupom...ele poderá imprimir quantas vezes quiser, mas será sempre o mesmo Código gerado e ao usa-lo o cupom fica inutilizado

Compartilhar este post


Link para o post
Compartilhar em outros sites

jonathandj,Vou refazer meu cadastro pra tentar fazer isso que você falou, pois eu estava fazendo meu cadastro pelo Cdonts e sem BD.Qualquer dúvida posto novamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho uma pequena dúvida que não estou conseguindo resolver. No meu cadastro tenho uma lista de Estados para o usuário selecionar o seu respectivo estado. No meu BD Access tenho o campo estado definido como Texto e no código ASP está dando o seguinte erro:Microsoft JET Database Engine error '80040e14' Syntax error (missing operator) in query expression 'RIO DE JANEIRO'. /cadastro/insere.asp, line 31 O que pode ser esse erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o qeu tem na linha 31?

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque o sql pra gente verdê um response.write(sql)response.end()antes de executar o recordset,substintuindo sql pela strng sql que insere no banco, depois coloca aqui o que aparecer no browser

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpem, esqueci de postar o código

 

<!-- #include file="db.asp" --><html><body><%  	  nome = Request.Form("nome")	  endereco = Request.Form("endereco")	  numero = Request.Form("numero")	  complemento = Request.Form("complemento")	  bairro = Request.Form("bairro")	  estado = Request.Form("estado")	  cep1 = Request.Form("cep1")	  cep2 = Request.Form("cep2")	  senha = Request.Form("senha")	  senha2 = Request.Form("senha2")	  email = Request.Form("email")	  dia = Request.Form("dia")	  mes = Request.Form("mes")	  ano = Request.Form("ano")	  cel0 = Request.Form("cel0")	  cel1 = Request.Form("cel1")	  cel2 = Request.Form("cel2")	  chkMailling = Request.Form("chkMailling")	    Set Conn = Server.CreateObject("ADODB.Connection")  Conn.Open ConString	   SQL = "INSERT INTO usuarios (nome,endereco,numero,complemento,bairro,estado,cep1,cep2,senha,senha2,email,dia,mes,ano,cel0,cel1,cel2,chkMailling) VALUES ("+nome+","+endereco+","+numero+","+complemento+","+bairro+","+estado+","+cep1+","+cep2+","+senha+","+senha2+","+email+","+dia+","+mes+","+ano+","+cel0+","+cel1+","+cel2+","+chkMailling+")"Conn.Execute(SQL)%><p>comando <%=SQL%> foi executado. <br>Os dados foram inseridos.</p></body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes dessa linhaConn.Execute(SQL)ponharesponse.write(SQL)response.ende poste aqui o que aparecer

Compartilhar este post


Link para o post
Compartilhar em outros sites

os campos na tabela do db estão como texto,número,data?? se for texto deve ficar concatenado como o exemplo abaixo' " & variavel & " 'se for número fica assim " & variavel & " nesta linha Conn.Execute(SQL), coloque assimset rs= Conn.Execute(SQL) olhando por cima vi esses "erros"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o que você falou e apareceu o seguinte:INSERT INTO usuarios (nome,endereco,numero,complemento,bairro,estado,cep1,cep2,senha,senha2,email,dia,mes,ano,cel0,cel1,cel2,chkMailling) VALUES (Teste,Rua,12,12,ABC,ACRE,22222,222,1234,1234,email@provedor.com.br,01,01,1999,21,2222,2222,on)E quando fui olhar no BD não gravou nada.O meu BD possui os seguintes campos:codcli(chave primária), nome, endereco, numero, complemento, bairro, estado, cep1, cep2, senha, senha2, email, dia, mes, ano, cel0, cel1, cel2, chkMaillingAonde CEP possui duas caixas de texto, por isso cep1 e cep2senha tb possui duas cx de texto, que é senha e confirmação de senhaData de Nascimento tem 3 cx de txt (dia/mes/ano)Telefone tem 3 cx de txt tb, uma para o codigo do estado, outra para os primeiros nºs e outra para os nºs finais.E o chkMailling, é uma caixa para selecionar se aceita receber novidades do site

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim:

 

SQL = "INSERT INTO usuarios ( nome,endereco,numero,complemento,bairro,estado,cep1,cep2,senha,senha2,email,dia,mes,ano,cel0,cel1,cel2,chkMailling) VALUES ('"&nome&"','"&endereco&"',"&numero&","&complemento&",'"&bairro&"",'"&estado&"',"&cep1&","&cep2&",'"&senha&"','"&senha2&"','"&email&"',"&dia&","&mes&","&ano&","&cel0&","&cel1&","&cel2&",'"&chkMailling&"')"set rs=Conn.Execute(SQL)

bom...não gravou porque você tem que retirar o response.end()...essa linha simplesmente faz uma parada no script, quandochega nessa linha ele não executa mais nada do que estiver abaixo dela, por isso não gravou e não deu erro

 

Creio que dê erro de dados incompativeis pois não sei como estão os tipos de campos na sua tabela

 

Uma pergunta, senha1 e senha2 seriam os campos do formulario tipo "Digite sua senha" e "Repita senha"? se for isso não precisa de dois campos, grave apenas uma e faça a verificação via código,anets de gravar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retirei alguns campos e fiz o que você falou e está dando o seguinte erro:

 

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

 

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

 

/cadastro/insere.asp, line 27

 

 

Vou postar meus códigos aqui:

 

db.asp

<%set Conexcao = Server.CreateObject("ADODB.Connection")Conexcao.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=D:\web\docs\database\cadastro.mdb"Conexcao.open%>

insere.asp

<!-- #include file="db.asp" --><html><body><%  	 nome = Request.Form("nome")	 endereco = Request.Form("endereco")	 numero = Request.Form("numero")	 complemento = Request.Form("complemento")	 bairro = Request.Form("bairro")	 estado = Request.Form("estado")	 cep1 = Request.Form("cep1")	 cep2 = Request.Form("cep2")	 senha = Request.Form("senha")	 email = Request.Form("email")	 tel0 = Request.Form("tel0")	 tel1 = Request.Form("tel1")	 tel2 = Request.Form("tel2")	 chkMailling = Request.Form("chkMailling")	  SQL = "INSERT INTO usuarios (nome,endereco,numero,complemento,bairro,estado,cep1,cep2,senha,email,tel0,tel1,tel2,chkMailling) VALUES ('"&nome&"','"&endereco&"',"&numero&",'"&complemento&"','"&bairro&"','"&estado&"',"&cep1&","&cep2&",'"&senha&"','"&email&"',"&tel0&","&tel1&","&tel2&",'"&chkMailling&"')"set rs=Conexcao.Execute(SQL)	  %><p>comando <%=SQL%> foi executado. <br>Os dados foram inseridos.</p></body></html>

 

O meu BD possui os seguintes campos:

 

codcli(chave primária) - auto numeração

nome - texto

endereco - texto

numero - numero

complemento - texto

bairro - texto

estado - texto

cep1 - numero

cep2 - numero

senha - texto

email - texto

tel0 - numero

tel1 - numero

tel2 - numero

chkMailling - Sim/Não

Compartilhar este post


Link para o post
Compartilhar em outros sites

KikaComo está o seu campo checkbox no formulario? Coloque o valor dele como 1 (assim vai retornar 1 se ele for marcado)No comando de inserir, retire as aspas simples desse último campo, pois o valor é sim/não (1 ou 0), e por isso está ocorrendo o erro.Outra coisa: Seus campos de cep e telefone são numéricos. você tem certeza que o usuário vai digitar apenas números? Se tiver algum caracter q não for número, como por exemplo "(" ou "-", vai dar erro ao salvar. Esse tipo de campos normalmente são setados como texto, independente de conterem apenas números ou não.Abraços,Cassiano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito Cassiano, fiz o que você falou e funcionou direitinho, eu tinha certeza que o problema era ali, mas não sabia como resolver.O problema agora é quando não seleciono o checkbox, aí ele dá o erroMicrosoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. /cadastro_testy/insere.asp, line 24

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito Cassiano, fiz o que você falou e funcionou direitinho, eu tinha certeza que o problema era ali, mas não sabia como resolver.O problema agora é quando não seleciono o checkbox, aí ele dá o erroMicrosoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement. /cadastro_testy/insere.asp, line 24

Ah sim.. isso acontece pois qdo não seleciona, o valor vem vazio. Assim, antes de inserir você tem q transformar pra zero.Vai ficar assim:
chkMailling = Request.Form("chkMailling")If chkMailing = "" Then   chkMailing = 0End If
=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cassiano, muito obrigada, funcionou. Minha dúvida agora é a seguinte:Depois que o cliente se cadastra ele é redirecionado para uma outra página, que é a página que gera um cupom de desconto. Gostaria que nessa página tivesse os seguintes dados:Exclusivo para:Nome: nome do clienteEstado: estado do clienteImpresso em: 30/11/2006Válido até: 24/12/2006Eu até gostaria que tivesse um código de segurança pra fazer isso, mas não sei bem como fazer e isso tem que estar pronto até amanhã de manhã.Eu tenho que criar uma outra tabela ou coloco esses dados de data na mesma? Ou existe alguma função que faça exibir isso?O nome e o estado sei que basta dar um select, mas não está exibindo nada na página.<%Sql = "Select nome,estado From usuarios"Conexcao.Execute(SQL)%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cassiano, muito obrigada, funcionou. Minha dúvida agora é a seguinte:Depois que o cliente se cadastra ele é redirecionado para uma outra página, que é a página que gera um cupom de desconto. Gostaria que nessa página tivesse os seguintes dados:Exclusivo para:Nome: nome do clienteEstado: estado do clienteImpresso em: 30/11/2006Válido até: 24/12/2006Eu até gostaria que tivesse um código de segurança pra fazer isso, mas não sei bem como fazer e isso tem que estar pronto até amanhã de manhã.Eu tenho que criar uma outra tabela ou coloco esses dados de data na mesma? Ou existe alguma função que faça exibir isso?O nome e o estado sei que basta dar um select, mas não está exibindo nada na página.<%Sql = "Select nome,estado From usuarios"Conexcao.Execute(SQL)%>

KikaPelo que entendi, o que você quer pode ser feito da seguinte forma:Crie uma tabela para armazenar os cupons de desconto, com os campos:codCupomDesconto - numerico (auto numeração)codCliente - numericodataImpressao - datadataValidade - datautilizado - sim/nãoEntão vai ficar algo assim:1 - Executa INSERT do Cliente (você já está fazendo)2 - Obtem cliente que acabou de ser incluido, mais ou menos assim:
Set rsMax = Server.CreateObject("ADODB.Recordset")	  rsMax.Open "SELECT max(codCli) as codCli FROM Usuarios", conexao	  Session("codCliente") = rsMax(codcli)	  rsMax.CloseSet rsMax = Nothing
3 - Execunta INSERT do CUPOM:
INSERT INTO CuponsDesconto (codCliente, dataImpressao, dataValidade, utilizado) VALUES ("& Session("codCliente") &", now(), dateAdd('d', now(), 20), 0)
Na função dateadd o 20 é a quantidade de dias ('d') que serão acrescentados na data de hoje (now()).Fiz bem simples aí... sem tratamentos de erros e tal.. depois você vai melhorando.. =)4- Pra exibir o cupom na tela, basta na proxima tela, você obter os dados do cliente armazenado em Session("codCliente") e mostrar os dados dele e do seu cupom.5 - Feito isso, você vai precisar garantir que a pessoa só vai usar o cupom uma vez. Pra isso, na hora que a pessoa usar o cupom, você verifica se está dentro da data de validade, e se já foi utilizado. Se não foi, permite usar, e atualiza o campo utilizado pra true. Assim se tentar denovo, o cupom não será mais válido.Abraços,Cassiano

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Cassiano,

 

Desculpe ter sumido, mas tive vários problemas e acabei deixando a programação de lado, agora estou retornando. Muito obrigada pela sua atenção, acabei de ler sua MP.

 

Fiz o que você falou e está dando o seguinte erro:

 

Microsoft VBScript compilation error '800a0400'

 

Expected statement

 

/cadastro_teste/insere.asp, line 55

 

"INSERT INTO cupons (codcliente, dataImpressao, dataValidade, utilizado) VALUES ("& Session("codcliente") &", now(), dateAdd('d', now(), 16), 0)"

 

Meu código da insere.asp está assim:

<!-- #include file="db.asp" --><html><body><%Set Mailer = Server.CreateObject("CDONTS.NewMail")Mailer.From = "web@site.com.br"Mailer.To = Request.Form("email")Mailer.BCC = "web@site.com.br"Mailer.bodyFormat = 1Mailer.mailFormat = cdoMailFormatTextMailer.Subject = "CADASTRO "Texto = "SEU CADASTRO FOI EFETUADO COM SUCESSO!!" & vbcrlf & vbcrlf & "Nome: " & Request.Form("nome") & vbcrlf & "Estado: " & Request.Form("estado") & vbcrlf & "E-mail : " & Request.Form("email") & vbcrlf & "Senha : " & Request.Form("senha") & vbcrlf & vbcrlfMailer.Body = TextoMailer.SendSet Mailer = Nothing%><%	  nome = Request.Form("nome")	  endereco = Request.Form("endereco")	  numero = Request.Form("numero")	  complemento = Request.Form("complemento")	  bairro = Request.Form("bairro")	  estado = Request.Form("estado")	  cep1 = Request.Form("cep1")	  cep2 = Request.Form("cep2")	  senha = Request.Form("senha")	  email = Request.Form("email")	  tel0 = Request.Form("tel0")	  tel1 = Request.Form("tel1")	  tel2 = Request.Form("tel2")	  chkMailling = Request.Form("chkMailling")	 	 	  If chkMailling = "" Then	  chkMailling = 0	  End If SQL = "INSERT INTO usuarios(nome,endereco,numero,complemento,bairro,estado,cep1,cep2,senha,email,tel0,tel1,tel2,chkMailling) VALUES ('"& nome &"','"& endereco &"',"& numero &",'"& complemento &"','"& bairro & "','" & estado &"','"& cep1 &"','"& cep2 &"','"& senha & "','"& email &"','"& tel0 &"','"& tel1 &"','"& tel2 &"',"& chkMailling &")"Conexcao.Execute(SQL)	  Set rsMax = Server.CreateObject("ADODB.Recordset")	  rsMax.Open "SELECT max(codcli) as codcli FROM usuarios", Conexcao	  Session("codcliente") = rsMax(codcli)	  rsMax.CloseSet rsMax = Nothing"INSERT INTO cupons (codcliente, dataImpressao, dataValidade, utilizado) VALUES ("& Session("codcliente") &", now(), dateAdd('d', now(), 20), 0)"	   	 Response.redirect "cupom.asp"	  %></body></html>

 

Já mexi no insert várias vezes e continua o mesmo erro, não sei o que pode ser

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kika

 

O erro ocorreu pq o INSERT está "solto" na página.

 

Ele tem que ser feito da mesma forma que você fez o INSERT anterior... ser atribuido a uma variável, e depois executado no banco de dados.

 

Assim:

<% SQL = "INSERT INTO usuarios(nome,endereco,numero,complemento,bairro,estado,cep1,cep2,senha,email,tel0,tel1,tel2,chkMailling) VALUES ('"& nome &"','"& endereco &"',"& numero &",'"& complemento &"','"& bairro & "','" & estado &"','"& cep1 &"','"& cep2 &"','"& senha & "','"& email &"','"& tel0 &"','"& tel1 &"','"& tel2 &"',"& chkMailling &")"Conexcao.Execute(SQL)	  Set rsMax = Server.CreateObject("ADODB.Recordset")	  rsMax.Open "SELECT max(codcli) as codcli FROM usuarios", Conexcao	  Session("codcliente") = rsMax(codcli)	  rsMax.CloseSet rsMax = NothingSQL = "INSERT INTO cupons (codcliente, dataImpressao, dataValidade, utilizado) VALUES ("& Session("codcliente") &", now(), dateAdd('d', now(), 20), 0)"Conexcao.Execute(SQL)	  Response.redirect "cupom.asp"	  %></body></html>

Mais ou menos como está acima.. deve funcionar. Depois é só você melhorar colocando alguns tratamentos de erro.

 

Depois você vai ter q tratar o uso do cupom fazendo com que ele seja setado como usado na primeira vez que alguém usar, e sempre verificando se já foi usado, impedindo assim q seja usado mais de uma vez.

 

Abraços

Cassiano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cassiano,Eu havia feito isso que você falou, mas dava um erro que eu não entendia, pois nunca vi...aí por isso retirei. Agora coloquei o insert como deve ser e ele dá o tal erro que pra mim é desconhecido:Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access Driver] Circular reference caused by alias 'codcli' in query definition's SELECT list. /cadastro_teste/insere.asp, line 47

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.