Перейти к содержанию
Официальный форум поддержки Simpla

Перестали добавляться новые статьи в блоге


Перейти к решению Решено Andrey Terkin,

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

Стараемся регулярно вести блог.

 

Появился баг при сохранении новой статьи. Появляется следующая информация в админке:

 

Warning: Column 'date' cannot be null [iNSERT INTO s_articles SET id='0', name='123', visible='', category_id='0', url='123', meta_title='123', meta_keywords='123', meta_description='123', annotation='

123

', text='

123

' , date=STR_TO_DATE('2016-05-11', 'd.m.Y')] in /home/www/.../api/Database.php on line 105

Warning: Placeholder substitution error. Diagnostics: "select image from s_articles where id=UNKNOWN_PLACEHOLDER_0" in /home/www/.../api/Database.php on line 132

Warning: Query was empty [] in /home/www/.../api/Database.php on line 105

Warning: Placeholder substitution error. Diagnostics: "DELETE FROM s_article_objects WHERE article_id=UNKNOWN_PLACEHOLDER_0" in /home/www/.../api/Database.php on line 132

Warning: Query was empty [] in /home/www/.../api/Database.php on line 105

 

 

Может кто подскажет, что накрылось?

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

Вот еще ответила тех. поддержка хостинга:

 

 

Здравствуйте!
Спасибо за обращение.

В указанном вами запросе, присутствует ряд ошибок:
У вас STR_TO_DATE('2016-05-11', 'd.m.Y')

- дата написана через '-', а не через точку
- первый должен идти год, а не день
- переменные маски должны быть написаны с %

Должно выглядеть примерно следующим образом:
STR_TO_DATE('2016-05-11', '%Y-%m-%d')

Дело в том, что теперь вместо даты записывать null нельзя (при неправильном заполнении str_to_date записывается null).
Ранее же, данная ошибка msql-сервером игнорировалась.

--

 

Подскажите где можно подправить генерацию даты?

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

У вас блог, похоже, переделывался. Стандартно функции STR_TO_DATE нет. Собственно, как и таблицы s_articles. Скорее всего она у вас прописана либо в api/Blog.php, либо в simpla/PostAdmin.php. Ищите ее в этих файлах, если конечно под эту таблицу не создавались свои файлы.

Стандартно дата сообщения формируется так

$post->date = date('Y-m-d', strtotime($this->request->post('date')));
Изменено пользователем koteyka
Ссылка на сообщение
Поделиться на другие сайты
  • Решение

В ранних версиях была такая функция в api/Blog::add_post() и выглядело это так:

if(isset($post->date))
		{
			$date = $post->date;
			unset($post->date);
			$date_query = $this->db->placehold(', date=STR_TO_DATE(?, ?)', $date, $this->settings->date_format);
		}

На последней версии этот участок выглядит так:

if(!isset($post->date))
			$date_query = ', date=NOW()';
		else
			$date_query = '';
Изменено пользователем Andrey Terkin
Ссылка на сообщение
Поделиться на другие сайты

 

В ранних версиях была такая функция в api/Blog::add_post() и выглядело это так:

if(isset($post->date))
		{
			$date = $post->date;
			unset($post->date);
			$date_query = $this->db->placehold(', date=STR_TO_DATE(?, ?)', $date, $this->settings->date_format);
		}

На последней версии этот участок выглядит так:

if(!isset($post->date))
			$date_query = ', date=NOW()';
		else
			$date_query = '';

 

Спасибо огромное, помогла замена

 

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

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

 

Перестали добавляться новые статьи в блоге! Та же проблема!

 

 

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;

    

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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...