Stránka 4 z 5

Re: Zapis hodnoty do DB

Napsal: 20 lis 2020, 06:02
od pavel1tu
Kony píše:
19 lis 2020, 20:47
nechapu, ja prece nikde neschovavam udaje o ucastnikach...
2 pavel1tu : snazim se vzdy prijit na reseni sam... a vzdy si z fora vezmu jen cast a pak premyslim, jak to vzdy funguje, nechci jen kopirovat texty, ale chci je pochopit, proto zkouším ruzne varianty a snazim si je vysvetlit jak to funguje
Zatím jsem ti NIKDY nepodstrkoval žádný kod,
vždy jen upravoval tvůj - naposledy závorky, doposud bez odezvy.

PS: problém je, že ladíš nějaký kus kodu, u kterého každou chvilku něco měníš a s tím i co chodí/nechodí. Doporučím rozchodit "kusy" kodu zvlášť (jednotlivé funkční části), pak to jen sesypat.

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 19:25
od Kony
mohl bych se prosím zeptat mimo trošku téma ?

Potřebuji pomocí php odlazu zapsat do DB nějakou hodnotu ....

nyní mám v php toto :

Kód: Vybrat vše

 <?php

$server = "localhost";

$user = "kony";

$pass = "Kheslo";

$db = "Domacnost";

$mysqli = mysqli_connect($server, $user, $pass, $db); //připojení k MySQL

$sqlzapis = 'UPDATE arduino_data SET hodnota='.(int)$_POST['stav1'].' WHERE modul="svetlo1"';

$doSqlzapis = $mysqli->query($sqlzapis);

header('Location: svetla.php');

?>
Lze pomocí odkazu do prohlížeče zapsat hodnotu do DB ??

Třeba...
chci zapsat hodnotu 2 tak bych zadal do prohlížeče :
http://xxxxxx.cx/update_svetlo1.php?hodnota=2

ale to mi nechce ani za boha fungovat
vždy to zapíše NULU

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 19:57
od martinius96
Podľa requestu to posielaš cez GET a na webserveri prijímaš ako POST, teda Body správy je prázdne, teda ti to tam zapísalo ako prázdny reťazec "", ktorý si pretypoval na int, teda zapísalo 0.
(Predpokladám, že používaš na strane mikrokontroléru GET request a nie nejaký špecifický HTTP POST request s parametrami v linku)
Taktiež parametrom preberáš hodnotu z kľúča stav1 a v ukážkovom requeste odosielaš kľúč hodnota s value 2.

UPDATE vykonáva zmenu existujúcej hodnoty v tabuľke.
Chceš hodnotu zapísať (do nového riadku tabuľky, ktorá ma predpokladám jedinečné PRIMARY KEY id s AUTO_INCREMENTOM), alebo chceš prepísať existujúcu hodnotu v riadku, kde je modul s názvom svetlo1?
Tiež by si ten script mohol trochu ošetriť - jeho vstupy cez mysqli_real_escape_string();

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 20:46
od Kony
potřebuji přepsat hodnotu...

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 20:52
od KamilV
martinius96 píše:
22 lis 2020, 19:57
Tiež by si ten script mohol trochu ošetriť - jeho vstupy cez mysqli_real_escape_string();
Ne, číselný typ naprosto stačí přetypovat na int tak, jak to dělá. I kdyby tam někdo podstrčil sql injection, přetypováním se z toho stane 0.

V tomto konkrétním případě se nikdo se sql injection crcat nebude, protože na tom "serveru" je tolik děr, že mu tam kdokoliv vlítne do 5 min i bez injection :cry:

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 21:30
od Kony
ale ja ten server mam hlidany na IP adresu, teda myslim :))
takze nikdo mi tam nic nezapise

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 21:34
od martinius96

Kód: Vybrat vše

<?php

$server = "localhost";

$user = "kony";

$pass = "Kheslo";

$db = "Domacnost";

$con = mysqli_connect($server, $user, $pass, $db); //připojení k MySQL
if (mysqli_connect_errno($con))
{
    echo "Failed to connect to DataBase: " . mysqli_connect_error();
}

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
  $hodnota = mysqli_real_escape_string($con, $_GET['stav1']);
  $hodnota = trim( $hodnota );
 if (is_numeric($hodnota)){
  mysqli_query($con,"UPDATE `arduino_data ` SET `hodnota`='".$hodnota."' WHERE `modul`='svetlo1'") or die(mysqli_error($con));
  //header('Location: svetla.php');     //NEPOTREBUJES PRESMEROVAT ESP NA PODSTRANKU...
  echo "OK";  
 }else{
 echo "Problem s datovym typom vstupu";
 }   
}else{
  echo "Nepodporovana metoda (POST, DELETE, PUT, PATCH...)";
}

?>
Takže request vyzerá následovne:
  • domena.cz/tentosubor.php?stav1=1
  • domena.cz/tentosubor.php?stav1=0
Príklad SQL tabuľky (pred requestom domena.cz/tentosubor.php?stav1=1):
hodnota modul (stĺpce)
0 svetlo1
1 svetlo2
0 svetlo3
1 svetlo4

Po requeste (prepis hodnoty v stĺpci hodnota, kde v riadku je modul svetlo1:
hodnota modul (stĺpce)
1 svetlo1
1 svetlo2
0 svetlo3
1 svetlo4

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 22:03
od Kony
takm i to pise

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''arduino_data ' SET 'hodnota'='0' WHERE 'modul'='svetlo1'' at line 1

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 22:06
od Kony
mam nyni v php :

Kód: Vybrat vše

<?php

$server = "localhost";

$user = "kony";

$pass = "xxxxx";

$db = "Domacnost";

$con = mysqli_connect($server, $user, $pass, $db); //připojení k MySQL
if (mysqli_connect_errno($con))
{
    echo "Failed to connect to DataBase: " . mysqli_connect_error();
}

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
  $hodnota = mysqli_real_escape_string($con, $_GET['stav1']);
  $hodnota = trim( $hodnota );
 if (is_numeric($hodnota)){
  mysqli_query($con,"UPDATE 'arduino_data ' SET 'hodnota'='".$hodnota."' WHERE 'modul'='svetlo1'") or die(mysqli_error($con));
  //header('Location: svetla.php');     //NEPOTREBUJES PRESMEROVAT ESP NA PODSTRANKU...
  echo "OK";
 }else{
 echo "Problem s datovym typom vstupu";
 }
}else{
  echo "Nepodporovana metoda (POST, DELETE, PUT, PATCH...)";
}

?>

a jakmile zadam

Kód: Vybrat vše

http://xxx.cz/ovladani_svetlo1.php?hodnota=1
tak nic se nestane

ted jsem si vsiml ze mas jinaci odkaz a to

Kód: Vybrat vše

http://xxx.cz/ovladani_svetlo1.php?stav=1
ale je to to stejny


www stranka pise "Problem s datovym typom vstupu"

Re: Zapis hodnoty do DB

Napsal: 22 lis 2020, 22:56
od KamilV
Kony píše:
22 lis 2020, 21:30
ale ja ten server mam hlidany na IP adresu, teda myslim :))
takze nikdo mi tam nic nezapise
Myslíš si to bohužel špatně, viz můj předešlý příspěvek o uchovávání hesel druhých lidí v plaintext...
Kdybys chtěl podrobnější analýzu, pošli prosím SZ.

V tuto chvíli Ti do DB zapíše kdokoliv cokoliv, třeba udělá dump databáze, celou Ti ji smaže... Takto bych to nenechával.