Avatar billede Slettet bruger
18. august 2006 - 13:20 Der er 30 kommentarer og
1 løsning

Printe værdier hentet via request.form, og kun værdierne

Jeg modtager værdier via request.form, og og antallet af værdier, samt hvilke værdier, er ukendt.
Når værdierne modtages, vises en bekræftelsesside.

Fra bekræftelsessiden skal man kunne klikke på en knap/link, og få et nyt vindue frem, der kun indeholder værdierne, og ikke andre elementer.

Det nye vindue skal så selv aktivere print-funktionen via JavaScript.

Jeg har følgende JavaScript kode tilrådighed:

<script language="JavaScript" type="text/javascript">
<!--
function makePrintout() {
if (window.print) { /* Avoids errors */
window.print();
}
}

//-->
</script>
Avatar billede keysersoze Ekspert
18. august 2006 - 13:26 #1
<%
For each bla in Request.Form
  Response.Write Request.Form(test)
Next
%>
Avatar billede thesurfer Nybegynder
18. august 2006 - 13:30 #2
Printe (som i printer), ikke udskrive.. :-)

Jeg er igang med noget kode..
Avatar billede thesurfer Nybegynder
18. august 2006 - 13:52 #3
Så er den der.. :-)

Jeg rydder lige op, skriver nogle kommentarer, og smider koden herind..
Avatar billede Slettet bruger
18. august 2006 - 13:55 #4
Glæder mig :-)
Avatar billede thesurfer Nybegynder
18. august 2006 - 14:05 #5
3 filer:

<!--
index.asp: siden hvor man indtaster oplysningerne.

Det eneste der er vigtigt her, er action="bekraeft_siden.asp" der sender værdierne videre til "bekraeft_siden.asp"
-->

<form name="frmPrint" method="post" action="bekraeft_siden.asp">
Navn: <input type="text" name="Navn" value="Hans Hansen">
<br>
Adresse: <input type="text" name="Adresse">
<br>
Telefon: <input type="text" name="Telefon">
<br>
<input type="submit" name="submit" value="Send">
</form>




<%
' ------------------------ "bekraeft_siden.asp":

option explicit ' tvingere programmøren til at definere variablerne, så den kan fange stavefejl

if request.servervariables("request_method") <> "POST" then ' hvis der ikke er sendt data
    ' der er ikke indtastet noget
else
    dim f, item, i, j ' definer variabler
    f = "" ' nulstil f
    for each item in request.form ' løb alle formens elementer igennem
        if LCase(item) <> "submit" then ' hvis det nuværende felt ikke er submit knappen
            f = f & item & ":" & request.form(item) & "|" ' forbered en split/array
        end if
    next

    if f <> "" then ' hvis der er data
        dim nf, ef, felter ' definer variabler
        response.write "Du har indtastet følgende data:<br><br>" ' besked til bruger
        nf = split(f, "|") ' split ved "|", resultat: "Navn:Hans Hansen"
       
        for i = lbound(nf) to ubound(nf) - 1 ' loop alle elementerne i arrayen "nf" igennem
            ef = split(nf(i), ":") ' split ved ":", resultat: plads 0 = "Navn", plads 1 = "Hans Hansen"
            response.write ef(0) & ": " & ef(1) & "<br>" ' Udskriv værdi til brugeren
            felter = felter & "<input type=""hidden"" name=""" & ef(0) & """ value=""" & ef(1) & """>" & vbCrLf ' dan form kode
        next

        response.write "<br>dette er en side med en masse, der ikke skal udskrives..." ' noget dummy kode
       
        ' formen: her dannes formen
        response.write "<form name=""frmPrint"" method=""post"" action=""printside.asp"" target=""_blank"">" & vbCrLf
        response.write felter
        response.write "<input type=""submit"" name=""submit"" value=""Print"">" & vbCrLf
        response.write "</form>" & vbCrLf
    end if
end if

%>




<%
option explicit
dim item, html
html = ""
if request.servervariables("request_method") = "POST" then
    for each item in request.form ' løb alle formens elementer igennem
        if LCase(item) <> "submit" then ' hvis det nuværende felt ikke er submit knappen
            html = html & item & ": " & request.form(item) & "<br>" ' udskriv
        end if
    next
end if
%>
<html>
<head>
<title>Print</title>
<script language="JavaScript" type="text/javascript">
<!--
function makePrintout() {
if (window.print) { /* Avoids errors */
window.print();
}
}

//-->
</script>
</head>
<body<%
' Hvis variablen "html" ikke er tom, udskrive indholdet af variablen:
if html <> "" then response.write " onload=""makePrintout()"""
%>>

<%
' Hvis variablen "html" ikke er tom, udskrive indholdet af variablen:
if html <> "" then
    response.write html
else
    ' brugeren har indtastet adressen direkte, så der er ikke noget at printe
    response.write "der er intet at printe"
end if %>
Avatar billede thesurfer Nybegynder
18. august 2006 - 14:08 #6
Læg mærke til, at jeg ikke bruger "æ" i filnavnet "bekraeft_siden.asp".

Brug ikke "æ", "ø", "å", " " (mellemrum) i filnavne.
Avatar billede Slettet bruger
18. august 2006 - 14:44 #7
Jeg får denne fejl:
Microsoft VBScript compilation error '800a0401'

Expected end of statement

test/bekraeft_siden.asp, line 31

response.write "<form name=""frmPrint"" method=""post"" action=""printside.asp" target=""_blank"">" & vbCrLf
Avatar billede Slettet bruger
18. august 2006 - 14:54 #8
Jeg fandt selv fejlen, der manglede lige et ", men på printsiden får jeg alle feltnavne med også dem der ikke er udfyldt ?
Avatar billede Slettet bruger
18. august 2006 - 17:04 #9
Hej thesurfer
Er du der stadig og har du opgivet mig:-)
Avatar billede thesurfer Nybegynder
18. august 2006 - 22:14 #10
Jeg har ikke opgivet dig.. Jeg var lige et smut forbi de gamle :-)

Løsningen er simpel.. Check om værdien er tom, inden smides over i html-variablen:

        if LCase(item) <> "submit" then ' hvis det nuværende felt ikke er submit knappen
            ' Hvis værdien ikke er tom, indsættes den i variablen "html", som udskrives senere:
            if request.form(item) <> "" then html = html & item & ": " & request.form(item) & "<br>"
        end if

Erstat kodeblokken fra filen printside.asp med ovenstående kodeblok.
Avatar billede thesurfer Nybegynder
18. august 2006 - 22:16 #11
Hmm.. Underligt.. den fejl (18/08-2006 14:54:07) har jeg ikke i min fil..

Det er nok Eksperten der har hapset et "-tegn igen.. det gør den faktisk engang imellem.
Avatar billede Slettet bruger
19. august 2006 - 16:45 #12
Så fik jeg kigget på det. Koden på printside.asp ser nu sådan ud:
<%
option explicit
dim item, html
html = ""
if LCase(item) <> "submit" then ' hvis det nuværende felt ikke er submit knappen
' Hvis værdien ikke er tom, indsættes den i variablen "html", som udskrives senere:
if request.form(item) <> "" then html = html & item & ": " & request.form(item) & "<br>"
end if

%>
<html>

<head>
<title>Print</title>
<script language="JavaScript" type="text/javascript">
<!--
function makePrintout() {
if (window.print) { /* Avoids errors */
window.print();
}
}

//-->
</script>
</head>

<body onload="makePrintout()">
</body>
</html>
Og jeg får denne fejl

Request object error 'ASP 0102 : 80004005'

Expecting string input

/ordbog/testentre/printside.asp, line 7

The function expects a string as input.
Avatar billede thesurfer Nybegynder
21. august 2006 - 10:42 #13
Jeg kigger lige på det, i løbet af i dag..
Jeg har været uden net, de sidste par dage..
Avatar billede Slettet bruger
21. august 2006 - 11:02 #14
Fint, tak
Avatar billede thesurfer Nybegynder
21. august 2006 - 20:28 #15
Ahhh.. du har misforstået mit indlæg 18/08-2006 22:14:44.. Det er nok bare mig der ikke fik forklaret mig ordentligt..

Det skal se sådan ud:

    for each item in request.form ' løb alle formens elementer igennem
        if LCase(item) <> "submit" then ' hvis det nuværende felt ikke er submit knappen
            html = html & item & ": " & request.form(item) & "<br>" ' udskriv
        end if
    next

Det var en tilføjelse, og ikke en erstatning af hele For-Next-løkken.

I min kode, hører "item" til en form-collection ("Request.Form"), og du kan derfor ikke bruge Request.Form(item) uden at fortælle den, hvad item er, og hvor den hører til.


Jeg er stadigvæk uden net.. en tekniker kommer forbi i morgen, og så har jeg forhåbentlig net igen..

Der kan være lange svaretider. Jeg vil prøve på at besvare spørgsmål i skoletiden, hvor jeg har net.
Avatar billede thesurfer Nybegynder
21. august 2006 - 20:33 #16
Jeg kom lige til at give dig noget forkert kode.

Her er den komplette kode for filen printside.asp:

<%
option explicit
dim item, html
html = ""
if request.servervariables("request_method") = "POST" then
    for each item in request.form ' løb alle formens elementer igennem
        if LCase(item) <> "submit" then ' hvis det nuværende felt ikke er submit knappen
            if request.form(item) <> "" then html = html & item & ": " & request.form(item) & "<br>" ' udskriv
        end if
    next
end if
%>
<html>
<head>
<title>Print</title>
<script language="JavaScript" type="text/javascript">
<!--
function makePrintout() {
if (window.print) { /* Avoids errors */
window.print();
}
}

//-->
</script>
</head>
<body<%
' Hvis variablen "html" ikke er tom, udskrive indholdet af variablen:
if html <> "" then response.write " onload=""makePrintout()"""
%>>

<%
' Hvis variablen "html" ikke er tom, udskrive indholdet af variablen:
if html <> "" then
    response.write html
else
    ' brugeren har indtastet adressen direkte, så der er ikke noget at printe
    response.write "der er intet at printe"
end if %>


Sig lige til, hvis du får fejl.
Avatar billede Slettet bruger
22. august 2006 - 09:35 #17
Perfekt, nu virker det. Tusind tak for hjælpen.
Avatar billede Slettet bruger
24. august 2006 - 10:21 #18
Hej thesurfer
Jeg håber du har fået dit net til at virke igen. Din kode virker fint, men jeg har brug for lidt mere hjælp? Jeg vil gerne ooprette et nyt spørgsmål. Hvordan får jeg printsiden formateret, således at det ikke er feltnavnene der står der , men en tekst jeg selv bestemmer.
Avatar billede thesurfer Nybegynder
24. august 2006 - 10:31 #19
Hej liri.

Det viste sig at være menneskefejl bag net-problemet.
Stikket var blevet skubbet ud af kontakten, så der var ingen forbindelse..

Ang formatering:
Det er simpelt at formatere dataene. Du skal bare sætte dataene op på et format, som du kan nemt arbejde med.
Hvis du ikke allerede har den nødvendige programmeringsviden (den basale viden), vil jeg anbefale dig at læse lektionerne på:
http://www.html.dk/tutorials/asp/

I starten vil det nok virke langtrukken og kedeligt, men tro mig.. du får meget ud af det.

Det fede ved programmering er, at man selv kan skabe nye ting, og modificere gammel kode.

Jeg vil helt klart anbefale at du læser lektionerne.
Avatar billede Slettet bruger
24. august 2006 - 11:16 #20
Hej
Surt når man opdager det er en fejl 40. Jeg kender godt lektionerne du omtaler og jeg har lært meget af dem, men jeg synes ikke lige jeg kan få nogen af dem til at passe med formatering af print?
Avatar billede thesurfer Nybegynder
24. august 2006 - 11:48 #21
Du kan ikke ændre på printopsætningerne i browseren.

Det du kan gøre, er at ændre på layoutet af HTML outputtet.

Når man enten skriver ikke-ASP kode, eller når man skriver "response.write", udskrives HTML tekst/kode.

Du kan påvirke HTML tekst/kode (klientside) via ASP koden (serverside), og f.eks. CSS (klientside).

Eksempel:

<%
navn = "Hans"
%>

<div style="position:absolute;left:200px;top:400px"><% response.write navn %></div>

Nu skulle "Hans" gerne stå ved koordinaterne 200,400.. dvs, "Hans" står ikke i øverste venstre hjørne, som det normalt ville gøre.

Ved hjælp af f.eks. HTML, CSS og ASP, kan du lave layoutet, som print-funktionen så vil printe ud.


Med andre ord:
Du skal lave layoutet, som det skal printes ud.
Avatar billede Slettet bruger
24. august 2006 - 12:38 #22
Ok, tak
Avatar billede thesurfer Nybegynder
24. august 2006 - 13:28 #23
Jeg skal da gerne hjælpe dig.. give dig hints osv.. men det er dig der skal lave det.. :-)
Avatar billede Slettet bruger
25. august 2006 - 10:27 #24
Hej igen
Jeg regner med at det er i denne kode:
<%

' Hvis variablen "html" ikke er tom, udskrive indholdet af variablen:
if html <> "" then
response.write html
else
' brugeren har indtastet adressen direkte, så der er ikke noget at printe
response.write "der er intet at printe"
end if %>
jeg skal lave formateringen, men hvis jeg bare sætter response write "navn" ind, skriver den jo bare navn. Det jeg gerne vil er at fjerne feltnavnet navn og skrive Navn: her skal navnet så hentes fra feltet.
Kan du give mig et hint om hvordan jeg gør det? Selve layout'et kan jeg godt lave.
Avatar billede thesurfer Nybegynder
25. august 2006 - 11:13 #25
Jeg ville nu nok hellere kigge på denne del af koden:

if request.servervariables("request_method") = "POST" then
    for each item in request.form ' løb alle formens elementer igennem
        if LCase(item) <> "submit" then ' hvis det nuværende felt ikke er submit knappen
            if request.form(item) <> "" then html = html & item & ": " & request.form(item) & "<br>" ' udskriv
        end if
    next
end if

Simple Request.Form og muligvis en array som pladsholder (men det er ikke nødvendigt, det gør det bare nemmere).. man kan hente noget info i visse lektioner..

:-)
Avatar billede thesurfer Nybegynder
25. august 2006 - 12:05 #26
Hint til brug af variabler i stedet for array:
Du kender antallet af felter og navnene på dem.
Smid feltets navn (som du selv vil ha' det) + værdien.

Hvis indholdet af variablen er tomt, udskrives det tomtum (intet, men det er stadigvæk noget)..


Skriv gerne dine teorier, ideer osv, så jeg kan følge din tankegang.. :-)
Avatar billede thesurfer Nybegynder
25. august 2006 - 12:06 #27
Rettlse:

Hint til brug af variabler i stedet for array:

Du kender antallet af felter og navnene på dem.
Smid feltets navn (som du selv vil ha' det) + værdien ind i de respektive variabler

Hvis indholdet af variablen er tomt, udskrives det tomtum (intet, men det er stadigvæk noget)..


Skriv gerne dine teorier, ideer osv, så jeg kan følge din tankegang.. :-)
Avatar billede Slettet bruger
25. august 2006 - 12:38 #28
Jeg må indrømme jeg er på herrens mark, jeg har prøvet mig lidt frem ved at rette/tilføje i denne linie:
if request.form(item) <> "" then html = html & item & ": " & request.form(item) & "<br>" ' udskriv
men det har ikke lige den ønskede effekt, så jeg arbejder videre
Avatar billede thesurfer Nybegynder
25. august 2006 - 13:14 #29
Jeg tror at det vil være en god ide, hvis du satte dig ned og bryd koden ned i stumper/instruktioner/koder.

Derefter skal du "forklare" dig selv (eller andre), hvad de enkelte stumper/instruktioner/koder betyder og gør..

Jeg har nemlig på fornemmelsen at du ikke helt forstår koden.. Jeg er overbevist om, at hvis du forstår koden, vil du kunne se en løsning.. :-)
Avatar billede thesurfer Nybegynder
25. august 2006 - 13:16 #30
PS:
Jeg er muligvis først på igen engang i aften, eller i morgen..
I værste fald bliver det først mandag igen..

- Hav en god weekend.
Avatar billede Slettet bruger
25. august 2006 - 13:40 #31
Tak i lige måde
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