2012-10-04 51 views
4

我想显示所有会话数据,但有一些控制权。问题是,我无法确切知道会话中存储了什么,因为它是来自购物车的数据。显示会话变量

例如,这里一个变量在我的会议:

ITEM_NAME_1:产品名称
item_quantity_1:5

每个产品已与多家一些变量。如果购物车中有两种不同的产品,第二种将是

item_number_2等等。

还有一个变量叫做itemcount,它告诉购物车中有多少不同的产品。

我该如何告诉php,以item_name_开头的所有变量都应显示在所有其他变量(如总价格)之后的单个div中?

这是我目前使用打印的会话数据:

<?php 
foreach ($_SESSION as $key=>$val) 
echo $key. ": ".$val. "<br>"; 
?> 

这是我所看到的:

货币:EUR
航运:10
grandTotal:70.5
itemCount:4
item_name_1:Tomato Suppe
item_quantity_1:1
ITEM_PRICE_1:3.5
item_options_1:
item_name_2:扁豆苏佩
item_quantity_2:14
item_price_2:3.5
item_options_2:
item_name_3:鸡苏佩
item_quantity_3:1
item_price_3:4.5
item_options_3:
item_name_4:绿叶Suppe
item_quantity_4:1
item_price_4:3.5
item_options_4:

很显然,我想让它更易于阅读。

我可以使用echo $ _SESSION ['shipping']来将运输成本放到任何我想要的位置,但我该如何处理这些产品?

说我想每个产品都显示在div和/ div例如?

对于noob问题抱歉。

谢谢

+3

可以储存每一个项目作为单独的阵列,可以使用它。你可以显示保存项目到会话的代码吗? – Znarkus

+0

foreach($ _ POST为$ k => $ v){ $ _SESSION [$ k] = $ v; }这是我如何转换后数据sessioon – user1721135

回答

2

如果您无法控制数据保存到会话的方式,您可以编写一个简单的帮助功能,以更有用的格式检索产品数据。

function getSessionProducts() 
{ 
    $itemCount = $_SESSION['itemCount']; 
    $products = array(); 
    for($i = 1; $i <= $itemCount; $i++) { 
    $products[] = array(
     'name' => $_SESSION['item_name_'.$i], 
     'quantity' => $_SESSION['item_quantity_'.$i], 
     'price' => $_SESSION['item_price_'.$i], 
     'options' => $_SESSION['item_options_'.$i] 
    ); 
    } 
    return $products; 
} 

您当然应该添加适当的验证来检查$ _SESSION数组中的数据是否在访问之前设置。

如下

$products = getSessionProducts(); 
foreach($products as $product) { 
    echo $product['name']; 
} 
+0

这看起来正是我需要的东西,但我不能让它运行,因为某种原因,它给了我“意想不到的”。错误... – user1721135

+0

数组声明中出现语法错误。编辑答案。 – dag

+0

现在再试试这个。我将数组中的分号更改为逗号 –

0

,你可以使用的东西,如原油,因为这:

foreach($_SESSION AS $key => $val) 
    if (preg_match("/item_name/i", $key)) { 
     echo $val.'<br>'; 
    } 
} 

很明显,你处理,如果匹配成功,但是你想你做什么。这只是给出一个想法。

顺便说一句,考虑别人在说什么。如果你掌握会话变量,那么以更好,更有组织的方式存储它们是一个更好的主意。这个糟糕的例子将与你提供的内容一起工作。

+0

如果你解析变量名称,你可能做错了 – Znarkus

+0

你肯定是做错了什么。但他问如何,而不是如何使它变得更好。我根本不会使用会话。 –

+0

这类作品,但我怎么去结合不同的东西从同一个产品?这是我到目前为止所做的:<?php foreach($ _ SESSION AS $ key => $ val) if(preg_match(“/ item_name/i”,$ key)) echo'

'.$val.'
'; \t> \t $ VAL) 如果(的preg_match( “/ item_quantity/I”,$键)) 回声
'.$val.'
“?; \t?>我怎么能结合这两个? – user1721135

0

每当你开始问自己“我该如何处理变量变量名?”这是你走向错误方向的一个好兆头。正如你所看到的,寻找$_SESSION['item_number_$n']是困难和不自然的。然而,很容易循环访问数组的内容,幸运的是,您可以将其存储在会话中(除了页面加载之间的持久性,它只是一个普通的数组)。

也就是说,不要试图弄清楚如何到达$_SESSION['item_number_5'],你只需要看$_SESSION['shopping_cart'][5]。这样可以很容易地遍历项目,计算项目数量,添加项目,删除项目,并且通常会更清洁,以便与所有人一起工作。

0

无论如何,你都不应该真正使用会话变量来存储这种信息。您应该在会话数据库中存储一个ID以引用购物车,而不是直接在会话变量中存储有关购物车的所有信息。

+0

thx,问题是车是超级简单,并没有使用数据库的所有,我也不知道任何关于数据库。我使用会话通过2个不同的结帐页面传递购物车数据,你需要填写一张表格,然后整个事情将被邮寄。 – user1721135