Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Не передается переменная в модель OS 2.1


Recommended Posts

Здравствуйте. Для учета кто из менеджеров занес товар и чтобы другие менеджеры не видели товары других ввел переменную "user_id" - берется соответственно из таблицы user. В базе к таблице product добавил поле user_id. Теперь админка определяет кто зашел на сайт по id и в товарах показывает только его товары. Проблема в том что при создании товара админка знает что id менеджера допустим 9 и var_dump это в шаблоне показывает. В функции add в модели добавил user_id = '" . (int)$data['user_id'] . "' но в лог пишется PHP Notice:  Undefined index: customer_id как раз в той строке. В контроллере

$this->load->model('user/user');
$user_info = $this->model_user_user->getUser($this->user->getId());

	if (!empty($product_info)) {
			$data['user_id'] = (int)$product_info['user_id'];
		} else  {
			$data['user_id'] = (int)$user_info['user_id'];
		} 

Как передать эту переменную правильно для модели? 

Link to post
Share on other sites

Вы что-то от нас скрываете, пишет что не определен customer_id , а у вас такого в коде нету...Мб строчкой ошиблись? Стоят ocmod дополнения? Спотрите тогда в папку modification

Link to post
Share on other sites

Сначала делал customer_id, переделал на user_id. В логе старая запись была. Новая теперь PHP Notice:  Undefined index: user_id

Link to post
Share on other sites
2 часа назад, GrblFF сказал:

В функции add в модели добавил user_id = '" . (int)$data['user_id']

в модели, в переменной $data, данные из массива $_POST.  откуда там будет  user_id?

$this->model_catalog_product->addProduct($this->request->post);

или я что-то не так понял?

Link to post
Share on other sites

При создании и редактировании товара достаточно было добавить в модель строку

$this->db->query("UPDATE " . DB_PREFIX . "product SET user_id = '" . (int)$this->user->getId() . "' WHERE product_id = '" . (int)$product_id . "'");

а уже в контроллере реализовать только логику проверки может ли юзер редактировать этот товар
 

Link to post
Share on other sites

Не передавалось потому, что хоть в контроллере переменная и определялась, но в форму отправки в шаблоне я забыл ее включить. Вставил со свойством display:none и теперь все работает нормально.

  • +1 1
Link to post
Share on other sites
2 часа назад, GrblFF сказал:

Не передавалось потому, что хоть в контроллере переменная и определялась, но в форму отправки в шаблоне я забыл ее включить.

а нафига таскать идентификатор пользователя из контроллера в шаблон, из шаблона  в модель?

получайте id в модели.  читайте выше сообщение от@thentru

Link to post
Share on other sites
  • 1 month later...

Ребят а не подскажите как правильно это реализовать, сам только учюсь хотелось бы немного по подробнее о данном действии как и что где прописать,если не сложно,очень буду благодарен
 

Link to post
Share on other sites

4 часа назад, pasha2298 сказал:

как правильно это реализовать

что это?

Link to post
Share on other sites
27 минут назад, fanatic сказал:

что это?

то о чем обсуждается в этой статье, именно сами шаги по этапам ,я только учюсь хочу разобраться. Очень буду признателен вам если расскажите куда что подставлять

Edited by pasha2298
Link to post
Share on other sites

1 час назад, fanatic сказал:

что это?

Подскажите что я делаю не так и как нужно правильно, вот что я сделал :

1. В контроллер product.php добавил строчки 

1.png.8e59caf5f8b2168973e3afcf68bb8536.png

2.Вставил в модель product.phpвот эти строчки:

2.thumb.png.f551b5f6ab7d2f8a804cd5fc175d217b.png

В итоге при добавлении товара вот такая ошибка при добавлении товара

Fatal error: Uncaught exception 'Exception' with message 'Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1<br />Error No: 1064<br />INSERT INTO oc_product SET model = 'СЂРЅСЂРЅРєРєРї', sku = '', upc = '', ean = '', jan = '', isbn = '', mpn = '', location = '', quantity = '1', minimum = '1', subtract = '1', stock_status_id = '7', date_available = '2017-12-10', manufacturer_id = '0', shipping = '1', price = '123', points = '0', weight = '0', weight_class_id = '1', length = '0', width = '0', height = '0', length_class_id = '1', status = '1', tax_class_id = '0', sort_order = '1', date_added = NOW(), user_id = '' in D:\OSPanel\domains\domzolota.info\system\library\db\mysqli.php:40 Stack trace: #0 D:\OSPanel\domains\domzolota.info\system\library\db.php(16): DB\MySQLi->query('INSERT INTO oc_...', Array) #1 D:\OSPanel\domains\domzolota.info\admin\model\catalog\product.php(4): DB->query('INSERT INTO oc_...') #2 [internal funct in D:\OSPanel\domains\domzolota.info\system\library\db\mysqli.php on line 40

 

Edited by pasha2298
Link to post
Share on other sites

42 минуты назад, pasha2298 сказал:

именно сами шаги по этапам

в общих чертах как-то так

1.

 

В 03.11.2017 в 07:47, GrblFF сказал:

В базе к таблице product добавил поле user_id.

2.

В 03.11.2017 в 11:00, thentru сказал:

При создании и редактировании товара достаточно было добавить в модель строку


$this->db->query("UPDATE " . DB_PREFIX . "product SET user_id = '" . (int)$this->user->getId() . "' WHERE product_id = '" . (int)$product_id . "'");

3.

В 03.11.2017 в 11:00, thentru сказал:

а уже в контроллере реализовать только логику проверки может ли юзер редактировать этот товар

достали user_id  из таблицы товара

сравнили с id текущего пользователя

совпадает,  разрешаем редактирование

не совпадает, досвиданья

Link to post
Share on other sites
12 минут назад, fanatic сказал:

в общих чертах как-то так

1.

 

2.

3.

достали user_id  из таблицы товара

сравнили с id текущего пользователя

совпадает,  разрешаем редактирование

не совпадает, досвиданья

А глянте пожалуйста мое сообщение выше что я делаю не так что в итоге у меня вылетает ошибка

 

Link to post
Share on other sites

запрос на добавление

$this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', ean = '" . $this->db->escape($data['ean']) . "', jan = '" . $this->db->escape($data['jan']) . "', isbn = '" . $this->db->escape($data['isbn']) . "', mpn = '" . $this->db->escape($data['mpn']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . (int)$data['tax_class_id'] . "', sort_order = '" . (int)$data['sort_order'] . "', date_added = NOW(), user_id = '" . (int)$this->user->getId() . "'");

а update,   добавьте в editProduct()

Link to post
Share on other sites
8 минут назад, fanatic сказал:

запрос на добавление


$this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', ean = '" . $this->db->escape($data['ean']) . "', jan = '" . $this->db->escape($data['jan']) . "', isbn = '" . $this->db->escape($data['isbn']) . "', mpn = '" . $this->db->escape($data['mpn']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . (int)$data['tax_class_id'] . "', sort_order = '" . (int)$data['sort_order'] . "', date_added = NOW(), user_id = '" . (int)$this->user->getId() . "'");

а update,   добавьте в editProduct()

то есть этим заменить это

public function editProduct($product_id, $data) {
		$this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', ean = '" . $this->db->escape($data['ean']) . "', jan = '" . $this->db->escape($data['jan']) . "', isbn = '" . $this->db->escape($data['isbn']) . "', mpn = '" . $this->db->escape($data['mpn']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . (int)$data['tax_class_id'] . "', sort_order = '" . (int)$data['sort_order'] . "', date_modified = NOW() WHERE product_id = '" . (int)$product_id . "'");

 

Link to post
Share on other sites

2 минуты назад, pasha2298 сказал:

то есть этим заменить это

нет, добавить после этого

Link to post
Share on other sites
33 минуты назад, fanatic сказал:

В базе к таблице product добавил поле user_id.

Подскажите а добавить поле как ?

 

Просто добавил как вы сказали 

3.thumb.png.b8bfa8b9b0e6596aeb5eaf132992b8ab.png

в итоге теперь такая ошибка при добавлении товара

Fatal error: Uncaught exception 'Exception' with message 'Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1<br />Error No: 1064<br />INSERT INTO oc_product SET model = 'СЃСЃСЃРІСЃРІСЃ', sku = '', upc = '', ean = '', jan = '', isbn = '', mpn = '', location = '', quantity = '1', minimum = '1', subtract = '1', stock_status_id = '7', date_available = '2017-12-10', manufacturer_id = '0', shipping = '1', price = '0', points = '0', weight = '0', weight_class_id = '1', length = '0', width = '0', height = '0', length_class_id = '1', status = '1', tax_class_id = '0', sort_order = '1', date_added = NOW(), user_id = '' in D:\OSPanel\domains\domzolota.info\system\library\db\mysqli.php:40 Stack trace: #0 D:\OSPanel\domains\domzolota.info\system\library\db.php(16): DB\MySQLi->query('INSERT INTO oc_...', Array) #1 D:\OSPanel\domains\domzolota.info\admin\model\catalog\product.php(4): DB->query('INSERT INTO oc_...') #2 [internal functio in D:\OSPanel\domains\domzolota.info\system\library\db\mysqli.php on line 40

Link to post
Share on other sites

@pasha2298 , а оно вам нужно?

3 часа назад, pasha2298 сказал:

я только учюсь хочу разобраться

чему учитесь? в чем разобраться?

  • +1 1
Link to post
Share on other sites
26 минут назад, fanatic сказал:

@pasha2298 , а оно вам нужно?

чему учитесь? в чем разобраться?

я извеняюсь по поводу добавления поля затупил,ну скажите а правильно ли я добавил то что вы написали

3.thumb.png.b8bfa8b9b0e6596aeb5eaf132992b8ab.png

Edited by pasha2298
Link to post
Share on other sites

p.s.

это я к тому что вы вообще не в теме.

я вам дал измененный запрос на добавление товара

$this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', ean = '" . $this->db->escape($data['ean']) . "', jan = '" . $this->db->escape($data['jan']) . "', isbn = '" . $this->db->escape($data['isbn']) . "', mpn = '" . $this->db->escape($data['mpn']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . (int)$data['tax_class_id'] . "', sort_order = '" . (int)$data['sort_order'] . "', date_added = NOW(), user_id = '" . (int)$this->user->getId() . "'");

в конце запроса добавлен код   user_id = '" . (int)$this->user->getId() . "'

данным запросом нужно заменить запрос в методе addProduct

в editProduct, нужно добавить запрос обновления поля user_id

$this->db->query("UPDATE " . DB_PREFIX . "product SET user_id = '" . (int)$this->user->getId() . "' WHERE product_id = '" . (int)$product_id . "'");

а вы, запихнули зарос добавления товара, в метод  editProduct(редактирование товара)

Link to post
Share on other sites
10 минут назад, fanatic сказал:

p.s.

это я к тому что вы вообще не в теме.

я вам дал измененный запрос на добавление товара


$this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', upc = '" . $this->db->escape($data['upc']) . "', ean = '" . $this->db->escape($data['ean']) . "', jan = '" . $this->db->escape($data['jan']) . "', isbn = '" . $this->db->escape($data['isbn']) . "', mpn = '" . $this->db->escape($data['mpn']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', points = '" . (int)$data['points'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . (int)$data['tax_class_id'] . "', sort_order = '" . (int)$data['sort_order'] . "', date_added = NOW(), user_id = '" . (int)$this->user->getId() . "'");

в конце запроса добавлен код   user_id = '" . (int)$this->user->getId() . "'

данным запросом нужно заменить запрос в методе addProduct

в editProduct, нужно добавить запрос обновления поля user_id


$this->db->query("UPDATE " . DB_PREFIX . "product SET user_id = '" . (int)$this->user->getId() . "' WHERE product_id = '" . (int)$product_id . "'");

а вы, запихнули зарос добавления товара, в метод  editProduct(редактирование товара)

Помойму что то начало получаться ошибка ушла сейчас проверю отпишусь,покрайне мере товар добавился

Link to post
Share on other sites

Ребят а подскажите еще где может быть ошибка,id добавлеться в базу, ну почему то в админке любой поьзователь так и видит все товары которое он даже не зоздавал, вот такое записал в контроллере product

 

<?php
class ControllerCatalogProduct extends Controller {
    private $error = array();

    public function index() {
        $this->load->language('catalog/product');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/product');

        $this->getList();   
    }
public function user_id() {
        $this->load->model('user/user');
        $user_info = $this->model_user_user->getUser($this->user->getId());

        if (!empty($product_info)) {
            $data['user_id'] = (int)$product_info['user_id'];
        } else  {
            $data['user_id'] = (int)$user_info['user_id'];
        } 

        $this->getList();
        

        
    }
    public function add() {
        $this->load->language('catalog/product');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('catalog/product');

Link to post
Share on other sites

43 минуты назад, pasha2298 сказал:

вот такое записал в контроллере product

а вы сами поняли, что написали(в контроллере)?

в методе  getList найти код

		foreach ($results as $result) {

      $category =  $this->model_catalog_product->getProductCategories($result['product_id']);

			if (is_file(DIR_IMAGE . $result['image'])) {
				$image = $this->model_tool_image->resize($result['image'], 40, 40);
			} else {
				$image = $this->model_tool_image->resize('no_image.png', 40, 40);
			}

			$special = false;

			$product_specials = $this->model_catalog_product->getProductSpecials($result['product_id']);

			foreach ($product_specials  as $product_special) {
				if (($product_special['date_start'] == '0000-00-00' || strtotime($product_special['date_start']) < time()) && ($product_special['date_end'] == '0000-00-00' || strtotime($product_special['date_end']) > time())) {
					$special = $product_special['price'];

					break;
				}
			}

			$data['products'][] = array(
				'product_id' => $result['product_id'],
				'image'      => $image,
				'name'       => $result['name'],
				'model'      => $result['model'],
				'price'      => $result['price'],
				'category'   => $category,
				'special'    => $special,
				'quantity'   => $result['quantity'],
				'status'     => $result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled'),
				'edit'       => $this->url->link('catalog/product/edit', 'token=' . $this->session->data['token'] . '&product_id=' . $result['product_id'] . $url, true)
			);
		}

это формируется массив товаров

подумайте, что нужно дописать, чтобы в массив добавлялись только те товары,  user_id у которых,  равен id текущего пользователя

подсказка

if($result['user_id'] == (int)$this->user->getId()){......................

 

  • +1 1
Link to post
Share on other sites
2 часа назад, fanatic сказал:

if($result['user_id'] == (int)$this->user->getId()){.....................

надеюсь я правильно понял прошу не пинать

if($result['user_id'] == (int)$this->user->getId()){  $user = $product_user['user_id'];

                    break;
                }
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.