Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Ошибка Undefined index: total в модуле рассылки


vetalkurilenko
 Поделиться

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

День добрый. Проблема такая. Есть шаблон Debaco, связи с разработчиком к сожалению нету. В нем имеется уже встроенный модуль рассылки почты. В этом модуле возникает ошибка 

Notice: Undefined index: total in D:\Server\OSPanel\domains\molli.com.ua.loc\admin\model\plaza\newsletter.php on line 55

при попытке пагинации, при чем ошибка появляется только начиная со второй страницы списка.

Ну и сам код:

<?php
class ModelPlazaNewsletter extends Model
{
    public function getMail($newsletter_id) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "ptnewsletter_email WHERE newsletter_id = '" . (int) $newsletter_id . "'");

        return $query->row;
    }

    public function getMails($data = array()) {
        $sql = "SELECT * FROM " . DB_PREFIX . "ptnewsletter_email";
        
        if(isset($data['filter_mail'])) {
            $sql .= " WHERE mail LIKE '%" . $this->db->escape($data['filter_mail']) . "%'";
        }

        if (isset($data['start']) || isset($data['limit'])) {
            if ($data['start'] < 0) {
                $data['start'] = 0;
            }

            if ($data['limit'] < 1) {
                $data['limit'] = 20;
            }

            $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
        }

        $query = $this->db->query($sql);

        return $query->rows;
    }

    public function getTotalMails($data = array()) {
        $sql = "SELECT COUNT(*) AS total FROM " . DB_PREFIX . "ptnewsletter_email";

        if(isset($data['filter_subscribe'])) {
            $sql .= " WHERE subscribe = '" . $this->db->escape($data['filter_subscribe']) . "'";
        }

        if (isset($data['start']) || isset($data['limit'])) {
            if ($data['start'] < 0) {
                $data['start'] = 0;
            }

            if ($data['limit'] < 1) {
                $data['limit'] = 20;
            }

            $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
        }

        $query = $this->db->query($sql);

        return $query->row['total'];

    }

    public function editSubscribe($mail_id, $subscribe) {
        $this->db->query("UPDATE " . DB_PREFIX . "ptnewsletter_email SET subscribe = '" . (int) $subscribe . "' WHERE newsletter_id = '" . (int) $mail_id . "'");
    }

    public function deleteMail($mail_id) {
        $this->db->query("DELETE FROM " . DB_PREFIX . "ptnewsletter_email WHERE newsletter_id = '" . (int) $mail_id . "'");
    }

    public function install() {
        $this->db->query("
			CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "ptnewsletter_email` (
			    `newsletter_id` INT(11) NOT NULL AUTO_INCREMENT,
			    `subscribe` TINYINT(1) NOT NULL DEFAULT '1',
	            `mail` varchar(255) NOT NULL,
	        PRIMARY KEY (`newsletter_id`)
		) DEFAULT COLLATE=utf8_general_ci;");

        $this->load->model('user/user_group');
        $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'plaza/newsletter');
        $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'plaza/newsletter');
    }

    public function uninstall() {
        $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "ptnewsletter_email`");

        $this->load->model('user/user_group');
        $this->model_user_user_group->removePermission($this->user->getGroupId(), 'access', 'plaza/newsletter');
        $this->model_user_user_group->removePermission($this->user->getGroupId(), 'modify', 'plaza/newsletter');
    }
}

Не могу понять в чем причина ошибки. Прошу вашей помощи, заранее спасибо )

Изменено пользователем vetalkurilenko
Ссылка на комментарий
Поделиться на других сайтах


Ну а таблица сама "ptnewsletter_email" есть? 

Посмотрите структуру $sql который собирается. Закиньте его в phpmyadmin, там попробуйте. Посмотрите на ошибки если таковы существуют. 

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

4 minutes ago, Leingard said:

Ну а таблица сама "ptnewsletter_email" есть? 

Посмотрите структуру $sql который собирается. Закиньте его в phpmyadmin, там попробуйте. Посмотрите на ошибки если таковы существуют. 

Да, таблица есть. Запрос проверял вручную - отдает правильно все. В том то и дело, что на первой странице пагинации все правильно работает, а со второй вылезает эта ошибка. 

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


8 минут назад, vetalkurilenko сказал:

Да, таблица есть. Запрос проверял вручную - отдает правильно все. В том то и дело, что на первой странице пагинации все правильно работает, а со второй вылезает эта ошибка. 

 

Не заметил текст про пагинацию) Компонуйте пост) 

Ну тогда скорее всего дело в товарищах $data['start'] и $data['limit']

 

Сделайте в 49 строке 

var_dump($data['start'] . '  - ' . $data['limit']); 

и посмотрите, что будет выдавать.

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

16 minutes ago, Leingard said:

 

Не заметил текст про пагинацию) Компонуйте пост) 

Ну тогда скорее всего дело в товарищах $data['start'] и $data['limit']

 

Сделайте в 49 строке 


var_dump($data['start'] . '  - ' . $data['limit']); 

и посмотрите, что будет выдавать.

Сейчас я подгрузил в базу 22 почты. 

на первой странице выдает

string(7) "0 - 20"

а на второй странице выдает такое

string(8) "20 - 20" Notice: Undefined index: total in D:\Server\OSPanel\domains\molli.com.ua.loc\admin\model\plaza\newsletter.php on line 57

и пропадает пагинация вообще

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


54 minutes ago, Leingard said:

 

Не заметил текст про пагинацию) Компонуйте пост) 

Ну тогда скорее всего дело в товарищах $data['start'] и $data['limit']

 

Сделайте в 49 строке 


var_dump($data['start'] . '  - ' . $data['limit']); 

и посмотрите, что будет выдавать.

заметил, что при комментировании строки 

$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];

$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];

ошибка пропадет, на второй странице появляется пагинация и правильно отображается количество, но пагинация работает только с первой страницы

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


А где у вас счетчик? Если в таблице есть автоинкримент, попробуйте определять id уже вытянутых строк припомощи mysqli_insert_id

Изменено пользователем Flint2000
Ссылка на комментарий
Поделиться на других сайтах

38 minutes ago, Flint2000 said:

А где у вас счетчик? Если в таблице есть автоинкримент, попробуйте определять id уже вытянутых строк припомощи mysqli_insert_id

Для примера открыл подобного плана модуль, и вот как там выглядит эта функция

 public function getTotalTestimonials() {
        $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "pttestimonial");

        return $query->row['total'];
    }

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

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


убрал 

if (isset($data['start']) || isset($data['limit'])) {
            if ($data['start'] < 0) {
                $data['start'] = 0;
            }

            if ($data['limit'] < 1) {
                $data['limit'] = 20;
            }

            $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];

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

 

Изменено пользователем vetalkurilenko
Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

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

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