如果购物车中没有商品,则会显示警告

时间:2012-06-28 12:47:55

标签: php session shopping-cart

我对会话有一个小问题。我已经在一个网站上建立了一个小型的购物车区域,几乎可以完成我想做的事情。一个问题是,当我访问我的购物篮并且其中没有任何商品时,它会引发错误:

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/>';
}
?>

3 个答案:

答案 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))。 其他变体并不好,但可以做到。