Just nu i M3-nätverket
Gå till innehåll
Daniel Wahlgren

Misslyckad Insert

Rekommendera Poster

Daniel Wahlgren

Hej Alla!

 

Har problem med en insertsats i Access 2000 format via ASP / VBS

 

INSERT INTO tbl_users 
(PK_UserID, User, Pnr, Guardian, Adress, Zip, City, Phone, Account, UserComment) 
VALUES(3, 'gfh', 'fgh',' fgh', 'fgh', 'fgh', 'fh', 'fgh', 'fgh', 'fghfgh');

När jag kör den lokal i Access så går det bra, men när jag kör den via ASP så fungerar den ej, utan returnerar följande:

 

Microsoft JET Database Engine error '80040e14'
Syntax error in INSERT INTO statement.
/handoutreg.asp, line 38

ASP koden ser ut så här:

<%
	'All information slussas in i Variabler
	strUser = Request.Form("User")
	strPnr = Request.Form("Pnr")
	strAdress = Request.Form("Adress")
	strZip = Request.Form("Zip")
	strCity = Request.Form("City")
	strPhone = Request.Form("Phone")
	strSerial = Request.Form("Serial")
	strDeposit = Request.Form("Deposit")
	strCompOut = Request.Form("CompOut")
	strCompIn = Request.Form("CompIn")
	strGuardian = Request.Form("Guardian")
	strAccount = Request.Form("Account")
	strUserComment = Request.Form("UserComment")
	strPlace = Request.Form("Place")
	
	'Kontrollera om Användaren redan finns
	strSQL = "SELECT PK_UserID FROM tbl_users Where Pnr = '" & strPnr & "';"
	Set objRS = objConn.Execute(strSQL)
	'Om användaren finns tar vi vara på hans ID
	If NOT objRS.EOF THEN
		strUserID = objRS("PK_UserID")
	'Annars skapar vi en ny användare
	Else
		'Vi tar reda på vilket IDnr användaren skall ha
		strSQL = "SELECT Max(tbl_users.PK_UserID)+1 AS PK_UserID FROM tbl_users;"
		Set objRS = objConn.Execute(strSQL)
		strUserID = objRS("PK_UserID")
		'Och skapar sedan användaren
		strSQL = "INSERT INTO tbl_users (PK_UserID, User, Pnr, Guardian, Adress, Zip, City, Phone, Account, UserComment) VALUES(" & strUserID & ", '" & strUser & "', '" & strPnr & "',' " & strGuardian & "', '" & strAdress & "', '" & strZip & "', '" & strCity & "', '" & strPhone & "', '" & strAccount & "', '" & strUserComment & "');"
		'Här har jag fåt ett fel så jag skriver ut den färdiga SQL-satsen för testning. Fungerar i Access, men inte här. Varför?
		Response.Write strSQL
		Set objRS = objConn.Execute(strSQL)
	End If
	'Vi letar nu reda på Datorn med angivet serienummer och sparar ID
	strSQL = "SELECT PK_CompID FROM tbl_computers Where Serial = '" & strSerial & "';"
	Set objRS = objConn.Execute(strSQL)
	strCompID = objRS("PK_CompID")
	'Vi lånar ut datorn till användaren
	strSQL = "INSERT INTO tbl_loan (FK_UserID,PK_CompID,CompOut,CompIn,Deposit,Place) VALUES(" & strUserID & "," & strCompID & ",'" & strCompOut & "','" & strCompIn & "','" & strDeposit & "','" & strPlace & "');"
	Set objRS = objConn.Execute(strSQL)
	'Vi rensar upp
	objRS.Close
	objConn.Close
	Set objRS = Nothing
	Set objConn = Nothing
%>

All kod är ännu inte testad, därav lite Utskrivningar av SQL lite var stans... kommer städas upp sedan.

 

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Anders N

 

"Syntax error in INSERT INTO statement" (80040e14) betyder att den tycker att SQL-satsen ser felaktig ut.

 

Eftersom den inte "verkar" vara felaktig, så är det vanligaste felet att man använder något reserverat ord.

 

Prova att döpa om kolumnen "User" till någonting annat.

 

En lista på reserverade ord finns bland annat här: http://www.btgi.net/reservedwords.cfm

 

Tillägg:

Du bör även förbättra säkerheten genom att byta ut alla apostrofer (') i texten du får från användaren mot två apostrofer ('').

 

strUser = Replace(Request.Form("User"),"'","''")
strPnr = Replace(Request.Form("Pnr"),"'","''")
...

 

Ciao,

Anders

 

[inlägget ändrat 2002-08-11 02:15:12 av Anders N]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Daniel Wahlgren

Tack, fungerar perfekt nu :)

Tänkte inte så mycket på säkerheten eftersom det bara kommer vara två personer som kommer åt detta bakom NT-inlogg... men det är lika bra att fixa sånt också från början så man inte står där med byxorna nere sen :) Tack.

 

Ändrade User till UserName och fixade ' till ''

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Cechise

varför ska man ändra ' till '' för säkerhetens skull?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Magnus Gladh

Japp! Här är en länk där du kan läsa vad man kan hitta på för kul med SQLInjektion.

 

http://www.sitepoint.com/article/794

 

- Magnus

-----------------------------------------------------

Jag är inte kaxig, jag är bara så jävla bäst...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Cechise

Läste. Mycket intressant faktiskt. Har jag aldrig ens tänkt på.

men om man istället alltid kontrollerar så här:

 

user = Request.Form("username")

pass = Request.Form("password")

set RecSet = connect.execute("SELECT * FROM users WHERE username='"&user&"'")

if user = RecSet("username") and pass = RecSet("password") then

 

---kodelikod---

 

Borde det väl inte gå att bryta sig in? Dom här shutdown osv funkar ju kanske iofs

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...