<?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循环。现在,while循环完美地设置为dkb表,这些是来自page1.php的项目。这个循环的设置方式是它将重复保存,显示和管理ecah项目数量,图像,名称,价格和删除选项,显示它们并重复它们用户选择的项目。那些字段设置和设计并不完全适用于来自page2.php的项目,其中显示在购物车中的信息从表格dkb和dbl中拉出来。现在的问题是,当从page2.php到购物车时,相同的项目名称会重复三次,因为在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,它在查询dbl.id = dkb.id中的dkb.id上加入了dbl.id对dkb表中的一个项目有三个价格,其中包含案例是项目1的三个价格,项目136的三个价格和项目2的三个价格。因此它是三种不同的品种,并且描述了dkb中的每个项目。从现在开始,如果你看一下在查询下面的while循环中分配的字段,其中一些是来自cdkb和dbl的其他dkb。 Rigth现在正如我所说的那样,来自dkb表的信息来自while循环中的设置,只有一个价格和一个名称。我想的是安排一个if语句条件来检测信息来自page1.php这是一个名称和价格,还是来自page2.php,它将是一个名称,从一到三个价格和品种取决于用户选择的小型,中型或大型托盘。每个托盘都有一个价格,但它将是一个名称1,136或2,这些是来自dkb表的id。在while循环中的if语句中显示来自page2.php的信息,需要一到三个价格和变量将有一个foreach循环或者一个for循环不知道用户在第2页中选择多少种。 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
请给我最后一手。
答案 0 :(得分:1)
为MySQL的此查询设置一些数据:
-- **********************************************************************
-- Table holding all the items in the users shopping cart, along with
-- a cookieId for thier session
-- **********************************************************************
Create table cart
(
cartId integer,
cookieId integer,
id integer,
qty integer
)
go
-- **********************************************************************
-- Table all the items available for sale with the price
-- **********************************************************************
Create table dkb
(
id integer,
name varchar(20),
price decimal(12,2)
)
go
-- **********************************************************************
-- Table that looks like the items table, but we have no idea why it is
-- here.
-- **********************************************************************
Create table cdkb
(
id integer,
name varchar(20),
price decimal(12,2)
)
go
-- **********************************************************************
-- Another table with a price in it .. a completely different id field
-- and a variety ... WTH is it for - No idea.
-- **********************************************************************
Create table dblv
(
dbl_id integer,
price decimal(12,2),
variety varchar(20)
)
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 1, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 2, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 3, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 4, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 5, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 6, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 7, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 8, 1);
go
insert into dkb (id, name, price) values (1,'my dkb 1', 10.00);
go
insert into dkb (id, name, price) values (2,'my dkb 2', 20.00);
go
insert into dkb (id, name, price) values (3,'my dkb 3', 30.00);
go
insert into dkb (id, name, price) values (4,'my dkb 4', 40.00);
go
insert into cdkb (id, name, price) values (5,'my cdkb 5', 50.00);
go
insert into cdkb (id, name, price) values (6,'my cdkb 6', 60.00);
go
insert into cdkb (id, name, price) values (7,'my cdkb 7', 70.00);
go
insert into cdkb (id, name, price) values (8,'my cdkb 8', 80.00);
go
insert into dblv (dbl_id, price, variety) values (1,1.99,'my dbl 1 variety');
go
insert into dblv (dbl_id, price, variety) values (2,1.99,'my dbl 2 variety');
go
然后是这个查询的结果:
SELECT
cart.id cart_id,
dkb.id dkb_id,
cdkb.id cdkb_id,
cart.*,
dkb.*,
cdkb.*,
dblv.*
FROM
cart
LEFT OUTER JOIN dkb
ON cart.id = dkb.id
LEFT OUTER JOIN dblv
on dkb.id = dblv.dbl_id
LEFT OUTER JOIN cdkb
on cart.id = cdkb.id
结果显示为:
cart_id dkb_id cdkb_id cartId cookieId id qty id name price id name price dbl_id price variety
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -------------------- ------------ ---------- -------------------- ------------ ---------- ------------ --------------------
1 1 NULL 1 1 1 1 1 my dkb 1 10.00 NULL NULL NULL 1 1.99 my dbl 1 variety
2 2 NULL 1 1 2 1 2 my dkb 2 20.00 NULL NULL NULL 2 1.99 my dbl 2 variety
3 3 NULL 1 1 3 1 3 my dkb 3 30.00 NULL NULL NULL NULL NULL NULL
4 4 NULL 1 1 4 1 4 my dkb 4 40.00 NULL NULL NULL NULL NULL NULL
5 NULL 5 1 1 5 1 NULL NULL NULL 5 my cdkb 5 50.00 NULL NULL NULL
6 NULL 6 1 1 6 1 NULL NULL NULL 6 my cdkb 6 60.00 NULL NULL NULL
7 NULL 7 1 1 7 1 NULL NULL NULL 7 my cdkb 7 70.00 NULL NULL NULL
8 NULL 8 1 1 8 1 NULL NULL NULL 8 my cdkb 8 80.00 NULL NULL NULL
抱歉今天没多少时间 - 工作的漫长的一天。 :-)我明天再来看看..
答案 1 :(得分:0)
如果您单独选择所有选项,然后表格。*这可能是您的问题。
SELECT *
FROM
cart
LEFT OUTER JOIN dkb
ON cart.id = dkb.id
LEFT OUTER JOIN cdkb
on cart.id = cdkb.id
LEFT OUTER JOIN double
on cart.id = double.id
WHERE
cart.cookieId = GetCartId() AND cdkb.id IS NOT NULL