0

我对会话有一个小问题。我在一个网站上建立了一个类似于购物车的小型部分,它几乎可以完成我想要它做的事情。一个问题是,当我访问我的购物篮并且其中没有物品时,它会引发错误:

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

3 回答 3

2

您需要确保它$_SESSION['event_orders']存在(即使它是一个空数组)。您可以使用函数进行检查(它也将捕获空数组):

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,则该字段将被此函数视为“空”。这并不总是你想要的。但是,在这种情况下,它对于检查数组的“空性”很有用。

于 2012-06-28T12:50:22.217 回答
0

您只需要添加一个条件来检查您的会话变量中是否存在任何篮子项目:

if(!empty($_SESSION['event_orders'])){
    foreach($_SESSION['event_orders'] AS $event_id){
        ...
    }
}
于 2012-06-28T12:50:33.463 回答
0

您正在将空会话传递给 foreach 循环,因此它会引发错误,因为它需要数组。所以你可以检查 session 是否为数组(php 函数:is_array($array)),检查数组是否为空(php 函数:empty($array))。其他变种不好,但可以做到。

于 2012-06-28T12:52:33.217 回答