|
|
|

|

|
Dicas
|

|
ASP - Active Server Page (Miscelâneas)
|
|
 |
Título da Dica: Postais Digitais / Cartões Virtuais
|
 |
|
|
Postada em 23/10/2003 por ^HEAVY-METAL^
A BASE DE DADOS : novamente uso uma Base de Dados em MSAccess, hoje em dia uso mais a nível pessoal o MySQL, e profissional o Oracle,... mas para exemplos deste tipo julgo que o ideal é esta solução de fácil transporte e mais simples gestão. Temos então uma única tabela para controlar os nossos postais digitais :
Tabela : postal
id_postal AutoNumber nomede_postal Text nomepara_postal Text emailde_postal Text emailpara_postal Text mensagem_postal Text data_postal Date/Time passw_postal Number postal_postal Text
E assim está a única tabela do ficheiro a que chamei de postaisdigitais.mdb, julgo ser bastante perceptível a estrutura (se lhe podemos chamar disso) desta Base de Dados.
Começamos comeste ficheiro, que nada é mais que um formulário com as imagens existentes para enviar, e os campos apra a informação das pessoas que vão interagir usando o sistema.
ficheiro : Construir.ASP
<body bgcolor=white> <table width="600" border=1><tr><td> <table width="100%"> <tr> <form name="postalenviado" method="post" action="visualizar.asp"> <td width="24" valign="bottom"> <input checked type="radio" value="postal1" name ="R1"> </font> </td> <td width="140"> <img border=2 height=86 src="imagens/postal1.jpg" width=134> </font> </td> <td width="12" valign="bottom"> <input type="radio" value="postal2" name ="R1"> </font> </td> <td width="151"> <font face="Arial"> <img border=2 height=87 src="imagens/postal2.jpg" width=134> </font> </td> </tr> <tr> <td width="24" valign="bottom"> <input type="radio" value="postal3" name="R1"> </font> </td> <td width="140"> <img border=2 height=88 src="imagens/postal3.jpg" width=135> </font> </td> <td width="12" valign="bottom"> <input type="radio" value="postal4" name="R1"> </td> <td width="140"> <img border=2 height=88 src="imagens/postal4.jpg" width=135> </font> </td> </tr> </table> </td><td> <font size=1 face="verdana,arial">Nome Destinatario : </font><input name="nomepara" size="28"> <br> <font size=1 face="verdana,arial">E-Mail Destinatario : </font><input name="emailpara" size="22"> <br> <font size=1 face="verdana,arial">Nome Remetente : </font><input name="nomede" size="28"> <br> <font size=1 face="verdana,arial">E-Mail Remetente : </font><input name="emailde" size="22"><br> <font size=1 face="verdana,arial">Mensagem : </font><br><textarea cols=26 name=mensagem rows=6></textarea> <input type="submit" name=uq value="Previsualizar"> </td></tr></table> Este próximo ficheiro é o que se chama aquando da submissão do formulário do ficheiro construir.asp, ou seja é daqui que vamos enviar o link para o destinatário do postal digital.
ficheiro : Enviar.ASP
<% 'Aqui conectamos com a Base de Dados Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.Recordset") Conn.Open "DBQ=" & Server.MapPath("./postaisdigitais.mdb") &_ ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;MaxBufferSize=8192;Threads=20;",_ "username", "password"
' Esta é a variável usada como identificador ' do postal digital Dim identifier ' goby é uma variável boolean para ' ajuda na validação Dim goby goby = 1 'lets start it with True %> <html> <body bgcolor=white> <font face=3D"Arial"> <small><strong> <% ' Validamos então o nome; tem de ter um tamanho ' mínimo de 2 caracteres if len(session("nomepara")) < 2 then ' se existir problemas marcamos logo a nossa variável goby = 0 end if if len(session("nomede")) < 2 then goby = 0 end if
' validamos o email, If Len(session("emailde")) <= 5 Then goby = 0 Else If InStr(1, session("emailde"), "@", 1) < 2 Then goby = 0 Else If InStr(1,session("emailde"), ".", 1) < 4 Then goby = 0 End If End If End If If Len(session("emailpara")) <= 5 Then goby = 0 Else If InStr(1, session("emailpara"), "@", 1) < 2 Then goby = 0 Else If InStr(1,session("emailpara"), ".", 1) < 4 Then goby = 0 End If End If End If
' Aqui verificamos se o texto não tem mais de 500 caracteres. If len(session("message")) >= 500 Then goby = 0 End If
' Vamos agora verificar a nossa variável ' se estiver a zeros avisamos que hà erros if goby = 0 then %> <br><br><br><br><br> <center>ERRO....</center><br> <% end if
' Se não hà erros introduzimos a informação para a Base de Dados ' e enviamos a informação por email para o destinatário If goby = 1 then
'fazemos o update à Base de Dados SQLStmt = "INSERT INTO postal (" & _ "passw_postal, postal_postal, nomepara_postal, nomede_postal, " & _ "emailde_postal, emailpara_postal, mensagem_postal, data_postal) " & _ "VALUES ("
' vamos criar um número aleatório para que o postal fique protegido, ' usamos o randomize/rnd para criar um número aleatório randomize() passw = Int((9999-1)*Rnd + 1) SQLStmt = SQLStmt & passw & ",'" & session("postal") & _ "','" & session("nomepara") & "','" & _ session("nomede") & "','" & _ session("emailde") & "','" & _ session("emailpara") & "','" & _ session("message") & "',Now)"
' escrevemos a informação na BD definitivamente rs.Open SQLStmt, Conn, 1, 2 SQLStmt = "Select max(id_postal) AS maximo from postal" rs.Open SQLStmt, Conn, 1, 2 ident = rs("maximo")
' Vamos aqui usar o componente ASPMail ' pode usar um outro qualquer, este é o que é usado ' no servidor ond estamos Set Mailer = Server.CreateObject("SMTPsvg.Mailer") Mailer.RemoteHost = "mail.pt4free.net" Mailer.FromName = "O Site" Mailer.FromAddress = "webmaster@pt4free.net" Mailer.AddRecipient " ", session("emailpara") Mailer.Subject = "Envio de Postal Digital para si de " & session("nomede") & " ..." ' vamos buscar a data que está no servidor d = now()
' vamos acrescentar-lhe 30 dias, para por no aviso de limite ' de expiração do postal digital d = DateAdd("d",30,d) enviar = "Deixe-me informá-lo de que " & session("nomede") & _ Chr(13) & Chr(10) & _ " enviou-lhe um postal digital. Para o ver " & _ "siga o link :" & _ Chr(13) & Chr(10) & Chr(13) & Chr(10) & _ "http://www.pt4free.net/pd/visualizar.asp?uq=defora&" & _ "ident=" & ident & _ "&psw=" & passw & " " & Chr(13) & Chr(10) & _ " o postal vai estar disponível no nosso site até ao dia " & _ formatDateTime(d,2) & _ Chr(13) & Chr(10) & Chr(13) & Chr(10) & _ Chr(13) & Chr(10) & _ " Obrigado," Mailer.BodyText = enviar Mailer.SendMail If Err <> 0 Then Response.write "ERRO..." Response.Write "<br><br>" & "Houve um Erro : " & Err.description & "<br><br>" Response.Write "<center><p>ERRO DO LADO DO SERVIDOR, " &_ "contacte o nosso webmaster.</p></center>" goby = 0 Else Response.Write "<br><br><br><center><p>POSTAL DIGITAL ENVIADO" &_ " SEM PROBLEMAS ...<br>" End if Set Mailer = nothing
End If ' penso que reparou que uso o JavaScript history.back ' com este não perdemos a informação jà criada anteriormente %> <center> <a href="javascript:history.go('-2')"> <Refazer> </a> </center> </strong></small></font> </body> </html> Por último temo sum ficheiro que fiz de maneira a servir para duas funções, a primeira como pré-visualizador do postal que está a ser construido, e a segundo como zona onde o destinatário do postal o poderá ver assim como respectiva mensagem.
ficheiro : Visualizar.ASP
<% Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.Recordset") Conn.Open "DBQ=" & Server.MapPath("../cgi-bin/postaisdigitais.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;MaxBufferSize=8192;Threads=20;", "", "" Dim apanhar Dim ident Dim psw
' erring diz-nos se o postal jà existe ' exists. Por defeito achamos que sim. Dim erring
' Normalmente uso 0 e 1 como boolean, ' julgo que ocupa menos recursos ao servidor do que ' um True e False erring = 0
' Recebemos a informação dos argumentos ' relativos ao postal a ver; ' ficamos a saber se é uma pré-visualização ' ou um destinatário a querer ver o seu postal apanhar = Request("uq")
if apanhar = "Previsualizar" then ' para pré-visualizar entra-se aqui ' Criei sessions para guardar a informação, ' assim posso aceder à mesma a qualquer altura session("postal") = Request("R1") session("nomede") = Request("nomede") session("emailde") = Request("emailde") session("nomepara") = Request("nomepara") session("emailpara") = Request("emailpara") session("message") = Request("mensagem") else ' aqui temos o identificador do postal digital, ' para sabermos qual a ir buscar. ' Percorremos a Base de Dados para ver se está ' tudo correcto. ident = Request("ident")
' Buscamos a password ' Não queremos que as pessoas vão ver os postais dos ' só por mudar o ID de 12 para 13 e afins. ' Com a password cada postal só pode ser visto ' pela pessoa que sabe a password, neste caso nem precisa de saber ' só tem de seguir o link que lhe foi enviado psw = Request("psw")
' Esta é uma simples declaração de SQL para ' validar o Id e a password SQLStmt = "SELECT * FROM postal WHERE ID_POSTAL = " & _ CInt(ident) & " AND passw_postal = " & CInt(psw)
' Executamos o SQL rs.Open SQLstmt, Conn, 1, 2 if rs.EOF then 'O Postal digital não existe ou a password está errada! erring = 1 else 'O Postal existe. Vamos preencher as variáveis de 'sessão com a informação da BD. session("postal") = rs("postal_postal") session("nomede") = rs("nomede_postal") session("emailde") = rs("emailde_postal") session("nomepara") = rs("nomepara_postal") session("emailpara") = rs("emailpara_postal") session("mensagem") = rs("mensagem_postal") end if rs.close end if %> <html> <body bgcolor=white> <% ' Aqui vamos verificar se houveram erros if erring <> 1 and (apanhar="Previsualizar" or apanhar="defora") and len(session("postal")) <> 0 then ' ´se tudo estiver bem mostramo sa informação %> <div align="left"> <table border="0" width="580" cellspacing="0" cellpadding="0"> <tr> <td width="50%" valign="top" align="left"><br> <br> <img src="imagens/<%=session("postal")%>.jpg" hspace="5" border="2" WIDTH="354" HEIGHT="231"> </td> <td width="50%"> <table border="0" cellspacing="3" width="100%" cellpadding="3" bordercolor="#000000" height="202"> <tr> <td width="100%" height="109"> <p align="left"> <font face="Arial"><br> <small>Remetente:</small> <strong><%=session("nomede")%></strong> <br> <small>E-Mail Remetente:</small><small><strong> <%=session("emailde")%></strong></small> <br> <small>Destinatario:</small><strong><small> <%=session("nomepara")%></small></strong> <br> <small>E-mail Destinatario:</small><small><strong> <%=session("emailpara")%></strong></small> </font> </td> </tr>
<tr> <td width="100%"> <font face="Arial"> <small>Message:</small><br> <font size="2"><strong> <%=session("message")%></strong> </font> </font> </td> </tr>
<tr> <td width="100%" align="center" valign="middle" height="29"> <% 'se apanhar = "seeit" mostramos os botões 'de envio e repetição if apanhar="Previsualizar" then %> <p align="left"><br> <a href="javascript:history.back()"> Repetir </a> <a href="enviar.asp"> Enviar </a> </td> </tr> </table> </td> </tr> </table> </div>
<% ' alguém está a ver um postal já criado ' mostra-se o botão de resposta else %> <br><br><br> <a href="construir.asp" target="_self" > Criar Tambem Um Postal </a> <% end if ' este else só funciona se não existir nenhum postal else %> <br><br> <center> ERRO.... </center> <br> <% end if ' Aqui é o local onde removemos Postais antigos, com mais de 30 diasall the postcards ' Não quero ter uma Base de Dados cheia de lixo ' por isso apago todos os regitos com mais de 30 dias. ' Pode perguntar.. "-Porque meteu este código aqui?" ' A minha resposta é: ' "- Porque é o local onde se veêm postais, ' se vamos ver um postal apagamos os que jà não interessam ' mas poderia estar em outro lado qualquer." ' Vamos buscar a data do servidor d = now() ' vamos decrementar 30 dias à mesma d = DateAdd("d",-30,d) ' Corremos o SQL que vai remover tudo SQLStmt = "DELETE FROM postal WHERE data_postal < #" & d & "#" rs.Open SQLStmt,Conn,1,2 %> </body> </html>
T+,
|
|
|
|

|