PHP注意:未定义的偏移量和索引

时间:2016-10-21 15:14:00

标签: php session post cart

提交表单时出现以下错误:

  

PHP注意:未定义的偏移量:E:\ php \ learning2 \ increase.php中的1   第10行

     

PHP注意:未定义的索引:E:\ php \ learning2 \ increase.php中的数量   在第10行

形式:

<form action="increase.php" method="post">
    <input type="hidden" name="productId" value="1">
    <input type="number" name="productQuantity" value="1">
    <input type="submit" name="submit" value="Add to basket">
</form>

increase.php

session_start();

if (isset($_POST['submit'])) {
    $productId = $_REQUEST['productId'];

    $productQuantity = $_REQUEST['productQuantity'];

    $_SESSION['cart'][$productId]['quantity'] += $productQuantity;

    header('Location: http://localhost:8000/');
}

如何解决?

1 个答案:

答案 0 :(得分:1)

这些是通知,旨在让您深入了解您的代码可能无法按预期方式运作的原因:

$_SESSION['cart'][$productId]['quantity'] += $productQuantity;

此处:$productId(已评估的数字)不是数组$_SESSION['cart']的一部分,您尝试将其视为数组。 PHP会自动将其初始化为数组,然后将该数组的['quantity']设置为$productQuantity。因为PHP正在做出这样的假设(因为你正试图把它当作一个数组来处理,而它不是),它会抛出一个NOTICE Exception。

你可以通过两种方式修复它。首先,您可以禁用通知,并假设它按预期工作:

error_reporting(E_ALL & ~E_NOTICE);

或者,通过显式初始化数组来修复导致它的错误:

if ( !isset($_SESSION['cart']) )
{
    $_SESSION['cart'] = array();
}
if ( !isset($_SESSION['cart'][$productId]) )
{
    $_SESSION['cart'][$productId] = array('quantity' => 0);
}
$_SESSION['cart'][$productId]['quantity'] += $productQuantity;