WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Jag har ett problem.... (https://www.wn.se/forum/showthread.php?t=2536)

danielblixt 2004-06-14 18:38

HEj!

Jag har slitit mitt hår i flera dagar med följande sats och kan inte komma på varför jag får ett felmeddelande vid uppdatering.

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC SQL Server Driver]Felaktigt COUNT-fält eller syntaxfel
/bilvard/insert.asp, line 10


Scriptet.
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/BILVARD.asp" -->
<%
set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_BILVARD_STRING
Recordset1.Source = "SELECT * FROM vardschema WHERE VARDSCHEMA_ID=" & Request.Querystring("SCHEMA_ID") & " "
Recordset1.CursorType = 0
Recordset1.CursorLocation = 2
Recordset1.LockType = 3
Recordset1.Open()
Recordset1_numRows = 0
Recordset1("VECKA_ID")=Request.Form("VECKAID")
Recordset1("KLAR")=Request.Form("KLAR")
Recordset1("KLAR_PERS_ID")=Request.Form("PERSON_ID ")
Recordset1.Update
Recordset1.Close
redir = "default.asp?vecka=" & Request.Querystring("VECKA")
Response.Redirect(redir)
%>



Hoppas någon har nån lösning.

/Daniel Blixt, SKövde

Max 2004-06-14 19:23

Felet blir ju när du försöker köra ditt query (rad 10). Jag skulle börja så här, steg för steg, för att felsöka:
1) Prova att skriva SQL-satsen utan request.querystring, dvs hårdkoda in ett värde och se om det fungerar då
2) kommentera bort raderna cursortyp, cursorlocation och locktype och se om det fung (default på dessa brukar räcka för ett läs-query)
3) Lägg in en kontroll att connection är uppe (men detta har du säkert redan kollat)

Jag skulle TRO att något av dessa kommer att visa felet, men jag vet ju inte vad du redan testat eftersom du bara nämner att du testat i flera dagar... Lycka till...

danielblixt 2004-06-14 19:46

Tack för tipsen.. Men jag har tyvärr redan provat dem.
Tilläggas kan också göra att alla andra databasscript på sajten fungerar utmärkt och den använder samma connection fil.

Här är en dump på tabellen det gäller.
CREATE TABLE [dbo].[VARDSCHEMA] (
[VARDSCHEMA_ID] [int] IDENTITY (1, 1) NOT NULL ,
[VECKA_ID] [int] NOT NULL ,
[AR] [int] NOT NULL ,
[BIL_ID] [int] NOT NULL ,
[ANSV_ID] [int] NOT NULL ,
[TYP_ID] [int] NULL ,
[KLAR] [int] NULL ,
[KLAR_DATUM] [datetime] NULL ,
[KLAR_PERS_ID] [int] NULL
) ON [PRIMARY]
GO

Max 2004-06-14 21:07

Ja, då är det väl bara att backa ännu längre tillbaka... Testa "SELECT * FROM vardschema", kolla att kopplingen verkligen är uppe (det finns ju en property för det, kommer inte ihåg vad den heter) etc...

danielblixt 2004-06-14 21:27

Det är tyvärr inga som helst problem med connection.
Men jag provade ändå att köra en vanlig select sats och det fungerar utmärkt.

Robert 2004-06-14 23:07

Se ALLTID till att validera alla requests innan du trycker in dom i sql satserna. Kör en trim på dom också innan.
Se upp för sql-injects om du kör sådär. Jag skulle med ganska lite kunskaper kunna radera hela din databas om du inte skyddar dig... :ph34r:

Jag brukar testa att skriva ut sql satsen i webläsaren och sedan klistra in den i SQL query analyzer och köra den därifrån. Då är det ganska lätt att utesluta syntaxfel eller datatypsfel iaf.

danielblixt 2004-06-15 23:19

Kan du förklara det där med VALIDERING lite bättre... Det är inte min starka sida..

/Daniel

Robert 2004-06-16 09:57

Du gör nu så här:

Kod:

Recordset1.Source = "SELECT * FROM vardschema WHERE VARDSCHEMA_ID=" & Request.Querystring("SCHEMA_ID")
...och det är livsfarligt att bara ta den parameter som (någon) har skrivit i url'en och skicka in i din sql sats.

Anta att din url är www.xyz.se/sida.asp?VARDSCHEMA_ID=8376453

Om jag skriver in en sql sats, tex "0 or 1=1;DROP TABLE users--&apa=1" så blir det såhär

www.xyz.se/sida.asp?VARDSCHEMA_ID=0 or 1=1;DROP TABLE users--&apa=1

Din SQL som du kör nu blir således

Kod:

SELECT * FROM vardschema WHERE VARDSCHEMA_ID=0 or 1=1;DROP TABLE users--
Det är samma sak som att man kan logga in många oskyddade system genom att skriva texten

Kod:

' or 1=1--
så man blir det första användaren i ett oskyddat system.

Jaja, nog om detta nu.

Validering sa du, japp, typ att du först requestar ett värde och tilldelar en variabel som du sedan kollar så att den är ok, typ

Kod:

dim sInput
sInput = Request.Querystring("VARDSCHEMA_ID") 'hämta värde
sInput = trim(sInput) ' ta bort alla "trailing spaces" som webläsaren/användaren kan ha pillat dit
sInput = replace(sInput, "'", "&quote;") 'ersätter ' med "

Recordset1.Source = "SELECT * FROM vardschema WHERE VARDSCHEMA_ID=" & sInput

Nu skrev jag sInput valideringarna på olika rader för tydlighetens skull, och valideringarna i sig var bara exempel. Det du antagligen vill göra är att kolla så att ditt VARDSCHEMA_ID är numerisk, har en viss längd och uppfyller olika krav INNAN du kör den i din sql sats.


Alla tider är GMT +2. Klockan är nu 23:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson