Avatar billede macho Praktikant
21. marts 2004 - 21:50 Der er 34 kommentarer og
1 løsning

Formular afsendes kun hvis den bliver submittet fra bestemt side.

Jeg har en side "formular-sendt.asp", som behandler en kontaktformular fra "formular.html". Nu er det sådan, at jeg kun vil have, at "formular-sendt.asp" skal afsende e-mailen, hvis man rent faktisk har udfyldt formularen. En bruger skal altså dirigeres videre til en fejlside hvis ikke han er kommet ind på siden via "formular.html".
Hvordan gør jeg dette.

Det skal siges, at jeg bestemt ikke er nogen ørn til ASP, hvorfor jeg gerne vil bede om et evt. fyldestgørende svar!

På forhånd tak.
Avatar billede skg Nybegynder
21. marts 2004 - 21:56 #1
du kan vha. Request.ServerVariables finde ud af hvilken referer der er blevet sendt med fra browseren ( Request.ServerVariables("HTTP_REFERER") )

denne sammenligner du så med den side du vil have din bruger skal komme fra, så det ender nogenlunde sådan her:


If Not Request.ServerVariables("HTTP_REFERER") = "http://hvadditdomainnuer.dk/siden" Then
  Response.Redirect( "SaaErDetUd.asp" )
  Response.End
End If
Avatar billede Slettet bruger
21. marts 2004 - 21:56 #2
if request.form("navn på form") = "" then
  response.redirect "fejlside.asp"
else
  'send email
end if
Avatar billede skg Nybegynder
21. marts 2004 - 21:59 #3
kvadratrodenaf1 : spørgsmålet gik jo ud på at man skulle checke hvor i verden brugeren kom fra...
Avatar billede macho Praktikant
21. marts 2004 - 22:04 #4
skg: Tusinde tak for hjælpen - det virker perfekt :-)

smid lige et svar!
Avatar billede Slettet bruger
21. marts 2004 - 22:06 #5
ahh.. fik ikke lige overskriften med.. DOH!!... men tror at macho vil gøre, så der ikke bliver sendt nogen mail, hvis man bare browser til siden uden at have udfyldt formen..
Avatar billede skg Nybegynder
21. marts 2004 - 22:09 #6
kvadratrodenaf1 : jeg håber da han gør begge dele :-)

macho : selv tak, og tak for point :-)
Avatar billede macho Praktikant
21. marts 2004 - 22:09 #7
skg: Jeg var lidt for hurtig før. Det virker IKKE perfekt. Nu får jeg ganske vist fejl-siden frem, men det gør jeg desværre også selvom formularen bliver korretkt udfyldt fra den rigtige .html side.

Nogen idé?
Avatar billede macho Praktikant
21. marts 2004 - 22:11 #8
Jeg har dette her på .asp siden:

If Not Request.ServerVariables("HTTP_REFERER") = "kontakt-formular.html" Then
  Response.Redirect( "fejl.html" )
  Response.End
End If

men som sagt, så bliver man ført videre til "fejl.html" uanset man kommer fra "kontakt-formular.html" ?
Avatar billede Slettet bruger
21. marts 2004 - 22:12 #9
det du skal have er ikke noget, der tjekker, om man kommer fra den rigtige side (hvis jeg forstår dig ret).. det du vil have er, at formen bliver validere... der kan være, at feltet skal indeholde kun tal, eller have en bestemt længde.. kan du ikke skrive et eksempel, så det er nemmere at forstå??
Avatar billede skg Nybegynder
21. marts 2004 - 22:13 #10
ja, jeg kan jo have været for hurtig med at skrive min lille kode ( jeg sidder ikke lige et sted hvor jeg kan teste det ).

Du kan jo prøve at skrive værdien af Request.ServerVariables("HTTP_REFERER") ud og se om den er som den skal.
Avatar billede skg Nybegynder
21. marts 2004 - 22:15 #11
denne linie er forkert :
If Not Request.ServerVariables("HTTP_REFERER") = "kontakt-formular.html" Then

Request.ServerVariables("HTTP_REFERER") vil ALDRIG kun være ligmed et filnavn, du skal skrive hele URL'en til siden.
Avatar billede macho Praktikant
21. marts 2004 - 22:15 #12
kvadratrodenaf1: Nej, jeg kan sagtens lave en simpel validering af indholdet fra felterne af form-mailen. Så jo, man SKAL komme fra en bestemt side, før mailen bliver sendt afsted - det er det, der er meningen med mit spørgsmål!

mvh
Avatar billede Slettet bruger
21. marts 2004 - 22:17 #13
fair nok.. så skal jeg ikke komme med flere dumme svar i denne tråd :D..
Avatar billede macho Praktikant
21. marts 2004 - 22:19 #14
kvadratrodenaf1: Det er da helt i orden - bedre med nogle forsøg og hjælpsomme folk, end at man bliver ladt i stikken :-)
Avatar billede skg Nybegynder
21. marts 2004 - 22:25 #15
macho : fandt du ud af det ?
Avatar billede macho Praktikant
21. marts 2004 - 22:28 #16
Nej, uanset jeg skriver den fulde sti til dokumentet eller ej, så kommer jeg frem til "fejl.html". Ka' sgutte hitte ud af det! :-(
Avatar billede skg Nybegynder
21. marts 2004 - 22:29 #17
prøv evt. at sætte LCase( ) uden om de to udtryk

og prøv allerførst at checke om Request.ServerVariables("HTTP_REFERER") overhovedet er sat til noget - der er nogle browsere der ikke sender den med desværre...
Avatar billede macho Praktikant
21. marts 2004 - 22:32 #18
skg: Jeg må jo hellere lige understrege at jeg ikke er nogen ørn til asp (helt ny), derfor ved jeg ikke lige hvordan jeg skal bruge dit svar! Hvad mener du med "LCase()"?
Men jeg kan da fortælle, at jeg tester på MS IE6, og den sender vel http_referer med?

mvh
Avatar billede skg Nybegynder
21. marts 2004 - 22:38 #19
har du prøvet at skrive værdien af Request.ServerVariables("HTTP_REFERER") ud ?

og set hvad den bliver ?


med LCase mente jeg

If Not LCase( Request.ServerVariables("HTTP_REFERER") ) = LCase( "http://www.dinside.dk/siden" ) Then ...
Avatar billede macho Praktikant
21. marts 2004 - 22:45 #20
skg: Hvordan skriver jeg værdien af Request.ServerVariables("HTTP_REFERER") ud?

(jeg sidder og bliver helt flov over så dårlig jeg er til ASP).
Avatar billede Slettet bruger
21. marts 2004 - 22:52 #21
response.write Request.ServerVariables("HTTP_REFERER")
Avatar billede macho Praktikant
21. marts 2004 - 23:00 #22
Jeg får absolut intet frem, når jeg skriver
response.write Request.ServerVariables("HTTP_REFERER")

?
Avatar billede skg Nybegynder
21. marts 2004 - 23:38 #23
jeg har lige prøvet at lave denne test med to sider ens html-sider og en ASP-side, og må sige det virker helt fint her hos mig:

page.htm:
---
<html>
    <body>
        <form action="check.asp" method="post"><input type="submit" /></form>
    </body>
</html>
---
page2.htm:
---
<html>
    <body>
        <form action="check.asp" method="post"><input type="submit" /></form>
    </body>
</html>
---


check.asp:
---
<% If Not LCase( Request.ServerVariables( "HTTP_REFERER" ) )= LCase( "http://localhost/_MiscTestFolder/RefCheck/page.htm" ) Then
    Response.Redirect( "page.htm?fejl=1" )
    Response.End
End IF %>
<html>
    <body>
        Den er fin : <% = Request.ServerVariables( "HTTP_REFERER" ) %>
        <p><a href="page.htm">back</a>
    </body>
</html>
---

Jeg starter på page.htm ( http://localhost/_MiscTestFolder/RefCheck/page.htm ) og trykker på knappen, og ryger derefter over på check.asp hvor der står "Den er fin". Starter jeg på page2.htm ( http://localhost/_MiscTestFolder/RefCheck/page2.htm ) og trykker på knappen, bliver jeg sendt til http://localhost/_MiscTestFolder/RefCheck/page.htm?fejl=1
Avatar billede macho Praktikant
21. marts 2004 - 23:52 #24
Et eller andet sted må det så nok være på serveren (Cliche) den er gal. Jeg har prøvet lige nøjagtig sådan som du gør i dit eksempel, men desværre stadig uden held. Jeg får stadig heller ikke noget frem på siden, hvis jeg skriver dette:
<html>
    <body>
        Den er fin : <% = Request.ServerVariables( "HTTP_REFERER" ) %>
        <p><a href="page.htm">back</a>
    </body>
</html>

Altså intet ved HTTP_REFERER

:-(
Avatar billede macho Praktikant
21. marts 2004 - 23:53 #25
Jeg vil så gerne give dig nogle points, da jeg jo er sikker på, at det virker hos dig, men det virker jo stadig ikke her - beklager!
Avatar billede skg Nybegynder
22. marts 2004 - 00:21 #26
du kan jo gøre det på en lidt anden måde:

På din formular side ( som du laver om til en ASP side ), sætter du en Session variabel, f.eks:

<% Session("CanSendFormular") = True %>

I stedet for at checke Request.ServerVariables( "HTTP_REFERER" ) checker du Session("CanSendFormular") - både om den er sat, og om den er sand :


If IsEmpty( Session("CanSendFormular") ) Or Session("CanSendFormular") <> True ) Then
  Response.Redirect( "fejl.html" )
  Response.End
Else
  ' Husk at slette Session variablen
  ' så man ikke kan reloade siden
  Session("CanSendFormular") = False
End If


ps. Det er dælme ved at være længe siden jeg har rodet med VBScript :-P
Avatar billede skg Nybegynder
22. marts 2004 - 00:22 #27
der mangler en ( et sted, men det finder du jo nok ud af :-)
Avatar billede Slettet bruger
22. marts 2004 - 16:30 #28
skg>> så er der det problem, at man kan gå ind på siden og få oprettet sessionnen, for så bagefter at gå ind på en form, man selv har lavet på sin egen computer, og så sende indhold fra den side..

formular.asp --> opretter session --> egen side, som ligger lokalt på end egen computeren --> submit til kontakt-formular.asp --> godkendelse pga. tidligere oprettet session.
Avatar billede skg Nybegynder
22. marts 2004 - 16:42 #29
I know, men hvem ved det er sådan det fungerer ?

Hvis man skal beskytte sig 112%, med den gode værkstedshumor, så skal man jo lave et kæmpe system som holder styr på hvor alle requests kommer fra, og checke om de kommer de rigtige steder fra osv osv osv.

Så længe man validerer sit input sker der jo ikke så store fejl ?!?!
Avatar billede Slettet bruger
22. marts 2004 - 16:48 #30
nej.. mener jeg heller ikke.. hvis det ikke er for svært at forklare, ville det da være spændende at høre, hvad det skal bruges til..
Avatar billede macho Praktikant
22. marts 2004 - 16:53 #31
Jeg kan skam godt forklare, hvorfor jeg ønsker en sådan funktion:
Såsnart man kommer ind på denne ASP-side, hvor formularen bliver behandlet, vil der blive afsendt en e-mail, uanset der er indtastet noget fra formularen eller ej. Hvis nu ASP-siden bliver fanget af en søgemaskine og man klikker ind på den, vil der altså blive afsendt en tom e-mail, hvilket jeg bestemt ikke ønsker!
Desværre kan jeg stadig ikke få noget af det til at virke, hverken HTTP_REFERER eller "Session". :-(

mvh
Avatar billede Slettet bruger
22. marts 2004 - 16:56 #32
hmm.. hos hvem har du din side liggende??
Avatar billede skg Nybegynder
22. marts 2004 - 16:59 #33
hvorfor ikke bare sætte et hidden felt i formen og så checke på om det er sendt med ?

<input type="hidden" name="skalJegSendeDenMail" value="1" />



og så checker du bare bare om Request.Form( "skalJegSendeDenMail" ) er lig med "1"
Avatar billede macho Praktikant
22. marts 2004 - 19:14 #34
kvadratrodenaf1: Siden ligger hos Cliche...

skg: Jeg vil prøve dit forslag i morgen, når jeg kommer hjem fra arbejde!
Avatar billede macho Praktikant
21. december 2005 - 02:40 #35
Lukker
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