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

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


vetalkurilenko

Recommended Posts

День добрый. Проблема такая. Есть шаблон 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
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

Вхід зараз

×
×
  • Створити...

Important Information

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