【问题标题】:If no items in cart, warning appears如果购物车中没有商品,则会出现警告
【发布时间】:2012-06-28 12:47:55
【问题描述】:

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

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

【问题讨论】:

  • 我建议您考虑将您的逻辑与您的 HTML 分离,并在没有 PHP 的情况下尽可能多地输出您的 HTML。您会发现,将两者分开将使您的程序更具可读性,并且编辑布局变得更加容易。
  • 感谢您的推荐,我同意,如果您手头有一些有关如何操作的信息的链接,我不确定如何执行此操作(我对 PHP 非常陌生,并且具有基本知识)完成了,我将不胜感激
  • This 是关于模板引擎的一个很好的理论讨论(它有点先进,但还是试试吧)。搜索“Zend_View”、“Twig”或“Smarty”以了解有关各种方法的更多信息。
  • 非常感谢!非常感谢:)

标签: php session shopping-cart


【解决方案1】:

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

【讨论】:

  • 我倾向于使用array_key_exists('event_orders', $_SESSION),以避免empty()出现任何问题。
  • halfer,那么您还需要对空数组进行检查以及。我会使用isset($_SESSION['event_orders'])(因为它比array_key_exists 短)但它有同样的缺点。我认为空在这里很好,因为数据不是来自外部,所以我们可以控制数据类型。
【解决方案2】:

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

if(!empty($_SESSION['event_orders'])){
    foreach($_SESSION['event_orders'] AS $event_id){
        ...
    }
}

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      相关资源
      最近更新 更多