[PHP]Úprava řetězce
Zdravím
Potřeboval bych upravit řetězec například "25.55" a když chybí "5.55" číslice před desetinou čárkou tak to doplnit "0" , já vím že je to pro někoho hračka ale já bych nad tím strávil mládí díky
Zdravím
Potřeboval bych upravit řetězec například "25.55" a když chybí "5.55" číslice před desetinou čárkou tak to doplnit "0" , já vím že je to pro někoho hračka ale já bych nad tím strávil mládí díky
Zpět do poradny Odpovědět na původní otázku Nahoru
Teda asi tuším, co chceš, ale popisu to moc neodpovídá.
Chceš ".55" na "0.55"?
Myslím že chce "5.55" na "05.55".
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
a vypisuji to tímto skriptem
a výsledek je toto
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
Jedno z mnohých řešení:
$radek si před echo rozlož pomocí funkce explode, uprav první údaj dle potřeby (viz host), dej pole zpět dohromady pomocí funkce implode a teprve vypiš.
Prečítaj si niečo o útoku XSS a funkcii htmlspecialchars.
Ďalej treba ideálne vytvárať $_GET['username'] v takom formáte, aby sa hneď dalo rozsekať.
https://www.php.net/manual/en/function.sprintf.php
Já když to upravím takto ten řádek vyznačený v příloze tak se to nevykoná kde je chyba? díky
Protože ty problémy tam máš dva. Jeden je chybějící nula, druhý ten, že ti to "krade" minus, které patří k dB.
Jak vypadají zdrojová data? Třeba by se dal použít lepší způsob parsování.
V podmínce if musí být dvě rovnítka.
To je sice pravda, ale jeho problém to nevyřeší.
Jen jsem odpovídal, kde je v označeném řádku chyba.
Nezkoumal jsem celý kód, je mi jasné, že tam bude problémů víc. Ale nemám na to takovou trpělivost a nervy jako ty.
if (strlen($tep)== 3) {$tep="0".$tep;}
tak to má být
a ne takto
if (strlen($tep)== 3) {$tep="0".$tep};
musel jsem si udělat pomocný skript abych věděl kde to hází chybu
Parse error: syntax error, unexpected '}'
díky
Daj sem výpis iba toho, čo Ti z toho leze:
<?php
$username = $_GET['username'];
echo $username;
bez Tvojich úprav !!!
Je lepšie ladiť pomocou
či
čo vypíše neskonvertovaný obsah a k tomu aj dátový typ. Použitie echo automaticky konvertuje obsah na reťazec.
Vracím se tomu
Tento řetězec mi posílá ESP8266 na sever
22.623.46-59
což je 22.62 teplota
3.46 getVcc
-59 WiFi.RSSI()
to jsem měl seřízeno dobře
ale jakmile spadne teplota pod 10 stupňů tak mi to vypisuje blbosti
například 9.56C, .46-Volt, 52dB
jak upravit aby to fungovalo dobře? díky
Ach jo. Ale abys tu napsal, jak vypadají surová data při té chybné variantě, to ne.
Nemám nebo nic mě nenapadá čím to teplotní čidlo podchladit dát vodu do mrazáku a potom ho tam ponořit ?
To už nechám na tobě.
Hlasuju pro tekutý dusík.
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
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("Hs 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
Tak to bych asi řešil spíš regulárním výrazem, než parsováním po pevných blocích:
To je pro mně "španělská vesnice " já dělám někde chybu v nastavování pozic a délce jednotlivých podřetězců jak to upravit? díky
Tak to je snad vidět na první pohled, že ty údaje nemají fixní délku. A jak to upravit? No můžeš třeba hledat pozice desetinných teček a podle toho se rozhodovat. Ale to mi ten regex přijde jako jednodušší řešení.
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 podřetězců nebo ne ? díky
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ě) rozřezané části, tak je ti to na nic.
Tak co mi radíš ? díky
Použít regulární výraz.
Jak se to dělá ? díky
Jsi jednička kdyby tady byla ekomotiva ruka s palcem na horu tak ti to sem dám , nemusí tam ani podmínka s přidáním nulou.Pro změnu se vyskytl problém ukazováním minusovim hodnotou ale to bude asi problém s knihovnou pro ds18b20 diky
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...
Chcel som napísať niečo v podobnom duchu. Akurát s tým rozdielom, aby tú úpravu toho čísla urobil tiež už v 8266.