繁体   English   中英

更新购物车

[英]Update shopping cart

我是PHP的新手,只是学习了一个课程,并在最后的案例中进行工作以获取证书。 我们正在一家网上商店上班,但我在更新购物车时遇到了麻烦。 我知道之前曾有人问过这个问题,但是在阅读完答案后,我无法修复自己的代码。 我希望有人可以帮助我。 如果购物车中有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的第四行是一个链接,如果您单击该链接,它将获得GET变量$_GET['Artikelnummer'] = Artikelnummer$_GET['action'] = del
  • 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查询执行不佳的原因。

感谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM