Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 19 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok NapísalOffline : 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


Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok Napísal autor témyOffline : 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? Ď.


Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok Napísal autor témyOffline : 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.


Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok Napísal autor témyOffline : 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.


Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok Napísal autor témyOffline : 17.06.2012 14:59

Ďakujem za tvoj čas. Ukazal si mi ktorym smerom sa mam orientovať a idem sa do toho pustiť :)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok Napísal autor témyOffline : 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 ? :P Staci ma len zlahka nasmerovat a skusim si poradit sam. Vopred dakujem.


Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok Napísal autor témyOffline : 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ť ?


Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok Napísal autor témyOffline : 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


Offline

Čestný člen
Čestný člen
Výpočet

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 23.06.2012 13:54

maťo* píše:
Dá sa pracovať s premennymi v ramci viacerych funkcii?
Neda. Prenasaj ich ako argument.


Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 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
Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 23.06.2012 14:05

Ď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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.05.09
Prihlásený: 14.02.14
Príspevky: 106
Témy: 52
Príspevok Napísal autor témyOffline : 26.06.2012 0:20

Dalo by sa to riesit aj pouzitim session? Bolo by to "zdravé" riešenie?


Offline

Správca fóra
Správca fóra
Výpočet

Registrovaný: 08.08.09
Príspevky: 12449
Témy: 39
Príspevok NapísalOffline : 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
Odpovedať na tému [ Príspevkov: 19 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. vypocet

v JavaScript, VBScript, Ajax

1

295

03.01.2013 0:59

kace Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vypocet

v Krčma

11

1005

02.11.2011 18:56

dixi Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vypocet mnohouholnika

v Technológia .NET

2

650

12.12.2012 10:08

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vypocet bedne

v Zvuk

1

1795

17.02.2009 9:57

KocuR Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vypocet ceny

v JavaScript, VBScript, Ajax

5

748

25.11.2008 14:47

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. výpočet odporu

v Ostatné programy

2

765

16.12.2011 20:55

smollko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Výpočet PageRanku

v Internetový marketing, SEO, reklama

9

985

06.07.2010 7:31

vladopt Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vypocet spotreby

v Notebooky a netbooky

1

794

20.02.2009 12:10

ac.milan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vypocet casu

v Vzdelanie, štúdium, škola

10

3620

04.01.2009 0:58

Spirit Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vypocet zabiti

v PHP, ASP

6

523

08.05.2012 20:31

gamelaster Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vypocet v bashi

v Operačné systémy Unix a Linux

1

356

01.12.2010 13:17

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. EXCEL zlozity vypocet

v Ostatné programy

0

391

04.09.2016 13:28

mkojtal Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Program Pascal-vypocet rezistorov

v Assembler, C, C++, Pascal, Java

7

794

24.05.2012 23:31

nBXXL Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. skript na vypočet nefunguje

v JavaScript, VBScript, Ajax

2

285

29.10.2011 12:16

Pablo Montero Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vypocet ceny za kilometre

v PHP, ASP

1

329

08.04.2014 13:40

BX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kalkulačka na výpočet zdroja

v PC skrinky a zdroje

18

10266

13.09.2013 23:10

fAk3 Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra