---
title: "Problem med update"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/73088-problem-med-update"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "dahlgren"
published: "2003-04-03T18:41:41.000Z"
updated: "2003-04-03T20:30:20.000Z"
replies: 7
views: 255
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/73088-problem-med-update"
---

# Problem med update

## #1 — dahlgren, 2003-04-03T18:41Z

Jag håller på med en update-fråga som inte vill funka.

```
SQL = "SELECT * FROM login WHERE Login = " & Trim(Session("login"))
Set RecSet = Conn.Execute(SQL)

RecSet.Close
Set RecSet = Nothing

SQL1 = "UPDATE login SET besok = besok + 1, datum = '"&Now() & "' WHERE Login = " & Trim(Session("login")) 
Conn.Execute (SQL1)

Response.write sql
response.write "<br>"
response.write sql1
```

När jag skriver ut frågorna så får jag detta. 
SELECT \* FROM login WHERE Login = admin
UPDATE login SET besok = besok + 1, datum = '2003-04-03 20:31:34' WHERE Login = admin 

Så här långt kan inte jag se några konstigheter eller felmedelande. Det ända som visar att det inte fungerar är att det inte uppdateras i databas. 
Login är av typen varchar(50)
besok int
datum datetime
Är det någon som har en ide ang vad som kan vara fel?

Permalänk: https://www.webforum.nu/p/73088

## #2 — LarsG, 2003-04-03T18:49Z

```
SQL1 = "UPDATE login SET besok = besok + 1, datum = '"&Now() & "' WHERE Login = '" & _
replace(Trim(Session("login")),"'","''") & "'" 
Conn.Execute SQL1,,128
```

Permalänk: https://www.webforum.nu/p/1000184

## #3 — dahlgren, 2003-04-03T18:54Z

Tack, nu funkar det. 
Varför behöver man köra replacen?

Permalänk: https://www.webforum.nu/p/1000188

## #4 — LarsG, 2003-04-03T19:08Z

Nu kanske du har kontroll över vad som ligger i session, men generellt sett så kan det bli mycket fel om man inte gör replace.

Om du tar ett värde som någon matar in och lägger in det direkt i en sql fråga, t.ex.

```
' or 1 = 1 -- lurad
```

I ditt fall så skulle sql-frågan då bli

```
update login 
set besok = besok + 1, datum = now()
where login = '' or 1=1 -- lurad'
```

vilket innebär att alla poster uppdateras (-- betyder kommentar i SQL).

Permalänk: https://www.webforum.nu/p/1000197

## #5 — dahlgren, 2003-04-03T19:11Z

Ok, nu blev jag lite klokare.  :)

Permalänk: https://www.webforum.nu/p/1000199

## #6 — aasah, 2003-04-03T19:51Z

Vad innebär strängen:

replace(Trim(Session("login")),"'","''") ?
Byts alla ' mot " eller tvärtom? Jag förstår vad den är till för, bara inte varför den förhindrar exemplet med lurad? Alltså, kan någon förklara hur 

where login = '' or 1=1 -- lurad' ser ut efter replace?

Permalänk: https://www.webforum.nu/p/1000212

## #7 — LarsG, 2003-04-03T19:57Z

Man byter ' mot två 

```
''
```

 vilket är det sätt SQL har för att ange en ' i en sträng

för att fortsätta på föregående exempel. Om man gör replace så blir det

```
update login 
set besok = besok + 1, datum = now()
where login = ''' or 1=1 -- lurad'
```

dvs man jämför login med den inmatade strängen.

Permalänk: https://www.webforum.nu/p/1000217

## #8 — aasah, 2003-04-03T20:30Z

TACK! Jag tror jag fattar... :)

SQL tolkar "' (tre fnuttar) som ' (en fnutt)?
Så att ur SQLs perspektiv så blir login = hela det inmatade uttrycket?

Permalänk: https://www.webforum.nu/p/1000240

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/73088-problem-med-update
