/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Ændre @ til @
Fra : Erik Ginnerskov


Dato : 15-09-05 22:52

Hej NG

I min gæstebog indsættes gæsters indlæg med denne kode i databasen:

<%
[connection til databasen]

If Request.Form("Gem") <> "" Then
strError = ""
strNavn = Trim(Request.Form("Navn"))
strEmail = Trim(Request.Form("Email"))
strOverskrift = Trim(Request.Form("Overskrift"))
strKommentar = Trim(Request.Form("Kommentar"))
If Len(strNavn) = 0 Then
strError = "<li>Du skal skrive dit navn!</li>"
ElseIf validateEmail(strEmail) = False Then
strError = "<li>Du skal skrive en gyldig e-mail adresse!</li>"
ElseIf Len(strKommentar) = 0 Then
strError = "<li>Du skal skrive en kommentar!</li>"
End If
If Len(strError) = 0 Then
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM Guestbook WHERE (ID = 0)"
rs.Open strSQL, tempConn, adOpenKeyset, adLockOptimistic
If (rs.BOF Or rs.EOF) Then
rs.AddNew
rs("Navn") = Server.HTMLEncode(strNavn)
rs("Email") = Server.HTMLEncode(strEmail)
rs("Overskrift") = Server.HTMLEncode(strOverskrift)
rs("Kommentar") = Server.HTMLEncode(strKommentar)
rs("Dato") = Now()
rs.Update
End If
rs.Close
Set rs = Nothing
Else
strError = "<p><ul>" & strError & "</ul></p>"
strMode = "add"
End If
End If
%>

Det fungerer for så vidt upåklageligt. Men jeg vil gerne have mulighed for
at beskytte gæsternes email-adresser mod spambotter. Derfor vil jeg have
puttet et replace ind, så @ automatisk bliver erstattet med &#64; - hvordan
griber jeg det an?

I øjeblikket er jeg nødt til at hente databasen hjem og redigere manuelt,
for derefter at genuploade. Men dels giver det spambotterne et tidsvindue,
hvor adresserne er ubeskyttede og dels er der en risiko for at jeg derved
kommer til at slette et nyt indlæg, når jeg uploader rettelsen.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



 
 
Jens Gyldenkærne Cla~ (16-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 16-09-05 09:39

Erik Ginnerskov skrev:

> Det fungerer for så vidt upåklageligt. Men jeg vil gerne have
> mulighed for at beskytte gæsternes email-adresser mod
> spambotter. Derfor vil jeg have puttet et replace ind, så @
> automatisk bliver erstattet med &#64; - hvordan griber jeg det
> an?

Den slags erstatninger bør IMO altid foretages når man udskriver
data. På den side hvor du bruger mailadressen skriver du bare
Replace(rs("mail"), "@", "&#64;") i stedet for rs("mail").

Men hvis du hellere vil have den erstattede værdi liggende i
databasen, kan du bare foretage erstatningen før du gemmer:

rs("mail") = Replace(strEmail, "@", "&#64;")

Det bør ikke være nødvendigt at bruge server.HTMLencode på en
mailadresse (som du gør pt), men hvis du stadig vil have
htmlencodet mailadressen, skal du huske at gøre det *før* du laver
erstatningen med @=>&#64; - ellers vil du få udskrevet html-
entiteten i stedet for værdien på siden.

Noget helt andet er at jeg nok ville foretrække at en gæstebog slet
ikke offentliggjorde mailadresser som standard - selv en god
sløring kan blive brudt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Erik Ginnerskov (16-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 16-09-05 22:01

Jens Gyldenkærne Clausen wrote:

> rs("mail") = Replace(strEmail, "@", "&#64;")

Mener du i stedet for denne linje?

rs("Email") = Server.HTMLEncode(strEmail)

?

> Noget helt andet er at jeg nok ville foretrække at en gæstebog slet
> ikke offentliggjorde mailadresser som standard - selv en god
> sløring kan blive brudt.

Det kan være et synspunkt, men jeg synes nu, at adressen bør være
registreret sammen med indlægget. Det giver blandt andet mulighed for, at
jeg undtagelsesvis kan svare direkte på et indlæg.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Jens Gyldenkærne Cla~ (17-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 17-09-05 11:01

Erik Ginnerskov skrev:

>> rs("mail") = Replace(strEmail, "@", "&#64;")
>
> Mener du i stedet for denne linje?
>
> rs("Email") = Server.HTMLEncode(strEmail)

Netop.


> Det kan være et synspunkt, men jeg synes nu, at adressen bør
> være registreret sammen med indlægget.

Der er stor forskel på "registreret" og "offentliggjort". Jeg kan
godt forstå at man kræver en mailadresse som en form for
verifikation af afsender, men den behøver ikke nødvendigvis at
blive vist til alle brugere.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Erik Ginnerskov (17-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 17-09-05 17:35

Jens Gyldenkærne Clausen wrote:
> Erik Ginnerskov skrev:
>
>>> rs("mail") = Replace(strEmail, "@", "&#64;")
>>
>> Mener du i stedet for denne linje?
>>
>> rs("Email") = Server.HTMLEncode(strEmail)
>
> Netop.

OK, jeg prøvede dette i en kopi af gæstebogen:

If Request.Form("Gem") <> "" Then
strError = ""
strNavn = Trim(Request.Form("Navn"))
strEmail = Trim(Request.Form("Email"))
strOverskrift = Trim(Request.Form("Overskrift"))
strKommentar = Trim(Request.Form("Kommentar"))
If Len(strNavn) = 0 Then
strError = "<li>Du skal skrive dit navn!</li>"
ElseIf validateEmail(strEmail) = False Then
strError = "<li>Du skal skrive en gyldig e-mail adresse!</li>"
ElseIf Len(strKommentar) = 0 Then
strError = "<li>Du skal skrive en kommentar!</li>"
End If
If Len(strError) = 0 Then
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM Guestbook WHERE (ID = 0)"
rs.Open strSQL, tempConn, adOpenKeyset, adLockOptimistic
If (rs.BOF Or rs.EOF) Then
rs.AddNew
rs("Navn") = Server.HTMLEncode(strNavn)
rs("mail") = Replace(strEmail, "@", "&#64;")
rs("Overskrift") = Server.HTMLEncode(strOverskrift)
rs("Kommentar") = Server.HTMLEncode(strKommentar)
rs("Dato") = Now()
rs.Update
End If
rs.Close
Set rs = Nothing
Else
strError = "<p><ul><font color=#FF0000>" & strError & "</font></ul></p>"
strMode = "add"
End If
End If
__________

Og fik så denne fejlmelding:

ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name
or ordinal.
/gaestebog.asp, line 29

Linje 29 er
rs("mail") = Replace(strEmail, "@", "&#64;")

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Jens Gyldenkærne Cla~ (18-09-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 18-09-05 21:40

Erik Ginnerskov skrev:

> OK, jeg prøvede dette i en kopi af gæstebogen:

[snip]

> rs("mail") = Replace(strEmail, "@", "&#64;")

Så vidt jeg husker hedder dit felt "email" - ikke "mail". Der skal
derfor stå rs("email") i stedet for rs("mail").



> ADODB.Recordset error '800a0cc1'
> Item cannot be found in the collection corresponding to the
> requested name or ordinal.

Det er en fejl man typisk får når man prøver at bruge et ikke-
eksisterende felt i et postsæt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Erik Ginnerskov (19-09-2005)
Kommentar
Fra : Erik Ginnerskov


Dato : 19-09-05 00:46

Jens Gyldenkærne Clausen wrote:

>> rs("mail") = Replace(strEmail, "@", "&#64;")
>
> Så vidt jeg husker hedder dit felt "email" - ikke "mail". Der skal
> derfor stå rs("email") i stedet for rs("mail").

Øv, den var sgu for dum, Jens. Den burde jeg have set. Takker.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://html-faq.dk/



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste