Нажатие кнопки на странице HTML с использованием CGI C ++ - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть HTML страница в CGI C ++. Как вывести текст в h1 (id = "h1_id"), который был введен во ввод (input type = "text") при нажатии кнопки?

#include <iostream>
using namespace std;

int main() {
    cout<<"Content-type:text/html \n\n";
    cout<<"<html>\n";
    cout<<"<head>\n";
    cout<<"<title>First CGI WEB-program</title>\n";
    cout<<"<rel=\"stylesheet\" href=\"Source Files/style.css\">";
    cout<<"</head>\n";

    cout<<"<body>\n";
    cout<<"<h1 id=\"h1_id\">You entered: </h1>\n";

    cout<<"<form method=\"GET\">\n";
    cout<<"<input type=\"text\">\n";
    cout<<"<input type=\"submit\" value=\"Click\">\n";
    cout<<"</form>\n";
    cout<<"</body>\n";

    cout<<"</html>\n";

    return 0;
}

1 Ответ

0 голосов
/ 08 апреля 2020

Ваша программа не выполняет никаких действий в зависимости от того, что запрашивает клиент. Когда он загружает страницу, сервер, скорее всего, получит запрос GET /.

Возможно, вам необходимо дать имя входным данным формы, чтобы их можно было идентифицировать при чтении значений. Например:

<input type="text" name="formvalue">

Когда вы отправляете форму, она получает либо GET, либо POST в зависимости от действия отправки. В вашем случае он будет выполнять GET, поэтому вам нужно будет искать данные формы в вашем URL в качестве параметров. См. html формы в w3cschools .

Например, вы получите GET /?formvalue=hello, если вы нажмете кнопку отправки с текстом привет в текстовом поле .

Затем вам нужно обработать этот случай в логах сервера c. Некоторый псевдокод:

if (request.parameters.contains("formvalue")) {
   std::string value = request.get
   cout << R"(<h1 id="h1_id">You entered: )" << request.parameters.get("formvalue") << "</h1>\n";
}

Одна вещь, которую вы, вероятно, должны рассмотреть, это использовать библиотеку C / C ++, которая реализует биты CGI для вас. См. вопрос с тегами fastcgi и c ++ . Существуют также библиотеки HTTP, которые помогут вам разобраться со спецификой протокола (анализ URL-адресов, анализ заголовков HTTP и т. Д. c.).

Я настоятельно рекомендую вам использовать анализатор пакетов, например Wireshark, для просмотра запросов и ответов между вашим сервером и вашим клиентом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...