04. maj 2009 - 14:29Der 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?
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.
$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.
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)
Synes godt om
Ny brugerNybegynder
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.