Permalänk

SQL insert error - hjälp!

Med risk att verka som en total idiot lämnar jag nu över efter diverse ragequits.

Citat:

SQL = "INSERT INTO adminEdit (ip, browser, success, referer, pw, action, target, table) "
SQL = SQL & "VALUES('" & ipMedPunkter & "', '" & långAlphaNumeric & "', '" & bool & "', '" & HTTPadress & "', '" & passwordKortText & "', '" & actionKortText & "', '" & targetKortText & "', '" & tableKortText & "') "

*execute SQL variable*

italic = innehåll/datatyp

Är det något speciellt som gäller när det kommer till inmatning av boolean varabler? tänker på att 'text' borde bli en sträng, och inte en bool?

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk
Medlem

Vad är problemet?

Jag antar att din databashanterare är MySQL, och där är BOOL en TINYINT(1).

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Skrivet av Phod:

Vad är problemet?

Jag antar att din databashanterare är MySQL, och där är BOOL en TINYINT(1).

access 2000?

den ger mig ett syntax error, altså är någonting fel?

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk
Medlem

Posta SQL-frågan du kör och felmeddelandet du får.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Skrivet av Phod:

Posta SQL-frågan du kör och felmeddelandet du får.

det är ju olika varje gång, men antar att ett exempel skulle kunna se ut såhär:

Citat:

Insert into adminEdit (ip, browser, success, referer, pw, action, target, table)
values('123.123.123.123', 'firefox', 'true', 'http://previous.website.se', 'passwd', 'edit', '2', 'adminEdit')

Citat:

Kompileringsfel i Microsoft VBScript fel '800a0401'

Slut på programsats förväntas.

/lh10fiha/adminEdit.asp, rad 32

Insert into adminEdit (ip, browser, success, referer, pw, action, target, table) values('123.123.123.123', 'firefox', 'true', 'http://previous.website.se', 'passwd', 'edit', '2', 'adminEdit')
------------^

pilen pekar på a:et i admin edit efter insert into

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk
Medlem

Felmeddelandet säger ju att det är ASP-satsen som det är fel på, så det har inget med SQL att göra. Rent spontant så undrar jag om dina citationstecken är balanserade.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Skrivet av Phod:

Felmeddelandet säger ju att det är ASP-satsen som det är fel på, så det har inget med SQL att göra. Rent spontant så undrar jag om dina citationstecken är balanserade.

Oh, haha. det kanske man borde förstått själv? citationstecknena är faktiskt korekta, även om jag tycker att det borde finnas bättre sätt att mata in variabler i en sql-request... Våran lärare ger ut kod, men berättar inte i detalj vad den gör. Altså är det ett helvete att redigera (och felsöka eftersom han skriver som en kratta) den efter eget behov...

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk

man är ju bäst... här är det riktiga felmedelandet:

Citat:

Microsoft JET Database Engine fel '80040e14'

Syntaxfel i INSERT INTO-uttryck.

/adminEdit.asp, rad 38

rad 38:

Citat:

RS.Open SQL, con

vilken länkar till SQL:

Citat:

SQL = "INSERT INTO adminEdit (ip, browser, success, referer, pw, action, target, table) "
SQL = SQL & "VALUES('" & ip & "', '" & browser & "', '" & success & "', '" & referer & "', '" & pw & "', '" & action & "', '" & target & "', '" & table & "') "

och con:

Citat:

Set con = Server.CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.Jet.OLEDB.4.0; "&_
"Data Source="&Server.MapPath("data/db.mdb")
Set RS = Server.CreateObject("ADODB.Recordset")

SQL och con ligger några rader över "RS.Open SQL, con"

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk

Du skulle inte kunna ta ut värdet på "SQL" och visa? Antar att det du skrev förut bara var det värdet du trodde den skulle få?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk

kom på det själv, gjorde det nyss:

Citat:

INSERT INTO adminEdit (ip, browser, success, referer, pw, action, target, table) VALUES('78.71.203.66', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; sv-se) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5', '1', 'http://www.hemsida.se/adminMain.asp', 'correctReferer', '', '2', 'adressbok')

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk

det kanske hjälper ytterligare lite till att slänga upp hela källkoden?

Citat:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Option Explicit %>

<%
Dim con, RS, SQL, SQL2, ip, browser, success, referer, pw, action, target, table

action = Request.Form("action")
target = Request.Form("target")
table = request.form("table")

ip = Request.ServerVariables("REMOTE_HOST")
browser = request.ServerVariables("HTTP_USER_AGENT")
referer = request.ServerVariables("HTTP_REFERER")
if (referer = "http://www.hemsida.se/adminMain.asp") then

success = 1
pw = "correctReferer"
else
success = 0
pw = "falseReferer"
end if

Set con = Server.CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.Jet.OLEDB.4.0; "&_
"Data Source="&Server.MapPath("data/db.mdb")

SQL = "INSERT INTO adminEdit (ip, browser, success, referer, pw, action, target, table) "
SQL = SQL & "VALUES('" & ip & "', '" & browser & "', '" & success & "', '" & referer & "', '" & pw & "', '" & action & "', '" & target & "', '" & table & "') "

Set RS = Server.CreateObject("ADODB.Recordset")

if (success = 1) then
SQL2 = "DELETE FROM "& table
SQL2 = SQL2 & "WHERE ID='" & target & "'"
RS.Open SQL2, con
end if

RS.Open SQL, con

if (success = false) then

Response.Redirect("adminLogin.asp")
else
Response.Redirect("adminMain.asp")

end if

response.write(SQL)

'Städa
con.Close
Set con = Nothing
%>

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk

Vad händer om du testar att hårdkoda väldigt enkla värden på alla variabler?

Testa att sätta "[table]" istället för "table", jag tror att table kan vara reserverat

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Skrivet av KurreKula:

Vad händer om du testar att hårdkoda väldigt enkla värden på alla variabler?

Testa att sätta "[table]" istället för "table", jag tror att table kan vara reserverat

om en variabel är reserverad så säger den väl till när man lägger in den i databasen? har för mig att det hände när man skrev in "date" iaf... Blir "[table]" samma databaskolumn-namn som "table" ?

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk
Medlem

En booleansk variabel ska inte ha fnuttar runt sig utan där ska det bara stå True/False... ('text',True,'textmassa'). Så skippa ' runt din bool.

Apropå [table] så jepp det blir samma som fältet table.

Man kan inte säga det för ofta, men ta det som vana att sätta prefix på alla cellnamn, det minskar udda fel och underlättar när man ska binda ihop flera tabeller.

Hoppas det hjälper

Permalänk
Skrivet av fille3002:

om en variabel är reserverad så säger den väl till när man lägger in den i databasen? har för mig att det hände när man skrev in "date" iaf... Blir "[table]" samma databaskolumn-namn som "table" ?

Googlade lite och du ska få samma fel ifall den är reserverad, det var nån som hade samma fel med tabellnamnet password.

Det ska vara samma tabellnamn så du behöver bara ändra koden.

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk

Gör det någon skillnad på om det står 0/1 istället för false/true i en bool? isf har jag nog hittat felet...

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk
Medlem

De flesta databaser bryr sig inte om man köra på true/false alt. 1/0. Men access kan mycket väl ta illa upp av 1/0, den kan till och med vilja ha Sant/Falskt (om det är en svensk version).

Permalänk

Det verkar som access vill ha antingen true/false (utan ') eller -1/0...

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk

Den översätter till Sant/Falskt från true/false.

Citat:

INSERT INTO adminEdit (ip, browser, success, referer, pw, action, target, table) VALUES('78.70.203.66', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7', Sant, 'http://www.itgymnasiet-k.se/lh10fiha/adminMain.asp', 'correctReferer', '', '2', 'adressbok')

vilket fortfarande ger syntax-fel i INSERT INTO-uttryck...

och just ja, prefix?

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk
Medlem

Prefix är något i början på något, så om tabellen heter tex "adminEdit" ge alla celler prefixet "aeCellnamnet" dvs du lägger "ae" framför alla cellnamn. I ditt fall blir det typ "aeIP", "aeBrowser"... osv

Det underlättar då du slipper konflikter mellan tabeller och upptagna ord.

Om den vill ha sant/falskt så måste detta vara inom fnuttar då din ASP-kod inte fattar annars. Dvs 'Sant', men prova med 0(falskt) eller -1(sant) som sas ovan då jag också vill minnas att det var så Access-behandlade bool och då utan fnuttar dvs ('data',-1,'data').

Hur som helst skulle jag hellre se ett recordset när man matar in sådan data för att undvika säkerhetsproblem och även oväntade syntaxfel pga att indata råkar ha en fnutt med sig.

Permalänk

Okej, kan hjälpa när sidan växer senare. Dreamweaver vart glad om man bara skrev true eller false i asp-koden? dessa omvandlades sen till Sant/Falskt i asp, eftersom dom kom ut som det. Kan du bidra med en syntax för recordset? Är trots allt rätt så (läs "extremt") ny när det gäller sql... Känner igen namnet iaf.

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."

Permalänk
Medlem

Exempel på ett recordset i asp:

Set con = Server.CreateObject("ADODB.Connection") con.Mode = 3 con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/db.mdb") Set rs = Server.CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM adminEdit WHERE 1 = 2", Con, 1, 3 rs.AddNew rs("IP") = ipMedPunkter rs("Browser") = långAlphaNumeric rs("Success") = bool rs("Referer") = HTTPadress rs("PW") = passwordKortText rs("Action") = actionKortText rs("Target") = targetKortText rs("Table") = tableKortText rs.Update rs.Close Set rs = Nothing Con.Close Set Con = Nothing

WHERE 1 = 2 satt jag dit bara för att du inte ska hämta in alla poster bara för att du vill spara ner lite data. Den behövs egentligen inte.

Sedan några kommandon du kan använda i ett recordset:

rs.RecordCount - Ger antalet poster (Siffra) rs.EOF - Är jag i slutet av posterna (True/False) rs.BOF - Är jag i början av posterna (True/False) rs.MoveNext - Gå till nästa post rs.MovePrevious - Gå till föregående post rs.MoveLast - Gå till sista posten rs.MoveFirst - Gå till första posten rs.Move 1 - Gå till post 1 (kommer inte ihåg exakt hur denna användes, om det skulle vara Move(10,5) där 1 är antalet poster och 5 är posten man ska till) rs.Absoluteposition - Ger dig vilken post du är på i ordningen (Siffra)

Vissa av dessa kommandon kräver att du öppnar tabellen med vissa alternativ (där jag innan skrev 1,3 efter rs.open kan vissa kräva 3,3)
+ mycket mer.

Permalänk

Tack!
Du råkar inte ha något bra sätt att skydda sig mot dubletter? Det finns en "bug" i chrome som gör att man kan klicka som en idiot på submit, och därmed skicka 2miljoner likadana posts... captcha fungerar inte mot detta eftersom den inte hinner uppdatera bilden. Funderar på hur man ska kunna lägga in en variabel som ökar efter varje klick, och vägrar skicka om det är mer än 1, utan att använda bara javascript eftersom det körs lokalt, och kan ändras...

Visa signatur

Pappy :"Backup: Skyddar mot datafel när du på fyllan raderar 200GB pr0n och laddar hem två säsonger teletubbies istället."
Jocke1100 :"Det är väl en mekanisk kylavledning... Typ analog kylpasta..."