webForumDet fria alternativet

Problem med att lägga till data

ASP

7 svar · 349 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

Hej!

Har följande kodsnutt som läger till data i en db. Datat kommer från ett formulär med dynamsikt antal poster.

For each item in Request.Form("cnt")

  strSQL = "INSERT INTO tblTravel(user, travelDate, miles, TaskNr, travelType) " &_
		   "VALUES('" & Request.form("user") & "', #" & Request.Form("Datum" & item) & "#, " & Request.Form("miles" & item) & ", " &_ 
		   " '" & Request.Form("taskNr" & item) & "', '" & Request.Form("travelType" & item) & "')"
  objConn.execute(strSQL)

Next

Det finns mer att göra med tanke på säkerheten...

Men, det fungear fint när jag skriver in ett heltal i "Miles" skriver jag däremot tex 2,5 så kommer följande felmeddelande:

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Antalet värden i frågan och antalet målfält är olika.
/time/registerTravels2.asp, line 22

Hur ska jag ändra koden för att det ska fungera... och hur ska jag skriva för att inte behöva ha request.form i sql-satsen där jag hellre vill ha variabler som är "säkra"

Mvh
Henrik

Medlem sedan juni 200032 967 inlägg
#2

Du skall alltid ange decimaltal med punkt som decimaltecken i SQL-frågor. Kommatecken används för att separera fält / värden.

Mvh

Medlem sedan jan. 20013 582 inlägg
#3

:)
Okej!
Men hur ska jag lösa det så att användaren "skriver rätt"

och hur byter jag ut request.form till en varibel i stället?

Mvh

Medlem sedan juni 200032 967 inlägg
#4
sFoo = Request.form("foo")
sFoo = replace(sFoo, ",", ".")

eller missförstår jag frågan?

Medlem sedan jan. 20013 582 inlägg
#5

Hehe... kanske! Eller så har jag missförstått allt... (vilket iofs är mest troligt)..

Jo det ser så krångligt ut:

Request.Form("Datum" & item)

Hur får jag med det där & item om jag gjort om det till en variabel.. Det är mest där jag inte får ihop det...

Mvh

Medlem sedan jan. 20013 582 inlägg
#6

Provade göra så här:

Dim strSQL, objConn, objRS, sUser, dTravelDate, iMiles, sTaskNr, sTravelType

sUser = SQLSafe(Request.form("user"))
dTravelDate = Request.Form("Datum")
iMiles = Replace(Request.Form("miles"), ",", ".")
sTaskNr = SQLSafe(Request.Form("taskNr"))
sTravelType = SQLSafe(Request.Form("travelType"))

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=uppdragNu"
objConn.Open 

For each item in Request.Form("cnt")

  strSQL = "INSERT INTO tblTravel(user, travelDate, miles, TaskNr, travelType) " &_
		   "VALUES('" & sUser & "', #" & dTravelDate & item & "#, " & iMiles & item & ", " &_ 
		   " '" & sTaskNr & item & "', '" & sTravelType & item & "')"
  objConn.execute(strSQL)

Next

objConn.Close 
Set objConn = Nothing

public function SQLSafe(sText)
	SQLSafe = replace(sText, "'", "''")
end function
%>

Men det funkade ju (givetvis) inte... :(

Mvh

Medlem sedan juni 200032 967 inlägg
#7

Nej, det funkar ju inte. :)

Gör variabeltilldelningen inne i loopen.

For each item in Request.Form("cnt")
     iMiles = Replace(Request.Form("miles" & item), ",", ".")
     ....

mvh

Medlem sedan jan. 20013 582 inlägg
#8

hehe!
Alltid lär man sig något nytt...

Mvh
Henrik

285 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
146 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)