Avatar billede newbie.dk Praktikant
24. maj 2004 - 16:09 Der er 14 kommentarer og
1 løsning

Validering af email op mod ID fra Access-database

Jeg er desværre groet lidt fast. Håber I kan hjælpe.

Jeg vil til at sende en mail ud til nogle brugere i en database. Jeg vil benytte mailliste-koden nedenfor.
I denne mail skal de benytte et link(f.eks www.side.dk/formular-side.asp?id=123), som linker til en simpel formular-side(kode nedenfor)
Når de kommer ind på denne formular-side(kode nedenfor) skal de indtaste ny data plus deres email, email'en skal bruges til validering. Det skulle jo helst være sådan at man kun kan updatere database-posten hvis ID og email passer sammen.


Hvordan validere man disse med hinanden?? 
Og hvis de taster forkert(ikke bliver godkendt), skal der komme en forklarende tekst, at de skal prøve det eller det, hvordan gøres det?

Jeg håber det er til at forstå meningen, og ellers spørg.



---mailliste - side---

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../xxx.mdb")
Conn.Open DSN

sql = "SELECT * FROM mailliste"
set rs = Conn.Execute(sql)

if not (rs.bof or rs.eof) then
do while not rs.eof
Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.RemoteHost = "xxx.xxx.dk"

Mailer.FromName = "afs.navn"
Mailer.FromAddress = "xxx@xxx.dk"
Mailer.AddRecipient rs("fornavn") & " " & rs("efternavn"), rs("email")
Mailer.Subject = "mailliste"
Mailer.CharSet = 2


strHTMLBody = "<font face='Verdana' size='2'><b>Hej</b><br>" & vbCrLf
strHTMLBody = strHTMLBody & "<br>" & vbCrLf
strHTMLBody = strHTMLBody & "Dette er en html test!.<br>" & vbCrLf
strHTMLBody = strHTMLBody & "<br>" & vbCrLf
strHTMLBody = strHTMLBody & "<a href='http://www.side.dk/formular-side.asp?id=" & rs("id") & "'>" & "http://www.side.dk/formular-side.asp?id=" & rs("id") & "</a>" & "<br><br>" & vbCrLf
strHTMLBody = strHTMLBody & "Venlig hilsen<br><br>" & vbCrLf
strHTMLBody = strHTMLBody & "<u>moi</u><br></font>" & vbCrLf

Mailer.ContentType = "text/html"
Mailer.BodyText = strHTMLBody

if not Mailer.SendMail then
  Response.Write "<br><br><b> er ikke sendt til: <br><u><font color=#FF0000>"& rs("email") &"</font></u></b><br>"
  Response.Write Mailer.Response
else
  Response.Write "<br><b> er sendt til: <font color=#008000>"& rs("email") &"</font></b><br><p>"
end if

Set Mailer = nothing
rs.movenext
loop
end if

Conn.Close
Set Conn = Nothing
%>
---end---



---formular - side---

<form method="POST" action="xxx.asp">
  <p><font face="Verdana" size="2">Nyinfo</font><br>
  <input type="text" name="nyinfo" maxlength="3" size="10"></p>
  <p><FONT face=Verdana size=2>Email:</FONT><br>
  <INPUT name=email></p>
  <p><input type="submit" value="Submit"><input type="reset" value="Reset"></p>
</form>
---end---



---send til database - side---

strSQL = strSQL & "nyinfo= "  & Request.Querystring("nyinfo") & " , "
strSQL = strSQL & "dato2= Now() "

Conn.Execute(strSQL)
Conn.Close
Set Conn = Nothing
---end---
Avatar billede vbcoder Nybegynder
24. maj 2004 - 16:19 #1
---formular - side---

<form method="POST" action="xxx.asp?<%=request.querystring("id")%>">
  <p><font face="Verdana" size="2">Nyinfo</font><br>
  <input type="text" name="nyinfo" maxlength="3" size="10"></p>
  <p><FONT face=Verdana size=2>Email:</FONT><br>
  <INPUT name=email></p>
  <p><input type="submit" value="Submit"><input type="reset" value="Reset"></p>
</form>
---end---

validering
---send til database - side---

'pseudokode

opslag i database på request.querystring("id)
validering
  er request.form("email") = rs("email")

hvis nej
  send til fejlside

ellers opdater

'pseudokode slut

strSQL = strSQL & "nyinfo= "  & Request.Querystring("nyinfo") & " , "
strSQL = strSQL & "dato2= Now() "

Conn.Execute(strSQL)
Conn.Close
Set Conn = Nothing
---end---
Avatar billede vbcoder Nybegynder
24. maj 2004 - 16:21 #2
ovenstående tager for givet at du bruger brugerens unikke id i databasen
Avatar billede vbcoder Nybegynder
24. maj 2004 - 16:21 #3
til linket i email'en
Avatar billede newbie.dk Praktikant
24. maj 2004 - 21:56 #4
Nu er jeg rimelig grøn indefor asp. Kan du ikke forklare hvad 'pseudokode' er?
Og ja jeg kan godt se ideen i din kode, men jeg har lidt svært ved at skrue den sammen. Kan du hjælpe lidt mere?
Avatar billede vbcoder Nybegynder
25. maj 2004 - 07:38 #5
pseudo kode er egentlig bare menneskord for hvad koden gør
Avatar billede vbcoder Nybegynder
25. maj 2004 - 07:45 #6
---send til database - side---

'pseudokode

'database connection
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../xxx.mdb")
Conn.Open DSN

'opslag i database på request.querystring("id)
sql = "SELECT * FROM mailliste WHERE id = " & request.querystring("id)
set rs = Conn.Execute(sql)

'validering
  'er request.form("email") = rs("email")
If rs.("email") <> request.form("email") then

'hvis nej
  'send til fejlside
  response.redirect("error_update.asp")
  'eller
  'udskriv fejlen med det samme
  'response.write("Fejl - fejlbeskrivelse")

Else
'ellers opdater

strSQL = "UPDATE DISTINCT ROW mailliste SET " & _
        "nyinfo = '"  & Request.Querystring("nyinfo") & "', " & _
        "dato2 = Now() " & _
        "WHERE id = " & request.querystring("id") & ";"

Conn.Execute(strSQL)
rs.close
Conn.Close
set rs = nothing
Set Conn = Nothing
---end---
Avatar billede newbie.dk Praktikant
27. maj 2004 - 15:18 #7
Jeg kan ikke få det til at virke.
Jeg får denne fejl-besked:

Fejl - fejlbeskrivelse bla bla...
Microsoft OLE DB Provider for ODBC Drivers error '80040e0c'

Command text was not set for the command object.

/test.asp, line 48

Linie 48 er:
Conn.Execute(strSQL)
Avatar billede vbcoder Nybegynder
27. maj 2004 - 15:27 #8
jeg tror rækkefølgende af kommandoerne til databasen er forkert og så har jeg glemt en end if

'validering
  'er request.form("email") = rs("email")
If rs.("email") <> request.form("email") then

'hvis nej
  'send til fejlside
  response.redirect("error_update.asp")
  'eller
  'udskriv fejlen med det samme
  'response.write("Fejl - fejlbeskrivelse")
  'luk recordset
  rs.close
Else
  'ellers opdater
  rs.close 'rs behøves ikke være åbnet for at lave en update mod databasen
          'da tabellen og felterne angives i sql
          'kan måske endda være årsagen til din fejl meddelelse

  strSQL = "UPDATE DISTINCT ROW mailliste SET " & _
        "nyinfo = '"  & Request.Querystring("nyinfo") & "', " & _
        "dato2 = Now() " & _
        "WHERE id = " & request.querystring("id") & ";"

  Conn.Execute(strSQL)
End if

'oprydning
Conn.Close
set rs = nothing
Set Conn = Nothing
Avatar billede newbie.dk Praktikant
27. maj 2004 - 15:30 #9
Jeg er blevet nødt til at lave et skjult-felt i min formular for at hente ID'en ind. Jeg kunne ikke få <... action="xxx.asp?<%=request.querystring("id")%> til at virke.
Avatar billede newbie.dk Praktikant
27. maj 2004 - 15:41 #10
Nu er fejl-beskeden væk. Men...
Databasen bliver ikke opdateret, og jeg får 'response.write("Fejl - fejlbeskrivelse") uanset om emailen er rigtigt eller forkert.
Avatar billede newbie.dk Praktikant
27. maj 2004 - 15:41 #11
Vil lige køre hjem, er på igen om ca. 30 min
Avatar billede vbcoder Nybegynder
27. maj 2004 - 15:47 #12
kunne være fordi din request.form("email") er tom eller du bruger et andet navn på email feltet på din form
Avatar billede newbie.dk Praktikant
27. maj 2004 - 16:49 #13
Nu virker det. Jeg ændrede
If rs("email") <> request.form("email") then
til
If rs("email") <> Request.Querystring("email") then

Jeg tester lige lidt videre i aften, så høre du fra mig igen.
Avatar billede newbie.dk Praktikant
29. maj 2004 - 01:05 #14
Nu har jeg testet det. Og det køre bare kanon. Så du må hellere ligge et svar.
Hvis jeg kunne få dig til at forsætte med at abonner på spm'et, så hvis jeg evt. fik problemer med videreudviklingen, kunne få fat på dig. Selvfølgelig ville jeg oprette et nyt spm. Jeg håber du forstår hvad jeg mener.

Men ellers, tak for hjælpen.
Avatar billede vbcoder Nybegynder
29. maj 2004 - 09:29 #15
selv tak ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Politiets Efterretningstjeneste

Teknisk IT-sikkerhedsspecialist i PET

Riskpoint A/S (Riskpoint Solutions Limited)

IT Business Analyst