---
title: "Problem med inskrivning i db"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/141294-problem-med-inskrivning-i-db"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Dwarfen"
published: "2006-01-22T17:17:08.000Z"
updated: "2006-01-24T06:09:46.000Z"
replies: 9
views: 663
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/141294-problem-med-inskrivning-i-db"
---

# Problem med inskrivning i db

## #1 — Dwarfen, 2006-01-22T17:17Z

Sitter och försöker få in värden i en databas, men det vill sig inte.
Får upp följande felkod 

```
Parse error: syntax error, unexpected '"' in admin\kommentera_forum.php on line 44
```

Koden har jag suttit och kollat igenom flera gånger nu, men nu hittar jag inte mer fel...

```php
$sql = "insert into kommentera_forum (forumid, forumip, forumkommentar, forumuid, forumdatum) values ('". $_POST['forumid'] 

."','". $_SERVER['REMOTE_ADDR'] .'", '" . $_POST['forumkommentar'] . '", '" . $_SESSION['UID'] ."', '". $_POST['flkommentar'] . 

"', '" . $ndatum . ')";
```

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

## #2 — jawbreaker, 2006-01-22T17:41Z

Du har citationstecken på fel ställen både lite här och var...

```php
$sql = "insert into kommentera_forum (forumid, forumip, forumkommentar, forumuid, forumdatum) values ('" . $_POST['forumid'] . "', '" . $_SERVER['REMOTE_ADDR'] . "', '" . $_POST['forumkommentar'] . "', '" . $_SESSION['UID'] . "', '" . $_POST['flkommentar'] . "', '" . $ndatum . "')";
```

Nu vet jag inte heller vilka datatyper du har på dina fält i databasen... Gissar att t ex forumid och forumuid är heltal..? Om så är fallet ska du inte ha fnuttar kring dessa värden i din SQL-fråga:

```php
$sql = "insert into kommentera_forum (forumid, forumip, forumkommentar, forumuid, forumdatum) values (" . $_POST['forumid'] . ", '" . $_SERVER['REMOTE_ADDR'] . "', '" . $_POST['forumkommentar'] . "', " . $_SESSION['UID'] . ", '" . $_POST['flkommentar'] . "', '" . $ndatum . "')";
```

Och så bör du söka lite här på forumet efter "sql injection". Dina SQL-frågor kan bli rejält osäkra om du stoppar in värden som postas från ett formuär, utan att du på något sätt kollar vad dessa variabler innehåller.

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

## #3 — Dwarfen, 2006-01-22T21:26Z

Sql injection? Nu är jag verkligen inte med på vad du menar? Och varför ska det inte vara fnuttar runt de  som är "heltal"?

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

## #4 — Peeer, 2006-01-23T08:38Z

> **Dwarfen skrev:**
>
> Sql injection? Nu är jag verkligen inte med på vad du menar? Och varför ska det inte vara fnuttar runt de  som är "heltal"?

1) <http://www.swesecure.com/?ID=dc6ea60a-12ae-4e7e-9e9c-59489ccafa90&IID=29a58b01-ca79-4877-b924-4f5da18d4a2a>
2) Det är bestämt att det ska vara så. MySQL ger visserligen inget felmeddelande om du har fnuttar runt tal, men varför inte göra rätt direkt?

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

## #5 — Dwarfen, 2006-01-23T18:11Z

Mycket att läsa, men nu är det gjort och jag förstår vad ni menar, det verkar ju mindre bra faktiskt om man håller på med lösenord och såna "viktiga" databaser.

Dock så förstår jag inte hur jag ska skriva min(a) sqlsatser för att förhindra detta, bara att jag ska göra det.

\---edit---
Om jag förstått det hela rätt, så ska jag taga bort "" från alla tal som är heltal?
Provade detta på en simpel inmatning, men det ville sig verkligen inte.
Det ville sig inte heller i koden som jag fick som svar ovan eller rättare sagt, sqlsatsen utfördes men mef fel.
Medelandet innan jag matade inte värden:

```
Notice: Undefined index: forumid in H:\htdocs\admin\kommentera_forum.php on line 18
```

Medelandet efter inmatat värde:

```
Notice: Undefined index: forumkommentar in H:\htdocs\admin\kommentera_forum.php on line 44
Fel: Column count doesn't match value count at row 1
```

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

## #6 — aasah, 2006-01-23T20:27Z

" - är strängmarkering i PHP, och används för att sätta ihop SQL-frågan. (Eftersom denna är en sträng ur PHP:s perspektiv.)
' - är en strängmarkering för SQL. Det står runt alla värden som är av typen CHAR, VARCHAR eller TEXT. Däremot inte runt tal.
4 \< 20 men '20' \< '4' eftersom '2' ligger före '4' i teckenordning och en sträng matchas tecken för tecken.

Så om forumid och forumuid båda är heltal blir det:

```php
$sql = "insert into kommentera_forum (forumid, forumip, forumkommentar, forumuid, forumdatum) 
values (" . $_POST['forumid'] . ", '" . $_SERVER['REMOTE_ADDR'] . "', '" . $_POST['forumkommentar'] . "', " . $_SESSION['UID'] . ", '" . $_POST['flkommentar'] . "', '" . $ndatum . "')";
```

Vad gäller SQL-Injections så är det viktigt att gardera sig mot det oavsett om du har viktiga saker lagrade eller ej. Om en användare kan använda detta otyg, så kan han göra precis vad han vill med dina data. Inklusiva droppa tabeller, tömma dem, byta namn på dem, lägga till saker, ändra innehåll... 

**OM** magic_quotes_gpc är på så kommer alla farliga tecken att escape:as med automatik, om inte får du använda add_slashes() och strip_slashes() "för hand".

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

## #7 — Dwarfen, 2006-01-23T20:54Z

Hmm känns som jag måste göra om hela hemsidan...Men först ska jag få den att fungera som det är tänkt, sedan får jag fila på omgörningen.

Har provat med din kod ovan, men koden vill sig inte.
Notice: Undefined index: forumkommentar in H:\\htdocs\\admin\\kommentera_forum.php on line 45
Fel: Column count doesn't match value count at row 1

bah, jag blir snart gar´n på detta. Kanske borde börja göra om sidan direkt i stället.

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

## #8 — aasah, 2006-01-23T21:19Z

> **Dwarfen skrev:**
>
> Notice: Undefined index: forumkommentar in H:\\htdocs\\admin\\kommentera_forum.php on line 45

Det här felet hör ihop med denna:
$\_POST\['forumkommentar'\]
Du har inte något index i POST som heter så. 

1) Har du stavat fel?
2) Stora/små bokstäver?
3) Har fältet lämnats tomt?

Innan du lagrar värdena i databasen, måste du kolla att du fått in vettiga värden. Om du inte vill att kommentarfältet ska kunna vara tomt tex, så måste du kolla det.

Annars (om det får vara tomt) kan du tex sätta

```php
if (!isSet($_POST['forumkommentar']))
  $komm = "";
else $komm = $_POST['forumkommentar'];
```

Och i $sql byter du ut $\_POST\['forumkommentar'\] mot $komm.

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

## #9 — flexish, 2006-01-23T21:34Z

Testa med följande:

```php
mysql_query(sprintf("INSERT INTO kommentera_forum (forumid, forumip, forumkommentar, forumuid, forumdatum) VALUES (%d, '%s', '%s', %d, '%s')", $_POST['forumid'], $_SERVER['REMOTE_ADDR'], $_POST['forumkommentar'], $_SESSION['UID'], $_POST['flkommentar'], $ndatum));
```

Observera att detta är utan att kolla värdena i respektive fält. Frågan bör fungera om all indata finns, även om den är tom.

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

## #10 — Dwarfen, 2006-01-24T06:09Z

Jag skämms som en hund...

Hade helt missat $\_Post delen...skamligt värre. 
Nu får jag gå till jobbet och skämmas =(

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

---

Tråden på webben: https://www.webforum.nu/amne/php/141294-problem-med-inskrivning-i-db
