我希望有人可以指出我正确的方向,因为我觉得我在圈子里走来走去!
我将一个简单的购物应用程序放在一起 - 这是目前展示技术的唯一基础。
场景是有一个包含项目的数据库表。它们被分成蓝色和红色范围的项目。
在索引页面上,用户可以选择转到蓝色或红色项目。
在红色(或蓝色)项目页面上,显示项目并从数据库(MySQL)中提取当前价格和库存水平。然后,用户选择一个项目并单击购买按钮将其添加到购物车中。
然后页面会重定向到购物车页面,用户可以在此页面更新商品数量,进入结帐页面或返回“红色”或“蓝色”范围。
我的问题是......
1)如何设置会话数组以捕获购买“点击”时添加的项目?
到目前为止,我已经把它放在所有页面的顶部...
<?php session_start();
?>
但是,似乎只有一个项目可以添加到“购物车”。
这是我从我的数据库中提取项目的方式:
<?php
$result = mysql_query ('SELECT * FROM items WHERE colour="red"');
// fetch the resulting row as an associative array
while ($row = mysql_fetch_assoc ($result)){
echo '£', number_format( $row ['price'] / 100, 2, '.', ' ' );
}
?></p>
2)这是红色或蓝色页面上每个项目下的表单操作的代码。
<form method="post" action="cart.php">
<p>
<input type="submit" name="submit" value="Buy" />
<input type="hidden" name="cart" value="add" />
<input type="hidden" name="item" value="redplate" />
</p>
</form>
3)如何在购物车页面上进行任何数量更新后,在结帐页面中显示“已订购”商品?
到目前为止这是购物车页面上的内容 - 我会在结帐页面上重复这一点,并提取更新的数量吗?....
<?php
$submit = $_POST["submit"];
//Call the function and save all data into the array $_SESSION['form']
if($submit == "Buy"){setSessionVars();}
function setSessionVars() {
$item = array();
foreach($_POST as $fieldname => $fieldvalue) {
$item[$fieldname] = $fieldvalue;
}
$_SESSION['cart'] = $item;
echo " <table>
<tr>
<td>
<img src=\"images/{$item['item']}.jpg\" />
<td/>
<td>
{$item['item']} =
</td>
<td>
<input type=\"text(5)\" name=\"value\" value=\"1\" />
<input type=\"submit\" name=\"puchasedquan\" value=\"Click to update\" />
</td>
</tr>
</table>";
}
?>
任何帮助将不胜感激!!我觉得我好像在四处旅行!
答案 0 :(得分:1)
在PHP会话变量中存储内容的问题是它们存储在cookie中,这意味着它们需要打开cookie。好的,现在大多数浏览器都设置了cookie。
但是,如果直接从客户端文件中读取值并将其放入数据库,该怎么办?是什么阻止某人黑客攻击cookie文件,其中“subtotal = 10000”并将值更改为“subtotal = 1”,然后将其推送到您的系统中?
如果您实际将购物会话存储在数据库中,那么您的系统将更加强大,例如
CREATE TABLE tbl_shopping_session(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
php_session_key VARCHAR(32),
coupon_id INT,
FOREIGN KEY(coupon_id) REFERENCES tbl_coupons(id),
updated TIMESTAMP /* a timestamp is added to find & del old sessions */
) ENGINE = InnoDB;
CREATE TABLE tbl_shopping_cart(
shopping_session_id INT,
FOREIGN KEY(shopping_session_id) REFERENCES tbl_shopping_session(id) ON DELETE CASCADE,
product_id INT,
FOREIGN KEY(product_id) REFERENCES tbl_products(id),
cart_qty INT /* or DECIMAL(9,3) or something */,
subtotal DECIMAL(18,4)
) ENGINE = InnoDB;
从那里你可以得到图片...... php_session_key用于识别当前的购物会话,当前的会话ID用于查找&amp;将购物车物品存放在单独的表格中。
答案 1 :(得分:1)
这里最大的错误是,你将所有数据放在一个会话变量上,即$_SESSION['cart']
。
由于您要在会话中插入多个项目,因此您可以使用$_SESSION['cart'][]
来插入项目。
每当您尝试获取存储的值时,再次使用for循环读取以及。
foreach($_SESSION['cart'] as $cartItem) {
$cartItem; // will have all the item individually on each pass
}
答案 2 :(得分:0)
试试这个
$item = array();
foreach($_POST as $fieldname => $fieldvalue) {
$item[$fieldname][] = $fieldvalue;
}
答案 3 :(得分:0)
当您添加更多时,$ _SESSION键正在被替换,所以实际上它只是覆盖现有值,您可以添加:
foreach($_POST as $fieldname => $fieldvalue) {
// Now the array will be enumerated
$item[$fieldname][] = $fieldvalue;
}
print_r($item);