我正在为在线商店建立一个界面,其中每个项目都是一个FORM,而BUY按钮是一个提交,它提交所点击表单的名称和价格,并且该数据显示在CONFIRM ORDER页面上。在确认订单页面上,我创建了一个数组,如下所示
if (!isset($input_order_arr)) {
$input_order_arr = array();
}
之后我获取已发布的变量并将它们推入数组
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!empty($_POST['item-title']) && !empty($_POST['item-price'])) {
$item_title = test_input($_POST['item-title']);
$item_price = test_input($_POST['item-price']);
array_push($input_order_arr,$item_title,$item_price);
}
}
$_SESSION['chosen_item'] = $input_order_arr;
*注意:test_input是一个执行striplashes,htmlspecialchars和htmltrim的函数,用于安全目的。 (有人可能会通过Chrome开发者控制台编辑项目的价值?不确定是否存在任何威胁)
之后,该值显示在类似的表中
<?php if (isset($_SESSION['chosen_item'])) {
foreach ($_SESSION['chosen_item'] as $value) {
echo "<td>" . $value . "</td>";
}
} ?>
这就是问题所在。
如果您订购商品,其价格和名称会显示,但如果您返回并订购另一商品,则前一商品及其价格会丢失,就好像它没有向数组添加新行,而是替换旧商品那些,或者会话只保存来自一个动作的数据,这没有任何意义,因为这就是$ _SESSION的含义,代码在每个使用$ _SESSION变量的页面中都显示为session_start();
。 / p>
主要问题 - 为什么$ _SESSION数组会丢失旧的输入?
答案 0 :(得分:1)
您需要$_SESSION['chosen_item'][]=$input_order_arr;
覆盖相同的索引,而不是创建新的
$_SESSION['chosen_item'][]=$input_order_arr;
注意:它也应该在if语句中移动。以避免在会话中存储空数组
答案 1 :(得分:1)
您可以像这样直接进入会话
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!empty($_POST['item-title']) && !empty($_POST['item-price'])) {
array_push($_SESSION['chosen_item'],
test_input($_POST['item-title']),
test_input($_POST['item-price'])
);
}
}
//$_SESSION['chosen_item'] = $input_order_arr;
或者您的test_input()
可能没有任何用处
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!empty($_POST['item-title']) && !empty($_POST['item-price'])) {
array_push($_SESSION['chosen_item'],
$_POST['item-title'],
$_POST['item-price']
);
}
}
您可能会在以后通过
更容易地使用此数据if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!empty($_POST['item-title']) && !empty($_POST['item-price'])) {
array_push($_SESSION['chosen_item'],
array('title' => $_POST['item-title'],
'price' => $_POST['item-price']
)
);
}
}
答案 2 :(得分:-1)
当你回去时,你基本上将把selected_item数组元素设置为空,因为当你还没有提交表格时,$ input_order_arr将不包含任何内容。
只有在存在非空的$ input_order_arr数组时才应附加到会话数组:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!empty($_POST['item-title']) && !empty($_POST['item-price'])) {
$item_title = test_input($_POST['item-title']);
$item_price = test_input($_POST['item-price']);
array_push($input_order_arr,$item_title,$item_price);
$_SESSION['chosen_item'][] = $input_order_arr;
}
}