Avatar billede torpmikkelsen Juniormester
04. maj 2009 - 14:29 Der er 3 kommentarer og
1 løsning

PHP mange MySQL update

Hey

Jeg har lavet et system, hvor man kan tilføje varer på en liste. Hele listen bliver genereret som en form, hvor alle værdier står i textfelter så man kan rette dem.

Dvs. man kan rette i to forskellige varer, og derefter trykke gem.

Når man trykker gem, udføres denne handling:

if($_REQUEST['action']=='updateFaktItemsPrint'){
        $i = 0;
        for($i=0;$i<$_REQUEST['countItems'];$i++){   
            mysql_query("UPDATE fakt_faktXitem SET description='".$_REQUEST['description_'.$i]."', name='".$_REQUEST['name_'.$i]."', quantity='".$_REQUEST['quantity_'.$i]."', unit='".$_REQUEST['unit_'.$i]."', price='".$_REQUEST['price_'.$i]."', discount='".$_REQUEST['discount_'.$i]."', total='".$_REQUEST['total_'.$i]."' WHERE id='".$_REQUEST['id_'.$i]."'") or die(mysql_error());
            $i++;
        }
        header("Location: print.php?id=".$_REQUEST['id']);
    }


Koden fungerer fint, hvis der ikke er ret mange varer. Men hvis der fx. er 20 varer den skal rende igennem, så virker det ikke altid. Men somme sider går rettelsen igennem.

Så i princippet fungerer koden - det er bare langt fra hver gang :o)

Er der nogen idéer til hvad jeg gør galt og evt. hvad jeg kan gøre i stedet for?
Avatar billede michael_stim Ekspert
04. maj 2009 - 14:34 #1
Hvorfor har du tælleren $i med 2 gange?

if($_REQUEST['action']=='updateFaktItemsPrint'){
        $i = 0;//Tæller
        for($i=0;$i<$_REQUEST['countItems'];$i++){ //Tæller 
            mysql_query("UPDATE fakt_faktXitem SET description='".$_REQUEST['description_'.$i]."', name='".$_REQUEST['name_'.$i]."', quantity='".$_REQUEST['quantity_'.$i]."', unit='".$_REQUEST['unit_'.$i]."', price='".$_REQUEST['price_'.$i]."', discount='".$_REQUEST['discount_'.$i]."', total='".$_REQUEST['total_'.$i]."' WHERE id='".$_REQUEST['id_'.$i]."'") or die(mysql_error());
            $i++;//Tæller
        }
        header("Location: print.php?id=".$_REQUEST['id']);
Avatar billede torpmikkelsen Juniormester
04. maj 2009 - 14:37 #2
Nej, det er også en fejl. Jeg havde oprindeligt en while løkke, hvor den blev brugt. Men jeg har selv set den ekstra tæller og slettet den, men det gør ingen forskel. Den virker stadig kun periodisk.
Avatar billede torpmikkelsen Juniormester
04. maj 2009 - 14:41 #3
en simplere kode ser således ud:

$i = 0;
for($i=0;$i<$_REQUEST['countItems'];$i++){   
mysql_query("UPDATE fakt_faktXitem SET description='".$_REQUEST['description_'.$i]."' WHERE id='".$_REQUEST['id_'.$i]."'") or die(mysql_error());
}
header("Location: editFakt.php?id=".$_REQUEST['id']);

Jeg har fjernet alle de værdier, der bliver opdateret, så den er nemmere at overskue.
Avatar billede torpmikkelsen Juniormester
04. maj 2009 - 15:36 #4
Jeg har fået det til at virke hver gang, ved IKKE at gemme total antal felter i et hidden text felt, men istedet lægge det ind i action adressen. handle.php?counter=<?php echo $counter; ?>

Og scriptet kommer derfor til at se således ud:

$i = 0;
for($i=0;$i<$_GET['counter'];$i++){   
mysql_query("UPDATE fakt_faktXitem SET description='".$_REQUEST['description_'.$i]."' WHERE id='".$_REQUEST['id_'.$i]."'") or die(mysql_error());
}
header("Location: editFakt.php?id=".$_REQUEST['id']);

Underligt - men bare det virker :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester