---
title: "Uppdatera flera rader?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/192646-uppdatera-flera-rader"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Inferis"
published: "2015-04-01T13:29:47.000Z"
updated: "2016-03-14T23:06:42.000Z"
replies: 9
views: 1951
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/192646-uppdatera-flera-rader"
---

# Uppdatera flera rader?

## #1 — Inferis, 2015-04-01T13:29Z

Hej!
Jag försöker skapa en tidrapport som ska sparas i databas.
Php, mysql används.

Hur löser man detta enklast? Mina försök ser ni nedan.

Jag loopar ut datan så att det blir så här.

```
<input type="hidden" name="postidet" value="1"><input type="text" name="1timmar">
<input type="hidden" name="postidet" value="2"><input type="text" name="2timmar">
<input type="hidden" name="postidet" value="3"><input type="text" name="3timmar">
```

Försöker att uppdatera alla rader, men lyckas inte. Provat med följande, men bara sista posten uppdateras.
Sökte och hittade med foreach, men det blev fel.

```
if (isset($_POST['uppd_tidrapport'])){
//$in_timmar = $_POST["timmar"];
//$in_idet = $_POST["postidet"];
$result=mysqli_query($db,"UPDATE tidrapporter_dagar SET timmar='$in_timmar' WHERE ID='$in_idet'");

  foreach ( $_REQUEST['postidet'] as $id => $details ) { 
   $rid  = addslashes ($id); 
   $in_timmar = addslashes ($details($_REQUEST['postidet'])); 

   $sql  = "UPDATE `tidrapporter_dagar` 
            SET `timmar`='$in_timmar' 
            WHERE `ID`='$rid'"; 
   if ( !$result = mysql_query($sql) ) { 
     die("Det gick inte spara!<br /><b>ID: $rid</b>"); 
   } 
  } 

echo $_POST["timmar"];
echo $_POST["postidet"];
echo "--Postat!";
}
```

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

## #2 — metalboy, 2015-04-01T14:59Z

Döp dina input-fält till **postidet\[\]** så kommer PHP att behandla dem som en array och du kommer kunna loopa igenom dem med foreach.

```
<input type="hidden" name="postidet[]" value="1"><input type="text" name="1timmar">
<input type="hidden" name="postidet[]" value="2"><input type="text" name="2timmar">
<input type="hidden" name="postidet[]" value="3"><input type="text" name="3timmar">
```

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

## #3 — prplxr, 2015-04-02T07:55Z

Lite off-topic kanske, men mysql\_-funktionerna kommer inom kort att försvinna från PHP. Dessutom är de förlegade och kan innebära en säkerhetsrisk, särskilt eftersom du här inte har skyddat dig mot SQL injections.

Du bör titta närmare på mysqli\_ eller PDO. Personligen föredrar jag PDO.

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

## #4 — Inferis, 2015-04-02T08:17Z

Tack för svar. Ska prova under dagen.
Men hur ska det se ut med mysqli då?

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

## #5 — prplxr, 2015-04-02T08:47Z

mysqli\_ fungerar lite annorlunda än mysql\_, men är fortfarande proceduralt (men går att köra ojektorienterat om man vill) medan PDO enbart är objektorienterat (om jag inte trasslat till något i huvudet). Båda två har stöd för prepared statements vilket eliminerar risken för SQL injections.

Kika på PHP Docs. Det finns jättebra förklaringar och exempel där.

[MySQLi](http://php.net/manual/en/book.mysqli.php)
[PDO](http://php.net/manual/en/book.pdo.php)

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

## #6 — Inferis, 2015-04-02T14:09Z

Nu har jag provat med detta, men det händer ingenting. Här testar jag om det går att ändra datumet den uppdaterades senast.

```
// Start nya

$link = new mysqli('localhost', 'root', '', 'tider'); 
if ($link->connect_error) die (
	'Connect Error (' . $link->connect_errno . ') ' . $link->connect_error
);

if (
	$_SERVER['REQUEST_METHOD']=="POST" &&
	isset($_POST['submit'])
) {  
	$stmt = $link->prepare('UPDATE tidrapporter_dagar SET uppdaterad = NOW() WHERE id = ? ');
	$stmt->bindParam('i', $_POST['postidet']--);
	$stmt->execute();
}

// Slut nya
```

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

## #7 — prplxr, 2015-04-02T14:27Z

Blir aldrig din if-sats sann? Alltså, körs aldrig rad 12-14 i koden du visade?

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

## #8 — Inferis, 2015-04-10T12:05Z

> **[prplxr skrev:](https://www.webforum.nu/p/1572939)**
>
> Blir aldrig din if-sats sann? Alltså, körs aldrig rad 12-14 i koden du visade?

Jo, det är ju mer kod. Bara jag som slaktar dåligt.
Har gett upp detta. Kör med att man får spara rad för rad istället.

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

## #9 — harry_boy, 2015-04-18T00:03Z

Fel post

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

## #10 — Jester73, 2016-03-14T23:06Z

Har funnit att PDO har en fördelen att du kan namnge dina params. Så istället för att lägga dem i ordning och ange korrekt datatyp i MySQLI ("ssd", "Daniel", "Olsson","2016-03-11" så kan du i PDO sätta $params\[\]=:fname=\>"Daniel" osv osv i params.

Sen kan skippa att köra en prepare för varje gång du skall lägga in en tidrapport. Det räcker att loopa bindParam (med nya värden för varje loop) och sen execute.

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/192646-uppdatera-flera-rader
