Avatar billede snigeren Nybegynder
02. august 2007 - 18:06 Der er 17 kommentarer og
1 løsning

opdatere alle antal i en indkøbskurv

Nu går mit hoved snart i stykker hvis jeg skal tænke mere over det her uden lidt hjælp :|

Jeg vil lave en knap i min indkøbskurv der opdaterer antallet af alle varer i kurven hvordan kan jeg det?

Min query ser således ud:
$result = mysql_query("select * from cart inner join shop_content on cart.itemId = shop_content.itemId where cart.cookieId = '" . GetCartId() . "' order by shop_content.beskrivelse asc")or die(mysql_error());

og min indkøbskurv ser således ud:

<form name="frmCart" method="get" action="cart.php?action=update_item">
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
<tr>
  <td align="left">Varenr</td>
  <td align="left" width="50%">Beskrivelse</td>
  <td align="right">Dimension</td>
  <td align="right">Overflader</td>
  <td align="right">Enhed</td>
  <td align="right">Antal</td>
</tr>
<tr>
  <td colspan="6"><img src="gfx/brown_dot.gif" width="100%" height="1"></td>
</tr>
<tr>
  <td colspan="6">&nbsp;</td>
</tr>
<?php
while($row = mysql_fetch_array($result))
{
?>
<tr>
  <td align="left"><input name="itemId" type="hidden" value="<?php echo $row["itemId"]; ?>"><?php echo $row["varenr"]; ?></td>
  <td align="left" width="50%"><?php echo $row["beskrivelse"]; ?></td>
  <td align="right"><?php echo $row["dimension"]; ?></td>
  <td align="right"><?php echo $row["surfacenavn"]; ?></td>
  <td align="right"><?php echo $row["enhed"]; ?></td>
  <td align="right"><INPUT onkeypress="return isNumberKey(event)" type="text" name="qty" value="<?php echo $row["qty"]; ?>" size="3"></td>
</tr>
<?php
}
?>
Avatar billede jakobdo Ekspert
03. august 2007 - 22:05 #1
Du skal lave det som en form ja.
Og så skal du f.eks. navngive felterne i et array.

<input type="text" name="antal[]">
Jeg plejer så gerne at smide ID fra varen med i mellem [] så det bliver:

<input type="text" name="antal[1]">
<input type="text" name="antal[3]">
<input type="text" name="antal[7]">
osv...

Og så skal du have en submit knap.
Avatar billede snigeren Nybegynder
07. august 2007 - 06:57 #2
det her spørgsmål: http://www.eksperten.dk/spm/790161  er gået hen og blevet det samme det handler om. Hvis du kan hjælpe ville det være fedt =)
Avatar billede jakobdo Ekspert
07. august 2007 - 08:31 #3
Har forsøgt at give lidt input.
Avatar billede snigeren Nybegynder
12. august 2007 - 15:54 #4
flere roser til jakob =)  hvis andre vil se det endelige resultat af jakobs hjælp så se spørgsmål http://www.eksperten.dk/spm/790161  der endte med at handle om det samme =)

Og Jakob smid lige et svar her også =)
Avatar billede jakobdo Ekspert
12. august 2007 - 16:02 #5
Du bør nok smide koden herind, så folk ikke skal hoppe frem og tilbage.

Du får et svar.
Avatar billede jakobdo Ekspert
12. august 2007 - 16:02 #6
Og en kommentar.
Avatar billede snigeren Nybegynder
12. august 2007 - 16:23 #7
tak for kommentaren :D
Avatar billede snigeren Nybegynder
12. august 2007 - 16:25 #8
og lige lidt kode hertil:

endelig foreach kode:
foreach($_POST['qty'] AS $id => $count)
{
    //Hvis antal er = 0 eller mindre, fjerner vi ITEM!
    if($count <= 0)
    {
        // Remove the item from the users cart
        RemoveItem($id);
    }
    else
    {
        mysql_query("update cart set qty = '".$count."' where mixId = '" . $id . "' LIMIT 1") or die(mysql_error());
    }
}
Avatar billede jakobdo Ekspert
12. august 2007 - 16:29 #9
Takker for point.
Avatar billede snigeren Nybegynder
17. oktober 2007 - 17:02 #10
Hey Jakob

Jeg er lige stødt ind i et andet problem næsten magen til,.. =(

I cart´en har jeg nu tilføjet et "kommentar" felt til alle varerne,.. dertil følger et problem ligeledes det vi fik løst med koden ovenfor. dvs. jeg skal opdatere alle kommentarerne hver især.

Jeg tænkte om ikke jeg kunne gøre noget lignende så jeg forsøgte mig med følgende:

foreach($_POST['kommentar'] AS $id => $count)
{
    mysql_query("update cart set kommentar = '" . $count . "' where mixId = '" . $id . "' LIMIT 1") or die(mysql_error());
}

men der får jeg følgende error:
Warning: Invalid argument supplied for foreach()        på linien med foreach,.. hvad kan det skyldes? er jeg helt galt i byen?

ellers tænkte jeg man kunne tilføje følgende linie til den endelige kode jeg skrev som det sidste i dette spørgsmål.
mysql_query("update cart set kommentar = '" . $kommentar . "' where mixId = '" . $id . "' LIMIT 1") or die(mysql_error());


så det hele kom til at se ud som følgende:
foreach($_POST['qty'] AS $id => $count)
{
    //Hvis antal er = 0 eller mindre, fjerner vi ITEM!
    if($count <= 0)
  {
      // Remove the item from the users cart
      mysql_query("delete from cart where cookieId = '" . GetCartId() . "' and mixId = '" . $id . "' LIMIT 1") or die(mysql_error());
  }
  else
  {
      mysql_query("update cart set qty = '".$count."' where mixId = '" . $id . "' LIMIT 1") or die(mysql_error());
      mysql_query("update cart set kommentar = '" . $kommentar . "' where mixId = '" . $id . "' LIMIT 1") or die(mysql_error());
    }
}


men det virker stadig ikke,.. =(

Håber jeg kan logge dig til at hjælpe endnu engang...
Avatar billede jakobdo Ekspert
17. oktober 2007 - 19:03 #11
Er du sikker på: $_POST['kommentar'] er et array?
Avatar billede snigeren Nybegynder
17. oktober 2007 - 19:50 #12
uhm det skulle jeg mene,.. her er hele scriptet:

<?php
while($row = mysql_fetch_array($result))
{
?>
<tr>
      <td align="left"><input name="mixId[<?php echo $row["mixId"]; ?>]" type="hidden" value="<?php echo $row["mixId"]; ?>"><input name="itemId[<?php echo $row["mixId"]; ?>]" type="hidden" value="<?php echo $row["itemId"]; ?>"><?php echo $row["varenr"]; ?></td>
      <td align="left" width="50%"><input name="beskrivelse[<?php echo $row["mixId"]; ?>]" type="hidden" value="<?php echo $row["beskrivelse"]; ?>"><?php echo $row["beskrivelse"]; ?></td>
      <td align="right"><?php echo $row["dimension"]; ?></td>
      <td align="right"><input name="surfacenavn[<?php echo $row["mixId"]; ?>]" type="hidden" value="<?php echo $row["surfacenavn"]; ?>"><?php echo $row["surfacenavn"]; ?></td>
      <td align="right"><?php echo $row["enhed"]; ?></td>
      <td align="right"><INPUT onkeypress="return isNumberKey(event)" type="text" name="qty[<?php echo $row["mixId"]; ?>]" value="<?php echo $row["qty"]; ?>" size="3"></td>
    <td align="right"><a href="cart.php?action=remove_item&mixId=<?php echo $row["mixId"]; ?>">[ slet ]</a></td>
</tr>
    <tr align="right"><td colspan="7">Kommentar: <input type="text" name="kommentar" size="30" value="<?php
    if($row["enhed"]==xxxx && $row["kommentar"]==false){
    echo "husk at skrive de ønskede mål!";
    }else {
    echo $row["kommentar"];
    }
    ?>"></td></tr>
<?php
}
?>

Det er jo så ikke altid der står noget i kommentar feltet men så skal den jo bare ikke skrive noget i det felt
Avatar billede jakobdo Ekspert
17. oktober 2007 - 20:38 #13
<input type="text" name="kommentar"
Skal være:
<input type="text" name="kommentar[]"
Ellers er det ikke et array.
Avatar billede snigeren Nybegynder
17. oktober 2007 - 22:39 #14
ahh ok,.. ja det ændrer jo lidt på det,.. men som det er nu hvor jeg har nedenstående script kommer der bare til at stå samme antal som det der står i qty feltet, hvilket vel giver mening når det er:  update cart set kommentar = '" . $count . "'

foreach($_POST['kommentar'] AS $id => $count)
{
    mysql_query("update cart set kommentar = '" . $count . "' where mixId = '" . $id . "' LIMIT 1") or die(mysql_error());
}

Men har prøvet med $kommentar og det virker selvfølgelig heller ikke,.. =)

Så nu er jeg på bar bund igen =(

Jeg opretter gerne et nyt spørgsmål med points til dig hvis du ønsker =) men vi kan jo lige så godt lige forsætte her mens vi har scripts :D
Avatar billede jakobdo Ekspert
18. oktober 2007 - 07:50 #15
Prøv at lav følgende kode på din side:
echo '<pre>';
print_r($_POST);
echo '</pre>';

Så kan vi lige se hvad du har af info som sendes videre.
Avatar billede snigeren Nybegynder
18. oktober 2007 - 17:29 #16
jeg får: 

Array
(
    [mixId] => Array
        (
            [105] => 105
            [1200] => 1200
        )

    [itemId] => Array
        (
            [105] => 1
            [1200] => 12
        )

    [beskrivelse] => Array
        (
            [105] => 1. ting i db´en
            [1200] => Bundrem (t. TF2)
        )

    [surfacenavn] => Array
        (
            [105] => RAL 7016
            [1200] => Galvaniseret
        )

    [qty] => Array
        (
            [105] => 1
            [1200] => 1
        )

    [kommentar] => Array
        (
            [105] => a356226
            [1200] => a3wra55555
        )

    [opdater] => Opdatér
)


men får bare "Array" i db´en =(  jeg har sat print_r lige inden den updater db´en.

function UpdateItem($itemId, $qty, $surfacenavn, $mixId, $kommentar, $enhed)
{
    // Updates the quantity of an item in the users cart.
    // If the quantity is zero, then RemoveItem will be
    // called instead

    global $dbServer, $dbUser, $dbPass, $dbName;

    // Get a connection to the database
    $cxn = @ConnectToDb($dbServer, $dbUser, $dbPass, $dbName);
   
    if($qty == 0)
    {
        // Remove the item from the users cart
        RemoveItem($mixId);
    }
    else
    {
echo '<pre>';
print_r($_POST);
echo '</pre>';
        mysql_query("update cart set qty = $qty where cookieId = '" . GetCartId() . "' and mixId = '$mixId'") or die(mysql_error());
        mysql_query("update cart set kommentar = '$kommentar' where cookieId = '" . GetCartId() . "' and mixId = '$mixId'") or die(mysql_error());
    }
}
Avatar billede jakobdo Ekspert
18. oktober 2007 - 19:45 #17
Det virker godt nok mærkeligt!
Er det din sides fulde kode?
Avatar billede snigeren Nybegynder
19. oktober 2007 - 18:29 #18
nå ja endnu engang reddede jakobdo min røv =)

her er færdig kode:

foreach($_POST['kommentar'] AS $id => $kommentar) 
{
mysql_query("update cart set kommentar = '" . $kommentar . "' where mixId = '" . $id . "' LIMIT 1") or die(mysql_error()); 
}

der skulle jo bare stå kommentar i stedet for count: foreach($_POST['kommentar'] AS $id => $kommentar)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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