更新购物车


Update shopping cart

我是一个PHP新手,刚刚学习了一门课程,并在最后一个案例中获得了证书。我们在网上商店工作,我有麻烦更新我的购物车。我知道以前有人问过这个问题,但是在阅读了答案之后,我无法修复自己的代码。我希望有人能帮我。如果购物车中有1件商品,它会很好地更新,如果有更多的商品,只会更新一个1件商品。这是我的购物车代码(为了更完整,自第一篇文章以来已经编辑过):

                <FORM method=get name=cart_quantity 
        action=winkelwagen.php>
        <TABLE border=0 cellSpacing=0 cellPadding=0 width="100%">
          <TBODY>
          <TR>
            <TD>
              <TABLE class=productListing border=0 cellSpacing=0 
              cellPadding=2 width="100%">
                <TBODY>
                <TR>
                  <TD class=infoBoxHeading3 align=middle>Verwijder</TD>
                  <TD class=infoBoxHeading3>Artikel(en)</TD>
                  <TD class=infoBoxHeading3 align=middle>Aantal</TD>
                  <TD class=infoBoxHeading3 
                  align=right>Totaal&nbsp;&nbsp;</TD></TR>
<?php                   
$sqlWinkelwagen = "SELECT * FROM tblorder
    INNER JOIN tblorderregels
    INNER JOIN tblartikelen
    WHERE tblorder.Ordernummer = tblorderregels.Ordernummer AND SessieID = '" . session_id() . "' AND tblorderregels.Artikelnummer = tblartikelen.Artikelnummer";
$rsWinkelwagen = mysqli_query($db, $sqlWinkelwagen);
$WinkelwagenRegel = 0;
while ($rWinkelwagen = mysqli_fetch_array($rsWinkelwagen))
{
?>
                <TR class=productListing-even>
                  <TD class=productListing-data vAlign=top 
                    align=middle><br><br>
                    <a href="winkelwagen.php?Artikelnummer=<?php echo($rWinkelwagen["Artikelnummer"]);?>&action=del"><img border="0" src="images/bin.png" width="30" height="30"></a>
                  <input type=hidden name=Artikelnummer value=<?php echo($rWinkelwagen["Artikelnummer"]);?>>
                  <TD class=productListing-data><BR>
                    <TABLE border=0 cellSpacing=2 cellPadding=2>
                      <TBODY>
                      <TD class=productListing-data align=middle><A 
                          href="http://www.mijnoscommerce.nl/demo/shop1/product_info.php?products_id=35{1}1"><IMG 
                          title=" iPhone 3G - 8GB " border=0 
                          alt="iPhone 3G - 8GB" 
                          src="images/<?php echo($rWinkelwagen["Afbeelding"]);?>" width=100 
                          height=80></A></TD>
                        <TD class=productListing-data vAlign=top><BR><A 
                          href="http://www.mijnoscommerce.nl/demo/shop1/product_info.php?products_id=35{1}1"><B>
                          <?php echo($rWinkelwagen["Artikelnaam"]); ?>
                          </B></A> </TD></TR></TBODY></TABLE></TD>
                  <TD class=productListing-data vAlign=top 
                    align=middle><BR><BR><INPUT 
                    type="text" value=<?php echo($rWinkelwagen["Aantal"]); ?> size=4 
                    name=AantalArtikel[<?php echo($rWinkelwagen["Artikelnummer"]);?>]
                    >
                    <input type=hidden 
                    name=ArtikelID[<?php echo($rWinkelwagen["Artikelnummer"]);?>] 
                    value=<?php echo($rWinkelwagen["Artikelnummer"]);?>
                    >
                    <input type=hidden name=action value=upd></TD>
                  <TD class=productListing-data vAlign=top 
                    align=right><BR><BR><B>Ä 
<?php 
                            $TotaalArtikel = $rWinkelwagen["Aantal"] *         $rWinkelwagen["Prijs"];
                            echo($TotaalArtikel);  
                            $TotaalWinkelwagen = $TotaalWinkelwagen + $TotaalArtikel;
                            ?>
                </B>&nbsp;&nbsp;</TD> 
                <?php 
} //einde while winkelwagen inhoud
mysqli_free_result($rsWinkelwagen);
?>
                </TBODY></TABLE></TD></TR>


          <TR>
            <TD><IMG border=0 alt="" 
              src="winkelwagen_files/pixel_trans.gif" width="100%" 
            height=10></TD></TR>
          <TR>
            <TD class=main align=right><B>Subtotaal: Ä <?php echo($TotaalWinkelwagen); ?> 
            </B>&nbsp;&nbsp;</TD></TR>
          <TR>
            <TD class=stockWarning align=middle><BR>Artikelen met een: *** 
              Zijn momenteel niet besckikbaar in de door u gevraagde 
              hoeveelheid.<BR>U kan de geselecteerde hoeveelheid wel laten 
              staan en bij het afrekenen zal de beschikbare hoeveelheid 
              getoond worden.</TD></TR>
          <TR>
            <TD><IMG border=0 alt="" 
              src="winkelwagen_files/pixel_trans.gif" width="100%" 
            height=10></TD></TR>
          <TR>
            <TD>
              <TABLE class=infoBox2 border=0 cellSpacing=1 cellPadding=2 
              width="100%">
                <TBODY>
                <TR class=infoBoxContents>
                  <TD>
                    <TABLE border=0 cellSpacing=0 cellPadding=2 width="100%">
                      <TBODY>
                      <TR>
                        <TD width=10><IMG border=0 alt="" 
                          src="winkelwagen_files/pixel_trans.gif" width=10 
                          height=1></TD>
                        <TD class=main><INPUT title=" Update Winkelwagen " 
                          border=0 alt="Update Winkelwagen" 
                          src="winkelwagen_files/button_update_cart.gif" 
                          type=image
                          ></TD>
                        <TD class=main><A 
                          href="index.php"><IMG 
                          title=" Verder winkelen " border=0 
                          alt="Verder winkelen" 
                          src="winkelwagen_files/button_continue_shopping.gif" 
                          width=129 height=16></A></TD>
                        <TD class=main align=right><A 
                          href="betalingswijze.php"><IMG 
                          title=" Afrekenen " border=0 alt=Afrekenen 
                          src="winkelwagen_files/button_checkout.gif" 
                          width=86 height=16></A></TD>
                        <TD width=10><IMG border=0 alt="" 
                          src="winkelwagen_files/pixel_trans.gif" width=10 
                          height=1></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></FORM>

应用表单后,它返回到相同的页面,顶部有以下代码:

   <?php 
 require_once 'config.php';
 $db = mysqli_connect($strDatabaseServer, $strUsername, $strPassword, $strDatabase);
 if(!$db)
  die('Fout bij verbinden met database: ' . mysqli_connect_error());
 $sql = "SELECT * FROM tblorder where SessieId = '" . session_id() . "'";
 if(!$rs = mysqli_query($db, $sql))
 die('Fout in query: ' . mysqli_error());
 if (mysqli_num_rows($rs) > 0)
{
$r = mysqli_fetch_array($rs);
$intOrdernummer = $r["Ordernummer"]; // bestaande ordernr
mysqli_free_result($rs);
}
//echo ($intOrdernummer); 

if (isset($_GET["action"]))
{
switch ($_GET["action"])
{
    case "del":
        $strSQL = "delete from tblorderregels where Artikelnummer = '" . $_GET["Artikelnummer"] . "' AND Ordernummer = $intOrdernummer";
        break;
    case "upd":
        foreach($_GET['ArtikelID'] as $key => $id){
            $Artikelnummer = $id;
            $aantal = $_GET['AantalArtikel'][$key];
            //$sql2 = "update orders SET quantity = '$quantity' where item_id = '$item_id' ";

        $strSQL = "update tblorderregels set Aantal = '" . $aantal . "' where Artikelnummer = '" . $Artikelnummer . "' AND Ordernummer = $intOrdernummer";
        }
        break;
    }
$intGoed = mysqli_query($db, $strSQL);
if (!$intGoed)
    die("Foutje in de SQL: " . $strSQL);
}
?>

我试图使唯一的变量与GET,但不知何故它不工作我希望有人可以帮助这个,提前感谢!

确认:

  • html的第4行是一个链接,如果你点击链接
  • ,它会给出$_GET['Artikelnummer'] = Artikelnummer$_GET['action'] = del的GET变量
  • html的最后一行是一个隐藏的输入,它将给$_POST['action'] = upd的GET变量(因为没有在form元素中指定方法),有一个隐藏的输入为Artikelnummer,和一个文本输入的数字。如果你提交表单(当前html中没有提交按钮)

有用的东西:

  • 如果是单个或多个项目,点击删除链接只会删除您为
  • 点击的一个项目
  • 如果是单个项目,用新数字更新name=AantalArtikel文本输入并提交表单将更新该项目

问题:

  • 如果有多个项目,没有办法告诉哪个name=AantalArtikel文本输入是指哪个Artikelnummer

解决方案:

  • 为每个想要更新的产品提供一个单独的表单,因此有多个提交按钮
  • 或者,每个name=AantalArtikel文本输入必须有一个唯一的名称,例如name=AantalArtikel-Artikel1

提示:

  • 使用print_r($_GET)来查看表单/链接输出是什么,看看你在哪里出错

额外的评论:

大致格式为:

HTML
form
  hidden input action="upd"
  hidden input name="number_of_items" value="2"
  product1 html
     hidden input name="product1_name" value="red_car"
     text input name="product1_number" value="1"
     link ?product_name=NAME1&action=del
  product2 html
     hidden input name="product2_name" value="blue_car"
     text input name="product2_number" value="1"
     link ?product_name=NAME2&action=del
  submit button
PHP
  if GET action=del
     -> sanitise input, delete product
  if GET action=upd
     -> for (i <= GET number_of_items)
        -> sanitise input, get variables using $i in the name to loop through the numbers

我解决了这个问题。mysql查询不在我的开关中,所以这就是为什么sql查询没有被很好地执行。

谢谢你的帮助!