Stránka 2 z 2

Re: Zadavaní hodnot přes web

Napsal: 19 dub 2019, 10:35
od gilhad
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

Re: Zadavaní hodnot přes web

Napsal: 19 dub 2019, 19:40
od jankop
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(" ***");
}

Re: Zadavaní hodnot přes web

Napsal: 19 dub 2019, 20:59
od jankop
V tomto řádku se mi vloudila chybička

Kód: Vybrat vše

buff += "<h1>" + StringErrorInput + "</1></body></html>\n";
má vypadat takto

Kód: Vybrat vše

buff += "<h1>" + StringErrorInput + "</h1></body></html>\n";

Re: Zadavaní hodnot přes web

Napsal: 20 dub 2019, 06:42
od Le-Ze
Dik moc :mrgreen: