/ 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
Inputvalidering
Fra : Erik Ginnerskov


Dato : 18-11-04 22:09

Hej NG

Jeg har fået strikket en bestillingsformular sammen og har også opnået, at
man således kan sende en mail med bestillingen til en forud defineret
modtager.

Men asp-scriptet har en alvorlig mangel, som jeg ikke kan finde ud af at
afhjælpe: Scriptet fanger ikke manglende indtastninger/select-valg. Det
skulle gerne ende med, at hvis obligatoriske data ikke er blevet
indtastet/valgt, sendes ikke nogen mail, men i stedet vise i browseren en
relevant fejlmeddelelse.

Scriptet består af følgende elementer:
________

Dim variabler
__

En blok sætninger, der opsamler data fra formularen og fylder variablerne op
med disse data.
__

En blok sætninger, der definerer mail-header.
__

En bok, der definerer mail-server
__

Definition af mail-body
__

Definion af svarudskrift til skærm.
________

Jeg har så senest (andre forslag virkede heller ikke efter hensigten)
forsøgt mig med dette:

Øverst i dataopsamlingen har jeg indsat en sætning, der skal sikre, at
errMsg er tom fra starten:

errMsg = ""

Hver sætning i dataopsamlingen har jeg pakket ind i en funktion, der skal
validere, om der er sket et input:

function validate()
name = (request("navn"))
if name ="" then
errMsg = errMsg & "Du skal indtaste dit navn."
end if
end function

Efter dataopsamlingen har jeg indskudt en blok, der skal afgøre, om mailen
skal sendes eller der skal udskrives en fejlmeddelelse til skærm:

function sendmail()
end function

if not errMsg = "" then
sendmail
else Response.write "<p>" & errMsg & "</p>"
end if

Men mailen bliver under alle omstændigheder sendt (uanset manglende data) og
den normale svarudskrift (skal kun vises, når mailen er sendt) til skærm
vises. Den forventede fejlmeddelelse udskrives derimod ikke.

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



 
 
Jens Gyldenkærne Cla~ (18-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 18-11-04 22:56

Erik Ginnerskov skrev:

> function validate()
> name = (request("navn"))
> if name ="" then
> errMsg = errMsg & "Du skal indtaste dit navn."
> end if
> end function

Hvor og hvordan kalder du din valideringsfunktion?

Bruger du option explicit? (se hvad det er og hvorfor det er smart
her: <http://asp-faq.dk/article/?id=9>)

Hvis ja, hvor definerer du så name - og bliver den variabel
påvirket fra andre kodelinjer?


> function sendmail()
> end function

De to linjer her gør ikke ret meget (men du har måske bare udeladt
indholdet her?)


> if not errMsg = "" then
> sendmail
> else Response.write "<p>" & errMsg & "</p>"
> end if

Prøv at sætte udskriften af errMsg ind lige før if-sætningen - for
at tjekke om der rent faktisk står noget i den.

Hvis der gør, kan du prøve at skrive

       if errMsg <> "" then
--
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-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 19-11-04 14:34

"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev

>> function validate()
>> name = (request("navn"))
>> if name ="" then
>> errMsg = errMsg & "Du skal indtaste dit navn."
>> end if
>> end function
>
> Hvor og hvordan kalder du din valideringsfunktion?

Som jeg tidligere skrev: Det er lagt 'rundt om' den sætning, der henter
værdien 'navn' fra formularen til variablen 'name'.

> Bruger du option explicit?

Ja, det står øverst i asp-scriptet:

<%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>

> hvor definerer du så name - og bliver den variabel
> påvirket fra andre kodelinjer?

dim errMsg, name, adr, tlf, mail, .....

Det skulle ikke gerne påvirkes af andet. Når feltet 'navn' i formularen er
udfyldt, kommer dette indhold da også med i den mail, der sendes.

>> function sendmail()
>> end function
>
> De to linjer her gør ikke ret meget (men du har måske bare udeladt
> indholdet her?)

Det er indsat sådan, gik ud fra, at en funktion skal erklæres, før den kan
bruges.

>> if not errMsg = "" then
>> sendmail
>> else Response.write "<p>" & errMsg & "</p>"
>> end if
>
> Prøv at sætte udskriften af errMsg ind lige før if-sætningen - for
> at tjekke om der rent faktisk står noget i den.
>
> Hvis der gør, kan du prøve at skrive
>
> if errMsg <> "" then

Kigger jeg på, når jeg kommer hjem.

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



Jens Gyldenkærne Cla~ (19-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 19-11-04 14:57

Erik Ginnerskov skrev:

>> Hvor og hvordan kalder du din valideringsfunktion?
>
> Som jeg tidligere skrev: Det er lagt 'rundt om' den sætning, der henter
> værdien 'navn' fra formularen til variablen 'name'.

Det forstår jeg ikke? Hvis du bare har omkredset dit request af navn med
en funktion, og ikke kalder den noget sted fra, så vil navn aldrig blive
requestet.

Hvis du kalder validate() et sted fra, må du gerne vise hvordan det
foregår.

NB: Validate kan nemt laves generel - fx som her:


Function Validate(what)
   Dim tmp
   tmp = Request.Form(what) & ""
   If tmp = "" Then
      errMsg = errMsg & "Du skal indtaste " & what
   End If
   Validate = tmp
End Function


--
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 (20-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 20-11-04 19:34

Jens Gyldenkærne Clausen wrote:

> Det forstår jeg ikke? Hvis du bare har omkredset dit request af navn
> med en funktion, og ikke kalder den noget sted fra, så vil navn
> aldrig blive requestet.

det opdagede jeg også og fjernede den del af koden igen.

> Hvis du kalder validate() et sted fra, må du gerne vise hvordan det
> foregår.
> NB: Validate kan nemt laves generel - fx som her:
>
> Function Validate(what)
> Dim tmp
> tmp = Request.Form(what) & ""
> If tmp = "" Then
> errMsg = errMsg & "Du skal indtaste " & what
> End If
> Validate = tmp
> End Function

Jeg har nu forsøgt med dette. Det fanger heller ikke fejl. Mail med
mangelfulde olysninger bliver afsendt alligevel.

http://hjemmesideskolen.dk/test/visitkort.asp
http://hjemmesideskolen.dk/test/mail_sender.asp

Prøv selv at sende en 'bestilling' uden en af de obligatoriske data. Du får
selv tilsendt en kopi af bestillingen til den email-adresse, du angiver i
formularen.

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



Jens Gyldenkærne Cla~ (27-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 27-11-04 09:41

Erik Ginnerskov skrev:

>> http://www.asp101.com/articles/hojjat/formvalidation/default.a
>> sp

> Jeg kan ikke se, hvor man skal definere mail-server eller
> modtager. Det kan jeg ikke umiddelbart bruge.

Linket viser *kun* hvordan man kan validere. Du skal selv tilføje
den handling (fx mailafsendelse) der skal ske hvis valideringen går
godt. Det skal ned efter kaldet til validate, og man skal tilføje
et tjek på om valideringen er gået godt (fx If badItem = -1 '
O.k.).

Jeg har ikke haft tid til at kigge på din omskrevne kode endnu.
--
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

Jens Gyldenkærne Cla~ (20-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 20-11-04 22:55

Erik Ginnerskov skrev:

> Jeg har nu forsøgt med dette. Det fanger heller ikke fejl.

Hvordan kalder du funktionen? Jeg er stadig lidt i tvivl om
hvorvidt du har forstået hvordan man bruger procedurer (sub) og
funktioner i asp.

Giv evt. et link til en tekstudgave af mail_sender.asp


Man behøver ikke at bruge funktioner/procedurer i asp. En simpel
måde at lave din validering på (uden funktionskald) kunne være
følgende:

<%
Dim navn, titel, afdeling, ...
Dim errMsg
Const returPage = "visitkort.asp?fejl="

navn = Request.Form("navn")
If navn = "" Then
   response.redirect returpage & Server.URLencode("Udfyld navn")
End If

titel = Request.Form("titel")
If titel = "" Then
   response.redirect returpage & Server.URLencode("Udfyld titel")
End If

....

%>

Ved brug af funktioner eller procedurer, kan koden blive noget mere
overskuelig - men det kan stadig fungere fint uden.
--
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 (21-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 21-11-04 01:22

Jens Gyldenkærne Clausen wrote:
> Erik Ginnerskov skrev:
>
>> Jeg har nu forsøgt med dette. Det fanger heller ikke fejl.
>
> Hvordan kalder du funktionen? Jeg er stadig lidt i tvivl om
> hvorvidt du har forstået hvordan man bruger procedurer (sub) og
> funktioner i asp.

Det har jeg højest sandsynligt ikke ;)

> Giv evt. et link til en tekstudgave af mail_sender.asp

Ups, linkfejl. Det rigtige er:

http://hjemmesideskolen.dk/test/mail_sender.html

> Man behøver ikke at bruge funktioner/procedurer i asp. En simpel
> måde at lave din validering på (uden funktionskald) kunne være
> følgende:
>
> <%
> Dim navn, titel, afdeling, ...
> Dim errMsg
> ...
> ...

Det kigger jeg på i morgen (søndag). Nu er det blevet for sent.

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



Erik Ginnerskov (21-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 21-11-04 18:08

Jens Gyldenkærne Clausen wrote:

> <%
> Dim navn, titel, afdeling, ...
> Dim errMsg
> Const returPage = "visitkort.asp?fejl="
>
> navn = Request.Form("navn")
> If navn = "" Then
> response.redirect returpage & Server.URLencode("Du skal udfylde Navn")
> End If
>
> titel = Request.Form("titel")
> If titel = "" Then
> response.redirect returpage & Server.URLencode("Du skal udfylde
Titel")
> End If

Det har jeg nu prøvet. Uanset, om jeg udfylder jeg alt eller springer en
vilkårlig af de to første inputfelter, sendes jeg bare retur til en tom
formular, hvor der i browserens adresselinje står:


http://www.hjemmesideskolen.dk/test/visitkort.asp?fejl=Du+skal+udfylde+Navn

.... altså samme fejlmelding i alle tilfælde.

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



Jens Gyldenkærne Cla~ (21-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 21-11-04 21:48

Erik Ginnerskov skrev:

> http://hjemmesideskolen.dk/test/mail_sender.html

O.k. - det er meget fint sat op, men måske vil det være lettere
lige nu bare at have hele asp-filen som et tekstlink.

Et par kommentarer kan du dog godt få ud fra de kodestumper man kan
se på linket herover.

På visitkort.asp tjekker du variablen errMsg - men du skriver ikke
noget om hvordan du putter noget i den. Almindelige asp-variable
kan ikke bruges på flere sider - med andre ord: de informationer du
lægger i errMsg på siden mail_sender.asp kan *ikke* automatisk
læses på siden visitkort.asp.

Man kan bruge en session-variabel til at gøre en oplysning sat på
én side tilgængelig på andre sider. Det står der lidt om her:
<http://html.dk/tutorials/asp/lektion12.asp>.

En anden mulighed er bare at bruge querystring til at overføre
værdier - det gør du i valideringen af navn og titel:

******
Const returPage = "visitkort.asp?fejl="

errMsg = "" 'variablen errMsg nulstilles

name = Request.Form("navn")
If navn = "" Then
response.redirect returpage & Server.URLencode("Du skal udfylde
Navn")
End If

******

Allerførst - er du _helt_ sikker på at du bruger Option Explicit?
Dit tjek på navn virker ikke efter hensigten fordi du gemmer
formelementet navn i variablen name, men derefter tjekker om
variablen navn er tom. Hvis du ikke får en fejl, og stadig benytter
option explicit, så må du have erklæret såvel en navn- som en name-
variabel.

Hvis du retter name til navn eller omvendt, vil tjekket af navnet
fungere efter hensigten - dvs. at hvis Request.Form("navn") er tom,
sendes man videre til visitkort.asp?fejl=Du skal udfylde Navn",
ellers fortsætter man bare.

På visitkort.asp kan du så lave en linje a la:

errMsg = Request.querystring("fejl")
- og have den lige før det tjek af errMsg du har angivet i første
kodestump.


[set msg = Server.CreateOBject( "JMail.Message" )]

En sidekommentar, hvis din kode er til en hjemmesideskoleside (som
den ser ud til at være), vil jeg foreslå dig at bruge et par linjer
på at forklare hvilke mailkomponenter man kan bruge, og evt. vise
eksempler på et par af de mest almindelige. JMail er en rigtig god
komponent, men det er ikke alle steder den er installeret - en mere
generel løsning kan laves med CDO eller evt. CDONTS (CDO er den
nyeste standardinstallerede udgave på IIS).

**********
function sendmail()
end function

if not errMsg = "" then
sendmail
else Response.write "<p>" & errMsg & "</p>"
Response.write "<p>Retur til <a class='tlink' href='#'
onclick='javascript: history.go(-1)'>formularen</a></p>"
end if
**********


Herover er et andet problem. Du laver et tjek på om errMsg er tom
og kalder så funktionen sendmail - men den funktion er tom og gør
intet. Senere i koden kommer de linjer der sender mailen - men
eftersom de hverken ligger i sendmail-funktionen eller i if-blokken
vedr. errMsg, så vil de altid blive kørt.

Så vidt jeg kan se har du i øvrigt vendt logikken i if-løkken
forkert - hvis errMsg er tom skal mailen sendes og der skal ikke
udskrives en fejlmeddelelse, men dit "not" får byttet om på det.
--
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 (21-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 21-11-04 22:50

Jens Gyldenkærne Clausen wrote:

> Allerførst - er du _helt_ sikker på at du bruger Option Explicit?

Helt 100:

http://hjemmesideskolen.dk/test/mail_sender.txt


> Dit tjek på navn virker ikke efter hensigten fordi du gemmer
> formelementet navn i variablen name, men derefter tjekker om
> variablen navn er tom. Hvis du ikke får en fejl, og stadig benytter
> option explicit, så må du have erklæret såvel en navn- som en name-
> variabel.

Det var der, hunden lå begravet. Nu kan den fange, om første eller andet
input er tomt. Så skal jeg bare have lavet det samme om de andre
test-inputs - samt have fundet ud af at lave noget tilsvarende for de to
valgbokse.

> En sidekommentar, hvis din kode er til en hjemmesideskoleside (som
> den ser ud til at være),

det startede som et request fra en klient. Men vedkommende valgte i stedet
at anvende noget SharePoint. Nu ville jeg bare have det til at virke
alligevel.

> vil jeg foreslå dig at bruge et par linjer
> på at forklare hvilke mailkomponenter man kan bruge, og evt. vise
> eksempler på et par af de mest almindelige. JMail er en rigtig god
> komponent, men det er ikke alle steder den er installeret - en mere
> generel løsning kan laves med CDO eller evt. CDONTS (CDO er den
> nyeste standardinstallerede udgave på IIS).

Det har jeg ikke for 25 øre forstand på ;(
Det kniber rigeligt med at få dette til at virke.

> **********
> function sendmail()
> end function
>
> if not errMsg = "" then
> sendmail
> else Response.write "<p>" & errMsg & "</p>"
> Response.write "<p>Retur til <a class='tlink' href='#'
> onclick='javascript: history.go(-1)'>formularen</a></p>"
> end if
> **********

> Herover er et andet problem. Du laver et tjek på om errMsg er tom
> og kalder så funktionen sendmail - men den funktion er tom og gør
> intet. Senere i koden kommer de linjer der sender mailen - men
> eftersom de hverken ligger i sendmail-funktionen eller i if-blokken
> vedr. errMsg, så vil de altid blive kørt.

Nej, hvis der mangler et obligatorisk input (er foreløbig kun implementeret
på de to først) sendes der ingen mail. Man sendes bare retur til
formularen - med den ønskede fejlmelidng i browserens adresselinje (havde nu
foretrukket, at den kom i viewporten).

> Så vidt jeg kan se har du i øvrigt vendt logikken i if-løkken
> forkert - hvis errMsg er tom skal mailen sendes og der skal ikke
> udskrives en fejlmeddelelse, men dit "not" får byttet om på det.

Det har du vist ret i. det kigger jeg lige på.

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



Jens Gyldenkærne Cla~ (21-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 21-11-04 21:52

Erik Ginnerskov skrev:

>> navn = Request.Form("navn")
>> If navn = "" Then

> Det har jeg nu prøvet.

Tjek de to linjer jeg har dobbeltciteret øverst i dette indlæg. Du
har name i den første ifølge
<http://hjemmesideskolen.dk/test/mail_sender.html>.

Giv gerne et link til en "ren" tekstversion af din asp-side (man
kan let glemme en rettelse når det lægges over i et dokument der
også skal redigeres).

Se også mit andet indlæg fra i aften.
--
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

Jens Gyldenkærne Cla~ (21-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 21-11-04 23:26

Erik Ginnerskov skrev:

>> Allerførst - er du _helt_ sikker på at du bruger Option
>> Explicit?
>
> Helt 100:
>
> http://hjemmesideskolen.dk/test/mail_sender.txt

O.k. - men jeg kan se at du så både "dimmer" navn og name. Jeg vil
foreslå dig at slette navn (det ser ikke ud til at du bruger den
mere).


[om forklaringer til andre mailkomponenter]

> Det har jeg ikke for 25 øre forstand på ;(
> Det kniber rigeligt med at få dette til at virke.

O.k. - lad os få eksemplet til at virke med Jmail først. Jeg vil
gerne komme med et CDO-eksempel når du har Jmail-delen på plads.



> Nej, hvis der mangler et obligatorisk input (er foreløbig kun
> implementeret på de to først) sendes der ingen mail.

Det er jeg klar over. Men du har stadig noget kode som ikke rigtig
giver mening - nemlig de linjer jeg henviste til.

Hvis du fortsætter med den valideringstype vi har fået til at virke
på de to første felter, behøver du ikke noget tjek på errMsg. Men
så vil jeg foreslå dig at slette sendmail-funktionen og if-løkken.
--
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 (23-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 23-11-04 00:29

Jens Gyldenkærne Clausen wrote:

> O.k. - men jeg kan se at du så både "dimmer" navn og name. Jeg vil
> foreslå dig at slette navn (det ser ikke ud til at du bruger den
> mere).

Er slettet nu (navn)

> O.k. - lad os få eksemplet til at virke med Jmail først. Jeg vil
> gerne komme med et CDO-eksempel når du har Jmail-delen på plads.

Nu har jeg fået det til at fange alle mulige mangler (de 6 definerede
obligatoriske). Mailen bliver ikke afsendt, hvis en af dem mangler. Er alle
obligatoriske felter udfyldt, sendes mailen.

> Hvis du fortsætter med den valideringstype vi har fået til at virke
> på de to første felter, behøver du ikke noget tjek på errMsg. Men
> så vil jeg foreslå dig at slette sendmail-funktionen og if-løkken.

Det har jeg prøvet at disable med en ' først i hver sætning. Det fungerer
alligevel, så det kan altså uden problemer slettes helt.

Nu kunne jeg bare godt tænke mig, at det hele blev lavet om sådan, at
fejlmeldingen blev udskrevet på siden i stedet for i adresselinjen. Jeg er
ikke sikker på, at brugerne ser det der oppe. Hvis det udskrives på siden
med rød tekst, kan man ikke undgåat se, hvorfor mailen ikke blev sendt - det
røde finder jeg selv ud af, når udskriften virker.

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



Jens Gyldenkærne Cla~ (23-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-11-04 10:57

Erik Ginnerskov skrev:

> Nu kunne jeg bare godt tænke mig, at det hele blev lavet om sådan, at
> fejlmeldingen blev udskrevet på siden i stedet for i adresselinjen.

Dim fejl
fejl = Request.Querystring("fejl")

If fejl <> "" Then
   Response.write "<p class=""fejl"">" & fejl & "</p>"
End If

--
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 (23-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 23-11-04 18:14

Jens Gyldenkærne Clausen wrote:

>> Nu kunne jeg bare godt tænke mig, at det hele blev lavet om sådan, at
>> fejlmeldingen blev udskrevet på siden i stedet for i adresselinjen.
>
> Dim fejl
> fejl = Request.Querystring("fejl")
>
> If fejl <> "" Then
> Response.write "<p class=""fejl"">" & fejl & "</p>"
> End If

Det har jeg nu forsøgt med første input. Så fanger det ikke længere
manglende input der. Mailen bliver sendt trods manglende input :(

http://hjemmesideskolen.dk/test/visitkort.asp
http://hjemmesideskolen.dk/test/mail_sender.html
http://hjemmesideskolen.dk/test/mail_sender.txt

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



Jens Gyldenkærne Cla~ (23-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-11-04 21:38

Erik Ginnerskov skrev:

>> If fejl <> "" Then
>> Response.write "<p class=""fejl"">" & fejl & "</p>"
>> End If
>
> Det har jeg nu forsøgt med første input.

Nej - koden herover skal placeres på visitkort.asp, ikke på
mailsender.asp.

Request.Querystring læser fra querystring-objektet - det vil sige
det der står efter ?-tegnet i en adresse.

Din valideringsfunktion virker ved at sende brugeren videre
(response.redirect) til en side der kan vise fejlen (returPage).
Som parameter til returPage angives en fejlmeddelelse. Den kan asp-
koden på returPage (altså visitkort.asp) aflæse ved at lave et
request på den querystringparameter du har sat fra
valideringssiden.

Du skriver nu:

If name = "" Then
fejl = Request.Querystring("Du skal skrive dit navn")

- men det giver ikke mening. Request betyder "hent noget" og i
linjen herover beder du asp om at hente værdien af parameteren "Du
skal skrive dit navn" fra querystring og lægge den over i variablen
fejl.
Du skal den modsatte vej - læg teksten "Du skal skrive dit navn"
ind i variablen fejl, og lav redirect til returPage &
Server.URLencode(fejl).
--
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 (24-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 24-11-04 21:50

Jens Gyldenkærne Clausen wrote:

> Nej - koden herover skal placeres på visitkort.asp, ikke på
> mailsender.asp.
>
> Request.Querystring læser fra querystring-objektet - det vil sige
> det der står efter ?-tegnet i en adresse.

Nåsådan. Nu spiller musikken. Takker mange gange.

http://hjemmesideskolen.dk/test/visitkort.asp - der er link til kodevisning
i sidens menu.

Så er jeg lige kommet på et tillægsspørgsmål: Kan man definere en
formatering af telefonnumrene, så de altid er opdelt i fire grupper á to
cifre i den mail, der afsendes, uanset om brugeren skriver dem sådan eller
bare i en lang streng af tal - eller for den sags skyld på en helt tredje
måde?

Du snakkede også om en anden måde at sende mailen på end Jmail.

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



Jens Gyldenkærne Cla~ (25-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-11-04 00:06

Erik Ginnerskov skrev:

> Så er jeg lige kommet på et tillægsspørgsmål: Kan man definere
> en formatering af telefonnumrene, så de altid er opdelt i fire
> grupper á to cifre i den mail,

Jo da. En simpel mulighed er bare at bruge replace og left/right:

Function FormatTelefon(nr)
   Dim num
   num = Replace(nr, " ", "")
   IF len(num) = 8 Then
      FormatTelefon = left(num, 4) & " " & right(num, 4)
   Else
      FormatTelefon = nr
   End IF
End Function

Man kan lave mere avancerede udgaver med regex.


> Du snakkede også om en anden måde at sende mailen på end
> Jmail.

Ja. Jeg har ikke lige koden ved hånden nu, men jeg vil prøve at
finde noget frem i morgen (øh - senere i dag).
--
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 (25-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 25-11-04 14:18

Jens Gyldenkærne Clausen wrote:

>> Så er jeg lige kommet på et tillægsspørgsmål: Kan man definere
>> en formatering af telefonnumrene, så de altid er opdelt i fire
>> grupper á to cifre i den mail,

> Function FormatTelefon(nr)
> Dim num
> num = Replace(nr, " ", "")

Her forstår jeg, at alle forekomster af mellemrum i brugerindtastning
fjernes, hvilket sevlfølgelig er nødvendigt, for at fange eventuelle
indtastninger i formatet "xx xxx xxx", som man ser nogle er begyndt at
praktisere.

> IF len(num) = 8 Then
> FormatTelefon = left(num, 4) & " " & right(num, 4)

Det ser ud som om, du her vil opdele telefonnummeret i to blokke á fire
cifre = "xxxx xxxx". Det skulle være fire blokke á to cifre = "xx xx xx xx".

> Else
> FormatTelefon = nr
> End IF
> End Function

Kunne man eventuelt tilføje noget i denne retning:

num = replace(nr, "+45", "")

.... og derved undgå 'dobbeltkonfekt', hvis brugeren indtaster landekode -
den bliver i forvejen tilføjet af aspscriptet ved formatering til mail.

Og hvor i hvilket dokument skal det hele så sættes ind?

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



terje (25-11-2004)
Kommentar
Fra : terje


Dato : 25-11-04 14:56

Erik Ginnerskov wrote:

> Det ser ud som om, du her vil opdele telefonnummeret i to blokke á fire
> cifre = "xxxx xxxx". Det skulle være fire blokke á to cifre = "xx xx xx xx".


> Kunne man eventuelt tilføje noget i denne retning:
>
> num = replace(nr, "+45", "")
>
> ... og derved undgå 'dobbeltkonfekt', hvis brugeren indtaster landekode -
> den bliver i forvejen tilføjet af aspscriptet ved formatering til mail.

Function FormatTelefonnummer(sNr)
On Error Resume Next

   Dim i
   Dim sOut

   sNr = Replace(Replace(sNr, " ", ""), "+45", "")

   If Len(sNr) <> 8 Then Exit Function

   For i = 1 To 8
    sOut = (sOut & Mid(sNr, i, 2) & " ")
      i = i + 1
   Next

FormatTelefonnummer = sOut

End Function

terje?

terje (25-11-2004)
Kommentar
Fra : terje


Dato : 25-11-04 14:59

Eller enda bedre: FormatTelefonnummer = Mid(sOut, 1, 11)

terje

Erik Ginnerskov (25-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 25-11-04 16:33

terje wrote:

> Function FormatTelefonnummer(sNr)
> On Error Resume Next
>
> Dim i
> Dim sOut
>
> sNr = Replace(Replace(sNr, " ", ""), "+45", "")
>
> If Len(sNr) <> 8 Then Exit Function
>
> For i = 1 To 8
> sOut = (sOut & Mid(sNr, i, 2) & " ")
> i = i + 1
> Next
>
> FormatTelefonnummer = sOut
>
> End Function

Den ser lovende ud, men hvis den quitter ved for få eller for mange cifte,
skal der vel også genereres en fejlmelding, så brugeren kan se, hvad der er
galt.

Og som ved Jens' forslag: Hvor skal det skrives ind, dokument og sted (der
er tre telefonnummerfelter).

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



Jens Gyldenkærne Cla~ (25-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-11-04 15:01

Erik Ginnerskov skrev:

>> IF len(num) = 8 Then
>> FormatTelefon = left(num, 4) & " " & right(num, 4)
>
> Det ser ud som om, du her vil opdele telefonnummeret i to blokke á fire
> cifre = "xxxx xxxx". Det skulle være fire blokke á to cifre = "xx xx xx xx".

Ah - det er mig der ikke læser ordentligt.

Så skal man kigge på funktionen Mid() - hvis man da ikke bare laver
regex-løsningen...

> Kunne man eventuelt tilføje noget i denne retning:
>
> num = replace(nr, "+45", "")

Jo - men så er vi derhenne hvor regex er hurtigere og mere effektivt.
Her har du en køreklar funktion:

Function formatTelefon(nr)
Dim rgx, uddata
   ' Lav et regex-objekt   
   Set rgx = Server.createobject("VBScript.RegExp")

   ' Match evt. +45 og herefter op til 8 cifre med eller uden mellemrum.
   ' Parenteserne kan bruges til at referere til match når der skal
   ' erstattes
   ' - $1 henviser til første parentes (der matcher evt. dk-landekode)
   rgx.pattern = "(\(?\+45\)?)?\s*(\d{2})\s*(\d{2})\s*(\d{2})\s*(\d{2})"
   
   ' Erstat et match på inddata (nr) med grupperne $2 - $5
   formatTelefon = rgx.replace(nr, "$2 $3 $4 $5")
End Function

Funktionen kan afprøves her:
<http://www.gyros.dk/usenet/asp/formattekst.asp>

--
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 (25-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 25-11-04 16:28

Jens Gyldenkærne Clausen wrote:

>> Kunne man eventuelt tilføje noget i denne retning:
>>
>> num = replace(nr, "+45", "")
>
> Jo - men så er vi derhenne hvor regex er hurtigere og mere effektivt.

> Funktionen kan afprøves her:
> http://www.gyros.dk/usenet/asp/formattekst.asp

Den har jeg afprøvet.
1. hvis man indtaster +45xxxxxxxx outputtes xx xx xx xx (korrekt
formatering)
2. hvis man indtaster +45 xx xx xx xx outputtes xx xx xx xx (korrekt
formatering)
3. hvis man indtaster xxxxxxxx, outputtes xx xx xx xx (korrekt formatering)
4. hvis man indtaster xx xx xx xx, outputtes xx xx xx xx (korrekt
formatering)
men
5. hvis man indtaster +45 xx xxx xxx, outputtes +45 xx xxx xxx
(fejlformatering)
6. hvis man indtaster xx xxx xxx, outputtes xx xxx xxx (fejlformatering)

Der mangler en fjernelse af eventuelle mellemrum i indtastning af de sidste
8 cifre, for at kune få en korrekt formatering i de fire blokke á to cifre
under alle forhold.

Jeg kan heller ikke se, hvor det skal indsættes, for at få output korrekt i
mailen. Jeg formoder, at du har sat det under formularen i din demo, men jeg
skal jo ikke have det skrevet ud på en webside.

Desuden skal jeg eventuelt have hele tre forskellige telefonnumre kørt
gennem den funktion (eller den + to tilsvarende).

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



Jens Gyldenkærne Cla~ (25-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-11-04 21:58

Erik Ginnerskov skrev:

> Jeg kan heller ikke se, hvor det skal indsættes, for at få
> output korrekt i mailen. Jeg formoder, at du har sat det under
> formularen i din demo, men jeg skal jo ikke have det skrevet
> ud på en webside.

Det er en funktion, og som med alle andre funktioner kalder du den
når du har behov for det:

Dim body, telefon1, telefon2
telefon1 = Request.Form("telefon1")
telefon2 = Request.Form("telefon2")

body = "Her er dit 1. telefonnummer: " & FormatTelefon(telefon1)
body = body & vbCrLf & "Her er nr. 2: " & FormatTelefon(telefon2)


De funktioner du selv skriver er ikke anderledes end asp's
standardfunktioner mht. hvordan man kalder dem. Det vil sige at der
hvor du fx ville bruge Replace, Server.HTMlencode eller Left, kan
du også bruge en "hjemmestrikket" funktion.
--
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 (25-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 25-11-04 22:45

Jens Gyldenkærne Clausen wrote:

> Det er en funktion, og som med alle andre funktioner kalder du den
> når du har behov for det:
>
> Dim body, telefon1, telefon2
> telefon1 = Request.Form("telefon1")
> telefon2 = Request.Form("telefon2")
>
> body = "Her er dit 1. telefonnummer: " & FormatTelefon(telefon1)
> body = body & vbCrLf & "Her er nr. 2: " & FormatTelefon(telefon2)

<storsmiler>Så spiller det.</storsmiler>

Tak for hjælpen, Jens. Og også tak til Jeppe, der hjalp med første runde.

Det færdige kan ses på:

http://hjemmesideskolen.dk/test/mail_sender.txt

.... testes på:

http://hjemmesideskolen.dk/test.visitkort.asp

=> der sendes en mail bcc til den adresse, som indskrives i formularen.

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



Jens Gyldenkærne Cla~ (25-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-11-04 22:10

Erik Ginnerskov skrev:

> 5. hvis man indtaster +45 xx xxx xxx, outputtes +45 xx xxx xxx
> (fejlformatering)

Ah ja - regex'et læser i grupper af to cifre - hvis man grupperer
med tre, matcher det ikke.

Det kan rettes ved at behandle alle cifre enkeltvis. Det nye
pattern bliver:
rgx.pattern =
"(\(?\+45\)?)?\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(
\d)"

- og replace-kommandoen ser så ud som følger:
formatTelefon = rgx.replace(nr, "$2$3 $4$5 $6$7 $8$9")

Funktionen er opdateret på siden her:
<http://gyros.dk/usenet/asp/formattekst.asp>
--
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 (25-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 25-11-04 22:17

Jens Gyldenkærne Clausen wrote:

>> 5. hvis man indtaster +45 xx xxx xxx, outputtes +45 xx xxx xxx
>> (fejlformatering)
>
> Ah ja - regex'et læser i grupper af to cifre - hvis man grupperer
> med tre, matcher det ikke.

> rgx.pattern =
> "(\(?\+45\)?)?\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(
> \d)"
>
> - og replace-kommandoen ser så ud som følger:
> formatTelefon = rgx.replace(nr, "$2$3 $4$5 $6$7 $8$9")
>
> Funktionen er opdateret på siden her:
> <http://gyros.dk/usenet/asp/formattekst.asp>

Den virker helt rigtigt. Den må jeg prøve at sætte ind.

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



Jens Gyldenkærne Cla~ (25-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 25-11-04 23:33

Erik Ginnerskov skrev:

> http://hjemmesideskolen.dk/test.visitkort.asp

Mon ikke du mener:

<http://hjemmesideskolen.dk/test/visitkort.asp>

Siden ser fin ud, men jeg vil foreslå dig at lægge
javascriptvalidering ind også. Den nuværende løsning "taber"
indtastede oplysninger - det er lidt surt at skulle indtaste
værdier i 8 felter igen bare fordi man havde glemt felt nr. 9.

En anden mulighed er at bruge samme side (visitkort.asp) til form
og formhandler. Så kan du requeste alle værdier og skrive dem
tilbage i formen hvis valideringen fejler. I stedet for at
redirecte når der findes en fejl i valideringen, laver man så
redirect når valideringen går godt.

Sidst vil jeg lige nævne at man med asp.net kan lave formvalidering
mange gange lettere - der er indbyggede valideringskontroller som
man bare skal aktivere og konfigurere for et felt.
--
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 (26-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 26-11-04 01:04

Jens Gyldenkærne Clausen wrote:

> Mon ikke du mener:
>
> <http://hjemmesideskolen.dk/test/visitkort.asp>

Jo, selvfølgelig. Dum tastefejl.

> Siden ser fin ud, men jeg vil foreslå dig at lægge
> javascriptvalidering ind også. Den nuværende løsning "taber"
> indtastede oplysninger - det er lidt surt at skulle indtaste
> værdier i 8 felter igen bare fordi man havde glemt felt nr. 9.

Det har også irriteret mig, men jeg har en bakgearknap på min mus, så jeg
kan redde det den vej, men det er klart noget, der bør løses. Jeg har bare
ikke nogen ide om, hvordan det skal gøres.

> En anden mulighed er at bruge samme side (visitkort.asp) til form
> og formhandler. Så kan du requeste alle værdier og skrive dem
> tilbage i formen hvis valideringen fejler. I stedet for at
> redirecte når der findes en fejl i valideringen, laver man så
> redirect når valideringen går godt.

Det kan jeg ikke lige overskue, hvodan det skal splittes ad og samles igen.
Kan du give et hint om det?

> Sidst vil jeg lige nævne at man med asp.net kan lave formvalidering
> mange gange lettere - der er indbyggede valideringskontroller som
> man bare skal aktivere og konfigurere for et felt.

Jeg har hørt om asp.net, men jeg aner ikke, hvad det er for noget. Jeg kan
knap nok lave almindelig asp. Jeg skal bruge vinteren på at forsøge at lære
det og php (og javascript)

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



Erik Ginnerskov (26-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 26-11-04 01:05

Jens Gyldenkærne Clausen wrote:

> Mon ikke du mener:
>
> <http://hjemmesideskolen.dk/test/visitkort.asp>

Jo, selvfølgelig. Dum tastefejl.

> Siden ser fin ud, men jeg vil foreslå dig at lægge
> javascriptvalidering ind også. Den nuværende løsning "taber"
> indtastede oplysninger - det er lidt surt at skulle indtaste
> værdier i 8 felter igen bare fordi man havde glemt felt nr. 9.

Det har også irriteret mig, men jeg har en bakgearknap på min mus, så jeg
kan redde det den vej, men det er klart noget, der bør løses. Jeg har bare
ikke nogen ide om, hvordan det skal gøres.

> En anden mulighed er at bruge samme side (visitkort.asp) til form
> og formhandler. Så kan du requeste alle værdier og skrive dem
> tilbage i formen hvis valideringen fejler. I stedet for at
> redirecte når der findes en fejl i valideringen, laver man så
> redirect når valideringen går godt.

Det kan jeg ikke lige overskue, hvodan det skal splittes ad og samles igen.
Kan du give et hint om det?

> Sidst vil jeg lige nævne at man med asp.net kan lave formvalidering
> mange gange lettere - der er indbyggede valideringskontroller som
> man bare skal aktivere og konfigurere for et felt.

Jeg har hørt om asp.net, men jeg aner ikke, hvad det er for noget. Jeg kan
knap nok lave almindelig asp. Jeg skal bruge vinteren på at forsøge at lære
det og php (og javascript)

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




Jens Gyldenkærne Cla~ (26-11-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 26-11-04 11:05

Erik Ginnerskov skrev:

>> En anden mulighed er at bruge samme side (visitkort.asp) til form
>> og formhandler.

> Det kan jeg ikke lige overskue, hvodan det skal splittes ad og samles igen.
> Kan du give et hint om det?

1) Ret <form method="post" action="mail_sender.asp"> til
<form method="post" action="visitkort.asp">

2) Læg asp-koden fra mail_sender.asp over i visitkort.asp

3) Del asp-koden op i mindre moduler (funktioner og subs). Lav fx en
funktion der tager parametrene afsendernavn, afsenderadresse, emne og
broedtekst og sender en mail ud fra disse parametre. Lav et tjek på om
formen er submittet eller ej (request.Form.Count > 0) - hvis ja, skal
der valideres, ellers skal siden bare vises som første gang.

4) Ret valideringsfunktionerne så der ikke viderestilles, men der bare
sættes en fejlvariabel så mailen ikke sendes.

5) Lav et sidste tjek der kalder mailsend-funktionen og viderestiller
til en "tak for indtastningen"-side hvis der ikke er fejl.

Jeg fandt lige en side der viser en automatiseret validering af en form.
Det virker ret gennemarbejdet - dog kunne man godt udbygge det så det
kunne markere mere end ét fejlende felt ad gangen (som det er nu vil man
kun få besked om fejlen i ét felt, selv om der er fejl i flere).

Men metoden er smart fordi den undgår at bruge navne på formelementerne
(med undtagelse af definitioner på specialfelter) - og dermed hurtigt
kan implementeres på selv en stor form.

<http://www.asp101.com/articles/hojjat/formvalidation/default.asp>


> Jeg har hørt om asp.net, men jeg aner ikke, hvad det er for noget.

Det er afløseren til ASP - men på trods af navnesammenfaldet er det en
hel del anderledes, og langt langt stærkere end traditionel asp.


> Jeg kan knap nok lave almindelig asp.

Nu er du kommet i gang med asp - og jeg vil ikke anbefale at man prøver
at lære asp og asp.net på samme tid. Men hvis man ikke kender noget
specielt til nogen af sprogene, vil jeg mene at der er større
perspektiver i at begynde på asp.net end i at starte med asp. ASP.NET er
gratis at lægge på en Windows-server, så de fleste webhoteller der
udbyder (windowsbaseret) asp, vil også kunne tilbyde asp.net.

Hvis man fortrinsvis skal skrive nye sider, vil jeg afgjort mene at
asp.net er det bedste valg. Hvis man derimod skal vedligeholde gamle
sites baseret på asp, kan man ikke klare sig alene med viden om asp.net.

Et lille nb: Serverkontrollerne i asp.net - der generelt gør det meget
lettere at være webdesigner - spytter desværre en del ikke-valid kode ud
som standard. Man kan omgå en del af det, men det spiser lidt af de
fordele der ellers er ved serverkontroller. Det skulle dog blive markant
bedre når ASP.NET 2.0 bliver frigivet - her er der bl.a. lagt vægt på at
koden skal kunne validere og overholde handicapstandarden Section 508
"out of the box". ASP.NET 2.0 er i offentlig beta nu og bliver
forhåbentlig frigivet i løbet af 2005.

--
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 (26-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 26-11-04 22:26

Jens Gyldenkærne Clausen wrote:


> 1) Ret <form method="post" action="mail_sender.asp"> til
> <form method="post" action="visitkort.asp">

Gjort

> 2) Læg asp-koden fra mail_sender.asp over i visitkort.asp

Gjort

> 3) Del asp-koden op i mindre moduler (funktioner og subs). Lav fx en
> funktion der tager parametrene afsendernavn, afsenderadresse, emne og
> broedtekst og sender en mail ud fra disse parametre. Lav et tjek på om
> formen er submittet eller ej (request.Form.Count > 0) - hvis ja, skal
> der valideres, ellers skal siden bare vises som første gang.

Gjort?

> 4) Ret valideringsfunktionerne så der ikke viderestilles, men der bare
> sættes en fejlvariabel så mailen ikke sendes.

Gjort

> 5) Lav et sidste tjek der kalder mailsend-funktionen og viderestiller
> til en "tak for indtastningen"-side hvis der ikke er fejl.

Gjort?

Det nye ligger på

http://hjemmesideskolen.dk/test/visitkortny.asp
http://hjemmesideskolen.dk/test/before_formular.txt
http://hjemmesideskolen.dk/test/after_formular.txt

Når man submitter, sker der ikke andet end at alle indtastninger i
formularen slettet. Ingen fejlmelding ved mangelfuldt udfyldt formular.
Ingen mail-afsendelse ved korrekt udfyldt formular

> Jeg fandt lige en side der viser en automatiseret validering af en
> form. Det virker ret gennemarbejdet - dog kunne man godt udbygge det
> så det kunne markere mere end ét fejlende felt ad gangen (som det er
> nu vil man kun få besked om fejlen i ét felt, selv om der er fejl i
> flere).

> http://www.asp101.com/articles/hojjat/formvalidation/default.asp

Jeg kan ikke se, hvor man skal definere mail-server eller modtager. Det kan
jeg ikke umiddelbart bruge.

>> Jeg har hørt om asp.net, men jeg aner ikke, hvad det er for noget.
>
> Det er afløseren til ASP - men på trods af navnesammenfaldet er det en
> hel del anderledes, og langt langt stærkere end traditionel asp.

Jeg tror, jeg holder mig til asp, indtil det sidder nogenlunde på rygraden.

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



Erik Ginnerskov (28-11-2004)
Kommentar
Fra : Erik Ginnerskov


Dato : 28-11-04 17:14

Jens Gyldenkærne Clausen wrote:

>> <http://hjemmesideskolen.dk/test/visitkort.asp>
>
> Den nuværende løsning "taber"
> indtastede oplysninger - det er lidt surt at skulle indtaste
> værdier i 8 felter igen bare fordi man havde glemt felt nr. 9.

Det problem har jeg nu forsøgt at løse ved at tilføje denne kode til de
enkelte input-felter (modificeret, så de er forskellige):

value="<%=Request.Cookies("visitkort")("navn")%>"

Derefter har jeg i dataopsamlingen i mail_sender.asp indsat en sådan linje
efter hver data-request (modificeret, så de er forskellige):

Response.Cookies("visitkort")("navn") = name

Det virker næsten helt fint, hvis man udfylder alle obligatoriske felter og
derfor får lov til at sende bestillingen. Ved næste besøg på siden er de
gemte data indlæst i inputfelterne. Men det foretagne valg i Afdeling:
bliver ikke registreret.

Desværre skrives der åbenbart ikke nogen cookie, hvis formularen er
mangelfuldt udfyldt, så man bliver returneret til formularen.

http://hjemmesideskolen.dk/test/visitkort.asp
http://hjemmesideskolen.dk/test/visitkort.txt
http://hjemmesideskolen.dk/test/mail_sender.txt

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



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste