USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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+,
 


CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página