---
title: "Parametrar till DB"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/112400-parametrar-till-db"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "ironhead"
published: "2004-09-26T15:33:01.000Z"
updated: "2004-10-07T08:02:35.000Z"
replies: 10
views: 510
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/112400-parametrar-till-db"
---

# Parametrar till DB

## #1 — ironhead, 2004-09-26T15:33Z

Hej!

Hur gör man så enkelt som möjligt?

Jag har en sträng tex. med värdena: "param1=test1& param2=tackar& param3=sportspegeln"
Dessa värden vill jag spara i en MSSQL-databas där tabellnamnen är densamma som parameternamnen.

med koden nedan får jag värdena såhär:

param1=test1
param2=tackar
param3=sportspegeln

```
inputString = Request.Querystring("inputString")

myArray = Split(inputString,"&")
for i=0 to Ubound(myArray)
      Response.Write myArray(i)
next
```

Men hur gör jag nästa sväng när jag vill lägga in värdena?

INSERT INTO test(param1,param2,para3) VALUES("test1","tackar","sportspegeln")

Ska man splitta igen, eller finns den nån finurlig loop eller?

Permalänk: https://www.webforum.nu/p/112400

## #2 — ironhead, 2004-09-26T17:05Z

Gjode såhär:

```
arrData = Split(myDecodedString, "&")
For i = 0 To Ubound(arrData)
		
		arrDetail = Split(arrData(i), "=")

		param = Trim(arrDetail(0))
		val = Trim(arrDetail(1))

if c=1 then
 d=","
end if

a = a & d & param
b = b & d & "'"" & " & val & " & ""'"

c=1
Next

strSQL = "INSERT INTO Highscore(" & a & ") VALUES('" & b & "')"
```

Permalänk: https://www.webforum.nu/p/1445246

## #3 — doggelito, 2004-09-26T20:29Z

mm, man kan göra så men... jag skulle inte göra så! :)
jag skulle aldrig lägga tabellnamn m.m. i en querystring, absolut inte om man även har tillgång till ms-sqlserver som hanterar stored procedures.

för vad händer om man avbryter en sådan sträng eller "förstör" den? då blir det ju tok!
ex.  

```
param1=test1& param2=tackar& param3=sportspegeln');delete from Highscore;
```

man lär i och för sig veta tabellnamnet med koden ovan, men ändå, du förstår kanske att det är en stor säkerhetsrisk.
bara som en liten upplysning! :)

Permalänk: https://www.webforum.nu/p/1448251

## #4 — ironhead, 2004-09-27T08:32Z

Hur bör man göra då?

Permalänk: https://www.webforum.nu/p/1448341

## #5 — doggelito, 2004-09-27T08:35Z

Ja, du får nog först förklara vad din insert gör, i vilket sammanhang.

Permalänk: https://www.webforum.nu/p/1448343

## #6 — ironhead, 2004-09-27T12:52Z

min insert skall lagra poäng från ett webspel (shockwave).

alltså:

nick, score, game

till att börja med. 

Kommer till sidan som en sträng.

nick=Ivan&score=8890&game=mindwars

Permalänk: https://www.webforum.nu/p/1448501

## #7 — doggelito, 2004-09-27T13:41Z

En enkel lagrad procedur skulle kunna se ut så här:

```
Create Procedure dbo.upInsertScore
	@Nick varchar(50), 
	@Score numeric(10,0),
	@Game varchar(50)

As
	Set nocount on
	
	Insert Into Highscore 
	(Nick, Score, Game) Values
	(@Nick, @Score, @Game)
```

Denna kör du i query analyzer till din databas
För att sedan anropa den byter du bara ut din sql-rad till:

```
<%
Dim Nick, Score, Game, strSql

Nick = Request.QueryString("Nick")
Score = Request.QueryString("Score")
Game = Request.QueryString("Game")

strSql = ("upInsertScore '" & sqlInject(Nick) & "', " & sqlInject(Score) & ", '" & sqlInject(Game) & "'; ")

Public Function sqlInject(Byref str)
	If len(str) >0 Then sqlInject = Replace(str, "'", "''")
End Function
%>
```

Sen är det bara att bygga på proceduren om du får flera kolumner. :)

Permalänk: https://www.webforum.nu/p/1448522

## #8 — ironhead, 2004-09-28T08:47Z

Åh! Så snitsigt :)
1000-tack! Ska testa detta...

Permalänk: https://www.webforum.nu/p/1448784

## #9 — ironhead, 2004-10-06T12:22Z

Denna kod hade funkat utmärkt om jag inte hade förbisett en liten grej :\\
Querysträngen jag tar emot är Base64 kodad, så jag måste avkoda den först, och sedan in i databasen.

Hur bör man göra då?
ps. avkodningen har jag fixat, men sen då?

Permalänk: https://www.webforum.nu/p/1453008

## #10 — Brimba, 2004-10-06T14:11Z

Swesecure skriver om sql-injection och hur det kan motverkas.  <http://www.swesecure.com/?ID=dc6ea60a-12ae-4e7e-9e9c-59489ccafa90&IID=29a58b01-ca79-4877-b924-4f5da18d4a2a>

För att decoda en base64-sträng i asp så hittade jag denna funktion:

```
' Functions to provide encoding/decoding of strings with Base64.
' 
' Encoding: myEncodedString = base64_encode( inputString )
' Decoding: myDecodedString = base64_decode( encodedInputString )
'
' Programmed by Markus Hartsmar for ShameDesigns in 2002. 
' Email me at: [email]mark@shamedesigns.com[/email]
' Visit our website at: [url]http://www.shamedesigns.com/[/url]
'

	Dim Base64Chars
	Base64Chars =	"ABCDEFGHIJKLMNOPQRSTUVWXYZ" & _
			"abcdefghijklmnopqrstuvwxyz" & _
			"0123456789" & _
			"+/"

	' Functions for encoding string to Base64
	Public Function base64_encode( byVal strIn )
		Dim c1, c2, c3, w1, w2, w3, w4, n, strOut
		For n = 1 To Len( strIn ) Step 3
			c1 = Asc( Mid( strIn, n, 1 ) )
			c2 = Asc( Mid( strIn, n + 1, 1 ) + Chr(0) )
			c3 = Asc( Mid( strIn, n + 2, 1 ) + Chr(0) )
			w1 = Int( c1 / 4 ) : w2 = ( c1 And 3 ) * 16 + Int( c2 / 16 )
			If Len( strIn ) >= n + 1 Then 
				w3 = ( c2 And 15 ) * 4 + Int( c3 / 64 ) 
			Else 
				w3 = -1
			End If
			If Len( strIn ) >= n + 2 Then 
				w4 = c3 And 63 
			Else 
				w4 = -1
			End If
			strOut = strOut + mimeencode( w1 ) + mimeencode( w2 ) + _
					  mimeencode( w3 ) + mimeencode( w4 )
		Next
		base64_encode = strOut
	End Function

	Private Function mimeencode( byVal intIn )
		If intIn >= 0 Then 
			mimeencode = Mid( Base64Chars, intIn + 1, 1 ) 
		Else 
			mimeencode = ""
		End If
	End Function	

	' Function to decode string from Base64
	Public Function base64_decode( byVal strIn )
		Dim w1, w2, w3, w4, n, strOut
		For n = 1 To Len( strIn ) Step 4
			w1 = mimedecode( Mid( strIn, n, 1 ) )
			w2 = mimedecode( Mid( strIn, n + 1, 1 ) )
			w3 = mimedecode( Mid( strIn, n + 2, 1 ) )
			w4 = mimedecode( Mid( strIn, n + 3, 1 ) )
			If w2 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w1 * 4 + Int( w2 / 16 ) ) And 255 ) )
			If w3 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w2 * 16 + Int( w3 / 4 ) ) And 255 ) )
			If w4 >= 0 Then _
				strOut = strOut + _
					Chr( ( ( w3 * 64 + w4 ) And 255 ) )
		Next
		base64_decode = strOut
	End Function

	Private Function mimedecode( byVal strIn )
		If Len( strIn ) = 0 Then 
			mimedecode = -1 : Exit Function
		Else
			mimedecode = InStr( Base64Chars, strIn ) - 1
		End If
	End Function
```

Permalänk: https://www.webforum.nu/p/1453085

## #11 — ironhead, 2004-10-07T08:02Z

**Brimba:** öööh? Tack, men...
\<citat\>ps. avkodningen har jag fixat, men sen då?\</citat\>

Det jag mest ville veta är hur man på ett bra sätt tar hand om den sträng man "avkodat" och nu har i formatet:

myDecodedString = "param1=varde1& param2=varde2& param3=varde3"

för att dela upp & lägga in värdena i databasen på rätt ställe.

Jag hade gjort såhär, vilket var en dålig lösning:

```
'# Hämta Querysträngen
'# Avkoda den lägg den i "myDecodedString"

'# Dela upp parametrarna vid &
arrData = Split(myDecodedString, "&")

For i = 0 To Ubound(arrData)

		'# Separera Param & värdet
		arrDetail = Split(arrData(i), "=")

		param = Trim(arrDetail(0))
		val = Trim(arrDetail(1))

'# Separara värdena med komma, dock ej första rundan
if c=1 then
 d=","
end if

'# Parametrarna
a = a & d & param

'# Värdena
b = b & d & "'" & val & "'"

'# Räknare för att räkna bort första rundan
c=1

Next

'# Databaskoppling
'# Lägg in parametrarna & värdena i databasen

 strSQL = "INSERT INTO Highscore(" & a & ") VALUES(" & b & ")"
```

Permalänk: https://www.webforum.nu/p/1453467

---

Tråden på webben: https://www.webforum.nu/amne/asp/112400-parametrar-till-db
