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

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

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

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

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

$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 в конроллере надо бы вначале инициализировать перед тем как использовать. т.е. присвоить ей какое-нибудь значение

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


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

переменную $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

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


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

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

Вроде понятно.

 

А 

public function getLikeDescriptions($like_id)

Тут $like_id зачем?

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


Ссылка на сообщение
Поделиться на другие сайты
public function getLikeDescriptions($like_id)

Тут $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

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


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

$_POST или $_GET ? Где находится значение? И если вы уже инициализировали переменную $like_id, ее и передавайте

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


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

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

если знания нужно вернуть с БД, нужен 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 для админа, UPDATE для юзера?

 

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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


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

А че там описывать, по кнопке "Мне нра" должен быть "UPDATE _like_description SET count_like = count_like + 1 WHERE like_id = like_id", так?

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


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

А че там описывать, по кнопке "Мне нра" должен быть "UPDATE _like_description SET count_like = count_like + 1 WHERE like_id = like_id", так?

Так  :-)

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


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

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

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

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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