Předmět Autor Datum
Teda asi tuším, co chceš, ale popisu to moc neodpovídá. Chceš ".55" na "0.55"?
Wikan 11.12.2020 19:15
Wikan
Myslím že chce "5.55" na "05.55".
host 11.12.2020 19:44
host
Používat číslo jako řetězec, zvláštní. Nicméně stačí zjistit (if) délku řetězce (strlen) a když bud…
host 11.12.2020 19:43
host
Mám takový PHP skript který spouštím ESP8266 který měří teplotu a posílá ji na server <?php $userna…
Víťa 11.12.2020 20:14
Víťa
Jedno z mnohých řešení: $radek si před echo rozlož pomocí funkce explode, uprav první údaj dle potře…
hynajs 12.12.2020 10:09
hynajs
$username = $_GET['username']; echo $username; Prečítaj si niečo o útoku XSS a funkcii htmlspecia…
haseimpfeffer 20.12.2020 21:01
haseimpfeffer
https://www.php.net/manual/en/function.sprintf.php
pme 11.12.2020 19:59
pme
Já když to upravím takto ten řádek vyznačený v příloze tak se to nevykoná kde je chyba? díky
Víťa 22.12.2020 13:06
Víťa
Protože ty problémy tam máš dva. Jeden je chybějící nula, druhý ten, že ti to "krade" minus, které p…
Wikan 22.12.2020 13:24
Wikan
V podmínce if musí být dvě rovnítka. if (strlen($tep) == 3)
host 22.12.2020 15:00
host
To je sice pravda, ale jeho problém to nevyřeší.
Wikan 22.12.2020 15:28
Wikan
Jen jsem odpovídal, kde je v označeném řádku chyba. Nezkoumal jsem celý kód, je mi jasné, že tam bu…
host 22.12.2020 16:30
host
if (strlen($tep)== 3) {$tep="0".$tep;} tak to má být a ne takto if (strlen($tep)== 3) {$tep="0".$tep…
Víťa 23.12.2020 11:44
Víťa
Daj sem výpis iba toho, čo Ti z toho leze: <?php $username = $_GET['username']; echo $username; be…
pme 22.12.2020 18:29
pme
Je lepšie ladiť pomocou var_dump($username); či print_r($username); čo vypíše neskonvertovaný ob…
haseimpfeffer 22.12.2020 22:04
haseimpfeffer
Vracím se tomu Tento řetězec mi posílá ESP8266 na sever 22.623.46-59 což je 22.62 teplota 3.46 getVc…
Víťa 25.12.2020 18:18
Víťa
Ach jo. Ale abys tu napsal, jak vypadají surová data při té chybné variantě, to ne.
Wikan 25.12.2020 18:24
Wikan
Nemám nebo nic mě nenapadá čím to teplotní čidlo podchladit :-/ dát vodu do mrazáku a potom ho tam p…
Víťa 25.12.2020 18:27
Víťa
To už nechám na tobě.
Wikan 25.12.2020 18:28
Wikan
Hlasuju pro tekutý dusík.
host 25.12.2020 18:41
host
To chce čekat déle 11.00C, 3.46Volt, -57dB 18:51:03 25/12/20 dál jsem to do ledničky/mrazáku
Víťa 25.12.2020 18:58
Víťa
surová data 5.813.46-58 výpis 05.813C, .46-Volt, 58dB 19:27:03 25/12/20 <?php $username = $_GET['us…
Víťa 25.12.2020 19:30
Víťa
Tak to bych asi řešil spíš regulárním výrazem, než parsováním po pevných blocích: (\d+\.\d{2})(\d+\…
Wikan 25.12.2020 19:39
Wikan
To je pro mně "španělská vesnice ":-) já dělám někde chybu v nastavování pozic a délce jednotlivých…
Víťa 25.12.2020 19:48
Víťa
Tak to je snad vidět na první pohled, že ty údaje nemají fixní délku. A jak to upravit? No můžeš tře…
Wikan 25.12.2020 19:50
Wikan
Ale jak doplním o tu "0" na základě zjištění 9.00 tak to přece je stejný počet míst na rozdělení do…
Víťa 25.12.2020 19:57
Víťa
Jenže to bys tu nulu musel přidat, ještě než to rozřežeš na části. Jakmile ji přidáš k už (špatně) r…
Wikan 25.12.2020 20:05
Wikan
Tak co mi radíš ?:-/ díky
Víťa 25.12.2020 20:12
Víťa
Použít regulární výraz.
Wikan 25.12.2020 20:13
Wikan
Jak se to dělá ?:-[ díky
Víťa 25.12.2020 20:17
Víťa
preg_match('/(\d+\.\d{2})(\d+\.\d{2})(-\d+)/', $sez, $matches); $tep=$matches[1]; $volt=$matches[2];…
Wikan 25.12.2020 20:29
Wikan
Jsi jednička kdyby tady byla ekomotiva ruka s palcem na horu tak ti to sem dám , nemusí tam ani podm…
Víťa 27.12.2020 19:39
Víťa
Tento řetězec mi posílá ESP8266 na sever 22.623.46-59 což je 22.62 teplota 3.46 getVcc -59 WiFi.RSSI…
pme 26.12.2020 13:54
pme
Chcel som napísať niečo v podobnom duchu. Akurát s tým rozdielom, aby tú úpravu toho čísla urobil ti… poslední
msx. 27.12.2020 20:00
msx.

Používat číslo jako řetězec, zvláštní.

Nicméně stačí zjistit (if) délku řetězce (strlen) a když bude menší než 5 znaků, přidat na začátek nulu ($x = "0".$x)

Když už se vrtáš v PHP, mohl ses alespoň pokusit něco vytvořit. Na internetu je spousta ukázek, příkladů a i manuál....

Mám takový PHP skript který spouštím ESP8266 který měří teplotu a posílá ji na server

<?php
    $username = $_GET['username'];  
    echo $username;  
    
  $sez = $username;
  $tep=substr($sez,0,5);
  $volt=substr($sez,5,4);
  $db=substr($sez,9,4); 
  $dev=$tep."C, ".$volt."Volt, ".$db."dB ";
  $datum = date("H:i:s  d/m/y");    
  $relace = fopen("./IP/zap.txt", "a+");      // Otevřeme soubor
  fwrite($relace,$dev ); 
  fwrite($relace,$datum);
  fwrite($relace,"\r\n");                 // Zapíšeme text do souboru
  fclose($relace);
  
?>

a vypisuji to tímto skriptem

<?php
header("Content-Type: text/html; charset=utf-8");
$i=0;
 $soubor = "./IP/zap.txt";
if (!File_Exists ($soubor)) {
    exit("<P>Nelze najit soubor $soubor.<BR>");
}
$klika = fopen($soubor, "a+");
if ($klika == false) {
    exit("<P>Nelze otevrit soubor $soubor ke cteni.<BR>");
}
while (!feof ($klika)) {
    $radek = fgets($klika, 4096);
    $i=$i+1;
    echo "$radek<BR>";
}
echo "Pocet zaznamu ".$i."   velikost souboru :".round(filesize($soubor)/1000)." KB";
fclose ($klika); 

?>

a výsledek je toto

43.56C, 2.59Volt, -54dB 21:59:26 30/11/20
43.56C, 2.58Volt, -54dB 21:59:56 30/11/20
43.50C, 2.58Volt, -55dB 22:00:26 30/11/20
11.12C, 3.45Volt, -78dB 15:58:56 03/12/20
1.443C, .43-Volt, 79dB 16:09:51 03/12/20   *******************
1.373C, .43-Volt, 77dB 16:10:19 03/12/20  *******************
1.063C, .15-Volt, 73dB 16:54:52 03/12/20   *******************
1.063C, .32-Volt, 56dB 16:57:27 03/12/20   ***********************
17.25C, 3.33Volt, -54dB 16:57:57 03/12/20
18.44C, 3.34Volt, -54dB 16:58:27 03/12/20
19.31C, 3.29Volt, -54dB 16:58:57 03/12/20
38.81C, 3.34Volt, -52dB 17:03:54 03/12/20
42.13C, 3.38Volt, -53dB 17:12:24 03/12/20
42.13C, 3.37Volt, -53dB 17:12:54 03/12/20
42.06C, 3.36Volt, -53dB 17:13:24 03/12/20
42.06C, 3.36Volt, -53dB 17:13:54 03/12/20

na řádcích z hvězdičkami je to spatně tam má být za desetinou tečkou dvě místa , přišel jsem na tuto chybu když jsem to zkoušel na mraze :-/
díky

surová data 5.813.46-58
výpis 05.813C, .46-Volt, 58dB 19:27:03 25/12/20
<?php
$username = $_GET['username']; //make sure you filter these values, before showing them
echo $username; //$username == "john"

$sez = $username;
$tep=substr($sez,0,5);
if (strlen($tep)== 5) {$tep="0".$tep;}
$volt=substr($sez,5,4);
$db=substr($sez,9,4);
$dev=$tep."C, ".$volt."Volt, ".$db."dB ";
$datum = date("H:i:s d/m/y");
//if (time() - filemtime("./IP/zap.txt") > 1200){
$relace = fopen("./IP/zap.txt", "a+"); // Otevřeme soubor
fwrite($relace,$dev );
//fwrite($relace," C ");
fwrite($relace,$datum);
fwrite($relace,"\r\n"); // Zapíšeme text do souboru
fclose($relace);

kde dělám chybu? díky

Tento řetězec mi posílá ESP8266 na sever
22.623.46-59
což je 22.62 teplota
3.46 getVcc
-59 WiFi.RSSI()

na ktorej pozícii je teplota, napätie...vieš len Ty...

Uprav si zdrojový kód v ESP8266 tak, aby tie data posielal oddelené napr. čiarkou, (alebo iným znakom):
22.62, 3.46, -59

keď následne na serveri "vyseparuješ" všetky reťazce, oddelené čiarkou, vyhneš sa všetkým nepríjemnostiam a budeš dostávať vždy takú hodnotu, ktorú potrebuješ pre konkrétny údaj...

Zpět do poradny Odpovědět na původní otázku Nahoru