Я новичок в CGI.Я использую Apache v2.2 и GNU cgicc v3.2.9.Я хочу использовать CGI для создания веб-страницы HTML с простой формой.Цель этой работы - позволить пользователю отправлять данные, нажимая кнопку на этом CGI непосредственно назад к «тому же» CGI.CGI оценивает данные и изменяет веб-страницу:
CGI -> CGI -> CGI -> ...
Я не могу использовать простую страницу HTML и отправлять запросыв CGI, потому что после этого я создал страницу CGI, где пользователь может снова отправить запрос в этот CGI, что приводит к той же ситуации, как введено:
HTML -> CGI -> CGI ->CGI -> ...
Использование метода формы POST приводит к сообщению об ошибке сервера во время работы GET:
access.log
[16 / Mar /2011: 15: 00: 50] "GET /cgi-bin/cgiHandleEvents.cgi HTTP / 1.1" 200 973
[16 / Mar / 2011: 15: 00: 52] "GET / cgi-bin /cgiHandleEvents.cgi? value1 = & value2 = option1 & value3 = button1 & value4 = data4 HTTP / 1.1 "200 973
[16 / Mar / 2011: 15: 01: 34]" GET /cgi-bin/cgiHandleEvents.cgi HTTP /1.1 "200 974
[16 / Mar / 2011: 15: 01: 37]" POST /cgi-bin/cgiHandleEvents.cgi HTTP / 1.1 "500 538
ошибка.log (я уменьшил http: // до http // из-за предупреждения о спаме относительно моих стековрепутация erflow)
[ср. 16 марта 15:01:37 2011] [ошибка] [клиент 127.0.0.1] Преждевременное завершение заголовков скриптов: cgiHandleEvents.cgi, реферер: http //localhost / cgi-bin / cgiHandleEvents.cgi
[ср. 16 марта 15:01:37 2011] [ошибка] [клиент 127.0.0.1] \ r, реферер: http // localhost / cgi-bin / cgiHandleEvents.cgi
[Ср. 16 марта 15:01:37 2011] [ошибка] [клиент 127.0.0.1] Это приложение запросило среду выполнения, чтобы завершить его необычным способом., referer: http // localhost /cgi-bin / cgiHandleEvents.cgi
[ср. 16 марта 15:01:37 2011] [ошибка] [клиент 127.0.0.1] Для получения дополнительной информации обратитесь в службу поддержки приложения. \ r, реферер: http //localhost/cgi-bin/cgiHandleEvents.cgi
[ср. 16 марта 15:01:37 2011] [ошибка] [клиент 127.0.0.1] завершить вызов после выброса экземпляра 'std :: runtime_error' \r, реферер: http // localhost / cgi-bin / cgiHandleEvents.cgi
[ср. 16 марта 15:01:37 2011] [ошибка] [клиент 127.0.0.1] what (): ошибка ввода-выводаг, реferer: http // localhost / cgi-bin / cgiHandleEvents.cgi
Текущий код не содержит обработчика сообщений.По моему мнению на POST страница должна просто перезагрузиться.Для проверки кода вы можете поменять строки, содержащие другой метод формы.
#include "cgicc/CgiDefs.h"
#include "cgicc/Cgicc.h"
#include "cgicc/HTTPHTMLHeader.h"
#include "cgicc/HTMLClasses.h"
using namespace std;
using namespace cgicc;
int main()
{
Cgicc formData;
Cgicc cgi;
cout<< HTTPHTMLHeader() << endl;
cout<< HTMLDoctype(HTMLDoctype::eStrict) << endl;
cout<< html().set("lang", "EN").set("dir", "LTR") << endl;
// Set up the HTML document
cout<< html() << head() << title("Cgicc example") << head() << endl;
cout<< body().set("bgcolor","#cccccc").set("text","#000000").set("link","#0000ff").set("vlink","#000080") << endl;
try
{
cout<< h2("Test CGIcc form") << endl;
cout<< "GNU cgicc v" << cgi.getVersion() << "<BR>" << endl;
//cout<< "<form method=\"post\" action=\"cgiHandleEvents.cgi\">"<< endl;
cout<< "<form method=\"get\" action=\"cgiHandleEvents.cgi\">"<< endl;
cout<< " Value 1:" << endl;
cout<< " <input type=\"text\" name=\"value1\">" << endl;
cout<< " <p></p>" << endl;
cout<< " Value 2:" << endl;
cout<< " <select name=\"value2\">" << endl;
cout<< " <option value=\"option1\">Option 1" << endl;
cout<< " <option value=\"option2\">Option 2" << endl;
cout<< " <option value=\"option3\">Option 3" << endl;
cout<< " </select>" << endl;
cout<< " <p></p>" << endl;
cout<< " Value 3:" << endl;
cout<< " <input type=\"radio\" name=\"value3\" value=\"button1\" checked=\"checked\">Button1" << endl;
cout<< " <input type=\"radio\" name=\"value3\" value=\"button2\">Button2" << endl;
cout<< " <input type=\"hidden\" name=\"value4\" value=\"data4\">" << endl;
cout<< " <p></p>" << endl;
cout<< " <input type=\"submit\" value=\"Submit\">" << endl;
cout<< "</form>" << endl;
}
catch(exception& e)
{
// handle any errors here.
cout<< h2("ERROR!!!") << endl;
}
// Close the HTML document
cout << body() << html();
return 0; // To avoid Apache errors.
}
Кто-нибудь знает, в чем проблема?