| | |
| Stránka: 1 z 1
| [ Príspevkov: 19 ] | |
Autor | Správa |
---|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal maťo*: 16.06.2012 22:02 | |
|
Nazdar, rád by som vedel či sa dá pomocou PHP vytvoriť jednoduchý výpočet, ktorý by vkladané hodnoty ihneď spočítaval a výsledok by ukazoval napriklad pod formulárom. Niečo na spôsob excelu. Všetko aby sa riešilo v momente, bez potreby nejakeho submit buttonu ďakujem
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 16.06.2012 22:17 | |
|
Takže ty vkladáš do nejakého formulára číselné hodnoty a potrebuješ ich hneď spočítať?
PHP pracuje na serveri, teda bez odoslania údajov to s obyčajným PHP nespravíš.
Riešením je javascript.
_________________ always is always wrong |
|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal autor témy maťo*: 16.06.2012 23:09 | |
|
Ďakujem za reakciu, presne to som chcel vedieť. Javascript riesenie tohto problemu je narocne? Nevedel by mi niekto hodit odkaz na nejaku takuto modelovu situaciu? Ď.
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 17.06.2012 10:12 | |
|
Či je to náročné? Javascript je programovací jazyk, tak ako aj PHP. Ak nieje pre teba problém naučiť sa programovať v JS, tak to ťažké nieje.
Mohol by si uviesť nejaký konkrétny spôsob využitia toho spočítania? Čo konkrétne budeš spočítavať? Živá ukážka by bola?
Celkom jednoduchý príklad je napríklad toto:
Kód: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript">
function calculateTotal(myForm) { var item1 = Number(myForm.item1.value); var item2 = Number(myForm.item2.value); var order_total;
if (myForm.item1.checked==true && myForm.item2.checked==true) { order_total = item1 + item2; } else if (myForm.item1.checked==true && myForm.item2.checked==false) { order_total = item1; } else if (myForm.item1.checked==false && myForm.item2.checked==true) { order_total = item2; } else if (myForm.item1.checked==false && myForm.item2.checked==false) { order_total = 0.00; }
myForm.total.value = order_total.toFixed(2);} </script>
</head> <body> <form> Produkt 1<input type="checkbox" name="item1" value="15.00" onClick="calculateTotal(this.form)"> <br />Produkt 2<input type="checkbox" name="item2" value="55.00" onClick="calculateTotal(this.form)"> <br />Celková suma: <input type="text" name="total" value="0.00"> </form> </body> </html>
Je to .html súbor, stačí toto skopírovať do (nového) súboru a cez web spustiť. Ukážku máš tu - z toho je hneď jasné, ako to funguje.
Keďže si nenapísal ku spôsobu použitia nič, viac ti pomôcť nedokážem, skús google.
_________________ always is always wrong |
|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal autor témy maťo*: 17.06.2012 12:30 | |
|
Ďakujem za odkaz. JS je fajn ale radsej by som to skusil cez PHP. Mohol by som to riesit tak, ze v hornej casti stranky by bol formular a submit button ktory by zadane hodnoty v nejakom externom php subore prepocital podla toho ako by som chcel a nasledne pod formularom, v samostatnom dive, vyhodil vysledok? Pre ilustraciu mojho myslienkoveho pochodu:
Kód: <div id="formular"> <form name="vypocet" action="data.php" method="post"> Hodnota 1: <input type="text" name="hodnota1"> <br> Hodnota 2: <input type="text" name="hodnota2"> <br> <input type="submit" value="Spočítať"> </form> </div> <div id="vysledok"> A sem by som chcel zo suboru data.php, ktory spracuje formular natiahnut konkretnu premennu s vysledkom. Len nejak neviem ako. </div>
Ďakujem za každú radu.
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 17.06.2012 13:00 | |
|
Pokiaľ je súbor, v ktorom máš tento div s formulárom, PHP (má príponu .php) riešil by som to priamo v ňom (časť action="data.php" vymaž, alebo nastav aktuálny php súbor).
Po odoslaní údajov z formulára (metódou post) môžeš ku jednotlivým hodnotám pristupovať cez $_POST['hodnota_name'] čiže napríklad $_POST['hodnota1'].
Tá tvoja časť kódu aj so spracovaním by mohla vyzerať asi takto:
Kód: <div id="formular"> <form name="vypocet" method="post"> Hodnota 1: <input type="text" <?php if(isset($_POST['hodnota1'])){ echo "value=\"".$_POST['hodnota1']."\""; } ?> name="hodnota1"> <br> Hodnota 2: <input type="text" <?php if(isset($_POST['hodnota2'])){ echo "value=\"".$_POST['hodnota2']."\""; } ?> name="hodnota2"> <br> <input type="submit" value="Spočítať"> </form> </div> <?php // jednoduchá podmienka, ktorou overíme, či sú obidve hodnoty zadané (načo rátať, kým nieje čo, však?) if(isset($_POST['hodnota1']) && isset($_POST['hodnota2'])){ echo "<div id=\"vysledok\">"; // nastavíme premenné $hodnota1 a $hodnota2 pre jednoduchšiu prácu $hodnota1 = $_POST['hodnota1']; // zmeníme čiarku na bodku $hodnota1 = str_replace(",", ".", $hodnota1); $hodnota2 = $_POST['hodnota2']; // zmeníme čiarku na bodku $hodnota2 = str_replace(",", ".", $hodnota2); // overíme, či sú obidve hodnoty čísla if(is_numeric($hodnota1) && is_numeric($hodnota2)){ echo "Obidve hodnoty sú v správnom tvare"; $sucet = $hodnota1 + $hodnota2; echo "<br />a ich súčet je ".$sucet; } else { // else vetva podmienky, v prípade že jedna alebo druhá zadaná hodnota nieje číslo echo "Hodnoty niesú v správnom tvare"; } echo "</div>"; } ?>
Sústava jednoduchých a účinných podmienok + to najjednoduchšie ošetrenie vstupov, aké ma v tejto chvíli napadlo
Je to len modelový príklad a treba ho upraviť podľa potrieb, čo nieje nutné echovať, buď komentovať, alebo vymazať. Prípadne niečo pridať...
_________________ always is always wrong |
|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal autor témy maťo*: 17.06.2012 13:28 | |
|
Ďakujem za komplexné vysvetlenie. To riesenie by bolo fajn, ale je vhodne aj v pripade ze to spracovanie formulara je rozsiahle (to co by bolo predtym v externom php subore)? Nebude to potom neprehladne? Neexistuje spôsob aby sa to cele spracovalo v externom subore napriklad data.php a potom z neho by som potrebne udaje vytiahol a dal do toho konkretneho divu pod formularom? To by ma asi potesilo viac.
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 17.06.2012 13:50 | |
|
V akom zmysle rozsiahle?
Všetko záleží na tebe, či to spravíš oddelene, alebo takto spolu - je to jedno.
Dá sa to, tým, že by si tú časť medzi tagmi <?php....?> (vrátane) presunul do toho súboru data.php (potom treba vrátiť action="data.php") a vymazať z formuláru to echo zadaných hodnôt.
Tu ale nastáva problém - po kliknutí na "spočítať" budeš presmerovaný na súbor data.php a hodnoty budú odovzdané. Už však ale budeš v data.php, formulár a ani nič z obsahu pôvodného súboru nebude viditeľné (aj to sa dá, no je to až príliš komplikované) - ak je to tvoj zámer, do toho.
V opačnom prípade je lepšie riešenie urobiť to pomocou funkcie. Teda v jednom (zdrojovom) PHP súbore by si dáta z formuláru spracoval, no údaje by boli odovzdané funkcií a tá by do zdrojového súboru odovzdala spätne výsledok.
Jediné, čo je na to treba, je mať tú funkciu (v súbore data.php) definovanú a súbor data.php includovať v zdrojovom kóde.
Uvediem zas príklad:
Zdrojový súbor (na názve v tomto prípade až tak nezáleží, *.php)
Kód: <?php require("data.php"); ?> <div id="formular"> <form name="vypocet" method="post"> Hodnota 1: <input type="text" name="hodnota1"> <br> Hodnota 2: <input type="text" name="hodnota2"> <br> <input type="submit" value="Spočítať"> </form> </div> <div id="vysledok"> <?php // jednoduchá podmienka, ktorou overíme, či sú obidve hodnoty zadané (načo rátať, kým nieje čo, však?) if(isset($_POST['hodnota1']) && isset($_POST['hodnota2'])){ // nastavíme premenné $hodnota1 a $hodnota2 pre jednoduchšiu prácu $hodnota1 = $_POST['hodnota1']; $hodnota2 = $_POST['hodnota2']; echo sucet($hodnota1, $hodnota2); } ?> </div> Dôležité je to includovanie súboru data.php hneď na začiatku. A teraz súbor data.php, ktorý údaje spracuje a vráti výsledok: Kód: <?php function sucet($hodnota1, $hodnota2){ // v tejto funkcií vykonáme súčet $error = "Zadané hodnoty niesú v správnom tvare"; $hodnota1 = str_replace(",", ".", $hodnota1); $hodnota2 = str_replace(",", ".", $hodnota2); if(is_numeric($hodnota1) && is_numeric($hodnota2)){ $sucet = $hodnota1 + $hodnota2; return "Súčet hodnôt ".$hodnota1." a ".$hodnota2." je ".$sucet; } else { return $error; } } ?>
Možností máš niekoľko, no bolo by naozaj fajn, keby si si buď o problematike niečo naštudoval a spravil to sám, alebo si to nechal spraviť niekomu, kto vie, čo a ako funguje.
Ak sa vyberieš cestou samoštúdia, nieje problém tu vysvetliť niečo, čo ti po pokusoch nebude fungovať, no robiť tu niečo za teba nieje cieľom tohto fóra.
_________________ always is always wrong |
|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal autor témy maťo*: 17.06.2012 14:59 | |
|
Ďakujem za tvoj čas. Ukazal si mi ktorym smerom sa mam orientovať a idem sa do toho pustiť
|
|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal autor témy maťo*: 19.06.2012 19:24 | |
|
Ešte by ma zaujímala jedna vec. Za predpokladu, že zvolím toto riešenie tak po kliknutí na submit button sa sice požadovane hodnoty spočítaju a aj zobrazia presne tam kde chcem ale to čo bolo predtým v jednotlivych bunkach formulara sa zmaže a on ostane prazdny s vysledkom pod nim. Bol by som rad keby zadane udaje v nom ostali, aj po ich spracovani. Ako toto riesit? Cookies ? Staci ma len zlahka nasmerovat a skusim si poradit sam. Vopred dakujem.
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 19.06.2012 19:37 | |
|
Stačí ti veľmi jednoducho doplniť do <input>ov formulára argument value (hodnota)
Overíš, či je nastavená (isset) premenná $_POST['hodnota1'], ak áno, echuješ ju, ak nie, parameter value ostane prázdny a čaká na vyplnenie, pre hodnota2 obdobne, akurát pracuješ s $_POST['hodnota2']
Skúšaj, ak nebudeš vedieť, pomôžem.
hint: toto spätné vyvolanie zadaných hodnôt je už vyriešené v predchádzajúcom príklade
_________________ always is always wrong |
|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal autor témy maťo*: 22.06.2012 18:48 | |
|
Zaujimala by ma ešte jedna vec. Keby som chcel výslednú hodnotu výpočtu zaslať emailom cez klasickú funkciu mail() tak by som musel použiť premennú z tej funkcie ktorá výpočet spracovávala. To mi ale nejde, vypisuje chybu o neexistujúcej premennej. Z toho som si vyvodil, že nemôžem vo funkcii použiť premenné z inych funkcii. Ako to mám riešiť ?
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 22.06.2012 19:00 | |
|
Môžeš sem zverejniť časť kódu, podľa ktorej by sa dalo zistiť v čom je problém (výstupné premenné výpočtu a funkcia mail)?
(osobné udaje kľudne vymaž)
_________________ always is always wrong |
|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal autor témy maťo*: 23.06.2012 13:38 | |
|
Riešil som to takto (ukazem na modelovej situacii).
Subor index.php v ktorom sa nachadza vstupny formular a 2 buttony, jeden na vypocet hodnoty a druhy na zaslanie vysledku mailom:
Kód: <html> <head> <?php require("data.php"); ?> </head> <body> <div id="formular"> <form name="vypocet" method="post" action=""> Hodnota 1: <input type="text" name="hodnota1" <?php if(isset($_POST['hodnota1'])) { echo "value=\"".$_POST['hodnota1']."\""; } ?>> <br> Hodnota 2: <input type="text" name="hodnota2" <?php if(isset($_POST['hodnota2'])) { echo "value=\"".$_POST['hodnota2']."\""; } ?>> > <br> <input type="submit" name="submit" value="Spočítať"> </form> </div>
<div id="vysledok"> <?php if(isset($_POST['submit])) { $hodnota1 = $_POST['hodnota1']; $hodnota2 = $_POST['hodnota2']; echo sucet($hodnota1, $hodnota2); } ?> </div>
<div id="odoslat_mailom"> <form name="odoslat" method="post" action=""> <input type="submit_mail" name="submit" value="Zaslať výsledok mailom"> </form> <?php if (isset($_POST['submit_mail'])) { odoslat_mail (); } ?> </div> </body> </html> V externom súbore data.php mam vloženu funkciu na spracovanie údajov z formulara a funkciu na zaslanie mailu. Kód: <?php function sucet ($hodnota1, $hodnota2) { if(is_numeric($hodnota1) && is_numeric($hodnota2)) { $vysledok = $hodnota1 + $hodnota2; echo "Súčet hodnôt ".$hodnota1." a ".$hodnota2." je ".$vysledok; } }
function odoslat_mail () { $to = "adresa@domena.sk"; $subject = "Vysledok vypoctu"; $message = "Ahoj, súčet hodnôt ".$hodnota1." a ".$hodnota2." je ".$vysledok"; mail ($to, $subject, $message); } ?> No a celý problém je v tom, že odoslanie mailu je nefunkcne pretoze mi vypise chybu o neexistujucich premennych, ktore som z prvej funkcie vlozil do druhej funkcie. Kód: $message = "Ahoj, súčet hodnôt ".$hodnota1." a ".$hodnota2." je ".$vysledok";
Kde som spravil chybu? Dá sa pracovať s premennymi v ramci viacerych funkcii? Ďakujem
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 23.06.2012 13:54 | |
|
maťo* píše: Dá sa pracovať s premennymi v ramci viacerych funkcii? Neda. Prenasaj ich ako argument.
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 23.06.2012 14:00 | |
|
Dá sa, no musíš poslať argumenty funkcie v jej zátvorkách. Teda uprav index.php takto:
Kód: <div id="odoslat_mailom"> <form name="odoslat" method="post" action=""> <!-- Trochu som ti upravil input, type musi byt v tomto pripade "submit", v podmienke nizsie overujes argument name --> <input type="submit" name="submit_mail" value="Zaslať výsledok mailom"> </form> <?php if (isset($_POST['submit_mail'])) { odoslat_mail ($hodnota1, $hodnota2, $vysledok); // tu treba definovat vsetky premenne, ktore chces preniest do funkcie } ?> </div> ...a data.php Kód: function odoslat_mail ($hodnota1, $hodnota2, $vysledok) { // tak isto ako v index.php $to = "adresa@domena.sk"; // tuto adresu mas stale rovnaku? $subject = "Vysledok vypoctu"; $message = "Ahoj, súčet hodnôt ".$hodnota1." a ".$hodnota2." je ".$vysledok"; mail ($to, $subject, $message); }
// Ďuri rýchlejši
_________________ always is always wrong |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 Bydlisko: Bratislava |
Ďuri píše: Neda. Prenasaj ich ako argument.
samozrejme, ze sa to da, musia byt ale nastavene ako globalne...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 30.05.09 Prihlásený: 14.02.14 Príspevky: 106 Témy: 52 | Napísal autor témy maťo*: 26.06.2012 0:20 | |
|
Dalo by sa to riesit aj pouzitim session? Bolo by to "zdravé" riešenie?
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 30.06.2012 15:45 | |
|
To záleží od toho, či dokážeš potenciál uchovania údajov v session premennej aj využiť. Pre jednoduchý výpočet bez ďalšieho spracovania je to až prehnane zbytočné.
_________________ always is always wrong |
|
| Stránka: 1 z 1
| [ Príspevkov: 19 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| vypocet v JavaScript, VBScript, Ajax | 1 | 295 | 03.01.2013 0:59 kace | | vypocet v Krčma | 11 | 1005 | 02.11.2011 18:56 dixi | | vypocet mnohouholnika v Technológia .NET | 2 | 650 | 12.12.2012 10:08 walther | | Vypocet bedne v Zvuk | 1 | 1795 | 17.02.2009 9:57 KocuR | | vypocet ceny v JavaScript, VBScript, Ajax | 5 | 748 | 25.11.2008 14:47 walther | | výpočet odporu v Ostatné programy | 2 | 765 | 16.12.2011 20:55 smollko | | Výpočet PageRanku v Internetový marketing, SEO, reklama | 9 | 985 | 06.07.2010 7:31 vladopt | | Vypocet spotreby v Notebooky a netbooky | 1 | 794 | 20.02.2009 12:10 ac.milan | | vypocet casu v Vzdelanie, štúdium, škola | 10 | 3620 | 04.01.2009 0:58 Spirit | | Vypocet zabiti v PHP, ASP | 6 | 523 | 08.05.2012 20:31 gamelaster | | vypocet v bashi v Operačné systémy Unix a Linux | 1 | 356 | 01.12.2010 13:17 Ďuri | | EXCEL zlozity vypocet v Ostatné programy | 0 | 391 | 04.09.2016 13:28 mkojtal | | Program Pascal-vypocet rezistorov v Assembler, C, C++, Pascal, Java | 7 | 794 | 24.05.2012 23:31 nBXXL | | skript na vypočet nefunguje v JavaScript, VBScript, Ajax | 2 | 285 | 29.10.2011 12:16 Pablo Montero | | vypocet ceny za kilometre v PHP, ASP | 1 | 329 | 08.04.2014 13:40 BX | | Kalkulačka na výpočet zdroja v PC skrinky a zdroje | 18 | 10266 | 13.09.2013 23:10 fAk3 |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|