Autor | Zpráva | ||
---|---|---|---|
Sidbin Profil |
#1 · Zasláno: 3. 3. 2015, 18:45:10
Ahoj,
řeším problém s formulářem. Ve formuláři je: -textové pole -výběrové pole -zatrhávací políčko -heslo Tlačítko odeslat Rád bych tyto výstupy po ověření platného hesla uložil do TXT (pouze jeden jediný řádek i po opakovaném stisknutí tlačítka odeslat). Hotnoty bych rád odělil čárkou a zatrhávací tlačítko stačí stav 1 a 0. Jde o možnost řídit termostat přes web, zařízení si pak z webu načte toto nastavení v TXT. PHP moc nerozumím, jen základy. Děkuji. |
||
Keeehi Profil |
<?php if(isset($_POST["pole1"]) and isset($_POST["pole2"]) and isset($_POST["password"])) { if($_POST["password"] == "tajné heslo") { $data = $_POST["pole1"] . "," . $_POST["pole2"] . ","; $data .= isset($_POST["pole3"]) ? "1," : "0,"; file_put_contents("soubor.txt", $data); echo "hodnoty uloženy"; } else { echo "špatné heslo"; } } ?> <form method="post"> <input type="text" name="pole1"> <select name="pole2"> <option value="moznost1">Možnost 1</option> <option value="moznost2">Možnost 2</option> </select> <input type="chceckbox" name="pole3"> Heslo: <input type="password" name="password"> <input type="submit" value="uložit"> </form> |
||
Sidbin Profil |
#3 · Zasláno: 3. 3. 2015, 20:12:02
Děkuji, takovou rychlost jsem nečekal. :-)
Zkusil jsem to nanečisto a funguje to hezky. Už tam hodím jen svou připravenou css šablonu. https://www.dropbox.com/s/dg1kzzc5stg6gph/termostat2.png Děkuji. |
||
Tomáš123 Profil |
#4 · Zasláno: 3. 3. 2015, 21:20:12
Keeehi:
Čo je sledované piatym riadkom? Premenná $date sa nikde neukladá, ani skript s ňou nepracuje. Je to nejaké zamedzenie opakovania záznamu?
Sidbin: Nemyslím, že kód hore nejako overuje duplicity v súbore. Napadá mi niekoľko riešení: 1.) Overovať pred uložením, či už rovnaký riadok náhodou neexistuje (neviem, či by v tvojej aplikácii takéto chovanie vadilo) 2.) Môžeš ukladať do premennej $_SESSION aktuálny čas a porovnávať ho s časom ďalších prichádzajúcich údajov (záleží na tebe aký dlhý interval zvolíš)
Druhé riešenie mi príde múdrejšie. Urobil by som to nejako takto: <?php if(!empty($_SESSION['casovy-rozdiel']) OR time() - $_SESSION['casovy-rozdiel'] > x) { // x symbolizuje časový interval, ktorý je prípustný medzi dvoma odoslaniami //Keeehiho kód } else { echo "Nejaké chybové hlásenie"; } ?> <!-- Formulár --> |
||
lionel messi Profil |
#5 · Zasláno: 3. 3. 2015, 21:33:58
Tomáš123:
> Keeehi: > Čo je sledované piatym riadkom? Premenná $date sa nikde neukladá, ani skript s ňou nepracuje. Je to nejaké zamedzenie opakovania záznamu?
Výborný postreh. Dovolím si odpovedať namiesto kolegu. Piaty riadok má na starosti kontrolovať, či bol zaškrtnutý checkbox a podľa toho pridať na koniec reťazca $data zodpovedajúcu hodnotu. Keeehi však pravdepodobne (na 99%) zabudol uviesť bodku na vyznačenom mieste a tak si premennú $data prepísal namiesto toho, aby docielil pripojenie reťazca. $data = $_POST["pole1"] . "," . $_POST["pole2"] . ","; $data .= isset($_POST["pole3"]) ? "1," : "0,"; |
||
Keeehi Profil |
#6 · Zasláno: 3. 3. 2015, 21:34:08
Tomáš123:
To byl samozřejmě překlep. Řešení duplicit je velmi jednoduché, při každém odeslání se soubor přepíše. A jeden řádek nemůže být nikdy duplicitní. A dokonce je to správné řešení viz „(pouze jeden jediný řádek i po opakovaném stisknutí tlačítka odeslat).“ |
||
Sidbin Profil |
#7 · Zasláno: 4. 3. 2015, 14:41:53
Zatím jsem zkoušel teploty, toho checkbox jsem si všiml až pozdějc.
Použil jsem raděj vstup "number", abych se vyhnul nějakým chybám a extrémním hodnotám. <input type="number" min="10" step="0.5" max="25" name="termostat"> Tomáš123: Duplicity se nemusí řešit, tenhle TXT se uloží s nastavením na webu, zařízení si zkontroluje občas toto nastavení a případně provede akci ( vyřadí standarní termostat a začne řídit vytápění dle zvoleného čidla a teploty). Jde tedy jen o jeden řádek s nastavením. Zkusil jsem i načíst hodnotu toho nastavení z TXT zpět do formuláře a u teploty to už funguje. $soubor = 'we.txt'; if (!File_Exists ($soubor)) { exit("<P>Nelze najít soubor $soubor.\n\n"); } $klika = fopen($soubor, 'r'); if ($klika == false) { exit("<P>Nelze otevřít soubor $soubor ke čtení.\n\n"); } $data = fread ($klika, filesize ($soubor)); fclose ($klika); $radky = explode ( "\n", $data ); while (list(, $radek) = each ($radky)) { list($teplota, $cidlo, $termostat) = explode( ',', $radek); echo "teplota: $teplota cidlo: $cidlo termosta: $termostat <BR>\n"; } |
||
Časová prodleva: 10 let
|
0