【问题标题】:Undefined offset Error checking php未定义的偏移量错误检查php
【发布时间】:2015-04-10 20:49:21
【问题描述】:

我得到一个未定义的偏移错误。我知道为什么我会收到错误以及它在哪里。我想要解决的是如何实施适当的错误检查以防止这种情况发生。该方法当前正在通过 ajax 调用,因此错误原因是返回任何字符串等问题。

下面是被调用的类的方法,它的变量被设置为$_GET。

        $id = $_GET['id'];
        $product = $_GET['name'];
        $price = $_GET['price'];

        //check for existing product
        for($i = 0; $i <= count($_SESSION['BASKET']); $i++) {
                //if product exsits incrent by 1
                if($_SESSION['BASKET'][$i]['id'] == $id){
                    $_SESSION['BASKET'][$i]['amount'] = $_SESSION['BASKET'][$i]['amount'] + 1; 
                    break;
                //if doesnt exsist creat product array
                } else {
                    $item = array('id' => $id,'amount' => 1,'product' => $product,'price' => $price);           
                }
        } 

        if(isset($item)){
            //push product to session array
            array_push($_SESSION['BASKET'], $item);
        }

如您所见,该方法检查篮子当前是否包含产品并通过增加数量(“数量”)进行更新。我有一个在类中创建篮子数组的构造函数。当 $_SESSION['BASKET'] 被调用并且为空但仍然存在时会出现问题:

array (
)

这会在检查 if 语句中的 id 时创建和未定义的偏移量错误,因为数组在技术上存在但偏移量 0 不存在。有什么想法可以解决这个问题吗?。

我所做的代码更改导致相同的错误

if(isset($_SESSION['BASKET'][$i]) && $_SESSION['BASKET'][$i]['id'] == $id){

【问题讨论】:

  • 您可以尝试使用 isset() 和/或 empty 来检查 $_SESSION['BASKET'] 数组的有效性吗? if (isset() && (!empty()))
  • 在第二种情况下仍然查询会话的id,所以仍然提供相同的错误
  • 你能用你所做的代码更改更新你的问题吗?
  • 添加了我尝试过的代码更改,确实停留在解决方案上。我可以让循环从 1 开始,当我创建会话数组时,放置一个空条目,以便它始终存在。但我真的不想在其他地方编辑大量代码,这似乎是一个有点晦涩的解决方案。
  • 检查是否存在 if 循环之外的值,您正在检查会话 id 值是否 = $id。如果值不存在,则控件不应转到代码的那部分。

标签: php arrays loops undefined offset


【解决方案1】:

我已将逻辑移到循环外并添加了一个布尔变量,然后我可以查询它以检查是否在数组中找到了一个项目。这允许我创建另一个 if 语句来检查会话值是否已设置,而不是检查数组是否已创建。

        $id = $_GET['id'];
        $product = $_GET['name'];
        $price = $_GET['price'];
        $exsist = false;

        //check for existing product
        for($i = 0; $i <= count($_SESSION['BASKET']); $i++) {
            if(isset($_SESSION['BASKET'][$i])){
                //if product exsits incrent by 1
                if(isset($_SESSION['BASKET'][$i]) && $_SESSION['BASKET'][$i]['id'] == $id){
                    $_SESSION['BASKET'][$i]['amount'] = $_SESSION['BASKET'][$i]['amount'] + 1; 
                    $exsist = true;
                    break;
                } 
            }
        }

        if($exsist != true){
            $item = array('id' => $id,'amount' => 1,'product' => $product,'price' => $price);
            array_push($_SESSION['BASKET'], $item);         
        }

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多