Перейти к содержанию
GrblFF

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

Рекомендуемые сообщения

Здравствуйте. Для учета кто из менеджеров занес товар и чтобы другие менеджеры не видели товары других ввел переменную "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'];
		} 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, GrblFF сказал:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, GrblFF сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, pasha2298 сказал:

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

что это?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
27 минут назад, fanatic сказал:

что это?

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

Изменено пользователем pasha2298

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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

 

Изменено пользователем pasha2298

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 текущего пользователя

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, fanatic сказал:

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

1.

 

2.

3.

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

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

$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()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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 . "'");

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 минуты назад, pasha2298 сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
26 минут назад, fanatic сказал:

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

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

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

3.thumb.png.b8bfa8b9b0e6596aeb5eaf132992b8ab.png

Изменено пользователем pasha2298

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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(редактирование товара)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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(редактирование товара)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребят а подскажите еще где может быть ошибка,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');

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, fanatic сказал:

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

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

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

                    break;
                }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.