-1

我知道有很多关于这个问题的帖子。我看过很多帖子,但出于某种原因,我似乎可以找到答案!

任何帮助将不胜感激。我对 PHP 还很陌生,所以如果我说错了什么,我深表歉意。

我正在尝试使用数组创建一个基本的篮子系统。我在网上不断收到一个错误未定义的索引$_SESSION['cart'][$app_ID]++;有趣的是它所有的功能都正确!我想解决错误,而不仅仅是关闭错误报告。

    if(isset($_GET['id'])){


$app_ID = $_GET['id'];   //the item id from the URL 
$action = $_GET['action']; //the action from the URL 


$total = 0;


if (isset($app_ID)){

switch($action) {       

    case "add":
        $_SESSION['cart'][$app_ID]++;
    break;

    case "remove":
        $_SESSION['cart'][$app_ID]--; 
        if($_SESSION['cart'][$app_ID] == 0) unset($_SESSION['cart'][$app_ID]); 
    break;

    case "empty":
        unset($_SESSION['cart']); //unset the whole cart, i.e. empty the cart. 
    break;

谢谢大家。

4

4 回答 4

0

要使用 $_SESSION,您必须先调用 session_start (),然后再发送任何标头信息

我希望这对你有帮助,

干杯,

于 2013-03-28T21:09:15.023 回答
0
session_start(); // at the top

case "add":
    if (isset( $_SESSION['cart'][$app_ID] )){
        $_SESSION['cart'][$app_ID]++;
    } else {
        $_SESSION['cart'][$app_ID] = 1;
    }
break;
于 2013-03-28T21:09:21.297 回答
0

值得一提的是,这只是一个通知,而不是一个错误。您基本上必须检查数组索引是否存在并在引用它之前对其进行初始化。

if (isset($app_ID)) {
    switch($action) {       

        case "add":
            if (!isset($_SESSION['cart']) {
                $_SESSION['cart'] = array();
            }

            if (!isset($_SESSION['cart'][$app_ID]) {
                $_SESSION['cart'][$app_ID] = 0;
            }

            $_SESSION['cart'][$app_ID]++;
        break;

        case "remove":
            if (isset($_SESSION['cart'] && isset($_SESSION['cart'][$app_ID]) {
                $_SESSION['cart'][$app_ID]--; 
                if ($_SESSION['cart'][$app_ID] <= 0) {
                   unset($_SESSION['cart'][$app_ID]);
                }
            }
        break;

        case "empty":
            unset($_SESSION['cart']); //unset the whole cart, i.e. empty the cart. 
        break;
    }
}

为了安全起见,我也改== 0了。remove<= 0

于 2013-03-28T21:17:12.420 回答
0

您应该在任何地方使用isset($_SESSION['cart'][$app_ID]),也许isset( $_SESSION['cart'])在此之前使用。

通常,您必须确保在引用它之前存在数组索引。您可以使用isset() 或在这种情况不可避免的情况下编写代码(例如,在更早的地方添加索引)来执行此操作。

我想你问题的另一部分是你的代码为什么有效。解释很简单。当您引用不存在的索引时,会发出您观察到的通知(在非生产环境中),但这不会停止程序。由于没有要使用的内容,null因此为该数组值返回。所以该值被假定为null,并且++取值,作为整数,并且null被转换为整数0,然后加一。由于++是一个写入操作符,它将为您创建数组项。由于$a++被定义为$a=$a+1很容易看出您所写的$_SESSION['cart'][$app_ID]=$_SESSION['cart'][$app_ID]+1内容依次$_SESSION['cart'][$app_ID]=null+1执行null+10+1产生 0,因此将 0 分配给(以前缺少的)数组项。希望这有助于看清楚。;)

于 2013-03-28T21:24:42.427 回答