Avatar billede goose Nybegynder
15. april 2004 - 10:55 Der er 14 kommentarer og
2 løsninger

for each item in request.form problem

Jeg står med et rimeligt akut problem, derfor det høje pointantal.

Jeg har en formular hvor indholdet bliver trukket fra en database med følgende data:

varenr
varenavn

Brugeren skal så kunne bestille varer ved at udfylde et felt der hedder koliantal og et felt der hedder antalkg, altså 2 stk. inputfelter ud for hvert varenr.

Når brugeren så submitter formen til bestilling.asp, skal bestilling.asp gennemløbe hvert enkelt varenr i formularen og udskrive en bestillingsseddel hvor der fremgår følgende:

Varenr
koliantal (kommer fra det ene inputfelt)
antalkg (kommer fra det andet inputfelt)

Den skal ikke medtage de varenr hvor hverken koliantal eller antalkg er udfyldt, men kun dem hvor mindst ét af felterne er udfyldt

Kan det i det hele taget lade sig gøre på denne måde eller hvad gør jeg ?
Pga. tidsnød vil konkrete kodeeksempler være at foretrække, men råd modtages med kyshånd :o)

/Goose
Avatar billede nute Nybegynder
15. april 2004 - 11:10 #1
vil dette sige, at du har et formular hvor du har mange felt der hedder 'varenr', mange felt der hedder 'koliantal' og mange felt der hedder 'antalkg' ? Hvis du har dette, så bør du nok først og fremmest lave dette om, så du knytter antalkg og koliantal til et specifikt varenummer. Fx:

<input type="text" value="1" name="varenr"><input type="text" name="koliantal_1"><input type="text" name="antalkg_1">
<input type="text" value="2" name="varenr"><input type="text" name="koliantal_2"><input type="text" name="antalkg_2">
<input type="text" value="1" name="varenr"><input type="text" name="koliantal_3"><input type="text" name="antalkg_3">

på denne måde kan du så meget hurtig identificere dine formfelter uden at bruge en for each på dit formular. så kan du hellere bruge dette:

Dim strVareNr : strVareNr = Request( "varenr" )
Dim arrVareNr : arrVareNr = Split( strVareNr, "," )
Dim strKoliValue, strKGValue
for i = 0 To Ubound( arrVareNr )
    strKoliValue = Request( "koliantal_" & arrVareNr( i ) )
    strKGValue = Request( "antalkg_" & arrVareNr( i ) )
    if( strKoliValue <> "" OR strKGValue <> "" ) then
        ' gør noget
    end if
next

på denne måde har du hele tiden knytningen mellem varenr og de felter der hører til dette varenummer (hvis du nu ikke har dette allerede, men så bør du jo skrive dette ;o] )

/nute
Avatar billede mm12010 Nybegynder
15. april 2004 - 11:10 #2
er ikke så stiv i VB(koder selv i JS), men prøv sådan:

counter=0
For Each varItem In Request.Form ' eller QueryString
  If counter = 0 Then
    tempItem = varItem
    tempVal = Request.Form(varItem).Item
    counter = 1
  Else If tempVal <> "" or Request.Form(varItem).Item <> "" Then
    Response.Write(tempItem & " = " & tempVal  & "<br />")
    Response.Write(varItem & " = " & Request.Form(varItem).Item  & "<br />")
  End If
Next
Avatar billede nute Nybegynder
15. april 2004 - 11:11 #3
Desuden ... antal points skal afspejle *sværhedsgraden* af spørgsmålet ... ikke hvor desperat man er.
Avatar billede mm12010 Nybegynder
15. april 2004 - 11:11 #4
Else If tempVal <> "" or Request.Form(varItem).Item <> "" Then
    Response.Write(tempItem & " = " & tempVal  & "<br />")
    Response.Write(varItem & " = " & Request.Form(varItem).Item  & "<br />")
    counter=0
  End If
Avatar billede nute Nybegynder
15. april 2004 - 11:15 #5
mm12010 >> forstår ikke helt din 'counter' variable ... hvad skal den være godt for ?
Avatar billede mm12010 Nybegynder
15. april 2004 - 11:16 #6
sorry - sådan

counter = 0
For Each varItem In Request.Form ' eller QueryString
  If counter = 0 Then
    tempItem = varItem
    tempVal = Request.Form(varItem).Item
    counter = 1
  Else If tempVal <> "" or Request.Form(varItem).Item <> "" Then
    Response.Write(tempItem & " = " & tempVal  & "<br />")
    Response.Write(varItem & " = " & Request.Form(varItem).Item  & "<br />")
    counter = 0
  Else
    counter = 0
  End If
Next
Avatar billede goose Nybegynder
15. april 2004 - 11:44 #7
nute >> jeg får følgende fejl når jeg submitter min form:

An unhandled data type was encountered.

Hvis jeg blot udskriver strVareNr så udskriver den fint alle varenr, f.eks.:
95001, 95002, 95003

/Goose
Avatar billede nute Nybegynder
15. april 2004 - 11:46 #8
hvilken linie fejler scriptet i, og hvad ligger der i den linie ?
Avatar billede nute Nybegynder
15. april 2004 - 11:47 #9
og ups ... denne linie:

Dim arrVareNr : arrVareNr = Split( strVareNr, "," )

skal være:

Dim arrVareNr : arrVareNr = Split( strVareNr, ", " )
Avatar billede goose Nybegynder
15. april 2004 - 11:58 #10
nute >> Det hjalp intet, den kommer med følgende fejl:

Varenr:

Response object error 'ASP 0106 : 80020005'

Type Mismatch

/bestilling.asp, line 0

An unhandled data type was encountered.

/Goose
Avatar billede goose Nybegynder
15. april 2004 - 12:03 #11
Hvis jeg bruger følgende:

strVareNr = Request.form("varenr")
arrVareNr = Split(strVareNr, ", ")
response.write arrVareNr

Så får jeg fejlen, men hvis jeg kun udskriver strVareNr og udkommenterer arrVareNr så udskriver den godt nok varenr.  .......

/Goose
Avatar billede nute Nybegynder
15. april 2004 - 12:39 #12
jeg tror nok du skal kigge et andet sted efter din fejl .. måske i resten af din kode. Dette eksempel kører fint for mig:

<%@ language="vbscript" %>
<%
Dim strVareNr : strVareNr = Request( "varenr" )
Dim arrVareNr : arrVareNr = Split( strVareNr, ", " )
Dim strKoliValue, strKGValue
Response.Write( "strVareNr: " & strVareNr & "<br>")
for i = 0 To Ubound( arrVareNr )
    strKoliValue = Request( "koliantal_" & arrVareNr( i ) )
    strKGValue = Request( "antalkg_" & arrVareNr( i ) )
    if( strKoliValue <> "" OR strKGValue <> "" ) then
        REsponse.Write( arrVareNr( i ) & ": " & strKoliValue & ", " & strKGValue & "<br>" )
    end if
next
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Untitled</title>
</head>

<body>
<form>
<input type="text" value="1" name="varenr"><input type="text" name="koliantal_1"><input type="text" name="antalkg_1"><br>
<input type="text" value="2" name="varenr"><input type="text" name="koliantal_2"><input type="text" name="antalkg_2"><br>
<input type="text" value="3" name="varenr"><input type="text" name="koliantal_3"><input type="text" name="antalkg_3">
<input type="submit">
</form>
</body>
</html>

/nute
Avatar billede goose Nybegynder
15. april 2004 - 12:55 #13
nute >> det er mig der sider og "tåger" rundet i det, fejlen var min idet jeg udskrev varenr med <%=arrVareNr%> isetdet for <%=arrVareNr(i)%>

Ligger du lige et svar så du kan få dine point ?

/Goose
Avatar billede nute Nybegynder
15. april 2004 - 12:59 #14
ahh ... :o]

men som jeg skrev i mit andet indlæg ... dette er ikke værd 200 point. smid et svar og snup minimum 150 points selv

/nute
Avatar billede goose Nybegynder
15. april 2004 - 13:07 #15
Okay, og tak for hjælpen, du har virkelig reddet min dag :o)

/Goose
Avatar billede nute Nybegynder
15. april 2004 - 13:10 #16
anytime :-)

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