webForumDet fria alternativet

update loop

ASPur ASP

13 svar · 638 visningar · startad av saturday

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

Hej,

Har ett skumt problem. Har en databas med 48 rader som i nedan loop ska uppdateras. Scriptet kör igenom utan error, har även prövat skriva ut "sql" med response.write för att se att strängarna loopas ut rätt. Men felet är att databasen aldrig uppdateras...

Någon som kan se varför, jag ser inte vad som är fel och det gör tydligen inte servern heller? (Har kommenterat i koden så att ni enklare kan se vad jag gör.)

for i = 1 to 48

	'Variabel som byter namn med loopen för att veta vilket fältnamn som ska hämtas
	sku = "sku" & Cstr(i)
	
	'DB uppkoppling
	Set conn = Server.CreateObject("ADODB.Connection")
	conn.open "minDSN"
	
	'sql sträng
	sql = "UPDATE games SET sku = '"& request.form(sku) &"' WHERE id = '" & i &"'"
	conn.execute(sql)
	
next
Medlem sedan mars 20032 667 inlägg
#2

Jag ser tre märkligheter:
1. Har du 48 kolumner i tabellen games som heter sku1, sku2 ... ?
2. Variabeln i är numerisk och ska inte ha ' ' runt sig.
3. Variabeln sku används aldrig till något inne i loopen.

Medlem sedan juni 20014 421 inlägg
#3

Vad har du för datatyp på idt i databasen? Just nu behandlar du det som en sträng.

Dessutom är det sql injection varning på request.form(sku)

Edit, K@llen var snabbare.

Men variabeln sku används visst. Nämligen i request.form(sku)

Medlem sedan jan. 2007133 inlägg
#4

Jag ser tre märkligheter:
1. Har du 48 kolumner i tabellen games som heter sku1, sku2 ... ?
*Nej, en kolumn som heter "sku". Däremot när jag skriver ut dem i 48 stycken input text boxar(Där man kan redigera dem) som jag döper till sku1, sku2, osv.

sql = "UPDATE games SET sku = '"& request.form(sku) &"' WHERE id = " & i & ""*

2. Variabeln i är numerisk och ska inte ha ' ' runt sig.
Har prövat med och utan.

3. Variabeln sku används aldrig till något inne i loopen.
Jo, sku är variabeln som sätter namnet på den input text box som scriptet ska hämta data ifrån.(Hoppas jag verkligen i alla fall, den gör det med response.write)

Medlem sedan mars 20032 667 inlägg
#5

saturday skrev:

Jag ser tre märkligheter:
1. Har du 48 kolumner i tabellen games som heter sku1, sku2 ... ?
*Nej, en kolumn som heter "sku". Däremot när jag skriver ut dem i 48 stycken input text boxar(Där man kan redigera dem) som jag döper till sku1, sku2, osv.

sql = "UPDATE games SET sku = '"& request.form(sku) &"' WHERE id = " & i & ""*

2. Variabeln i är numerisk och ska inte ha ' ' runt sig.
Har prövat med och utan.

3. Variabeln sku används aldrig till något inne i loopen.
Jo, sku är variabeln som sätter namnet på den input text box som scriptet ska hämta data ifrån.(Hoppas jag verkligen i alla fall, den gör det med response.write)

Vad vill du då göra med följande rad?
sku = "sku" & Cstr(i)

Medlem sedan jan. 2007133 inlägg
#6

i bör väl vara INT, förutom när jag gör om det till str för variabeln sku? id i databasen är INT.

Medlem sedan jan. 2007133 inlägg
#7

K@llen skrev:

Vad vill du då göra med följande rad?
sku = "sku" & Cstr(i)

sku = sku1
sku = sku2
sku = sku3
osv för varje loop

Den färdiga frågan ser ut exempelvis så här:
sql = "UPDATE games SET sku = '123456' WHERE id = '23'"

Medlem sedan juni 20014 421 inlägg
#8

K@llen, han använder ju den i sin request.form(sku). Och han sätter fältet sku till skun beroende på vad var loopen är.

Saturday, gör en response.write på det hela och skicka in frågan direkt i databasen och se vad den säger. Du kan prova att göra en liknane select också.

Medlem sedan jan. 2007133 inlägg
#9

colione skrev:

K@llen, han använder ju den i sin request.form(sku). Och han sätter fältet sku till skun beroende på vad var loopen är.

Saturday, gör en response.write på det hela och skicka in frågan direkt i databasen och se vad den säger. Du kan prova att göra en liknane select också.

Aye, det ska jag göra. Brb.

Medlem sedan dec. 19996 721 inlägg
#10

on error goto 0

'Öppna inte 48 databaskopplingar

'DB uppkoppling
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "minDSN"

for i = 1 to 48

	'Variabel som byter namn med loopen för att veta vilket fältnamn som ska hämtas
	sku = "sku" & Cstr(i)
	
	
	
	'sql sträng
	sql = "UPDATE games SET sku = '"& replace(request.form(sku),"'","''") &"' WHERE id = " & i 
	conn.execute sql,,128
	
next
conn.close
Medlem sedan jan. 2007133 inlägg
#11

Haha, glöm det. Som vanligt är det alltid något banalt... Som exempelvis fel tabellnamn... ;)

Tack iaf för snabb response, som vanligt.

Medlem sedan jan. 2007133 inlägg
#12

Ah, hade jag missat helt, totalt sant. Fixar.

emission skrev:


on error goto 0

'Öppna inte 48 databaskopplingar

'DB uppkoppling
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "minDSN"

for i = 1 to 48

	'Variabel som byter namn med loopen för att veta vilket fältnamn som ska hämtas
	sku = "sku" & Cstr(i)
	
	
	
	'sql sträng
	sql = "UPDATE games SET sku = '"& replace(request.form(sku),"'","''") &"' WHERE id = " & i 
	conn.execute sql,,128
	
next
conn.close
Medlem sedan mars 20032 667 inlägg
#13

colione skrev:

K@llen, han använder ju den i sin request.form(sku). Och han sätter fältet sku till skun beroende på vad var loopen är.

Saturday, gör en response.write på det hela och skicka in frågan direkt i databasen och se vad den säger. Du kan prova att göra en liknane select också.

Såg det. Sveret blev uppdaterat precis när jag svarade.

Jag skulle nog inte gjort på det sättet. Utan uformat skriptet så jag kan uppdatera alla rader i samma fråga.

Något i stil med: (psevdokod)
UPDATE games SET sku = '"& request.form(sku) &"' WHERE id in (" & request.form("IdFromCheckboxar"))

Medlem sedan jan. 2007133 inlägg
#14

K@llen skrev:

Såg det. Sveret blev uppdaterat precis när jag svarade.

Jag skulle nog inte gjort på det sättet. Utan uformat skriptet så jag kan uppdatera alla rader i samma fråga.

Något i stil med: (psevdokod)
UPDATE games SET sku = '"& request.form(sku) &"' WHERE id in (" & request.form("IdFromCheckboxar"))

Det är fullt möjligt att det är bättre. Detta är dock första gången jag uppdaterar mer än en rad i en databas så detta var den enda lösningen jag kunde komma på.

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