我对会话有一个小问题。我已经在一个网站上建立了一个小型的购物车区域,几乎可以完成我想做的事情。一个问题是,当我访问我的购物篮并且其中没有任何商品时,它会引发错误:
Warning: Invalid argument supplied for foreach() in /home/andydownham/site.com/wp-content/themes/theme/basket.php on line 28
我想它需要像'if items are in cart' > use normal code > else display 'sorry there are no items in your cart'
这样的东西我只是不知道如何实现它。
以下是我用来将内容存储到会话中的代码
<?php
session_start();
//var_dump($_POST);
//print_r($_SESSION);
$_SESSION['event_orders'][] = $_POST['event_id'];
?>
这是我在购物篮页面上使用的代码:
<?php
session_start();
foreach($_SESSION['event_orders'] AS $event_id){
echo '<div class="grad basket">';
echo '<div class="thumb">';
$EM_Event = em_get_event($event_id);
echo $EM_Event->output('#_EVENTIMAGE{72,72}');
echo '</div>';
echo '<div class="basket-title"><h2>';
echo '<a href="';
$EM_Event = em_get_event($event_id);
echo $EM_Event->output('#_EVENTURL');
echo '">';
$EM_Event = em_get_event($event_id);
echo $EM_Event->output('#_EVENTNAME');
echo '</a>';
echo '</h2>';
echo '<div class="basket-dates"> Dates:';
$EM_Event = em_get_event($event_id);
echo $EM_Event->output('#_EVENTDATES');
echo '</div></div>';
echo '<div class="klear"></div>';
echo '<input type="submit" class="remove" value="remove" />';
echo '</div>';
echo '<br/>';
}
?>
答案 0 :(得分:2)
您需要确保$_SESSION['event_orders']
存在(即使它是一个空数组)。您可以使用empty函数检查它(它也将捕获空数组):
if (empty($_SESSION['event_orders'])) {
// Cart is empty
} else {
foreach(...) {
...
}
}
但是,您需要小心empty
。这些东西也被认为是“空的”(来自手册):
* "" (an empty string) * 0 (0 as an integer) * 0.0 (0 as a float) * "0" (0 as a string) * NULL * FALSE * array() (an empty array) * var $var; (a variable declared, but without a value in a class)
特别注意包含“0”的字符串被视为空!这意味着,如果您将来某个地方有一个HTML表单,用户可以在其中输入值并且用户输入数字0
,则该字段将被该函数视为“空”。这并不总是你想要的。但是,在这种情况下,检查数组的“空虚”非常有用。
答案 1 :(得分:0)
您只需添加一个条件来检查您的会话中是否存在任何购物篮项目:
if(!empty($_SESSION['event_orders'])){
foreach($_SESSION['event_orders'] AS $event_id){
...
}
}
答案 2 :(得分:0)
您正在将空会话传递给foreach循环,因此它会抛出错误,因为它需要数组。 所以你可以检查session是否是数组(php函数:is_array($ array)),是否检查数组是否为空(php函数:空($ array))。 其他变体并不好,但可以做到。