【发布时间】:2010-02-18 09:47:25
【问题描述】:
<?php
switch($_GET["action"])
{
case "add_item":
{
AddItem($_GET["idc"], $_GET["qty"]);
ShowCart();
break;
}
case "update_item":
{
UpdateItem($_GET["idc"], $_GET["qty"]);
ShowCart();
break;
}
case "remove_item":
{
RemoveItem($_GET["idc"], $_GET["id"]);
ShowCart();
break;
}
default:
{
ShowCart();
}
}
function AddItem($itemId, $qty){
$result = mysql_query("SELECT COUNT(*) FROM cart WHERE cookieId = '" . GetCartId() . "' AND id = $itemId");
$row = mysql_fetch_row($result);
$numRows = $row[0];
if($numRows == 0)
{
// This item doesn't exist in the users cart,
// we will add it with an insert query
mysql_query("INSERT INTO cart(cookieId, id, qty) values('" . GetCartId() . "', $itemId, $qty)");
//printf ("Inserted records: %d\n", mysql_affected_rows());
}
else
{
// This item already exists in the users cart,
// we will update it instead
mysql_query("UPDATE cart SET qty = $qty WHERE cookieId = '" . GetCartId() . "' AND id = $itemId");
}
}
function UpdateItem($itemId, $qty)
{
mysql_query("UPDATE cart SET qty = $qty WHERE cookieId = '" . GetCartId() . "' AND id = $itemId");
//printf ("Updated records: %d\n", mysql_affected_rows());
}
function RemoveItem($itemId)
{
mysql_query("DELETE FROM cart WHERE cookieId = '" . GetCartId() . "' AND id = $itemId");
}
?>
<?php
function ShowCart()
{
$result = mysql_query("SELECT
cart.id cart_id,
cart.id cart_id,
cart.cartId cartId,
cart.cookieId cookie_Id,
cart.qty qt_y,
cdkb.id cdkb_id,
cdkb.name name,
cdkb.image image,
cdkb.price price,
dkb.id dkb_id,
dkb.name name1,
dkb.image image1,
dkb.price price2,
dbl.product_id product_id,
dbl.price price3,
dbl.variety variety,
dbl.description description
FROM
cart
LEFT OUTER JOIN cdkb
ON cart.id = cdkb.id
LEFT OUTER JOIN dkb
ON cart.id = dkb.id
LEFT OUTER JOIN dbl
ON dbl.id = dkb.id
WHERE
cart.cookieId ='" . GetCartId() . "' ' ORDER BY cdkb.name AND dkb.name ASC");
<div id="cart">
<div id="group">
<div id="quantity">Qty</div>
<div id="cartpic">Pic</div>
<div id="product">Product</div>
<div id="cartprice">Price</div>
<div id="remove">Remove</div>
</div>
<?php
$totalCost=0;
while($row = mysql_fetch_array($result))
{
// Increment the total cost of all items
$totalCost += ($row["qt_y"] * $row["price1"]);
?>
<div id="cart1">
<select name="<?php echo $row["ckb_id"];?>" onChange="UpdateQty(this)">
<?php print($row["ckb_id"]);?>
<?php
for($i = 1; $i <= 30; $i++)
{
echo "<option ";
if($row["qt_y"] == $i)
{
echo " SELECTED ";
}
echo ">" . $i . "</option>";
}
?>
</select>
</div>
<div id="cart2">
<img src="images/logopic.gif"<?php /*?><?php echo $row["image1"]; ?><?php */?> alt="we" width="60" height="50" />
</div>
<div id="cart3"><p><?php echo $row["dishname1"]; ?></p></div>
<div id="cart4"><p>
$<?php echo number_format($row["price3"], 2, ".", ","); ?></p></div>
<div id="cart5">
<p><?php
printf('<a href="cart.php?action=remove_item&id=%d&idc=%d®ister=%s">Remove</a>', $_GET['id'], $row['ckb_id'], $_GET['register']);
?></p></div>
<hr size="1" color="red" >
<script language="JavaScript">
function UpdateQty(item)
{
itemId = item.name;
newQty = item.options[item.selectedIndex].text;
document.location.href = 'cart.php?action=update_item&id='+itemId+'&qty='+newQty;
}
</script>
<?php
}
?>
<font face="verdana" size="2" color="black" style="clear:right;">
<b>Total: $<?php echo number_format($totalCost, 2, ".", ","); ?></b></font></td>
<?php
}
?>
以上是cart.php 的更新代码和查询。如果您注意到查询下方有一个 while 循环。现在,为 dkb 表设置了 while 循环,这些表是来自 page1.php 的项目。这个循环的设置方式是重复保存、显示和管理 ecah 项目数量、图像、名称、价格和删除选项,显示它们并根据用户选择的多个项目重复它们。好吧,这些字段的设置和设计并不完全适用于来自 page2.php 的项目,购物车中显示的信息是从 dkb 和 dbl 表中提取的。现在的问题是,当从 page2.php 到购物车时,相同的项目名称重复了 3 次,因为在 dbl 表中的设计如下。
INSERT INTO `dbl` (`id`, `price`, `variety`, `description`) VALUES
(1, 20.30, 'Small Tray', 'Serves 6 to 8 people' ),
(1, 25.90, 'Medium Tray', 'Serves 12 to 15 people'),
(1, 30.90, 'Large Tray', 'Serves 18 to 21 people'),
(136, 0.00, 'Small Tray', '', 'small'),
(136, 0.00, 'Medium Tray', '' ),
(136, 0.00, 'Large Tray', ''),
(2, 0.00, 'Small Tray', ''),
(2, 0.00, 'Medium Tray', ''),
(2, 0.00, 'Large Tray', '');
上面的插入假设是 dkb 的三个项目,在查询 dbl.id=dkb.id 中查看它在 dkb.id 上连接的 dbl.id 好吧 dbl.id 对 dkb 表中的一个项目有三个价格case 是项目 1 的三个价格,项目 136 的三个价格和项目 2 的三个价格。所以它是三个不同的品种,以及在 dkb 中对这些项目中的每一个的描述。从现在开始,如果您查看查询下方 while 循环中分配的字段,其中一些是来自 cdkb 和 dbl 的 dkb。现在,正如我所说的那样,从 dkb 表中的信息来看,在 while 循环中的设置上面的一些地方是可以的,该表只有一个价格和一个名称。我在想的一些是安排一个 if 语句条件来检测信息来自 page1.php 的位置,这是一个名称和价格,或者来自 page2.php 的一个名称,从一到三个价格和品种取决于用户选择的小、中或大托盘。每个托盘都有一个价格,但它将是一个名称 1、136 或 2,它们是来自 dkb 表的 id。在while循环内的if语句中显示page2.php中需要一到三个价格和品种的信息将有一个foreach循环或者一个for循环不知道用户在page2中选择了多少品种。 php 在 if 语句的帮助下将其显示在购物车的 while 循环中,该语句将检测从 page1.php 或 page2.php 中选择的天气。
$result = mysql_query("SELECT * FROM .... LEFT OUTER JOIN .... WHERE") // This is the query we have discussed in this forum.
while($row = mysql_fetch_array($result))
{ if($row['cdkb_id']){
echo "<div>qty</div>";
echo"<div>". $row['image'] . "</div>";
echo"<div>". $row['name'] . "</div>";
echo"<div>". $row['price'] . "</div>";
echo"<div>remove</div>";
}
else{
echo "<div>qty</div>";
echo"<div>". $row['image1'] . "</div>";
echo"<div>". $row['name1'] . "</div>";
foreach ($row['dkb_id'] as $variety) {
echo"<div>".$variety['variety']. $variety['price3'] . "</div>";
// the vriety and price3 field will display three times as in table dbl has three prices and three variety. It is correct to use a foreach loop for in this case?}
echo"<div>remove</div>";
// end of foreach loop inside the else statement
}// end of if else statement
}// end of while loop
?>
因此,作为最终产品进行搜索和呈现的最终显示和插图如下所示,这就是所需的外观。
while($row = mysql_fetch_array($result))
{
if (table cdkb) {
[1]qyt image name price remove
1 --- marina $18.90 remove?
}end of if statement
Else table dkb {
1]qyt Image Name Price Remove
1 --- marina Small Tray $18.90 remove?
Medium Tray $30.24
Large Tray $35.90
} // end of else statement
}//end of while loop
请给我最后的帮助。
【问题讨论】:
-
您可能会看到我的问题 (stackoverflow.com/questions/1764747/sqlite-column-aliasing),以了解如何轻松捕获此类额外逗号。 (这是公认的答案。)