PHP会话变量 - 传递页面
我希望有人可以指出我正在发生错误的正确方向,因为我觉得我可以在圈子里四处走动!PHP会话变量 - 传递页面
我把一个简单的购物应用程序放在一起 - 它现在只是非常基本的演示技术。
的情况是,有一个在项目一个数据库表。他们已经分成蓝色和红色范围内的项目。
在索引页面上,用户可以选择去蓝色或红色的项目。
一旦红色(或蓝色)物品页面上,显示项目和目前的价格和库存水平从数据库(MySQL的)拉。用户然后选择一个项目并点击购买按钮将其添加到他们的购物车中。
页上,然后重定向到购物车页面,用户可以更新项目的数量,进入到结帐页面或返回到“红色”或“蓝色”的范围。
我的问题是这样的.....
1)如何设置我的会话阵列来捕捉项目,因为它们是在买“点击”添加?
到目前为止,我有这个在所有页面的顶部...
<?php session_start();
?>
但是只有一个项目,似乎能够被添加到“购物车”。
这是我可是从我的DB拉项目如何:
<?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>";
}
?>
任何帮助将不胜感激! !我感觉好像我在周围旅行!
与存储在PHP会话瓦尔东西的问题是,它们存储在cookie中,这意味着他们需要cookie才能打开。好的,现在大多数浏览器都设置了Cookie。
但是如果您直接从客户端文件读取值并将其放入数据库,那么该怎么办?什么来阻止某人攻击它所说的“subtotal = 10000”的cookie文件,并将该值更改为“subtotal = 1”,然后通过您的系统推送该cookie文件?
如果您实际上将购物会话存储在数据库中,例如,您的系统会更加健壮。
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用于查找将购物车项目存储在单独的表格中的&。
试试这个
$item = array();
foreach($_POST as $fieldname => $fieldvalue) {
$item[$fieldname][] = $fieldvalue;
}
当你添加更多,所以实际上它只是覆盖现有价值$ _SESSION键被替换,你可以补充一点:
foreach($_POST as $fieldname => $fieldvalue) {
// Now the array will be enumerated
$item[$fieldname][] = $fieldvalue;
}
print_r($item);
最大的失误在这里是,你正在将所有数据放在一个会话变量上,即$_SESSION['cart']
。
由于要在会议中插入多个项目,你必须使用$_SESSION['cart'][]
插入项目。
每当你试图让存储的值,再使用for循环读取以及。 !
foreach($_SESSION['cart'] as $cartItem) {
$cartItem; // will have all the item individually on each pass
}
谢谢,我只是尝试这样做,而是通过“阵列其拉动”为现在的项目名称和没有图像 – ez007 2012-04-20 22:29:06
尝试的print_r($ whateveryouritemvariableis);?什么是输出 – squarephoenix 2012-04-20 22:29:59
的ITs想出了一个错误林? !?甚至不知道香港专业教育学院确定一个正确的...虐待更新我与编码从数据库中选择的项目主要Q – ez007 2012-04-20 22:34:25