【问题标题】:Update shopping cart更新购物车
【发布时间】:2014-08-29 01:12:31
【问题描述】:

我对 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 创建唯一变量,但不知何故它不起作用 我希望有人可以帮助解决这个问题,在此先感谢!

【问题讨论】:

  • @MartinBean 这不是建设性的 - OP 只是根据 SO 的观点寻求帮助。
  • 网店不上线,这是我学习的最后一个案例:这是学习资料
  • @beingalex 建设性如何? Ronnie:从不直接在 MySQL 语句中使用变量。 始终清理用户输入数据。您的代码目前容易受到 SQL 注入攻击。
  • 嗨,马丁,感谢您的意见。我要清理我的输入数据,谢谢提及!

标签: php cart shopping


【解决方案1】:

确认:

  • html 的第 4 行是一个链接,如果您单击该链接,将提供 $_GET['Artikelnummer'] = Artikelnummer$_GET['action'] = del 的 GET 变量
  • html 的最后一行是一个隐藏输入,它将给出一个 GET 变量(因为表单元素中没有指定方法)$_POST['action'] = upd,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

【讨论】:

  • 每个产品的单独表格不是我想要的。我读过关于给每个“name=”一个变量 ID,但我不知道如何捕捉这些并将它们放入我的 mysql 更新字符串中
【解决方案2】:

我解决了这个问题。 mysql 查询不在我的交换机中,所以这就是 sql 查询没有很好执行的原因。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2018-12-28
    • 2023-03-10
    • 2018-07-29
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多