Zapis hodnoty do DB

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Zapis hodnoty do DB

Příspěvek od pavel1tu » 20 lis 2020, 06:02

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.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 22 lis 2020, 19:25

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

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Zapis hodnoty do DB

Příspěvek od martinius96 » 22 lis 2020, 19:57

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();

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 22 lis 2020, 20:46

potřebuji přepsat hodnotu...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Zapis hodnoty do DB

Příspěvek od KamilV » 22 lis 2020, 20:52

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:

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 22 lis 2020, 21:30

ale ja ten server mam hlidany na IP adresu, teda myslim :))
takze nikdo mi tam nic nezapise

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Zapis hodnoty do DB

Příspěvek od martinius96 » 22 lis 2020, 21:34

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

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 22 lis 2020, 22:03

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

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapis hodnoty do DB

Příspěvek od Kony » 22 lis 2020, 22:06

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"

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Zapis hodnoty do DB

Příspěvek od KamilV » 22 lis 2020, 22:56

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.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Google [Bot] a 18 hostů