Zadavaní hodnot přes web

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Zadavaní hodnot přes web

Příspěvek od gilhad » 19 dub 2019, 10:35

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

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Zadavaní hodnot přes web

Příspěvek od jankop » 19 dub 2019, 19:40

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(" ***");
}

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Zadavaní hodnot přes web

Příspěvek od jankop » 19 dub 2019, 20:59

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";

Le-Ze
Příspěvky: 201
Registrován: 24 črc 2017, 08:15
Reputation: 0

Re: Zadavaní hodnot přes web

Příspěvek od Le-Ze » 20 dub 2019, 06:42

Dik moc :mrgreen:

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 19 hostů