Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29

Обработка JSON и создание бота

07.03.2025, 18:53. Показов 3533. Ответов 43

Студворк — интернет-сервис помощи студентам
Здравствуйте

С некоторыми кодами возникла проблема, т.к. изучаю впервые. Можно сказать, получил "пример под переделку"

Задача следующая:
1)на страничке вбивают поля (имя\ава) бота
2)по клику на кнопку эти поля JSON отправляются в php обработчик
3)php создает бота:

Кликните здесь для просмотра всего текста

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form id="botForm">
 
 
        <div class="reg-bot__main">
            <label class="reg-bot__label">
                Имя бота
                <input type="text" name='botname' data-type='outBotName' class='reg-bot__input' placeholder='Введите имя бота, например: Николай Николаевич' required></input>
            </label>
            <label class="reg-bot__label reg-bot__label_file" data-type="nameBotAvatar">
                Выберите файл для аватарки бота
                <input type="file" name='botavatar' data-type='outBotAvatar' class='reg-bot__input reg-bot__input_file' accept="image/png, image/jpeg" ></input>
            </label>
            
            
            <button class="test-send__btn test-send__btn_reg" type='button' data-type='saveBot'>Зарегистрировать</button>
            
        </div>
        
    </form>

Кликните здесь для просмотра всего текста

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
document.addEventListener("DOMContentLoaded", () => {
console.log("main.js загружен");
 
 
// ==== Бот ====
 
const saveBotBtn = document.querySelector("[data-type=saveBot]");
const nameBotAvatarLabel = document.querySelector("[data-type=nameBotAvatar]");
const botAvatarInput = document.querySelector("[data-type=outBotAvatar]");
 
 
 
 
async function saveBot(data) {
 
    console.log("saveBot_js")
    //console.log(data);
 
    let response = await fetch("./functions/regBot.php", {
        method: "POST",
        cache: "no-cache",
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(data)
    });
 
    console.log(response);
 
    
    if(response.ok) {
        let responseJSON = await response.json();
        document.location.reload();
    }
}
if(botAvatarInput) {
    botAvatarInput.addEventListener("change", (event) => {
 
        let imgName = event.target.files[0].name;
    
        nameBotAvatarLabel.childNodes[0].data = imgName;
    });
}
 
 
if(saveBotBtn) {
    saveBotBtn.addEventListener("click", (event) => {
        event.preventDefault();
 
        console.log("saveBotBtn_js")
 
        const botName = document.querySelector("[data-type=outBotName]");
        const botAvatar = document.querySelector("[data-type=outBotAvatar]");
        let botData = {};
 
        if(botName.value == "") {
            botName.classList.add('_error');
            return;
        }
 
 
        var fileBlob = "";
 
        
    
        if(botAvatar.files.length > 0) {
    
            let file = botAvatar.files[0];
            let reader = new FileReader();
 
            let file2b64 = reader.readAsDataURL(file);
            reader.onload = () => {
                fileBlob = reader.result;
                botData.NAME = botName.value;
                botData.AVATAR = fileBlob;
                saveBot(botData);
            };
            
        } else {
            botData.NAME = botName.value;
            saveBot(botData);
        }
 
        console.log(botData);
        
    });
}
 
});


Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php 
require_once (__DIR__.'/bots.php');
 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
 
require_once (__DIR__.'/bots.php');
require_once (__DIR__.'/../config/config.php');
 
$input = json_decode(file_get_contents('php://input'));
 
 
if(!empty($input->NAME)) {
    $botName = htmlspecialchars($input->NAME);
    if(!empty($input->AVATAR)) {
        $botAvatarB64 = explode(",", $input->AVATAR)[1];
    } else {
        $botAvatarB64 = null;
        //$botAvatarB64 = $DEFAULT_IMG_BASE64;
    }
}
 
if(isset($botName)) {
    $botProperties = array(
        "NAME" => $botName
    );
    if(isset($botAvatarB64)) {
        $botProperties['PERSONAL_PHOTO'] = $botAvatarB64;
    }
    $idBot = Bots::installBot("appsupp", 'путь до папки/appsupp/handlers/bot.php', $botProperties)['result'];
    Bots::setActiveBot($idBot);
    Bots::updateBot($idBot, 'appsupp', $botName);
 
    echo json_encode($idBot); 
}
 
$botName = "q123";
$botProperties = array(
    "NAME" => "qwe"
);
 
$idBot = Bots::installBot("appsupp", 'путь до папки/appsupp/handlers/bot.php', $botProperties)['result'];
Bots::updateBot($idBot, 'appsupp', $botName);
 
echo json_encode($idBot);


Предположение, что Bots класс барахлит - мимо. В index этими методами все прекрасно создается

Сам механизм представляю как кинул - поймал - приготовил. Судя по логам - js кидает нормально. Но вот сам php обработчик, будто, не хочет делать ничего. Даже при том, что я просто попытался выполнить создание бота в нем напрямую. При нажатии на кнопку мне предлагают отправить форму. Бот не создается (хотя этот же код работает в index):
PHP
1
2
3
4
5
6
7
$botName = "q123";
$botProperties = array(
    "NAME" => "qwe"
);
 
$idBot = Bots::installBot("appsupp", 'путь до папки/appsupp/handlers/bot.php', $botProperties)['result'];
Bots::updateBot($idBot, 'appsupp', $botName);

Прощу камнями не кидать, я только учусь.
Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.03.2025, 18:53
Ответы с готовыми решениями:

Подскажите функцию для обработки Json-строки
Здравствуйте, есть ссылка которая возвращает массив данных вот она...

Создание сложной структуры данных для преобразования их в JSON
Запрашиваю из БД данные (из нескольких таблиц), соответственно количество выбранных строк из таблиц заранее не известно. в JSON нужно...

Обработка json или xml ответа из Яндекс метрики
Все токены ID и пароли знаю. Когда вбиваю url с данными получаю ответ от яндекс метрики со статистикой. Он может быть и в json и в xml. Как...

43
Заблокирован
07.03.2025, 19:31
Цитата Сообщение от Cyburger Посмотреть сообщение
$input = json_decode(file_get_contents('php://input'));
Надо посмотреть, что прилетает с JS. Чуть ниже дописать.
PHP
1
file_put_contents('log.txt',  print_r($input, true) . PHP_EOL, FILE_APPEND);
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
07.03.2025, 19:48  [ТС]
уже пробовал так. пустой лог

Кликните здесь для просмотра всего текста


Кликните здесь для просмотра всего текста
0
Заблокирован
07.03.2025, 20:01
Цитата Сообщение от Cyburger Посмотреть сообщение
$input = json_decode(file_get_contents('php://input'));
Может вот так:
PHP
1
$input = json_decode(file_get_contents('php://input'), true);
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
07.03.2025, 20:07  [ТС]
все так же (

Кликните здесь для просмотра всего текста
0
Заблокирован
07.03.2025, 20:17
Цитата Сообщение от Cyburger Посмотреть сообщение
let response = await fetch("./functions/regBot.php", {
А что в консоли браузера во время отправления? Ошибок нет? Адрес правильный к файлу php? И еще бы на вкладке Network посмотреть не мешало бы.

Добавлено через 3 минуты
Цитата Сообщение от Cyburger Посмотреть сообщение
require_once (__DIR__.'/bots.php');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once (__DIR__.'/bots.php');
Два раза один и тот же файл подключается. Может стоит смотреть логи ошибок php? Тупа сам скрипт php косячный.
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
07.03.2025, 20:29  [ТС]
Кликните здесь для просмотра всего текста
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
07.03.2025, 20:31  [ТС]
Цитата Сообщение от I.F.Y. Посмотреть сообщение
Два раза один и тот же файл подключается.
уже убрал ) да и разве важно, если _once, все равно второй раз не подключит
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
07.03.2025, 20:38  [ТС]
Наисвежайшие ошибки php (но тут я вообще никогда не был прежде):

Кликните здесь для просмотра всего текста
0
Заблокирован
07.03.2025, 20:48
Остается проверить логи ошибок php если такие сохраняются. Больше у меня мыслей пока нет(

Добавлено через 1 минуту
Цитата Сообщение от Cyburger Посмотреть сообщение
Наисвежайшие ошибки php (но тут я вообще никогда не был прежде):
Очистить этот файл и потом опять отправить данные.

Добавлено через 7 минут
Цитата Сообщение от Cyburger Посмотреть сообщение
уже пробовал так. пустой лог
Странно, что в файл ничего не записывается. Доступ к файлу есть? Может надо разрешения проставить 777?
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
07.03.2025, 20:54  [ТС]
Тут очень много всего. Но поиск по названию моей папки ничего не дал. Хотя, я не понимаю о чем тут речь

Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2025-03-07 20:47:01 - Host:  - UNKNOWN - [ErrorException] E_WARNING
Memcache::pconnect(): Can't connect to unix:///tmp/memcached.sock:0, Connection failed: No such file or directory (2) (0)
/home/bitrix/www/bitrix/modules/main/lib/data/configurator/memcacheconnectionconfigurator.php:75
#0: Bitrix\Main\Data\Configurator\MemcacheConnectionConfigurator->createConnection
    /home/bitrix/www/bitrix/modules/main/lib/data/memcacheconnection.php:31
#1: Bitrix\Main\Data\MemcacheConnection->connectInternal
    /home/bitrix/www/bitrix/modules/main/lib/data/connection.php:53
#2: Bitrix\Main\Data\Connection->getResource
    /home/bitrix/www/bitrix/modules/main/lib/data/cacheengine.php:67
#3: Bitrix\Main\Data\CacheEngine->connect
    /home/bitrix/www/bitrix/modules/main/lib/data/cacheengine.php:57
#4: Bitrix\Main\Data\CacheEngine->__construct
    /home/bitrix/www/bitrix/modules/main/lib/data/cache.php:90
#5: Bitrix\Main\Data\Cache::createCacheEngine
    /home/bitrix/www/bitrix/modules/main/lib/data/cache.php:138
#6: Bitrix\Main\Data\Cache::createInstance
    /home/bitrix/www/bitrix/modules/main/lib/data/managedcache.php:46
#7: Bitrix\Main\Data\ManagedCache->read
    /home/bitrix/www/bitrix/modules/main/lib/config/option.php:186
#8: Bitrix\Main\Config\Option::load
    /home/bitrix/www/bitrix/modules/main/lib/config/option.php:83
#9: Bitrix\Main\Config\Option::getRealValue
    /home/bitrix/www/bitrix/modules/main/lib/config/option.php:32
#10: Bitrix\Main\Config\Option::get
    /home/bitrix/www/bitrix/modules/main/lib/httprequest.php:422
#11: Bitrix\Main\HttpRequest->prepareCookie
    /home/bitrix/www/bitrix/modules/main/lib/httprequest.php:70
#12: Bitrix\Main\HttpRequest->__construct
    /home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:38
#13: Bitrix\Main\HttpApplication->initializeContext
    /home/bitrix/www/bitrix/modules/main/lib/application.php:127
#14: Bitrix\Main\Application->initializeExtendedKernel
    /home/bitrix/www/bitrix/modules/main/include.php:17
#15: require_once(string)
    /home/bitrix/www/bitrix/modules/main/include/prolog_before.php:19
#16: require(string)
    /home/bitrix/www/bitrix/php_interface/cron_events.php:11



Права доступа 777 стоят к логу

Я читал о каком то методе, похожем на JSON. Не могу вспомнить как называется. Или, там все то же самое будет?
0
Заблокирован
07.03.2025, 21:16
Если не получается, то предлагаю вот такой вариант. Всё закоментировать в этом файле php и только две строчки оставить.

PHP
1
2
$input = json_decode(file_get_contents('php://input'), true);
file_put_contents('log.txt',  print_r($input, true), LOCK_EX);
Если что-то отправляется, то это что-то должно записаться в файл.
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
07.03.2025, 21:21  [ТС]
ну да, получается данные пришли

Кликните здесь для просмотра всего текста
0
Заблокирован
07.03.2025, 21:34
Раскомментировать постепенно. Только сейчас данные в виде ассоциативный массива. Поэтому доступ как к массиву
PHP
1
$input['NAME']
Или убрать true. Думаю, что где-то ошибка в скрипте и поэтому даже не записывалось. Построчно или блоками раскомментить и перепроверять.

Добавлено через 1 минуту
Цитата Сообщение от Cyburger Посмотреть сообщение
'путь до папки/appsupp/handlers/bot.php'
Надеюсь здесь нормальный путь, а это просто что бы не показывать?
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
07.03.2025, 22:15  [ТС]
PHP
1
2
3
$input = json_decode(file_get_contents('php://input'));
 
file_put_contents('log.txt',  print_r($input) . PHP_EOL, FILE_APPEND);
в лог записывает просто "1"

PHP
1
2
3
$input = json_decode(file_get_contents('php://input'));
 
file_put_contents('log.txt',  print_r($input, true) . PHP_EOL, FILE_APPEND);
в лог пришло

PHP
1
2
3
4
stdClass Object
(
    [NAME] => asss
)
PHP
1
2
3
4
5
6
7
<?php 
 
require_once (__DIR__.'/bots.php');
 
$input = json_decode(file_get_contents('php://input'));
 
file_put_contents('log.txt',  print_r($input, true) . PHP_EOL, FILE_APPEND);
в лог ничего не пришло. почему? что за чудеса. Я не понимаю.

и тут уж я подумал, чтоШ. значит я как то неправильно все понимаю, и перебрал все варианты:
require_once (__DIR__.'../functions/bots.php'); - а то мало ли, ведь скрипт что вызывает regBot.php - в другом каталоге
require_once (__DIR__.'/functions/bots.php'); - а то мало ли, ведь index.php из которого жмякается скрипт находится на уровень выше

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

переписал все
PHP
1
$input->NAME
на массивы, но как бы, без классов на создание бота - как я пойму? хотя, как аццкий новичок, я все равно понадеялся, ведь еще в index.php был подключен класс ботов. но увы, нет

Добавлено через 9 минут
Цитата Сообщение от I.F.Y. Посмотреть сообщение
Надеюсь здесь нормальный путь, а это просто что бы не показывать?
да, целиком прописан
0
Заблокирован
08.03.2025, 10:14
Если пути к файлам неверно прописаны, то эти ошибки можно найти в логах nginx. Гадать это сложно. Надо изучать логи.
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
08.03.2025, 16:09  [ТС]
Цитата Сообщение от I.F.Y. Посмотреть сообщение
Если пути к файлам неверно прописаны
я использовал это, чтобы лишний раз убедиться

PHP
1
2
3
$directory = __DIR__;
 
file_put_contents('log.txt',  print_r($directory, true) . PHP_EOL, FILE_APPEND);
PHP
1
/home/bitrix/www/marketplace/appsupp/functions
собственно, файл bots.php находится рядом с regBot.php

файл regBot.php перестает что либо делать как только я пытаюсь подключить любой другой файл в нем, на любом уровне

вот структура:
Кликните здесь для просмотра всего текста


выглядит это все как колдунство
0
Заблокирован
08.03.2025, 16:34
Цитата Сообщение от Cyburger Посмотреть сообщение
собственно, файл bots.php находится рядом с regBot.php
Уже понятно, что ошибка из-за файла bots.php. В нём могут тоже какие-то файлы подключаться. И если относительно файла index.php эти пути правильные, то относительно файла regBot.php уже нет. Неужели трудно посмотреть ошибки nginx или apache? Я хз что там на фронте.
0
1 / 1 / 0
Регистрация: 12.05.2023
Сообщений: 29
08.03.2025, 17:07  [ТС]
Цитата Сообщение от I.F.Y. Посмотреть сообщение
Неужели трудно посмотреть ошибки nginx или apache?
извините за недопонимание. многие вещи о которых идет речь - я делаю впервые. надеюсь, это то, что нужно:

Кликните здесь для просмотра всего текста
0
Заблокирован
08.03.2025, 17:16
Cyburger, на скрине только ошибки связанные с картинкой. А что в самом файле bots.php? Там есть подключение других файлов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2025, 17:16
Помогаю со студенческими работами здесь

Программное создание кнопок и обработка событий для каждой из созданных
Здравствуйте! Понадобилось создать несколько кнопок в зависимости от количества строк в результате запроса к БД. Но как затем обработать...

Запрос SOAP, JSON обработка полученого
Всем привет! Помогите собрать запрос на сторонний сервер. Web програмированием занинимаюсь не больше года, HTML и CSS поддались легео и...

Обработка несуществующей страницы сайта созданной динамически
Есть небольшой сайт. Смена контента происходит динамически(без перезагрузки страницы). БД для страниц вида: -link (адрес страницы) ...

Динамическое создание и обработка checkbox через форму
Здравствуйте, уважаемые форумчане! Прошу у вас помощи. Нужно помочь реализовать следующее: Нужно создать форму в одном файле, через...

Создание и обработка массивов
При поступлении в университет лица, получившие оценку «неудовлетворительно» на первом экзамене, ко второму экзамену не допускаются. Считая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru