Prova detta:
SQL = "UPDATE annonser SET typ = '" & server.htmlencode(request.form("typ")) & "' WHERE ID = " & Request.QueryString("idnummer")
Databas.execute(SQL)
12 svar · 238 visningar · startad av Pellefant
SQL = "SELECT * FROM annonser"
RecSet.Open SQL, Databas, adOpenStatic, adLockOptimistic
RecSet.AddNew
RecSet("typ") = server.htmlencode(request.form("typ"))
Har denna, och en ny post skapas, men hur gör man om man vill ersätta en befintlig post istället, säg tex där ID är 22 (egentligen Request.QueryString("idnummer") i ASP)?
(någon slags "Replace" alltså ?)
Tack på förhand.
Prova detta:
SQL = "UPDATE annonser SET typ = '" & server.htmlencode(request.form("typ")) & "' WHERE ID = " & Request.QueryString("idnummer")
Databas.execute(SQL)
Varför gör du htmlencode på det du lägger in i databasen?
typ = "'" & replace(request.form("typ"),"'","''") & "'"
connect.execute "update annonser set typ = " & typ & _
" where id = " & Request.QueryString("idnummer")
Det är dags att lämna recordsetträsket.
Tack så hemskt mycket.
Föjdfråga, om man har flera(i mitt fall ca 10) saker som ska uppdateras, kan man slå ihop det i en SQL sats då, eller blir det 10 st SQL satser?
SQL = "UPDATE annonser SET typ = '" & server.htmlencode(request.form("typ")) & "' WHERE ID = " & Request.QueryString("idnummer")
De tre första:
RecSet("typ") = server.htmlencode(request.form("typ"))
RecSet("titel") = server.htmlencode(request.form("titel"))
RecSet("forfattare") = server.htmlencode(request.form("forfattare"))
Tack på förhand. (igen)
Det går att uppdatera flera kolumner samtidigt.
typ = "'" & replace(request.form("typ"),"'","''") & "'"
titel = "'" & replace(request.form("titel"),"'","''") & "'"
connect.execute "update annonser set typ = " & typ & _
", titel = " & titel & _
" where id = " & Request.QueryString("idnummer")
Hej igen!
Får inte ihop det riktigt ändå, vad kan jag tänklas göra för fel?
SQL = "UPDATE annonser SET
typ = "'" & replace(request.form("typ"),"'","''") & "'"
titel = "'" & replace(request.form("titel"),"'","''") & "'"
forfattare = "'" & replace(request.form("forfattare"),"'","''") & "'"
amne = "'" & replace(request.form("amne"),"'","''") & "'"
email = "'" & replace(request.form("email"),"'","''") & "'"
losenord = "'" & replace(request.form("losenord"),"'","''") & "'"
utgar = "'" & replace(request.form("utgar"),"'","''") & "'"
upplaga = "'" & replace(request.form("upplaga"),"'","''") & "'"
saljespris = "'" & replace(request.form("saljespris"),"'","''") & "'"
kopespris = "'" & replace(request.form("kopespris"),"'","''") & "'"
isbn = "'" & replace(request.form("isbn"),"'","''") & "'"
ovrigt = "'" & replace(request.form("ovrigt"),"'","''") & "'"
connect.execute "update annonser set typ = " & typ & _
", titel = " & titel & _
", forfattare = " & forfattare & _
", amne = " & amne & _
", email = " & email & _
", losenord = " & losenord & _
", utgar = " & utgar & _
", upplaga = " & upplaga & _
", saljespris = " & saljespris & _
", kopespris = " & kopespris & _
", isbn = " & isbn & _
", ovrigt = " & ovrigt & _
" where id = " & Request.QueryString("idnummer")
RecSet.Open SQL, Databas, adOpenStatic, adLockOptimistic
RecSet.Update
RecSet.Close
Databas.Close
%>
Felmed:
Microsoft VBScript compilation error '800a0409'
Unterminated string constant
/kursbok/addredigera.asp, line 28
SQL = "UPDATE annonser SET
------------------------------------^
Tag bort denna rad
SQL = "UPDATE annonser SET
Jag ser att du använder
upplaga = "'" & replace(request.form("upplaga"),"'","''") & "'"
för alla kolumner. Det skall man bara göra om datatypen är varchar/text. Om det är tal så gör man bara
upplaga = request.form("upplaga")
Jag igen...
<%
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("\kursbok\db\kurslitt.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
typ = "'" & replace(request.form("typ"),"'","''") & "'"
titel = "'" & replace(request.form("titel"),"'","''") & "'"
forfattare = "'" & replace(request.form("forfattare"),"'","''") & "'"
amne = "'" & replace(request.form("amne"),"'","''") & "'"
email = "'" & replace(request.form("email"),"'","''") & "'"
losenord = "'" & replace(request.form("losenord"),"'","''") & "'"
utgar = "'" & replace(request.form("utgar"),"'","''") & "'"
upplaga = "'" & replace(request.form("upplaga"),"'","''") & "'"
saljespris = "'" & replace(request.form("saljespris"),"'","''") & "'"
kopespris = "'" & replace(request.form("kopespris"),"'","''") & "'"
isbn = "'" & replace(request.form("isbn"),"'","''") & "'"
ovrigt = "'" & replace(request.form("ovrigt"),"'","''") & "'"
connect.execute "update annonser set typ = " & typ & _
", titel = " & titel & _
", forfattare = " & forfattare & _
", amne = " & amne & _
", email = " & email & _
", losenord = " & losenord & _
", utgar = " & utgar & _
", upplaga = " & upplaga & _
", saljespris = " & saljespris & _
", kopespris = " & kopespris & _
", isbn = " & isbn & _
", ovrigt = " & ovrigt & _
" where id = " & Request.QueryString("idnummer")
RecSet.Open SQL, Databas, adOpenStatic, adLockOptimistic
RecSet.Update
RecSet.Close
Databas.Close
%>
Nu får jag felmed:
Microsoft VBScript runtime error '800a01a8'
Object required: ''
/kursbok/addredigera.asp, line 43
Rad 43 är: connect.execute "update etc...
alla kolumner är av typen text, utom "ovrigt" som är "PM", men jag förmodar att det ska behandlas som text/varchar också.
Ovanstående är "all" kod alltså, som berör databasen. I början av sidan har jag även:
<%session.lcid = 1053%>
<% Response.Buffer = True %>
<!-- #include file="adovbs.inc" -->
Kollade just att också querystringen "idnummer" finns, och det gjorde den.
P.s Länken är : http://www.kursbok.tk/
och det går att logga in på "redigera annons" med test/test
Jo PM hanteras som text. Det har blivit lite namnförvirring, connect istället för databas. Jag tog bort all kod med recset eftersom det inte behövs.
<%
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("\kursbok\db\kurslitt.mdb")
typ = "'" & replace(request.form("typ"),"'","''") & "'"
titel = "'" & replace(request.form("titel"),"'","''") & "'"
forfattare = "'" & replace(request.form("forfattare"),"'","''") & "'"
amne = "'" & replace(request.form("amne"),"'","''") & "'"
email = "'" & replace(request.form("email"),"'","''") & "'"
losenord = "'" & replace(request.form("losenord"),"'","''") & "'"
utgar = "'" & replace(request.form("utgar"),"'","''") & "'"
upplaga = "'" & replace(request.form("upplaga"),"'","''") & "'"
saljespris = "'" & replace(request.form("saljespris"),"'","''") & "'"
kopespris = "'" & replace(request.form("kopespris"),"'","''") & "'"
isbn = "'" & replace(request.form("isbn"),"'","''") & "'"
ovrigt = "'" & replace(request.form("ovrigt"),"'","''") & "'"
databas.execute "update annonser set typ = " & typ & _
", titel = " & titel & _
", forfattare = " & forfattare & _
", amne = " & amne & _
", email = " & email & _
", losenord = " & losenord & _
", utgar = " & utgar & _
", upplaga = " & upplaga & _
", saljespris = " & saljespris & _
", kopespris = " & kopespris & _
", isbn = " & isbn & _
", ovrigt = " & ovrigt & _
" where id = " & Request.QueryString("idnummer")
Databas.Close
%>
Glöm det om test/test ovan....upptäckte just att det gick att ladda ner hela db:n, vilket lätt göres med hjälp av koden ovan och grundläggande kännedom om Brinkster. Jag blev allt lite chockad när jag märkte hur enkelt det var. Så jag ska lösa det först, så det inte går, sen lösa problemet som beskrivs i denna tråden. Har plockat ner db:n för närvarande.
Aha, tack för koden ovan LarsG, ska testa den senare ikväll, när jag fått ordning på "säkerhetsluckan".
Pust, nu har jag bytt namn på databasen till något som är svårt att lista ut, typ "g48f34f79.mdb". Håller på att lägga in id, lösenord också på databasen, Koden ovan fick det att fungera LarsG, ett stort tack.