我是一个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 </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> </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> </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行是一个链接,如果你点击链接 ,它会给出
- html的最后一行是一个隐藏的输入,它将给
$_POST['action'] = upd
的GET变量(因为没有在form元素中指定方法),有一个隐藏的输入为Artikelnummer,和一个文本输入的数字。如果你提交表单(当前html中没有提交按钮)
$_GET['Artikelnummer'] = Artikelnummer
和$_GET['action'] = del
的GET变量有用的东西:
- 如果是单个或多个项目,点击删除链接只会删除您为 点击的一个项目
- 如果是单个项目,用新数字更新
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查询没有被很好地执行。
谢谢你的帮助!