Ja bych zkusil v te funkci GetParam dát odeslání té odpovědi (další formulář) až za zpracování těch vstupních polí a pokud v nich byla chyba, tak někam na začátek toho formuláře (asi tak někde u toho center) přidat analýzu té chyby (cokoli od "ERROR, zkuste to znovu" po podrobný výpis, jakých všech chyb se dopustil a jak je nejlépe opravit (včetně barviček a stylů), případně i v případě správného zadání tam napsat něco jako "zadání 12:23:11 - 14:44:44 bylo akceptováno").
Možností jak to udělat je víc, například dát odpověď do globální proměnné a tu tam jako řetězec vložit v SendPage (přičemž na začátku to bude prázdný řetězec), nebo nevolat SendPage, ale dát tam zvláštní kód, nebo SendPage() bude volat rovnou volat něco jako SendReply(""), která udělá to, co teď dělá ta SendPage() a když ji zavoláš z GetPage, tak do toho řetězce dáš svou odpověď, nebo tak nějak
Zadavaní hodnot přes web
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Zadavaní hodnot přes web
gilhad má pochopitelně pravdu, možností je spousta. Na tom jeho výkladu je pěkné, že vlastně nemluví o programu, ale spíš o algoritmu a algoritmizaci. Ovšem v tvém případě jsem předpokládal, že do toho vložíš i nějakou vlastní invenci. Jak dostat parametr na webovou stránku jsem ti v příkladu ukázal, tak nějak nevím, kde je problém. Když provedeš kontrolu vstupních parametrů, tak prostě můžeš v případě jejich chyby třeba vygenerovat celou novou stránku. V tomhle příkladu kontroluji řetězce HOD, MIN, SEC na délku. A pokud je větší než 2, tak se generuje na stránce chybové hlášení. To si můžeš vyzkoušet. Ve skutečnosti testovat string na délku v tomto případě pochopitelně nestačí, dovolím si pořádnou kontrolu vstupních parametrů nechat na tobě.
Kód: Vybrat vše
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define HTTPMETHOD "POST" // Set "GET" or "POST" method
#define SERVERPORT 80
const char* ssid = "YourSSID"; // Set your router SSID
const char* password = "YourPassword"; // Set your router password
String StringHOD;
String StringMIN;
String StringSEC;
String StringErrorInput = "";
String buff;
ESP8266WebServer HttpServer(SERVERPORT);
//-----------------------------------------------------------------
void setup(void) {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
/* wait for WiFi connect */
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println('\n');
Serial.print("Connected to ");
Serial.println(WiFi.SSID());
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
HttpServer.on("/", HTTP_GET, SendPage);
HttpServer.on("/", HTTP_POST, GetParam);
HttpServer.onNotFound(handleNotFound);
HttpServer.begin();
//Serial.println("HTTP server started");
}
//-----------------------------------------------------------------
void loop(void) {
HttpServer.handleClient(); // Listen for HTTP requests from clients
}
//-----------------------------------------------------------------
void SendPage() {
buff = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
buff += "<html><head>\n";
buff += "<meta content=\"text/html; charset=utf-8\">\n";
buff += "<title>TIME INPUT</title></head><body>\n";
buff += "<form action=\"/\" method=\"" + String(HTTPMETHOD) + "\">\n";
buff += "<h1>ESP8266 ID : " + String(ESP.getChipId()) + "<br>\n";
buff += "<input type=\"text\" size=2 name=\"HOD\" >:\n";
buff += "<input type=\"text\" size=2 name=\"MIN\" >:\n";
buff += "<input type=\"text\" size=2 name=\"SEC\" >:\n";
buff += "<input type=\"submit\" value=\"ODESLAT\">\n";
buff += "</h1></form>\n";
buff += "Kvalita WiFi signalu: " + String(min(max(2 * (WiFi.RSSI() + 100), 0), 100)) + "%\n";
buff += "<h1>" + StringErrorInput + "</1></body></html>\n";
HttpServer.send(200, "text/html", buff);
}
/* Send HTTP status 404 Not Found */
void handleNotFound() {
HttpServer.send(404, "text/plain", "404: Not found");
}
/* Get params */
void GetParam(void) {
StringHOD = HttpServer.arg("HOD");
StringMIN = HttpServer.arg("MIN");
StringSEC = HttpServer.arg("SEC");
if (StringHOD.length() > 2 || StringMIN.length() > 2 || StringSEC.length() > 2) {
StringErrorInput = "Chybny vstup - prilis mnoho znaku";
}
else StringErrorInput = "";
SendPage();
Serial.print(StringHOD);
Serial.print(":");
Serial.print(StringMIN);
Serial.print(":");
Serial.print(StringSEC);
Serial.println(" ***");
}
-
- Příspěvky: 1030
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Zadavaní hodnot přes web
V tomto řádku se mi vloudila chybička
má vypadat takto
Kód: Vybrat vše
buff += "<h1>" + StringErrorInput + "</1></body></html>\n";
Kód: Vybrat vše
buff += "<h1>" + StringErrorInput + "</h1></body></html>\n";
Re: Zadavaní hodnot přes web
Dik moc
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 32 hostů