---
title: "Uppdatera flera rader i databasen med olika värden"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/137768-uppdatera-flera-rader-i-databasen-med-olika-värden"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "filipbh"
published: "2005-11-16T21:24:58.000Z"
updated: "2005-11-17T19:15:24.000Z"
replies: 26
views: 803
page: 1
pages: 2
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/137768-uppdatera-flera-rader-i-databasen-med-olika-värden"
---

# Uppdatera flera rader i databasen med olika värden

_Sida 1 av 2._

## #1 — filipbh, 2005-11-16T21:24Z

Hej, hur gör man lättast för att uppdatera värdena i ett formulär till databasen?

Har en mysql-hämtning som hämtar olika rader från databasen som sen skrivs ut i ett formulär. De utskrivna värdena ska man alltså kunna uppdatera. Nu lyckas jag bara att uppdatera den sista raden men inte alla.

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

## #2 — aasah, 2005-11-16T21:39Z

Hur ser ditt skript ut?

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

## #3 — filipbh, 2005-11-16T21:46Z

Det är mycket och jävligt ;) Vet att jag kan använda inner join istället, men men...

```
<form action="shop.php?recount=1" method="post">
<table width="300" border="0">
<th>Produkt</th><th>Antal/Pris</th><th>&nbsp;</th>
<?
$summa = 0;
$summa_tot = 0;

//Hämtar varor från temporder
$open = mysql_connect ("localhost", "$u","$p");

$sql = "SELECT * FROM fyrshop_temporder WHERE order_owner = '".$_SESSION[shopinl_uid]."' AND kop_antal>0 AND status=1";
$result = mysql_db_query("databas","$sql");

while($shop=mysql_fetch_array($result)){
$shop_orderid = $shop[oid];
$shop_prodnr = $shop[prod_artnr];
$shop_owner = $shop[order_owner];
$shop_fnamn = $shop[prod_id];
$shop_antal = $shop[kop_antal];
$shop_pris = $shop[pris];
$shop_id = $shop[id];

$antalvarorikundvagnen = $antalvarorikundvagnen + 1;
$summa = $shop_antal*$shop_pris;
$summa_tot = $summa_tot+$summa;

//Hämtar information från produkter
$open_to = mysql_connect ("localhost", "$u","$p");

$sql_to = "SELECT * FROM fyrshop_produkter WHERE artnr = '".$shop_prodnr."'";
$result_to = mysql_db_query("databas","$sql_to");

while($product=mysql_fetch_array($result_to)){
$product_namn = $product[produktnamn];
$product_kid = $product[kid];
$product_ukid = $product[ukid];
$product_id = $product[id];
$product_pris = $product[pris];
?>
<tr><td><a href="product.php?show=<?=$product_id;?>&kID=<?=$product_kid;?>&uID=<?=$product_ukid;?>"><?=$product_namn;?></a></td>
<td><input type="text" class="form" name="newantal" id="<?=$shop_prodnr;?>" value="<?=$shop_antal;?>" size="2"> st á <?=$product_pris;?> kr</td>
<td align="right"><?=$summa;?> kr</td>
<input type="hidden" name="rowid" value="<?=$shop_id;?>">
</tr>
<?

 }
}

echo "</table>";
?>
<input type="hidden" value="<?=$antalvarorikundvagnen;?>" name="howmanyproducts">
<br><b>SUMMA</b> <?=$summa_tot;?> kr
<br><input type="submit" value="Räkna om" name="count_do" class="form"> <input type="button" value="Till kassan" name="kassa" class="form" onClick="window.self.location.href='confirmorder.php';">

</form>
```

När det görs om:

```php
<?
if($_GET['recount']){

$i=0;
while($i<$_POST['howmanyproducts']){
    $link = mysql_connect("localhost","$u","$p");

    $databas = mysql_select_db("databas");
    $sql = "UPDATE fyrshop_temporder SET kop_antal='$_POST[newantal]' WHERE id = '$_POST[rowid]'";
    mysql_query("$sql");

    mysql_close($link);
$i = $i+1;
echo $i;
echo "görs om";

 }
}
```

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

## #4 — aasah, 2005-11-16T21:52Z

Alltså, först och främst varför öppnar du mer än en connection i scriptet? Gör mysql_connect en gång endast. Du kan ställa flera frågor till samma connection. Men som det funkar just nu stänger du inte den första innan du (helt i onödan) öppnar en till. Det tar definitivt onödig tid och onödiga resurser, och jag vet inte huruvida det också kan ge upphov till fel i skripten. Börja med att plocka bort nummer två!

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

## #5 — filipbh, 2005-11-16T22:20Z

I detta fall verkar det inte spela någon roll för jag har testat att hämta data från en tabell bara, men det fungerar inte ändå. Felet är ju att bara den sista utskriften uppdateras eftersom jag använder $\_POST\[\] när jag ska uppdatera och då tar den bara den sista $\_POST\[\] och inte alla.

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

## #6 — filipbh, 2005-11-16T22:25Z

Det är borttaget nu iaf men gjorde ingen skillnad... Den uppdaterar fortfarande bara den sista raden.

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

## #7 — aasah, 2005-11-16T22:26Z

> **filipbh skrev:**
>
> I detta fall verkar det inte spela någon roll för jag har testat att hämta data från en tabell bara, men det fungerar inte ändå. Felet är ju att bara den sista utskriften uppdateras eftersom jag använder $\_POST\[\] när jag ska uppdatera och då tar den bara den sista $\_POST\[\] och inte alla.

Alltså, det kanske inte påverkar ditt fel, men det är ändå inte bra att ha två connect i samma fil. Minst av allt utan close emellan.

Men, du måste införa ändringarna direkt du postat någon. Du kan inte vånta till tre sidladdningar senare för då får du mycket riktigt bara den sista. 

Vad är det du vill göra då? Varför laddar du om och om innan uppdateringen? Eller missförstår jag?

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

## #8 — filipbh, 2005-11-16T22:31Z

Jag laddar om uppdateringen för att jag trodde det var det enda möjliga för att alla rader ska uppdateras. Hur ska jag annars skriva? Måste jag döpa varje utskriven rad med något speciellt?

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

## #9 — filipbh, 2005-11-16T22:34Z

Screenshot på det jag pratar om...

Ändrar jag värdet i båda rutorna sparas alltså bara, i detta fall, det nya värdet i "Nässpray"...

Bilagor:

- [produktform.jpg](https://www.webforum.nu/a/8487.jpg)

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

## #10 — aasah, 2005-11-16T22:35Z

Ursäkta såg inte ditt senaste svar. Vad som händer beror ju på hur koden är skriven för vad som händer vid tryck på den knappen. 

> **filipbh skrev:**
>
> Jag laddar om uppdateringen för att jag trodde det var det enda möjliga för att alla rader ska uppdateras. Hur ska jag annars skriva? Måste jag döpa varje utskriven rad med något speciellt?

Exakt. Enklast är att antingen ge dom namn efter idnr i databasen eller löpnummer modell: u1, u2, u3, ...

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

## #11 — filipbh, 2005-11-16T22:38Z

De här två fälten ligger i varje rad. Räcker inte det för att specificera varje rad?

```
<input type="text" class="form" name="newantal" id="<?=$shop_prodnr;?>" value="<?=$shop_antal;?>
<input type="hidden" name="rowid" value="<?=$shop_id;?>">
```

Rowid = det id som produkten har i databasen
id i newantal är produktens artikelnummer

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

## #12 — filipbh, 2005-11-16T22:39Z

Det är ju denna kod:

```php
if($_GET['recount']){ 

$i=0; 
while($i<$_POST['howmanyproducts']){ 
    $link = mysql_connect("localhost","$u","$p"); 

    $databas = mysql_select_db("databas"); 
    $sql = "UPDATE fyrshop_temporder SET kop_antal='$_POST[newantal]' WHERE id = '$_POST[rowid]'"; 
    mysql_query("$sql"); 

    mysql_close($link); 
$i = $i+1; 
echo $i; 
echo "görs om"; 

} 
}
```

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

## #13 — aasah, 2005-11-16T22:43Z

Förresten, släng ut connect ur while-slingan i din shop.php till före while.
Ta bort close helt, sker automatiskt när skriptet är klart.

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

## #14 — filipbh, 2005-11-16T22:45Z

Så här?

```php
if($_GET['recount']){ 

$i=0; 
    $link = mysql_connect("localhost","$u","$p"); 
    $databas = mysql_select_db("databas"); 
while($i<$_POST['howmanyproducts']){ 
    $sql = "UPDATE fyrshop_temporder SET kop_antal='$_POST[newantal]' WHERE id = '$_POST[rowid]'"; 
    mysql_query("$sql"); 
$i = $i+1; 
echo $i; 
echo "görs om"; 

} 
}
```

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

## #15 — aasah, 2005-11-16T23:03Z

> **filipbh skrev:**
>
> De här två fälten ligger i varje rad. Räcker inte det för att specificera varje rad?
>
>
> ```
> <input type="text" class="form" name="newantal" id="<?=$shop_prodnr;?>" value="<?=$shop_antal;?>
> <input type="hidden" name="rowid" value="<?=$shop_id;?>">
> ```
>
> 
> 
> Rowid = det id som produkten har i databasen
> id i newantal är produktens artikelnummer

Nej, de skriver över varandra! Varje rad lagrar innehållet i **samma** (två) fack i $\_POST. "rowid" blir just strängen med 'r','o','w','i' och 'd' i.Om din databasstruktur är vettig borde du kunna få fram produktens artikelnummer om du känner idnumret i databasen?
Pröva följande:

```php
//för varje rad:
<?php $nameN = "newantal".$rowid; 
//Förutsatt at $rowid har idvärdet från databasen
echo "<input type=\"text\" class=\"form\" name=\"$nameN\" id=\"$shop_prodnr\" value=\"$shop_antal\">";

//i mottagarfilen
if($_GET['recount']){ 
$link = mysql_connect("localhost","$u","$p"); 
$databas = mysql_select_db("databas");
foreach ($_POST as $ix => $info){
    if (strstr($ix, 'newantal') !== FALSE) {
       $id = substr($_POST[rowid], 8); //Den del av strängen som håller i $rowid 
       $sql = "UPDATE fyrshop_temporder SET kop_antal='$info' WHERE id = $id"; 
       mysql_query("$sql"); 

       echo "görs om"; 
    }
}
```

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

## #16 — filipbh, 2005-11-16T23:16Z

La in det där men nu ändras ingen av dem...

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

## #17 — aasah, 2005-11-16T23:18Z

> **filipbh's signatur skrev:**
>
> Koda inte när du är trött..

Slutkodat för idag är jag rädd. :(

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

## #18 — filipbh, 2005-11-16T23:19Z

Okej, får kolla mer på det imorrn.. Det brukar bli fel annars :p Tack för hjälpen så länge iallafall

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

## #19 — aasah, 2005-11-17T09:30Z

filipbh, kan du beskriva hur din databasstruktur ser ut för produkterna? Jag har nog inte riktigt fattat vad som är rowid och prodnr.

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

## #20 — filipbh, 2005-11-17T11:50Z

Tabell temporder
\----------------
rowid = produktens id i databasen.
shop_prodnr = produktens artikelnummer. 

De variablarna som börjar med $shop är hämtade från temporder. Sen för att kunna skriva ut produktens namn använder jag mig av den andra sql-hämtningen. De utskrifter får namnet $product i början.

Så här ser kolmunernas namn ut i $shop:

```
$shop_prodnr = $shop[prod_artnr];
$shop_owner = $shop[order_owner];
$shop_fnamn = $shop[prod_id];
$shop_antal = $shop[kop_antal];
$shop_pris = $shop[pris];
$shop_id = $shop[id];
```

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

---

Tråden på webben: https://www.webforum.nu/amne/php/137768-uppdatera-flera-rader-i-databasen-med-olika-värden  
Nästa sida: https://www.webforum.nu/amne/php/137768-uppdatera-flera-rader-i-databasen-med-olika-värden/page2.md
