webForumDet fria alternativet

Update och klåpare

ASPur ASP

14 svar · 508 visningar · startad av Nova

Medlem sedan feb. 2005216 inlägg
Frågan#1

Hur får man en update att fungera om man är en klåpare som jag på asp. jag har klippt och klistrat i hop detta men jag får det inte att fungera.

<%  
Set Recset = Server.CreateObject("ADODB.Recordset")
Connection = MM_jaktdagbok_STRING
Uppdatera = "SELECT * FROM anvandare WHERE ID = " & Request.Form("anv_nr") & " "

RecSet.Open Uppdatera, Connection, adOpenStatic, adLockOptimistic 
RecSet("anv_namn") = Request.Form("namn")
RecSet("anv_enamn") = Request.Form("e_namn")
RecSet("anv_fodd") = Request.Form("fodd")
RecSet("anv_ort") = Request.Form("ort")
RecSet("anvmail_osyn") = Request.Form("mailadress")
RecSet("anv_alias") = Request.Form("alias")
RecSet("anv_losen") = Request.Form("losen")
RecSet("anv_beskrivning") = Request.Form("beskrivning")
RecSet.Update
RecSet.Close
Conn.Close
Response.Redirect  "testinloggad.asp"
 %>

Detta felmedelande får jag nu

Error Type:
ADODB.Recordset (0x800A0BB9)
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
/jaktdagbok/wwwroot/testupp_datera.asp, line 9

Och detta är rad 9

RecSet.Open Uppdatera, Connect, adOpenStatic, adLockOptimistic
Medlem sedan dec. 20025 483 inlägg
#2

Använd UPDATE istället:

str = "update anvandare set" & _
    " anv_namn = " & request.form("namn") & "," & _
    " anv_enamn = " & request.form("e_namn") & "," & _
    " anv_fodd = " & request.form("fodd") & "," & _
    " anv_ort = " & request.form("ort") & "," & _
    " anvmail_osyn = " & request.form("mailadress") & "," & _
    " anv_alias = " & request.form("alias") & "," & _
    " anv_losen	= " & request.form("losen") & "," & _
    " anv_beskrivning = " & request.form("beskrivning") & _
    " where id = " clng(request.form("anv_nr"))

set conn = server.createobject("adodb.connection")
conn.open MM_jaktdagbok_STRING
conn.execute str, ,128
conn.close
set conn = nothing

Sedan kan det givetvis vara bra att skydda sig mot SQL-injections. Sök i detta forum och du skall finna!

Medlem sedan juni 200032 969 inlägg
#3

Jag håller med Peter S om att det är bättre att använda en UPDATE-fråga istället. Men, man måste då se till att ha apostrofer runt textvärden också. Jag gissar lite vad det är för datatyper på fälten, men något sånt här kan det se ut:

str = "update anvandare set" & _
    " anv_namn = '" & request.form("namn") & "'," & _
    " anv_enamn = '" & request.form("e_namn") & "'," & _
    " anv_fodd = " & request.form("fodd") & "," & _
    " anv_ort = '" & request.form("ort") & "'," & _
    " anvmail_osyn = '" & request.form("mailadress") & "'," & _
    " anv_alias = '" & request.form("alias") & "'," & _
    " anv_losen = '" & request.form("losen") & "'," & _
    " anv_beskrivning = '" & request.form("beskrivning") & "'" & _
    " where id = " clng(request.form("anv_nr"))

Om fältet fodd är av datumtyp skall det vara brädgårdar runt värdet.

- - - - - -

Anledningen till att du fick ett felmeddelande på din första kod är sannolikt att de konstanter du använder (adOpenStatic, adLockOptimistic) inte är definierade på sidan. Ett sätt att göra detta är att inkludera filen adovbs.inc på sidan:

<!-- #include virtual="adovbs.inc" -->

Mvh

Medlem sedan feb. 2005216 inlägg
#4

Det protesterade först mot

" where id = " clng(request.form("anv_nr"))

så jag böt det mot

  " WHERE ID = " & Request.Form("anv_nr") & " "

nu får jag ett annat felmedelande nu

str = "update anvandare set" & _
    " anv_namn = '" & request.form("namn") & "'," & _
    " anv_enamn = '" & request.form("e_namn") & "'," & _
    " anv_fodd = " & request.form("fodd") & "," & _
    " anv_ort = '" & request.form("ort") & "'," & _
    " anvmail_osyn = '" & request.form("mailadress") & "'," & _
    " anv_alias = '" & request.form("alias") & "'," & _
    " anv_losen = '" & request.form("losen") & "'," & _
    " anv_beskrivning = '" & request.form("beskrivning") & "'" & _
    " WHERE ID = " & Request.Form("anv_nr") & " "
	set conn = Server.CreateObject("ADODB.Connection")
conn.Open MM_jaktdagbok_STRING
conn.execute str, 128
conn.close
set conn = nothing%>

detta felmedelande blir det

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
/jaktdagbok/wwwroot/sida_som_uppdaterar.asp, line 19

Browser Type:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.1.4322; .NET CLR 1.0.3705) 

Page:
POST 152 bytes to /jaktdagbok/wwwroot/sida_som_uppdaterar.asp

POST Data:
anv_nr=2&namn=Jonas&e_namn=N%E4slund&fodd=1971&ort=Lule%E5&mailadress=jonas@jaktdagbok.se&alias=Jonte&losen=jonas&beskrivning=jag+%E4r+lat&Submit=Submit

Rad nr 19

conn.Open MM_jaktdagbok_STRING
Medlem sedan juni 200032 969 inlägg
#5

Har du gett MM_jaktdagbok_STRING något värde?

Medlem sedan feb. 2005216 inlägg
#6

Ops jag hade inte med #include file="../Connections/jaktdagbok.asp

Men nu protesterar det mot

Error Type:
Microsoft JET Database Engine (0x80040E14)
Syntax error in UPDATE statement.
/jaktdagbok/wwwroot/sida_som_uppdaterar.asp, line 21

Rad 21 är

conn.execute str, 128
Medlem sedan juni 200032 969 inlägg
#7

Skriv ut variabeln str med Response.write, så får vi se hur den färdiga SQL-frågan ser ut.

Mvh

Medlem sedan feb. 2005216 inlägg
#8
update anvandare set anv_namn = 'Jonas', anv_enamn = 'Näslund', anv_fodd = 1971, anv_ort = 'Luleå', 
anvmail_osyn = 'jonas@jaktdagbok.se', anv_alias = 'Jonte', 
anv_losen = 'jonas', anv_beskrivning = 'jag är lat' WHERE ID = 2

Jag har radbrutit koden lite.

Medlem sedan juni 200032 969 inlägg
#9

Jag ser inte direkt något fel i just UPDATE-frågan, men däremot är execute-raden något felaktig, du saknar ett kommatecken.

conn.execute str,[b] ,[/b] 128

mvh

Medlem sedan maj 200010 687 inlägg
#10

Hej SQL-injection!

Medlem sedan feb. 2005216 inlägg
#11

När jag försöker öppna sidan som uppdaterar Med

conn.execute str, , 128

Blir felmedelandet

Error Type:
Microsoft JET Database Engine (0x80040E14)
Syntax error in UPDATE statement.
/jaktdagbok/wwwroot/sida_som_uppdaterar.asp, line 21

När jag skickar värden från en annan sida, till sidan som uppdaterar så får jag detta

Error Type:
Microsoft JET Database Engine (0x80040E10)
No value given for one or more required parameters.
/jaktdagbok/wwwroot/sida_som_uppdaterar.asp, line 21

Ja Erik jag tror mig veta att det behöver ordnas. Men eftersom jag är en "klåpare" på Asp så försöker jag lösa en sak åt gången :)

Medlem sedan nov. 20017 144 inlägg
#12

Det är för att du antagligen försöker lägga in ett nullvärde eller liknande.
I sådana här fall är det alltid bra att skriva ut sql-satsen för att se vad som spökar.

str = "bla bla bla"
With Response
    .Write str
    .end
End With
conn.execute str, , 128
Medlem sedan feb. 2005216 inlägg
#13
update anvandare set anv_namn = '', anv_enamn = '', anv_fodd = , anv_ort = '', 
anvmail_osyn = '', anv_alias = '', anv_losen = '', anv_beskrivning = '' WHERE ID =

Detta blir det med Jesper.T, det säger inte mig något men kanske någon annan. Jag har radbrutit koden.

Medlem sedan feb. 2005216 inlägg
#14

Hittade felet det var som jag trodde att jag är en nybörjare,

" WHERE ID = " & Request.Form("anv_nr") & " "

ska ju självklart eller? vara

" WHERE anv_nr = " & Request.Form("anv_nr") & " "
Medlem sedan nov. 20017 144 inlägg
#15

Du kan ta bort : & " "
i slutet, onödigt att lägga in luft... ;)

139 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)