mukszwei Опубликовано 11 мая, 2016 Жалоба Поделиться Опубликовано 11 мая, 2016 (изменено) Стараемся регулярно вести блог. Появился баг при сохранении новой статьи. Появляется следующая информация в админке: 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 105Warning: Placeholder substitution error. Diagnostics: "select image from s_articles where id=UNKNOWN_PLACEHOLDER_0" in /home/www/.../api/Database.php on line 132Warning: Query was empty [] in /home/www/.../api/Database.php on line 105Warning: Placeholder substitution error. Diagnostics: "DELETE FROM s_article_objects WHERE article_id=UNKNOWN_PLACEHOLDER_0" in /home/www/.../api/Database.php on line 132Warning: Query was empty [] in /home/www/.../api/Database.php on line 105 Может кто подскажет, что накрылось? Изменено 11 мая, 2016 пользователем mukszwei Цитата Ссылка на сообщение Поделиться на другие сайты
mukszwei Опубликовано 11 мая, 2016 Автор Жалоба Поделиться Опубликовано 11 мая, 2016 Вот еще ответила тех. поддержка хостинга: Здравствуйте!Спасибо за обращение.В указанном вами запросе, присутствует ряд ошибок:У вас STR_TO_DATE('2016-05-11', 'd.m.Y')- дата написана через '-', а не через точку- первый должен идти год, а не день- переменные маски должны быть написаны с %Должно выглядеть примерно следующим образом:STR_TO_DATE('2016-05-11', '%Y-%m-%d')Дело в том, что теперь вместо даты записывать null нельзя (при неправильном заполнении str_to_date записывается null).Ранее же, данная ошибка msql-сервером игнорировалась.-- Подскажите где можно подправить генерацию даты? Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 12 мая, 2016 Жалоба Поделиться Опубликовано 12 мая, 2016 (изменено) У вас блог, похоже, переделывался. Стандартно функции STR_TO_DATE нет. Собственно, как и таблицы s_articles. Скорее всего она у вас прописана либо в api/Blog.php, либо в simpla/PostAdmin.php. Ищите ее в этих файлах, если конечно под эту таблицу не создавались свои файлы.Стандартно дата сообщения формируется так $post->date = date('Y-m-d', strtotime($this->request->post('date'))); Изменено 12 мая, 2016 пользователем koteyka Цитата Ссылка на сообщение Поделиться на другие сайты
Решение Andrey Terkin Опубликовано 12 мая, 2016 Решение Жалоба Поделиться Опубликовано 12 мая, 2016 (изменено) В ранних версиях была такая функция в 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 = ''; Изменено 12 мая, 2016 пользователем Andrey Terkin Цитата Ссылка на сообщение Поделиться на другие сайты
mukszwei Опубликовано 12 мая, 2016 Автор Жалоба Поделиться Опубликовано 12 мая, 2016 В ранних версиях была такая функция в 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 Цитата Ссылка на сообщение Поделиться на другие сайты
lihach Опубликовано 8 сентября, 2017 Жалоба Поделиться Опубликовано 8 сентября, 2017 Перестали добавляться новые статьи в блоге! Та же проблема! 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; } } Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.