webForumDet fria alternativet

Hidden

ASPur ASP

8 svar · 230 visningar · startad av Johanna

Medlem sedan mars 200013 inlägg
Frågan#1

Hej!

Ett värde (idnr) som jag skickar via en formtag med hidden skall hämtas upp på nästa sida med kommandot Request.Form("idnrvarde"). Detta värde skall i sin tur skickas vidare till en ny sida via en formtag med hidden. På slutdestinationssidan skall värdet åter hämtas upp med Request.Form("idnrvarde"). Det misslyckas.... Nedan bifogas relevant kod för de olika sidorna.

Sid 1 ***
<%idnr = RS("KliNr")%>
<form name="form1" method="GET" action="kontakterframe.asp" >
<input type= "hidden" name="idnrvarde" value= "<%=idnr%>">
</form>

Sid 2 *** (kontakterframe.asp)
<form method = "GET" name ="form" action = "kontaktermeny.asp">
<%idnr=Request.Form("idnrvarde")%>
<input type="hidden" name ="idnrvarde" value ="<%=idnr%>" >
</form>

Sid 3 *** (kontaktermeny.asp)
<%idnr = Request.Form("idnrvarde")%>
Set Conn = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject ("ADODB.Recordset")

Conn.Open ("DBklient")

SQL = "SELECT FIRSTNAME, LASTNAME, JOBTITLE1 FROM ucoKlientKontakt WHERE Klientnr = "&idnr&" "

RS.Open SQL, Conn, 1,2

Felmeddelandet lyder såhär;
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket 'Klientnr ='.

/kontaktermeny.asp, line 27

**** vilket syftar på SQL-frågan i sid 3 ovan.

Vad är fel?

------------------
Johanna

Medlem sedan dec. 1999707 inlägg
#2

Felet är att du använder GET som metod för formulen. Vid GET kommer alla form-element att skrivas som querystrings.

Så antingen ändrar du metoderna till POST eller så skrivet du Request.QueryString istället...

------------------
/ Torbjörn Hansson, webbutvecklare/gränssnittsprogrammerare
Spetsdata AB

Medlem sedan mars 200013 inlägg
#3

Hej Torbjörn!

Jag har POST som metod, det fungerar tyvärr inte ändå. (Jag testade bara med GET och glömde ändra detta innan jag klistarade in koden i mitt meddelande....sorry...)

------------------
Johanna

Medlem sedan dec. 1999707 inlägg
#4

Spooky!

Kontrollera var värdet försvinner. På "mellansidan" eller på "registreringssidan"?

Ett tips är att skriva ut sql-satsen INNAN du exekverar den. Det brukar underlätta när man buggtestar.

Ett annat tips är att inte använda sig av Recordset i onödan. De är långsammare än Connection-objektet. Connection.Execute returnerar, om man så vill, ett statiskt Recordset. Din tredje sida skulle kunna lika gärna se ut så här:


idnr = Request.Form("idnrvarde")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("DBklient")

SQL = "SELECT FIRSTNAME, LASTNAME, JOBTITLE1 FROM ucoKlientKontakt WHERE Klientnr = " & idnr
Set objRec = Conn.Execute SQL

Där objRec blir ditt skapade recordset.

------------------
/ Torbjörn Hansson, webbutvecklare/gränssnittsprogrammerare
Spetsdata AB

Medlem sedan mars 200013 inlägg
#5

Hej igen!

Tack för tipsen!(du menar att man kan använda ObjRec när man enbart skall läsa från databasen? Ska man skriva, lägga till eller modifiera så måste man sätta upp ett riktigt recordset? Har jag uppfattat saken korrekt?)

Till saken;
Jag provar med att sätta fasta, dvs befintliga idnr från databasen, värden som idnr på de två första sidorna, det fungerar inte heller..... men om jag sätter ett fast värde på tredje sidan så fungerar det. Kan man kanske kalla spooky? Har du några fler förslag?

------------------
Johanna

Medlem sedan mars 200013 inlägg
#6

Sidan 2 är en ren frame-sida, kan det ha något med saken att göra?

------------------
Johanna

Medlem sedan dec. 1999707 inlägg
#7

Du behöver inte skapa recordset för att lägga in något i databasen heller (jag har ALDRIG använt mig av det). Du gör på samma sätt när du lägger in data, fast du använder dig av INSERT INTO-satsen istället:

namn = Request.Form("namn")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("DBklient")

SQL = "INSERT INTO ucoKlientKontakt(FIRSTNAME) VALUES(" & namn & ");"
Set objRec = Conn.Execute SQL

Till ditt problem:

Testa att skriva Response.Write SQL innan "execute"-raden så kan du läsa vad det är för sql-uttryck som skickas till databasen.

------------------
/ Torbjörn Hansson, webbutvecklare/gränssnittsprogrammerare
Spetsdata AB

Medlem sedan mars 200013 inlägg
#8

Hej Torbjörn!

Efter mkt om och men så beslöt jag mig för att använda sessions istället för hidden för att få fram idnr på tredje sidan. Detta fungerar utmärkt. Frågan är; hur prestandaförödande är det att använda sessions,kommer det att sega ner systemet? (ca 5 användare)

------------------
Johanna

Medlem sedan dec. 19996 721 inlägg
#9

Med 5 användare är det verkligen inget problem att använda Session. Problemen uppstår när man lägger för stora variabler, eller fel typ av variabler i Session och har tiotusentals användare.

130 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)