为什么我收到通知:试图获取非对象错误的属性


Why am I getting Notice: Trying to get property of non-object error?

我不断收到错误,我不明白为什么,我已经尝试了我所知道的

目标是我的最后一个篮子,并使用"立即付款"功能结账。

 <?php
session_start();
include_once("config.php");
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="style/style.css" rel="stylesheet" type="text/css"></head>
<body>
<div id="products-wrapper">
 <h1>View Cart</h1>
 <div class="view-cart">
    <?php
    $current_url = base64_encode($url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
    if(isset($_SESSION["products"]))
    {
        $total = 0;
        echo '<form method="post" action="paypal-express-checkout/process.php">';
        echo '<ul>';
        $cart_items = 0;
        foreach ($_SESSION["products"] as $cart_itm)
        {
           $product_code = $cart_itm["code"];
           $results = $mysqli->query("SELECT product_name,product_description, price FROM products WHERE product_code='$product_code' LIMIT 1");
        
            if( !$results)
                die($mysqli->error);
            $queryResult = array();
            while ($obj = $results->fetch_object())
            {
                $queryResult[] = $obj->product_name;
            }
        
            echo '<li class="cart-itm">';
            echo '<span class="remove-itm"><a href="cart_update.php?removep='.$cart_itm["code"].'&return_url='.$current_url.'">&times;</a></span>';
            echo '<div class="p-price">'.$currency.$obj['0']->price.'</div>';
            echo '<div class="product-info">';
            echo '<h3>'.$obj->product_name.' (Code :'.$product_code.')</h3> ';
            echo '<div class="p-qty">Qty : '.$cart_itm["qty"].'</div>';
            echo '<div>'.$obj->product_desc.'</div>';}
            
            echo '</div>';
            echo '</li>';
            $subtotal = ($cart_itm["price"]*$cart_itm["qty"]);
            $total = ($total + $subtotal);
            echo '<input type="hidden" name="item_name['.$cart_items.']" value="'.$obj->product_name.'" />';
            echo '<input type="hidden" name="item_code['.$cart_items.']" value="'.$product_code.'" />';
            echo '<input type="hidden" name="item_price['.$cart_items.']" value="'.$obj->price.'" />';
            echo '<input type="hidden" name="item_qty['.$cart_items.']" value="'.$cart_itm["qty"].'" />';
            $cart_items ++;
            }
        echo '</ul>';
        echo '<input type="submit" value="Pay Now" />';
        echo '</form>';
        echo '<span class="check-out-txt"><strong>Total : '.$currency.$total.'</strong></span>';
     
?>
    </div>
</div>
</body>
</html>

我可以看到一些错误。在while循环中,您将在名为$obj的临时变量中逐个获取所有结果。

while ($obj = $results->fetch_object())
{
$queryResult[] = $obj->product_name;
}

在循环中,您可以访问$obj的所有属性。例如,您可以获取product_name,这是可以的。但是在循环的最后一次迭代之后,$obj将始终为null,如中所示http://php.net/manual/es/mysqli-result.fetch-object.php当然,$obj在任何时候都不是数组,所以:

  • 您不应该将$obj读取为数组,并且
  • 循环后根本不应该读$obj

为此,当你尝试时

echo '<div class="p-price">'.$currency.$obj['0']->price.'</div>';

您正在尝试获取不是数组的数组的第一个项,因此它将失败。和

 echo '<input type="hidden" name="item_name['.$cart_items.']" value="'.$obj->product_name.'" />';

 echo '<input type="hidden" name="item_price['.$cart_items.']" value="'.$obj->price.'" />';

您将始终访问一个null对象,因此它也将失败。

解决方案是更改while循环,这样它就包含了下面与数据库中一行相关的所有代码。

//keep your code until here
 while ($obj = $results->fetch_object())
 {
               // $queryResult[] = $obj->product_name; //probably you dont need this
            // } your loop ends here, but it shouldnt
            echo '<li class="cart-itm">';
            echo '<span class="remove-itm"><a href="cart_update.php?removep='.$cart_itm["code"].'&return_url='.$current_url.'">&times;</a></span>';
            //you dont access $obj[0], but $obj
            echo '<div class="p-price">'.$currency.$obj->price.'</div>'; 
            echo '<div class="product-info">';
            echo '<h3>'.$obj->product_name.' (Code :'.$product_code.')</h3> ';
            echo '<div class="p-qty">Qty : '.$cart_itm["qty"].'</div>';
            echo '<div>'.$obj->product_desc.'</div>';}
            echo '</div>';
            echo '</li>';
            $subtotal = ($cart_itm["price"]*$cart_itm["qty"]);
            $total = ($total + $subtotal);
            echo '<input type="hidden" name="item_name['.$cart_items.']" value="'.$obj->product_name.'" />';
            echo '<input type="hidden" name="item_code['.$cart_items.']" value="'.$product_code.'" />';
            echo '<input type="hidden" name="item_price['.$cart_items.']" value="'.$obj->price.'" />';
            echo '<input type="hidden" name="item_qty['.$cart_items.']" value="'.$cart_itm["qty"].'" />';
            $cart_items ++;
            }
    }//this is the new end of your loop
     echo '</ul>';
    //from here, your code remains the same

这样,你就可以解决你报告的问题,但你可能必须仔细检查你的代码,因为它可能包含一些其他错误。