Как «обновить» статус file_get_contents('php://input')?

Я пытаюсь сделать BOT для телеграммы, используя PHP-код.

В основном пользователю приходится выбирать между вставкой: 1) имя 2) фамилия 3) адрес

выбирая фамилию, он должен написать свою фамилию, и я хочу сохранить ее в переменной, но, если я использую $update = file_get_contents('php://input'), я всегда читаю «фамилию» (это первый ввод пользователя)

Итак, я думаю, что моя проблема заключается в следующем: как изменить содержимое file_get_contents('php://input') в определенный «момент» моей программы?

Пожалуйста, прочитайте мой код для более подробной информации, большое спасибо!!!

    <?php
$botToken = "MYTOKEN"; //token 
$website = "https://api.telegram.org/bot".$botToken;
$update = file_get_contents('php://input'); //updates from telegram (JSON format)
$update = json_decode($update, TRUE); 

$chatId = $update['message']['from']['id']; 
$text = $update['message']['text']; 

switch($text)
    {
    case "name";
    sendMessage ($chatId,"You write name");
    break;

    case "surname";
    sendMessage ($chatId,"You write surname"); 
    sendMessage ($chatId,"Insert your surname"); 
                /* here is my problem: what i have to do to "read" what the 
                user write now? i want to store his surname into a new 
                variable*/
    break;

    case "address";
    sendMessage ($chatId,"You write address");
    break; 

    default;
    sendMessage ($chatId,"You don't write a valid command");
    break;     
    }


function sendMessage($chatId,$text)
    {
        $url = $GLOBALS[website]."/sendMessage? 
chat_id=$chatId&text = ".urlencode($text);
        file_get_contents($url);
    }
?>
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я один из тех, кто «взломал» это с помощью Javascript, чтобы отправить только введенные данные и элемент HTML, в который они были введены, но вы запрашиваете конкретно php://input.

По сути, php://input возвращает все необработанные данные после HTTP-заголовков запроса, независимо от типа контента.

Таким образом, вы можете использовать XPath или domdocument (https://www.php.net/manual/en/class.domdocument.php), чтобы найти элемент по его идентификатору из содержимого, которое вы получили из потока «php://input».

Привет! Спасибо за ваш ответ... Значит, вы имеете в виду, что все, что напишет пользователь, будет "сохранено" в php://input, верно? На данный момент я должен проверить это и найти второй ввод пользователя, верно? Спасибо!!!

Marc Kerf 24.05.2019 09:35

Да, в основном, php://input, похоже, дает вам «доступ» к DOM. Сам я не использовал класс domdocument (обычно для этого я использую Javascript или XmlHttpRequest), я просто прочитал документацию и использовал бы для этого функцию "domdocument.getElementById("theId")". php.net/manual/en/domdocument.getelementbyid.php Короче говоря, вы "выбираете" DOM ​​с помощью: $content = get_file_contents("php://input"); а затем вы создаете domdocument и используете функцию «loadHTML ($ content)» для загрузки содержимого вашей HTML-формы, отправленной клиентом. См. 2-й пример в этой ссылке.

Catar4 24.05.2019 14:59

Большое спасибо! Решено!! :)

Marc Kerf 27.05.2019 00:42

Другие вопросы по теме