PHP会话变量-通过页面传递

PHP会话变量-通过页面传递,php,html,mysql,forms,session-variables,Php,Html,Mysql,Forms,Session Variables,我希望有人能给我指出我错在哪里的正确方向,因为我觉得我好像在兜圈子 我正在准备一个简单的购物应用程序——目前演示技术的唯一基础 该场景是有一个数据库表,其中包含项目。它们被分为蓝色和红色两类 在索引页面上,用户可以选择转到蓝色或红色项目 进入红色(或蓝色)项目页面后,将显示项目,并从数据库(MySQL)中提取当前价格和库存水平。然后,用户选择一个项目并单击“购买”按钮将其添加到购物车中 然后,该页面重定向到购物车页面,用户可以在该页面中更新商品数量、进入结帐页面或返回到“红色”或“蓝色”范围 我

我希望有人能给我指出我错在哪里的正确方向,因为我觉得我好像在兜圈子

我正在准备一个简单的购物应用程序——目前演示技术的唯一基础

该场景是有一个数据库表,其中包含项目。它们被分为蓝色和红色两类

在索引页面上,用户可以选择转到蓝色或红色项目

进入红色(或蓝色)项目页面后,将显示项目,并从数据库(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>

在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_键用于标识当前购物会话,当前会话id用于在单独的表中查找和存储购物车项目。

试试这个

$item = array();
foreach($_POST as $fieldname => $fieldvalue) {
    $item[$fieldname][] = $fieldvalue;
} 

添加更多时,$\u会话密钥将被替换,因此实际上它只是覆盖现有值,您可以添加以下内容:

foreach($_POST as $fieldname => $fieldvalue) {
    // Now the array will be enumerated
    $item[$fieldname][] = $fieldvalue;
}  

print_r($item);

这里最大的错误是,您将所有数据放在一个会话变量上,即
$\u session['cart']

由于要在会话中插入多个项目,因此必须使用
$\u会话['cart'][
插入项目

每当您试图获取存储的值时,请再次使用for循环进行读取

foreach($_SESSION['cart'] as $cartItem) {
  $cartItem; // will have all the item individually on each pass
}

谢谢我刚试过这个,但它现在把“Array”作为项目名称,没有图像了?试试print\r($whateveryouritemvariableis);输出是什么?出现了一个错误?我甚至不确定我定义的是否正确…我将用从数据库中选择项目的编码更新我的主Q!你是否用$item替换$whateveryouritemvariableis?我的意思是打印($item);查看数组的外观这是它打印的:数组([submit]=>array([0]=>Buy)[cartaction]=>Array([0]=>add)[item]=>Array([0]=>redplate))-谢谢你的帮助!谢谢!它引发了一个解析错误…“解析错误:语法错误,意外$end.”它指向的行是空的,所以我不太确定…确保你的法语括号{}匹配,你可能在某处丢失了它们!Array([submit]=>Array([0]=>Buy)[cartaction]=>Array([0]=>add)[item]=>Array([0]=>redplate])看起来像是链接到实际项目上的表单提交?尝试将$\u POST更改为:…foreach($\u POST['submit']完成…现在出现另一个错误!我尝试了:$item=Array();foreach($\u POST['submit']作为$fieldname=>$fieldvalue){$item[$fieldname][]=$fieldvalue;}print_r($item);错误是:为XXXXX中的foreach()在第37行数组()上提供的参数无效谢谢-刚刚尝试过,在我返回并尝试添加更多内容后,它仍然只显示一个项目?请确保调用了
session_start()
在每一页的顶部。我在每一页上都调用了此命令-我一定错过了后面的内容!@ez007,现在似乎是服务器问题。每次加载时会话都会重置。
foreach($_POST as $fieldname => $fieldvalue) {
    // Now the array will be enumerated
    $item[$fieldname][] = $fieldvalue;
}  

print_r($item);
foreach($_SESSION['cart'] as $cartItem) {
  $cartItem; // will have all the item individually on each pass
}