Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как создать новость из файла в корне сайта или другой папке?

Как создать новость из файла в корне сайта или другой папке?


     17.02.2022    addnews    Все вопросы » Общие вопросы по PHP    677

вопрос
Здравствуйте!

Пытаюсь создать скрипт, который будет создавать новость не из формы на сайте, а из файла отправляя post запрос в форму.

Вот мой код:

<?php
ini_set('display_errors', 'On');   

include ('engine/api/api.class.php'); 


    //Получаю список валют
    $row = $db->super_query( "SELECT hash FROM " . USERPREFIX . "_users WHERE name = 'Ivan'" );

    $member_id['hash'] = $row['hash'];
	$member_id['user_id'] = '1';
    $member_id['password'] = '$2y$10$LW3PRJTfN2LG7xwmtPVRN.IHXE/qdpUH.zoMnV9MeQ9HdzmIFFWai';


	$dle_login_hash = sha1( SECURE_AUTH_KEY . $member_id['user_id'] . sha1($member_id['password']) . $member_id['hash'] );
    $duplicateprotection = md5(SECURE_AUTH_KEY.time());

$url = 'https://site.ru/index.php?do=addnews'; // url, на который отправляется запрос
$headers = ['Content-Type: application/x-www-form-urlencoded']; // заголовки нашего запроса

$post_data = [ // поля нашего запроса
    'title' => 'Как твои дела, Друг?',
    'alt_name' => '1de11lad',
    'catlist' => '1',
    'vote_title' => '',
    'frage' => '',
    'vote_body' => '',
    'short_story' => 'iufgt oitoiutgoi goito 1',
    'full_story' => '',
    'tags' => 'val',
    'approve' => '1',
    'allow_comm' => '1',
    'allow_main' => '1',
    'allow_rating' => '1',
    'add' => '',
    'mod' => 'addnews',
    'user_hash' => '' . $dle_login_hash . '',
    'duplicateprotection' => '' . $duplicateprotection . ''
];

$headers = []; // заголовки запроса

$post_data = http_build_query($post_data);

$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true); // true - означает, что отправляется POST запрос

$result = curl_exec($curl);

 
echo $result;

echo $dle_login_hash. '<br />';
echo $duplicateprotection;


dle_login_hash 100% является актуальным и схож с user_hash страницы addnews.html
duplicateprotection просто генерируется каждый раз - новый.

В результате запуска данного скрипта с адреса site.ru/script.php получаю сообщение:
К сожалению, у Вас нет прав для публикации статей на нашем сайте, при этом на странице видно, что не авторизован. Перейдя на страницу site.ru/addnews.html все еще авторизован.

Пожалуйста, подскажите, в чем проблема?
Как все таки добавить новость из скрипта?

Большое спасибо!

Ответа пока нет


7 комментариев

TrustMy
Юзер

TrustMy - 17 февраля 2022 20:36 -

Дополню то, что в файл engine/modules/addnews.php
POST данные (var_dump($_POST)) передаются корректно, но далее не срабатывает.

TeraMoune
Эксперт

TeraMoune - 17 февраля 2022 23:46 -

Вот найдите там переменную с ошибкой и посмотрите на каком условии обрывается.

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

Тестовый репозиторий установки плагинов: teramoune

TrustMy
Юзер

TrustMy - 17 февраля 2022 23:52 -


Не понятно, как найти переменную с ошибкой, ошибки не отдает с ini_set('display_errors', 'On');
Тоже решил, что не авторизован, но удалил условия проверки авторизации в addnews.php и в результате по обращению к скрипту, получаю белую страницу со своими результатами:
echo $result;

echo $dle_login_hash. '<br />';
echo $duplicateprotection;

новость не добавляется.

Мне нужно добавлять именно post запросом, запросом sql реализовал, но мне кажется, что не все там четко, т.к. иногда, при переходе в категорию с новостями, там пусто, хотя новости публикуются именно в эту категорию и доступны по своим адресам + рядом с категорий указано кол-во новостей в ней.



Только после перестроения публикаций, новости появляются в категории. Еще плюс отправки post в том, что по идеи автоматически должен сформироваться чпу url.

При обращении к скрипту, я авторизован на сайте. Вот как передать авторизацию самому скрипту, не понятно. Думал в api все давно реализовано, посмотрел, dle похоже вообще забыли о своем api...

TrustMy
Юзер

TrustMy - 18 февраля 2022 00:08 -

Еще через базу данных, для гостя разрешил добавление новостей с сайта, результат нулевой, а гость не требует авторизации...
p.s. в админке невозможно это разрешить.
Ошибка видимо где-то на поверхности.

TeraMoune
Эксперт

TeraMoune - 18 февраля 2022 02:09 -

Это не ошибка это предостережение, гости не должны публиковать новости.

Тестовый репозиторий установки плагинов: teramoune

TeraMoune
Эксперт

TeraMoune - 18 февраля 2022 02:07 -

TrustMy,

Не понятно, как найти переменную с ошибкой, ошибки не отдает

В смысле переменная $lang и ключ ошибки. Вот например (К сожалению, у Вас нет прав для публикации статей на нашем сайте)
В languages/язык/website.lng есть массив $lang в нём находится ошибка.

'add_err_8'		=>	"К сожалению, у Вас нет прав для публикации статей на нашем сайте.",

Далее по ключу искать и смотреть условия возникновения.

P.S.
На сайте может и авторизованы но вот скрипт у вас отдельный он не часть модуля сайта и на скрипте никакой авторизации пользователей нету, а скрипт обращается к страницам сайта как гость.

Тестовый репозиторий установки плагинов: teramoune

TrustMy
Юзер

TrustMy - 18 февраля 2022 05:04 -

Да, я это понял, буду копать в сторону lang файла и ошибок с ним связанных, спасибо за наводку.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх