Неперехваченное исключение "Исключение PDOException"


У меня есть скрипт, который позволяет мне добавлять кнопку запроса образца на страницы моего продукта, у меня есть скрипт под названием getSample.php но когда я нажимаю на кнопку "Образец" на странице продукта, я попадаю на getSample.php который показывает эту ошибку:

Неустранимая ошибка: Неперехваченное исключение "Исключение PDOException" с сообщением 'SQLSTATE[23000]: Нарушение ограничения целостности: 1452 Не удается добавить или обновить дочернюю строку: не удается выполнить ограничение внешнего ключа (japecilot_mage2.mage_catalog_product_entity, ОГРАНИЧЕНИЕ FK_OZSS_CAT_PRD_ENTT_ATTR_SET_ID_OZSS_EAV_ATTR_SET_ATTR_SET_ID ВНЕШНИЙ КЛЮЧ (attribute_set_id) ССЫЛАЕТСЯ НА `набор атрибутов mage_eav_attribute_set)' в /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/духи/lib/Zend/Db/Заявление/Pdo.php:228 Трассировка стека: #0 /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/lib/Zend/Db/Statement/Pdo.php (228): PDOStatement->выполнить (массив) #1 /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/lib/Varien/Db/Statement/Pdo/Mysql.php (110): Zend_Db_Statement_Pdo->_выполнить(Массив) #2 /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/app/code/core/Zend/Db/Statement.php (291): Varien_Db_Statement_Pdo_Mysql->_выполнить(Массив) #3 /var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/lib/Zend/Db/Adapter/Abstract.php (479): Zend_Db_Statement->выполнить(массив) #4/var/w в/var/www/vhosts/webcontrolcentre.co.uk/httpdocs/perfume/lib/Zend/Db/Statement/Pdo.php в строке 234

Код в getSample.php является:

<?php

 ini_set('display_errors', 1);
 error_reporting(E_ALL);

 //print_r($_POST);

 require_once 'app/Mage.php';
 Mage::app();



 Mage::getSingleton("core/session", array("name" => "frontend"));
 Mage::getSingleton('core/session')->setSampleError("");
 // Store users session
 $session = Mage::getSingleton("customer/session");

 //Store cart items
 $totalNumOfCartItem = Mage::getModel('checkout/cart')->getItemsQty();

 //Store cart items
 $theitems = Mage::getModel('checkout/cart')->getItems();

 $thecount = 0;

 foreach($theitems as $ti){

 $thename = $ti['name'];

 $test = strpos($thename,'Free Sample');

 if($test !== false){
 $thecount = $thecount+1;
 }

 }

 if(isset($_POST['name'])){
 $name = $_POST['name'];

 $id = $_POST['id'];
 if(isset($_POST['simpleid']) && !empty($_POST['simpleid'])){
 $simpleid = $_POST['simpleid'];
 }
 }
 if(isset($_GET['name'])){
 $name = $_GET['name'];
 if(isset($_GET['simpleid']) && !empty($_GET['simpleid'])){
 $simpleid = $_GET['simpleid'];
 }
 $id = $_GET['id'];
 }

 // retrict shopping cart to only allow 5 samples
 if ($totalNumOfCartItem <= 4)
 {
 $theproduct = Mage::getModel('catalog/product')->load($id);

 if($simpleid){
 $thesimple = Mage::getModel('catalog/product')->load($simpleid);
 }

 if($thecount < 2)
 {
 // instatiate Product
 $product = Mage::getModel('catalog/product');
 if($simpleid){
 $product->setSku($thesimple->getSku()."*".rand());
 } else {
 $product->setSku($theproduct->getSku()."*".rand());
 }
 $product->setName("Sample of ".$name);
 // $product->setDescription("Sample of ".$name);
 $product->setShortDescription($name." – Sample");
 $product->setPrice(0.00);
 $product->setTypeId('simple');

 $product->setImageUrl($theproduct->getImageUrl()); // set the images from the original product
 $product->setThumbnailUrl($theproduct->getImageUrl());
 $product->setImage($theproduct->getSmallImage());
 $product->setMediaGallery (array('images'=>array (), 'values'=>array ()));
 $product->addImageToMediaGallery(Mage::getBaseDir('media')."/catalog/product".$theproduct->getSmallImage(), array('image','small_image','thumbnail'), false, false);
 $product->setAttributeSetId("9"); // need to look this up
 $product->setCategoryIds("3"); // need to look these up
 $product->setWeight(21212121.21);
 $product->setTaxClassId(2); // taxable goods
 $product->setVisibility(1); // catalog, search
 $product->setStatus(1); // enabled
 // assign product to the default website
 $product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));


 // get product’s general info such price, status, description

 $stockData = $product->getStockData();

 // update stock data using new data
 $stockData['qty'] = 1;
 $stockData['is_in_stock'] = 1;
 $stockData['manage_stock'] = 1;
 $stockData['max_sale_qty'] = 5;

 // then set product’s stock data to update
 $product->setStockData($stockData);
 //die();

 // call save() method to save your product with updated data
 $product->save();


 header("Location: /checkout/cart/add/product/".$product->getId()."/");
 }
 }

 else
 {
 Mage::getSingleton('checkout/session')->addError("You are only allowed a maximum of 5 sample products");

 header("Location: /checkout/cart");
 }
 ?>

Любые идеи о том, как исправить это?

Спасибо.

Author: Duggy G, 2014-10-13

1 answers

Сообщение об ошибке выглядит так, как будто ваш продукт ссылается на идентификатор attribute_set_id, которого нет в базе данных.

Загляните в свою базу данных в таблицу mage_catalog_product_entity, найдите свой продукт и найдите столбец attribute_set_id. Число там, например, 4, должно присутствовать в таблице mage_eav_attribute_set в столбце id. Если нет, ваш продукт использует набор атрибутов, который больше недоступен.

Эта страница отчасти объясняет, что такое наборы атрибутов: http://inchoo.net/magento/importance-of-planning-attribute-sets/

Одно замечание: Ваш код полностью работает в рамках фреймворка, могут даже возникнуть некоторые проблемы с безопасностью. (используя СООБЩЕНИЕ, заголовок()). Вы также обновляете данные о запасах. Magento делает это, когда клиент фактически завершает процесс оформления заказа, нет необходимости делать это вручную.

 1
Author: RobM84, 2014-10-13 20:24:31