我正在开发一个电子商务网站,当用户第一次将产品添加到购物篮时,我收到以下错误,
遇到PHP错误
严重性:注意
消息:未定义的索引:orderDetails
文件名:libraries / MY_Cart.php
行号:59 PHP错误 遇到
严重性:警告
消息:无法修改标头 信息 - 已经发送的标题 (输出始于 /var/www/vhosts/akulaliving.com/httpdocs/CI-1.7.3/libraries/Exceptions.php:166)
文件名:libraries / Session.php
行号:662
使用以下代码将产品添加到购物篮
if ($this->input->post('btnAddToBag'))
{
$derivativeId = $this->input->post('selDerivative-1');
$quantity = $this->input->post('selQuantity');
$derivative = $this->Product_model->GetProducts(array('pdId' => $derivativeId), 'small');
// Add item to shopping bag.
$attributes = $this->Product_model->GetProductDerivatives(array('pdId' => $derivativeId));
$this->Checkout_model->AddProduct($derivative, $attributes, $quantity);
$this->data['message'] = 'Item added to Shopping Bag.';
// Update Delivery Price
$this->Checkout_model->updateDelivery(49);
//get the bag details
$this->data['items'] = $this->Checkout_model->GetProducts();
}
被调用的模型函数是
function AddProduct($derivative, $attributes, $quantity)
{
$data = array(
'id' => $derivative->pdId,
'qty' => $quantity,
'price' => ($derivative->productSavingType == 'none' ? $derivative->productPrice : $derivative->productSavingPrice),
'name' => $derivative->productTitle,
'attributes' => $attributes['attributeValues'],
'refNo' => $derivative->pdRefNo,
'productId' => $derivative->productId,
'set' => $derivative->productIsSet,
'hasImage' => $derivative->hasImage,
'imageUrl' => $derivative->imageUrl,
'imageAlt' => $derivative->imageAlt,
'stockLevel' => $derivative->pdStockLevel,
'leadTime' => $derivative->pdLeadTime
);
$data['nonDiscountedPrice'] = $data['price'];
if ($derivative->productSavingType == 'end-of-season')
{
$data['nonDiscountedPrice'] = $derivative->productPrice;
}
$this->cart->insert($data);
}
错误抱怨的代码如下,
function _insert($items=array())
{
if (isset($items['options']) AND count($items['options']) > 0)
{
$rowid = md5($items['id'].implode('', $items['options']));
}
else
{
$rowid = md5($items['id']);
}
if (isset($this->_cart_contents[$rowid]))
{
if (!isset($items['qty']))
{
return FALSE;
}
// Already Exists, we need to update the total for this item
$new_qty = $items['qty'];
$items['qty'] = $items['qty'] + $this->_cart_contents[$rowid]['qty'];
$items['rowid'] = $rowid;
if ($this->_update($items))
{
return TRUE;
}
return FALSE;
}
// Doesn't exist, we need to insert this item.
if (parent::_insert($items))
{
// Update our total.
if (isset($this->_cart_contents[$rowid]))
{
$this->real_total_items += $this->_cart_contents[$rowid]['qty'];
if ($this->_cart_contents['orderDetails']['discount'] > 0)
{
$this->_cart_contents[$rowid]['price'] = $this->_cart_contents[$rowid]['nonDiscountedPrice'];
$this->_save_cart();
}
}
return TRUE;
}
return FALSE;
}
答案 0 :(得分:1)
的Joomla?这是$this->_cart_contents['orderDetails']
在使用之前未定义的通知。您可以事先定义它,或关闭通知,它应该消失。
答案 1 :(得分:1)
我打赌你的PHP输出了NOTICE及其 导致会话头已经发送错误。
在php.ini中找到error_reporting
行并将其更改为
error_reporting = E_ALL & ~E_NOTICE
重新启动您的apache实例,看看是否能解决问题。
答案 2 :(得分:0)
您可能已将服务器配置设置为显示E_NOTICE的PHP错误(这对于开发来说是正常的)。 因为生成了E_NOTICE(MY_Cart.php),所以首先回显给浏览器。 并且由于已经存在浏览器输出,因此会出现警告“无法修改标头信息”(libraries / Session.php)。可能是因为它正在执行header()函数或类似的东西。
您可以通过修复E_NOTICE的原因(忘记检查'orderDetails'键吗?)或通过在代码开头设置error_reporting(E_ALL & ~E_NOTICE)来隐藏E_NOTICE来解决这个问题。
答案 3 :(得分:0)
在使用此变量之前,您必须为变量定义默认值
解决此警告。
答案 4 :(得分:0)
if (**$this->_cart_contents['orderDetails']['discount'] > 0**)
{
$this->_cart_contents[$rowid]['price'] = $this->_cart_contents[$rowid]['nonDiscountedPrice'];
$this->_save_cart();
}
CI抛出一条通知消息,因为:: _ cart_contents ['orderDetails'] var不存在。
如果您不想更改php.ini的错误设置,可以按照以下方式进行更改并尝试:
if (isset($this->_cart_contents['orderDetails']['discount'])&& ($this->_cart_contents['orderDetails']['discount']>0))