---
title: "Kan inte uppdatera databas"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/185739-kan-inte-uppdatera-databas"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "SoulGod"
published: "2011-01-12T12:57:05.000Z"
updated: "2011-08-19T02:06:20.000Z"
replies: 8
views: 1238
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/php/185739-kan-inte-uppdatera-databas"
---

# Kan inte uppdatera databas

## #1 — SoulGod, 2011-01-12T12:57Z

Jag kan inte uppdatera min databas, och anar att jag missar något i min kod ....

```
if(mysql_real_escape_string($_GET['do']) == "update") {
 	$titel = mysql_real_escape_string($_POST['titel']);	
	$nyhet = mysql_real_escape_string($_POST['nyhet']);
	
 $id = $_GET['id'];		 	
 $laggTill = "UPDATE nyhet WHERE ID = $id SET titel='$titel', nyhet='$nyhet'";
		
		mysql_query($laggTill) or die("Det gick inte att lägga till information!");   
	// När allt är sparat, skicka vidare till nyheter
	header('Location: nyhet.php');
 }
```

Om jag struntar i update, och testar att skriva ut $titel, $nyhet, $id så skriver den ut allt rätt .... va gör jag fel?

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

## #2 — voigtann1, 2011-01-12T13:06Z

Du sätter SET före du kör WHERE:

```
"UPDATE nyhet SET titel='$titel', nyhet='$nyhet' WHERE ID = $id"
```

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

## #3 — @nders, 2011-01-12T13:16Z

Ditt felmeddelande "Det gick inte..." är inte speciellt informativt för dig. Skriv ut det riktiga felmeddelandet istället med mysql_error().

<http://php.net/manual/en/function.mysql-error.php>

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

## #4 — GunnarD, 2011-01-12T13:28Z

Gammalt hederligt tips som många missar :)

Vid felsökning sätt in raden:

```
echo mysql_error();
```

Efter mysql_query() så får du reda på eventuella felmeddelande från MySQL i klartext, eller sätt det i die() uttrycket.

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

## #5 — MickeA.com, 2011-01-12T14:24Z

> **[SoulGod skrev:](https://www.webforum.nu/p/1527043)**
>
> ....va gör jag fel?

Dels det som *voigtann1* säger och **dels att *$id* inte är skyddad mot sqlinjektioner.**

Varför kör du *mysql_real_eascape_string()* på din *$\_GET\['do'\] == "update"* men **inte på den variabel som verkligen kan ställa till stora problem!?**

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

## #6 — SoulGod, 2011-01-12T15:41Z

Tack , det var jag som var trög ...

Och jag hade faktiskt missat det, korkat nog ..
Tur att ni underbara människor är vakna :)

Slutgiltiga blev följande

```
if(mysql_real_escape_string($_GET['do']) == "update") {
 	$titel = mysql_real_escape_string($_POST['titel']);	
	$nyhet = mysql_real_escape_string($_POST['nyhet']);
	
 $id = mysql_real_escape_string($_GET['id']);
// $laggTill = "UPDATE nyhet WHERE ID = $id SET titel='$titel', nyhet='$nyhet'";
 $laggTill = "UPDATE nyhet SET titel='$titel', nyhet='$nyhet' WHERE ID = $id";
		
		mysql_query($laggTill) or die("Det gick inte att lägga till information!");   
	// När allt är sparat, skicka vidare till nyheter
	header('Location: nyhet.php');
 }
```

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

## #7 — MickeA.com, 2011-01-12T15:47Z

Fortfarande helt onödigt att använda *mysql_real_escape_string()* på din $\_GET\['do'\], bättre om du läser på lite om det och gör rätt från början, så blir koden bättre optimerad och snyggare.

Bättre och mycket snyggare om du kör en funktion, t.ex. den här:

```php
function safesql($value){
	$value = trim($value);
	if(get_magic_quotes_gpc()){
		$value = stripslashes($value);
	}
	// check if this function exists
	if(function_exists("mysql_real_escape_string")){
		$value = mysql_real_escape_string($value);
	}else{
		// for PHP version < 4.3.0 use addslashes
		$value = addslashes($value);
	}
	return $value;
}
```

Så är det bara att köra det här där du samlar in GET/POST-data:

```php
$id = safesql($_POST['id']);
```

Blir dessutom himla lätt att ändra om det skulle behövas, eftersom en ändring i funktionen får effekt på alla dina sidor.

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

## #8 — GunnarD, 2011-01-12T16:11Z

Och om man inte vill ändra allt för mycket så kan man göra:

```
$_POST['id'] = safesql($_POST['id']);
```

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

## #9 — dwmedia, 2011-08-19T02:06Z

Själv kör jag en närliggades system som MickeA 

Jag gjorde min så här 

```
function db_escape($post)
{
   if (is_string($post)) {
     if (get_magic_quotes_gpc()) {
        $post = stripslashes($post);
     }
     return mysql_real_escape_string($post);
   }
   
   foreach ($post as $key => $val) {
      $post[$key] = db_escape($val);
   }
   
   return $post;
}
```

Sedan kör jag överst i typ submit 

$\_POST = db_escape($\_POST);

Så kan du bara använda vanlig post också.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/185739-kan-inte-uppdatera-databas
