Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2017-02-04 20:56:08

dreamms
Участник
Зарегистрирован: 2015-07-04
Сообщений: 42
Рейтинг :   

SQL запрос на создание новостей

Здравствуйте! Пытаюсь загрузить новости в бд с помощью php, новости в бд сохраняются и в админке появляются, но, во вкладке Дополнительно(где доп поля), ничего не отображается, а начинает отображаться после того как я нажму Сохранить в редактировании новости. Своим sql запросом доп поля мне нужные тоже записываю и как нужно, но они не отображаются в итоге на сайте и в админке, а если я еще раз сохраняю через админку то мои доп поля не сохраняются с sql запроса, а только если после сохранения еще раз введу их вручную и нажми Сохранить. Помогите пожалуйста исправить проблему с загрузкой инфы в доп поля, заранее спасибо!

Мой код:

foreach ($news->channel->item as $item) 
{
    preg_match('@src="([^"]+)"@', $item->description, $match);
    $parts = explode('<font size="-1">', $item->description);

    $feeds[$i]['title'] = (string) $item->title;
    $feeds[$i]['link'] = (string) $item->link;
    $feeds[$i]['image'] = $match[1];
    $feeds[$i]['site_title'] = strip_tags($parts[1]);
    $feeds[$i]['story'] = strip_tags($parts[2]);

	
		$links = $feeds[$i]['link'];
$pudate= $items[$i]['pubdate'];
$besc = $feeds[$i]['story']; 
$titled = $feeds[$i]['title']; 
$time = 1485277444;
$image = $feeds[$i]['image'];
$titlesite = $feeds[$i]['site_title'];
      $rand=rand();
	  $lenlink = mb_strlen($links);
	   $lenimg = mb_strlen($image);
	   $lensite = mb_strlen($titlesite);
    $xfield = <<<HTML
SER|a:3:{s:8:"newslink";s:{$lenlink}:"{$links}";s:9:"imagenews";s:{$lenlink}:"{$image}";s:9:"sitetitle";s:{$lensite}:"{$titlesite}";}
HTML;
        $sql = "INSERT INTO `news`(`id`, `postdate`, `author`, `author_id`, `title`, `content`, `alt_name`, `mainpage`, `approve`, `views`, `favorite`, `pinned`, `catpinned`, `flags`, `num_files`, `num_images`, `editdate`, `catid`, `description`, `keywords`, `rating`, `votes`, `similar_status`, `allow_com`, `com`, `nsched_activate`, `nsched_deactivate`, `xfields`, `xfields_city`, `xfields_phone`, `xfields_address`, `xfields_datestart`, `xfields_dateend`, `xfields_scheduletime`, `xfields_contactname`, `xfields_priceyp`, `xfields_opennow`, `xfields_imgnews`, `xfields_price`, `xfields_feature`, `xfields_newslink`, `xfields_imagenews`, `xfields_sitetitle`) VALUES ('','$time','admin','1','$titled','$besc','$rand','1','1','0','1','1','1','2','0','0','1485277444','1','','','0','0','0','0','0','','','$xfield','','','','','','','','','','','','','$links', '$image', '$titlesite')";
            // connect to the database server  
$conn = mysql_connect("localhost", "userdb", "passdb");  

// select the database to connect to  
mysql_select_db("db", $conn);  


          $result = mysql_query($sql, $conn);
	
    $i++;
}

Изменено dreamms (2017-02-04 21:05:10)

Не в сети

#2 2017-02-05 02:41:27

infinity237
Модератор
Откуда Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2,674
Рейтинг :   176 
Сайт

Re: SQL запрос на создание новостей

Проверять все ваши решения нет возможности. По всей видимости ошибка где-то в сериализации данных для поля xfields и/или в экранировании.

Если вы пишите код внутри плагина, то:
1) запросы к БД делаются через объект класса mysql/_mysqli, который находится в глобальной переменной $mysql, в данном случае для insert'a/update'a есть метод query. Префикс таблиц задается константой prefix, экранирование данных в поле идет через функцию db_squote.
2) для сериализации доп.полей xfields используется функция xf_encode, которая принимает на вход массив, ключи - названия полей, значения - значения полей.

Пример:

$mysql->query("update " . prefix . "_news set xfields = " . db_squote(xf_encode($xdata)) . " where id = " . db_squote($newsID));

Не в сети

#3 2017-02-05 14:13:08

dreamms
Участник
Зарегистрирован: 2015-07-04
Сообщений: 42
Рейтинг :   

Re: SQL запрос на создание новостей

infinity237 пишет:

Проверять все ваши решения нет возможности. По всей видимости ошибка где-то в сериализации данных для поля xfields и/или в экранировании.

Если вы пишите код внутри плагина, то:
1) запросы к БД делаются через объект класса mysql/_mysqli, который находится в глобальной переменной $mysql, в данном случае для insert'a/update'a есть метод query. Префикс таблиц задается константой prefix, экранирование данных в поле идет через функцию db_squote.
2) для сериализации доп.полей xfields используется функция xf_encode, которая принимает на вход массив, ключи - названия полей, значения - значения полей.

Пример:

$mysql->query("update " . prefix . "_news set xfields = " . db_squote(xf_encode($xdata)) . " where id = " . db_squote($newsID));

Спасибо, а если без плагина то не выйдет? я заношу данные в поле xfields с переменной $xfield , я там сделал ручной вывод кол. строк и т.д, но не помогает это...

Не в сети

#4 2017-02-05 15:37:26

dreamms
Участник
Зарегистрирован: 2015-07-04
Сообщений: 42
Рейтинг :   

Re: SQL запрос на создание новостей

Все получилось с xf_encode, спасибо большое! cool

Не в сети

Подвал раздела

Работает на FluxBB