Arduino klient - ovládanie z webu
Re: Arduino klient - ovládanie z webu
No tak ted jsem v tom totalne tumpachový ))
Myslíš že bych tě mohl poprosit o pomoc s tím checkboxem ?
Myslíš že bych tě mohl poprosit o pomoc s tím checkboxem ?
Re: Arduino klient - ovládanie z webu
Si tam spustíš ten "Try it yourself" .... upravíš kód a dáš "Run" ... vedle vidíš co to dělá. Nebudu to psát za tebe. Pochybuji, že ostatním se bude chtít taky. Okradl bych tě o tu radost až si na to příjdeš sám.
PS : Momentálně se potřebuješ vzdělat na téma HTML a formuláře... to tě nakopne dál
PS : Momentálně se potřebuješ vzdělat na téma HTML a formuláře... to tě nakopne dál
Re: Arduino klient - ovládanie z webu
Vím že musím zapracovat na téma HTML a odesílací formuláře...
Re: Arduino klient - ovládanie z webu
Tak asi jsem to zvládl )
Můj kod v IDE :
ale světlo se mi nechce sepnout
Tak už vím kde mám chybu.......Tady se počítá s textem LED a já mám svetlo1
Kód: Vybrat vše
<?php
$server = "localhost";
$user = "kony";
$pass = "xxxxxxxxxxx";
$db = "Domacnost";
$mysqli = mysqli_connect($server, $user, $pass, $db); //připojení k MySQL
$sql = 'SELECT * FROM arduino_data WHERE modul="svetlo1"';
$doSql = $mysqli->query($sql);
if($doSql->num_rows == 0){
$sql = 'INSERT INTO arduino_data (modul, hodnota) VALUES ("svetlo1", 0)';
$doSql = $mysqli->query($sql);
}
if(isset($_POST['odeslano'])){ //pokud byl formulář odeslán
$hodnota = sanitize($_POST['stav']);
$sql = 'UPDATE arduino_data SET hodnota="'.$hodnota.'" WHERE modul="svetlo1"';
$doSql = $mysqli->query($sql);
}
$sql = 'SELECT * FROM arduino_data WHERE modul="svetlo1"';
$doSql = $mysqli->query($sql);
$hodnota = $doSql->fetch_assoc()['hodnota']; //načte hodnotu led z DB
$zapnuto1Checked = $hodnota == 1 ? 'checked' : ''; //nastaví výchozí hodnotu radio buttonu
$vypnuto1Checked = $hodnota == 0 ? 'checked' : '';
$sql = 'SELECT * FROM arduino_data WHERE modul="svetlo2"';
$doSql = $mysqli->query($sql);
if($doSql->num_rows == 0){
$sql = 'INSERT INTO arduino_data (modul, hodnota) VALUES ("svetlo2", 0)';
$doSql = $mysqli->query($sql);
}
if(isset($_POST['odeslano'])){ //pokud byl formulář odeslán
$hodnota2 = sanitize($_POST['stav2']);
$sql = 'UPDATE arduino_data SET hodnota="'.$hodnota2.'" WHERE modul="svetlo2"';
$doSql = $mysqli->query($sql);
}
$sql = 'SELECT * FROM arduino_data WHERE modul="svetlo2"';
$doSql = $mysqli->query($sql);
$hodnota2 = $doSql->fetch_assoc()['hodnota']; //načte hodnotu led z DB
$zapnuto2Checked = $hodnota2 == 1 ? 'checked' : ''; //nastaví výchozí hodnotu radio buttonu
$vypnuto2Checked = $hodnota2 == 0 ? 'checked' : '';
$sql = 'SELECT * FROM arduino_data WHERE modul="svetlo3"';
$doSql = $mysqli->query($sql);
if($doSql->num_rows == 0){
$sql = 'INSERT INTO arduino_data (modul, hodnota) VALUES ("svetlo3", 0)';
$doSql = $mysqli->query($sql);
}
if(isset($_POST['odeslano'])){ //pokud byl formulář odeslán
$hodnota3 = sanitize($_POST['stav3']);
$sql = 'UPDATE arduino_data SET hodnota="'.$hodnota3.'" WHERE modul="svetlo3"';
$doSql = $mysqli->query($sql);
}
$sql = 'SELECT * FROM arduino_data WHERE modul="svetlo3"';
$doSql = $mysqli->query($sql);
$hodnota3 = $doSql->fetch_assoc()['hodnota']; //načte hodnotu led z DB
$zapnuto3Checked = $hodnota3 == 1 ? 'checked' : ''; //nastaví výchozí hodnotu radio buttonu
$vypnuto3Checked = $hodnota3 == 0 ? 'checked' : '';
echo '<form action="" method="POST" >';
echo '<input type="hidden" value="1" name="odeslano" />';
echo 'Světlo 1<br>';
echo '<input type="radio" name="stav" value="1" '.$zapnuto1Checked.' /> Zapnout<br>';
echo '<input type="radio" name="stav" value="0" '.$vypnuto1Checked.' /> Vypnout<br><br>';
echo 'Světlo 2<br>';
echo '<input type="radio" name="stav2" value="1" '.$zapnuto2Checked.' /> Zapnout<br>';
echo '<input type="radio" name="stav2" value="0" '.$vypnuto2Checked.' /> Vypnout<br><br>';
echo 'Světlo 3<br>';
echo '<input type="radio" name="stav3" value="1" '.$zapnuto3Checked.' /> Zapnout<br>';
echo '<input type="radio" name="stav3" value="0" '.$vypnuto3Checked.' /> Vypnout<br><br>';
echo '<input type="submit" value="Odeslat">';
echo '</form>';
function sanitize($input){
$input = htmlspecialchars($input);
$input = htmlentities($input);
$input = strip_tags($input);
$input = trim($input);
return $input;
}
?>
Kód: Vybrat vše
#include <SPI.h>
#include <ESP8266WiFi.h>
#define BUFF_DELKA 255
// Nazev Wi-Fi site, do ktere se mam pripojit
const char* ssid = "Kony";
// Heslo Wi-Fi site, do ktere se mam pripojit
const char* password = "xxxxxxxxx";
char server[] = "konycz.eu"; //URL adresa serveru
char buffer[BUFF_DELKA]; //zásobník na příchozí řetězec
WiFiClient client;
void setup() {
// Nastartuj seriovou linku, do ktere budu vypisovat provozni informace
Serial.begin(9600);
// Na pin D1 je pripojene rele, nastavim jej tedy na vystup
// Zaroven nastavim nizkée napeti, aby se rele po startu nesepnulo
pinMode(0, OUTPUT);
// Pripojeni k Wi-Fi
Serial.println();
Serial.print("Pripojuji k ");
Serial.println(ssid);
WiFi.begin(ssid, password);
// Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
// Jsem pripojeny k Wi-Fi a mohu pokracovat
Serial.println();
Serial.println("WiFi pripojena!");
// Napis IP adresu, kterou mikropocitac dostal
Serial.print("Pouzij k pripojeni tuto adresu: ");
Serial.print("http://");
Serial.println(WiFi.localIP());
}
// Smycka loop se opakuje stale dokola
void loop() {
if(client.connect(server, 80)){
delay(1000);
client.println("GET http://konycz.eu/doma/svetlo1.php");
client.println("Host: konycz.eu");
client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
client.println("Connection: close");
client.println();
delay(1000);
int inBuffer = 0;
for(int i = 0; i < BUFF_DELKA; i++){ //vyprázdní buffer
buffer[i] = '\\0'; //nastaví všechny prvky buffer na znak konce řetězce
}
while(client.available()){
buffer[inBuffer] = client.read();
inBuffer++;
}
if(inBuffer == 6){
if(buffer[0] == 'l' && buffer[1] == 'e' && buffer[2] == 'd'){
if(buffer[4] == '1'){
digitalWrite(0, HIGH);
}
else{
digitalWrite(0, LOW);
}
Serial.println(buffer[4]);
}
}
client.stop();
}
delay(60000);
}
Tak už vím kde mám chybu.......Tady se počítá s textem LED a já mám svetlo1
Re: Arduino klient - ovládanie z webu
Po oprave vse jede jak z praku.
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: Arduino klient - ovládanie z webu
Ahoj, v tom PHP kóde máš SQL a z častí aj XSS injection.
Ak ti niekto spustí ten php script, je schopný ti vymazať celú databázu, ukradnúť ti dáta, ak nastaví správne požiadavku.
Keď niečo vypisuješ na stránku z databázy, používaj htmlspecialchars (aby si si nespustil nežiadúci XSS script, ak ti ho tam niekto nahraje ako text).
Čo sa týka preberania dát, chýba ti tam mysqli_real_escape_string, htmlspecialchars sa na spracovanie dát (pri ukladaní) nepoužíva. Ak ti tam nahráš takto, tak pri výpise si to (bez htmlspecialchars) sformátuješ rovnako a ten HTML kód sa spustí, ak by tam bol ten spomínaný script, rovnako tak aj v prípade htmlentities - je lepšie to používať pre výpis. Funkcia trim je OK, zmaže prípadné medzery.
Taktiež action toho formulára, ten môžeš volať na jeho PHP meno... cez PHP_SELF, scriptom je možné ten formulár presmerovať.
Na druhú stranu chválim, že používaš mysqli_queries a nie mysql_queries, ten je deprecated.
Ak ti niekto spustí ten php script, je schopný ti vymazať celú databázu, ukradnúť ti dáta, ak nastaví správne požiadavku.
Keď niečo vypisuješ na stránku z databázy, používaj htmlspecialchars (aby si si nespustil nežiadúci XSS script, ak ti ho tam niekto nahraje ako text).
Čo sa týka preberania dát, chýba ti tam mysqli_real_escape_string, htmlspecialchars sa na spracovanie dát (pri ukladaní) nepoužíva. Ak ti tam nahráš takto, tak pri výpise si to (bez htmlspecialchars) sformátuješ rovnako a ten HTML kód sa spustí, ak by tam bol ten spomínaný script, rovnako tak aj v prípade htmlentities - je lepšie to používať pre výpis. Funkcia trim je OK, zmaže prípadné medzery.
Taktiež action toho formulára, ten môžeš volať na jeho PHP meno... cez PHP_SELF, scriptom je možné ten formulár presmerovať.
Na druhú stranu chválim, že používaš mysqli_queries a nie mysql_queries, ten je deprecated.
Re: Arduino klient - ovládanie z webu
Pojede mi to na lokalnim serveru doma kam neni presnerovana verejka...9
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti