Перейти к содержимому


Фото
* * * * * 1 голосов

Не могу разобраться! Где ошибка? Перестали добавляться записи в блоге.


  • Чтобы отвечать, сперва войдите на форум
27 ответов в теме

#1 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 14:41

require_once('Simpla.php');
 
class Blog extends Simpla
{
 
    /*
    *
    * Функция возвращает пост по его id или url
    * (в зависимости от типа аргумента, int - id, string - url)
    * @param $id id или url поста
    *
    */
    public function get_post($id)
    {
        if(is_int($id))
            $where = $this->db->placehold(' WHERE b.id=? ', intval($id));
        else
            $where = $this->db->placehold(' WHERE b.url=? ', $id);
        
        $query = $this->db->placehold("SELECT b.id, b.url, b.name, b.annotation, b.text, b.meta_title,
                                       b.meta_keywords, b.meta_description, b.visible, b.date, b.annotation_tiny, b.image, b.views
                                       FROM __blog b $where LIMIT 1");
        if($this->db->query($query))
            return $this->db->result();
        else
            return false; 
    }
    
    /*
    *
    * Функция возвращает массив постов, удовлетворяющих фильтру
    * @param $filter
    *
    */
    public function get_posts($filter = array())
    {    
        // По умолчанию
        $limit = 1000;
        $page = 1;
        $post_id_filter = '';
        $visible_filter = '';
        $keyword_filter = '';
        $posts = array();
        
        if(isset($filter['limit']))
            $limit = max(1, intval($filter['limit']));
 
        if(isset($filter['page']))
            $page = max(1, intval($filter['page']));
 
        if(!empty($filter['id']))
            $post_id_filter = $this->db->placehold('AND b.id in(?@)', (array)$filter['id']);
            
        if(isset($filter['visible']))
            $visible_filter = $this->db->placehold('AND b.visible = ?', intval($filter['visible']));        
        
        if(isset($filter['keyword']))
        {
            $keywords = explode(' ', $filter['keyword']);
            foreach($keywords as $keyword)
                $keyword_filter .= $this->db->placehold('AND (b.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR b.meta_keywords LIKE "%'.$this->db->escape(trim($keyword)).'%") ');
        }
 
        $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit);
 
        $query = $this->db->placehold("SELECT b.id, b.url, b.name, b.annotation, b.text,
                                              b.meta_title, b.meta_keywords, b.meta_description, b.visible,
                                              b.date, b.annotation_tiny, b.image, b.views
                                              FROM __blog b WHERE 1 $post_id_filter $visible_filter $keyword_filter
                                              ORDER BY date DESC, id DESC $sql_limit");
        
        $this->db->query($query);
        return $this->db->results();
    }
    
    
    /*
    *
    * Функция вычисляет количество постов, удовлетворяющих фильтру
    * @param $filter
    *
    */
    public function count_posts($filter = array())
    {    
        $post_id_filter = '';
        $visible_filter = '';
        $keyword_filter = '';
        
        if(!empty($filter['id']))
            $post_id_filter = $this->db->placehold('AND b.id in(?@)', (array)$filter['id']);
            
        if(isset($filter['visible']))
            $visible_filter = $this->db->placehold('AND b.visible = ?', intval($filter['visible']));        
 
        if(isset($filter['keyword']))
        {
            $keywords = explode(' ', $filter['keyword']);
            foreach($keywords as $keyword)
                $keyword_filter .= $this->db->placehold('AND (b.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR b.meta_keywords LIKE "%'.$this->db->escape(trim($keyword)).'%") ');
        }
        
        $query = "SELECT COUNT(distinct b.id) as count
                  FROM __blog b WHERE 1 $post_id_filter $visible_filter $keyword_filter";
 
        if($this->db->query($query))
            return $this->db->result('count');
        else
            return false;
    }
    
    /*
    *
    * Создание поста
    * @param $post
    *
    */    
    public function add_post($post)
    {    
        if(!isset($post->date))
            $date_query = ', date=NOW()';
        else
            $date_query = '';
        $query = $this->db->placehold("INSERT INTO __blog SET ?% $date_query", $post);
        
        if(!$this->db->query($query))
            return false;
        else
            return $this->db->insert_id();
    }
    
    
    /*
    *
    * Обновить пост(ы)
    * @param $post
    *
    */    
    public function update_post($id, $post)
    {
        $query = $this->db->placehold("UPDATE __blog SET ?% WHERE id in(?@) LIMIT ?", $post, (array)$id, count((array)$id));
        $this->db->query($query);
        return $id;
    }
 
 
    /*
    *
    * Удалить пост
    * @param $id
    *
    */    
    public function delete_post($id)
    {
        if(!empty($id))
        {
            $this->delete_image($id);
            $query = $this->db->placehold("DELETE FROM __blog WHERE id=? LIMIT 1", intval($id));
            if($this->db->query($query))
            {
                $query = $this->db->placehold("DELETE FROM __comments WHERE type='blog' AND object_id=?", intval($id));
                if($this->db->query($query))
                    return true;
            }                            
        }
        return false;
    }    
    
 
    /*
    *
    * Следующий пост
    * @param $post
    *
    */    
    public function get_next_post($id)
    {
        $this->db->query("SELECT date FROM __blog WHERE id=? LIMIT 1", $id);
        $date = $this->db->result('date');
 
        $this->db->query("(SELECT id FROM __blog WHERE date=? AND id>? AND visible  ORDER BY id limit 1)
                           UNION
                          (SELECT id FROM __blog WHERE date>? AND visible ORDER BY date, id limit 1)",
                          $date, $id, $date);
        $next_id = $this->db->result('id');
        if($next_id)
            return $this->get_post(intval($next_id));
        else
            return false; 
    }
    
    /*
    *
    * Предыдущий пост
    * @param $post
    *
    */    
    public function get_prev_post($id)
    {
        $this->db->query("SELECT date FROM __blog WHERE id=? LIMIT 1", $id);
        $date = $this->db->result('date');
 
        $this->db->query("(SELECT id FROM __blog WHERE date=? AND id<? AND visible ORDER BY id DESC limit 1)
                           UNION
                          (SELECT id FROM __blog WHERE date<? AND visible ORDER BY date DESC, id DESC limit 1)",
                          $date, $id, $date);
        $prev_id = $this->db->result('id');
        if($prev_id)
            return $this->get_post(intval($prev_id));
        else
            return false; 
    }
    
    public function delete_image($post_id)
    {
        $query = $this->db->placehold("SELECT image FROM __blog WHERE id=?", intval($post_id));
        $this->db->query($query);
        $filename = $this->db->result('image');
        if(!empty($filename))
        {
            $query = $this->db->placehold("UPDATE __blog SET image=NULL WHERE id=?", $post_id);
            $this->db->query($query);
            $query = $this->db->placehold("SELECT count(*) as count FROM __blog WHERE image=? LIMIT 1", $filename);
            $this->db->query($query);
            $count = $this->db->result('count');
            if($count == 0)
            {            
                @unlink($this->config->root_dir.$this->config->posts_images_dir.$filename);        
            }
        }
    }
    
    public function increase_views($id)
    {
        $this->db->query("UPDATE __blog SET views=views+1 WHERE id=?", $id);
        return true;
    
}
 


#2 loxter

loxter
  • Пользователь
  • 100 сообщений
  • Дизайн
  • Откуда:paris

Опубликовано 08.09.2017 - 15:12

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

#3 mishanya

mishanya
  • Фрилансер
  • 2 318 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.09.2017 - 15:13

а эти поля в базе есть?

b.annotation_tiny, b.image, b.views


#4 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 15:19

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

Где искать, не скажите?



#5 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 15:23

а эти поля в базе есть?

b.annotation_tiny, b.image, b.views

А где искать? Дилетант я))



#6 mishanya

mishanya
  • Фрилансер
  • 2 318 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.09.2017 - 15:25

А где искать? Дилетант я))

 

логично будет что в базе. phpMyAdmin или adminer используйте.

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



#7 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 15:32

логично будет что в базе. phpMyAdmin или adminer используйте.

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

s_blog есть. b.annotation_tiny, b.image, b.views этих нет



логично будет что в базе. phpMyAdmin или adminer используйте.

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

Ставил самостоятельно, по инструкции, шаблон купил. 



#8 mishanya

mishanya
  • Фрилансер
  • 2 318 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.09.2017 - 16:00

s_blog есть. b.annotation_tiny, b.image, b.views этих нет



Ставил самостоятельно, по инструкции, шаблон купил. 

 

так я без претензий, но видимо запрос в базу не выполнили раз полей нет



#9 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 16:02

так я без претензий, но видимо запрос в базу не выполнили раз полей нет

Ошибка

SQL запрос:

 

ALTER TABLE `s_products`
ADD `rating` int(11) NOT NULL DEFAULT '0',
ADD `votes` int(11) NOT NULL DEFAULT '0'

 

Ответ MySQL: dot.gif

#1060 - Duplicate column name 'rating'



#10 mishanya

mishanya
  • Фрилансер
  • 2 318 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.09.2017 - 16:09

Ошибка

SQL запрос:

 

ALTER TABLE `s_products`
ADD `rating` int(11) NOT NULL DEFAULT '0',
ADD `votes` int(11) NOT NULL DEFAULT '0'

 

Ответ MySQL: dot.gif

#1060 - Duplicate column name 'rating'

 

это не тот запрос). это запрос к товарам



#11 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 16:17

это не тот запрос). это запрос к товарам



это не тот запрос). это запрос к товарам

А где запрос взять?))

Прикрепленные файлы:


Изменено: lihach, 08.09.2017 - 16:18


#12 mishanya

mishanya
  • Фрилансер
  • 2 318 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.09.2017 - 16:34

ну этот вывполняли?

ALTER TABLE `s_blog`
ADD `annotation_tiny` text NOT NULL AFTER `annotation`,
ADD `image` varchar(255) NOT NULL DEFAULT '',
ADD `views` tinyint(11) NOT NULL DEFAULT '0';

 



#13 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 16:40

ну этот вывполняли?

ALTER TABLE `s_blog`
ADD `annotation_tiny` text NOT NULL AFTER `annotation`,
ADD `image` varchar(255) NOT NULL DEFAULT '',
ADD `views` tinyint(11) NOT NULL DEFAULT '0';

Ответ MySQL: dot.gif

#1060 - Duplicate column name 'rating'

Да, такой ответ приходит!


Изменено: lihach, 08.09.2017 - 16:40


#14 mishanya

mishanya
  • Фрилансер
  • 2 318 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.09.2017 - 16:41

Ответ MySQL: dot.gif

#1060 - Duplicate column name 'rating'

Да, такой ответ приходит!

 

я вам специально скинул часть запроса а не весь что в файле. скопируйте его а не вставляйте весь



#15 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 16:43

я вам специально скинул часть запроса а не весь что в файле. скопируйте его а не вставляйте весь

SQL запрос:

 

ALTER TABLE `s_blog`
ADD `annotation_tiny` text NOT NULL AFTER `annotation`,
ADD `image` varchar(255) NOT NULL DEFAULT '',
ADD `views` tinyint(11) NOT NULL DEFAULT '0'

 

Ответ MySQL: dot.gif

#1060 - Duplicate column name 'annotation_tiny'



#16 shooroop

shooroop
  • Фрилансер
  • 445 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 08.09.2017 - 18:52

тяжелый случай )

 

особенно когда указано в профиле а элементарный запрос в базу не але

 

e5228c50_o.png



SQL запрос:

 

ALTER TABLE `s_blog`
ADD `annotation_tiny` text NOT NULL AFTER `annotation`,
ADD `image` varchar(255) NOT NULL DEFAULT '',
ADD `views` tinyint(11) NOT NULL DEFAULT '0'

 

Ответ MySQL: dot.gif

#1060 - Duplicate column name 'annotation_tiny'

 

покажите скрин таблицы s_blog



#17 mishanya

mishanya
  • Фрилансер
  • 2 318 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.09.2017 - 19:49

SQL запрос:

 

ALTER TABLE `s_blog`
ADD `annotation_tiny` text NOT NULL AFTER `annotation`,
ADD `image` varchar(255) NOT NULL DEFAULT '',
ADD `views` tinyint(11) NOT NULL DEFAULT '0'

 

Ответ MySQL: dot.gif

#1060 - Duplicate column name 'annotation_tiny'

 

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

может вы в админку не добавили эти поля?


Изменено: mishanya, 08.09.2017 - 19:50


#18 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 08.09.2017 - 21:37

тяжелый случай )

 

особенно когда указано в профиле а элементарный запрос в базу не але

 

e5228c50_o.png



 

покажите скрин таблицы s_blog

Думаю, это то, о чем вы меня просили



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

может вы в админку не добавили эти поля?

Я простой пользователь и ни чего самостоятельно точно не добавлял. Действую строго по инструкции.))

Прикрепленные файлы:


Изменено: lihach, 08.09.2017 - 21:38


#19 loxter

loxter
  • Пользователь
  • 100 сообщений
  • Дизайн
  • Откуда:paris

Опубликовано 09.09.2017 - 09:24

Я простой пользователь и ни чего самостоятельно точно не добавлял. Действую строго по инструкции.))

Даже простой пользователь при работе по инструкции может сделать ошибку.
А случается, и в инструкциях ошибки бывают.

#20 lihach

lihach
  • Пользователь
  • 17 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Уфа

Опубликовано 09.09.2017 - 13:21

Даже простой пользователь при работе по инструкции может сделать ошибку.
А случается, и в инструкциях ошибки бывают.

Как исправить то?






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых