Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Как правильно указывать значение запроса к БД в контроллере?


Recommended Posts

Делаю модуль по аналогии с другими модулями

В контроллере модуля есть строчка

$results = $this->model_modul_like->getLikeDescriptions($like_id);

В модели есть строчка

public function getLikeDescriptions($like_id)

На сайте вылезает ошибка Notice: Undefined variable:like_id in /catalog/controller/modul/like.php on line 8

Вопрос, в чем суть ($like_id), т.е. для чего он нужен, как работает и как его правильно указывать?

Надіслати
Поділитися на інших сайтах


переменную $like_id в конроллере надо бы вначале инициализировать перед тем как использовать. т.е. присвоить ей какое-нибудь значение

 

Я правильно понял, что 

$results = $this->model_modul_like->getLikeDescriptions($like_id);

обращается к переменной $like_id внутри функции getLikeDescriptions?

Надіслати
Поділитися на інших сайтах


Я правильно понял, что 

$results = $this->model_modul_like->getLikeDescriptions($like_id);

обращается к переменной $like_id внутри функции getLikeDescriptions?

Нет, передаем функции getLikeDescriptions в качестве аргумента значение переменной $like_id

Надіслати
Поділитися на інших сайтах

Чтобы функция понимала какие аргументы она может принимать

Не получается вывести данные из БД в виде массива

Вот модель

public function getlike($like_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "like_description WHERE like_id = '" . (int)$like_id . "'");


return $query->rows;
}
Вот контроллер

 

public function index() {
$this->load->model('modul/like');

if (isset($this->request->post['like_id'])) {
$like_id = $this->request->post['like_id'];
} else {
$like_id = 0;
}
$data['likes'] = array(); 
$results = $this->model_modul_like->getlike($this->request->get['like_id']); 
foreach ($results as $result) { 
$data['likes'][] = array( 
'like_id'  => $result['like_id'], 
'name'        => $result['name'], 
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_like_description_length')) . '..' ); 
} 
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/modul/like/like.tpl')) { 
return $this->load->view($this->config->get('config_template') . '/template/modul/like/like.tpl', $data); 
} else { 
return $this->load->view('default/template/modul/like/like.tpl', $data); 
} 
​}

 

Пишет ошибку Notice: Undefined index: like_id in /catalog/controller/modul/like.php on line 14

Подскажите пожалуйста, что делать?

Змінено користувачем fofa
Надіслати
Поділитися на інших сайтах


Уточните что делает модуль .

если знания нужно вернуть с БД, нужен get запрос, а не post 

 

У Вас идет проверка был ли отправлен запрос, если было послано значения like_id будет присвоено значения переменной $like_id, если нет то 0 который в свою очередь передается в $this->model_modul_like->getlike($like_id); как параметре для функции 

 

а правильно писать так

if (isset($this->request->post['like_id'])) {
    $like_id = $this->request->post['like_id'];
} else {
    $like_id = 0;
}

$results = $this->model_modul_like->getlike($like_id);

$data['likes'] = array(); 
Надіслати
Поділитися на інших сайтах

Уточните что делает модуль .

если знания нужно вернуть с БД, нужен get запрос, а не post 

 

У Вас идет проверка был ли отправлен запрос, если было послано значения like_id будет присвоено значения переменной $like_id, если нет то 0 который в свою очередь передается в $this->model_modul_like->getlike($like_id); как параметре для функции 

 

а правильно писать так

if (isset($this->request->post['like_id'])) {
    $like_id = $this->request->post['like_id'];
} else {
    $like_id = 0;
}

$results = $this->model_modul_like->getlike($like_id);

$data['likes'] = array(); 

Модулю нужно данные из БД вывести во view в виде массива:

Заголовок

картинка

описание

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

 

Сделал так

if (isset($this->request->get['like_id'])) {
$like_id = $this->request->get['like_id'];
		} else {
			$like_id = 0;
		}
		
		$data['likes'] = array();
		$results = $this->model_modul_like->getlike($like_id);

Ошибка исчезла, но данные не выводятся. Вывести хотя бы заголовок ['name'], 

 

Я правильно понял, что get использовать когда нужно извлечь данные с БД, а post - когда внести?

Надіслати
Поділитися на інших сайтах


Модулю нужно данные из БД вывести во view в виде массива:

Заголовок

картинка

описание

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

 

Сделал так

if (isset($this->request->get['like_id'])) {
$like_id = $this->request->get['like_id'];
		} else {
			$like_id = 0;
		}
		
		$data['likes'] = array();
		$results = $this->model_modul_like->getlike($like_id);

Ошибка исчезла, но данные не выводятся. Вывести хотя бы заголовок ['name'], 

 

Я правильно понял, что get использовать когда нужно извлечь данные с БД, а post - когда внести?

Давайте по порядку

1. структура бд

2. модель покажите

3. контроллер покажите 

Надіслати
Поділитися на інших сайтах

$_POST или $_GET ?

 

наверно $_GET (если я правильно понял разницу между методами)

 Где находится значение?

 в БД 

 И если вы уже инициализировали переменную $like_id, ее и передавайте

не понял логики действий. В таблице БД есть столбец с like_id. Я хотел вывести данные по аналогии с моделью и контроллером product. В контроллере product и там в обращениях к функциии getProduct стоит аргумент $product_id, внутри функции  есть строчка 

$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

Если аргумент из функции удалить, то вылезает ошибка что (int)$product_id из строчки выше не известен. Не понятно, почему нельзя обойтись без указания аргументов

Надіслати
Поділитися на інших сайтах


Давайте по порядку

1. структура бд

2. модель покажите

3. контроллер покажите

 

1. Структура  БД

 

2 таблицы

  • _like
  • _like_description
_like строки
  • ​model
  • image
  • date_available
  • date_added
  • date_modified
  • status
  • sort_order
  • like_id
_like_description строки
  • like_id
  • language_id
  • name
  • description
  • count_like
  • tag
  • meta_title
  • meta_description
  • meta_keyword
2. Модель

<?php
class ModelAgoolikelike extends Model {
	
	public function getlike($like_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "like WHERE like_id = '" . (int)$like_id . "'");

		return $query->rows;
	}
	
	
	public function getlikeDescriptions($like_id) {
		$like_description_data = array();

		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "like_description WHERE like_id = '" . (int)$like_id . "'");
		return $query->rows;
		
	}
}

3. Контроллер

<?php
class ControllerModulLike extends Controller
{
	public function index() {
		
		$this->load->model('modul/like');
		
		if (isset($this->request->get['like_id'])) {
			$like_id = $this->request->get['like_id'];
		} else {
			$like_id = 0;
		}
		
		$data['likes'] = array();
		$results = $this->model_agoo_like_like->getlike($like_id);
		
		// вывод
		foreach ($results as $result) {
		$data['likes'][] = array(
					'like_id'  => $result['like_id'],
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_like_description_length')) . '..'
					
				);		
		}
	
		
		
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/modul/like/like.tpl')) {
			return $this->load->view($this->config->get('config_template') . '/template/modul/like/like.tpl', $data);
		} else {
			return $this->load->view('default/template/modul/like/like.tpl', $data);
		}
	}
}
Змінено користувачем fofa
Надіслати
Поділитися на інших сайтах


 

1. Структура  БД

 

2 таблицы

  • _like
  • _like_description
_like строки
  • ​model
  • image
  • date_available
  • date_added
  • date_modified
  • status
  • sort_order
  • like_id
_like_description строки
  • like_id
  • language_id
  • name
  • description
  • count_like
  • tag
  • meta_title
  • meta_description
  • meta_keyword
2. Модель

<?php
class ModelAgoolikelike extends Model {
	
	public function getlike($like_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "like WHERE like_id = '" . (int)$like_id . "'");

		return $query->rows;
	}
	
	
	public function getlikeDescriptions($like_id) {
		$like_description_data = array();

		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "like_description WHERE like_id = '" . (int)$like_id . "'");
		return $query->rows;
		
	}
}
3. Контроллер

<?php
class ControllerModulLike extends Controller
{
	public function index() {
		
		$this->load->model('modul/like');
		
		if (isset($this->request->get['like_id'])) {
			$like_id = $this->request->get['like_id'];
		} else {
			$like_id = 0;
		}
		
		$data['likes'] = array();
		$results = $this->model_agoo_like_like->getlike($like_id);
		
		// вывод
		foreach ($results as $result) {
		$data['likes'][] = array(
					'like_id'  => $result['like_id'],
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_like_description_length')) . '..'
					
				);		
		}
	
		
		
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/modul/like/like.tpl')) {
			return $this->load->view($this->config->get('config_template') . '/template/modul/like/like.tpl', $data);
		} else {
			return $this->load->view('default/template/modul/like/like.tpl', $data);
		}
	}
}

У Вас все тут не правильно, перерисовать за Вас - это тоже самое что написать новый модуль 

 

1. Модель - как минимум должна еще быть запись чтения редактирования 

2. Контроллера - отправка, выборка 

Надіслати
Поділитися на інших сайтах

Не понятно, почему нельзя обойтись без указания аргументов

Можно. Если функция не использует внешних данных. Тогда функция вернет все строки из БД. Но вы же хотите получить строку с конкретным айди. Вопрос - как функция узнает какая строка нужна?

 

Напишите лучше, что вы хотите сделать. Отдельную страницу для какого-то лайка? Ниче непонятно..

Надіслати
Поділитися на інших сайтах

Можно. Если функция не использует внешних данных. Тогда функция вернет все строки из БД. Но вы же хотите получить строку с конкретным айди. Вопрос - как функция узнает какая строка нужна?

 

Напишите лучше, что вы хотите сделать. Отдельную страницу для какого-то лайка? Ниче непонятно..

Нужно чтобы на 1 странице выводился массив. Элемент массива - картинка, заголовок, описание и кнопка "лайк". Картинку, заголовок и описание администратор загружает через админку магазина.

При нажатии на лайк, цифра в БД увеличивается на 1 и выводится на страницу.

Надіслати
Поділитися на інших сайтах


А где у вас INSERT для админа, UPDATE для юзера?

 

Где айдишник берется? гет или пост?

INSERT для админа в контроллере admin

UPDATE для юзера - не дошел еще до этого. На данный момент хочу разобраться, как вывести данные из БД на страницу в витрине

Где айдишник берется? если я правильно понял, это like_id. В таблице есть колонка like_id, при добавлении новой информации (картинка, заголовок, описание) значение в этой колонке увеличивается на 1. Оттуда и берется

гет или пост? - если я правльно понял принцип работы функций, то гет

Змінено користувачем fofa
Надіслати
Поділитися на інших сайтах


90% кода - это ручка, бумажка и рисунки. Что и куда и по каким командам. Видимо алгоритма у Вас еще нет, но код писать начали. Делайте наоборот. Нарисуйте, используя парадигму MVC свой алгоритм. Будет легче самому потом кодить.

Надіслати
Поділитися на інших сайтах


90% кода - это ручка, бумажка и рисунки. Что и куда и по каким командам. Видимо алгоритма у Вас еще нет, но код писать начали. Делайте наоборот. Нарисуйте, используя парадигму MVC свой алгоритм. Будет легче самому потом кодить.

листок и бумажка решает! правда я так делаю только для структуры бд и вюхи 

Змінено користувачем ArtenPitov
Надіслати
Поділитися на інших сайтах

Делаю чертеж, скоро выложу

чертеж не поможет, опишите полностью функционал 

Надіслати
Поділитися на інших сайтах

чертеж не поможет, опишите полностью функционал 

Я подробный чертеж сделаю. Можно конечно и ручкой нарисовать и подписать, но я чувствую что несколько раз все перечеркаю. Поэтому быстрее начерчу и оформление будет более аккуратным 

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.