[ 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 | 52
NapísalOffline : 16.06.2012 22:02 | Výpočet

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: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 16.06.2012 22:17 | Výpočet

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 | 52
Napísal autor témyOffline : 16.06.2012 23:09 | Výpočet

Ď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: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 17.06.2012 10:12 | Výpočet

Č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 | 52
Napísal autor témyOffline : 17.06.2012 12:30 | Výpočet

Ď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: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 17.06.2012 13:00 | Výpočet

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 | 52
Napísal autor témyOffline : 17.06.2012 13:28 | Výpočet

Ď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: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 17.06.2012 13:50 | Výpočet

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 | 52
Napísal autor témyOffline : 17.06.2012 14:59 | Výpočet

Ď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 | 52
Napísal autor témyOffline : 19.06.2012 19:24 | Výpočet

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: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 19.06.2012 19:37 | Výpočet

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 | 52
Napísal autor témyOffline : 22.06.2012 18:48 | Výpočet

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: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 22.06.2012 19:00 | Výpočet

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 | 52
Napísal autor témyOffline : 23.06.2012 13:38 | Výpočet

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: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 23.06.2012 13:54 | Výpočet

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: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 23.06.2012 14:00 | Výpočet

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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 23.06.2012 14:05 | Výpočet

Ďuri píše:
Neda. Prenasaj ich ako argument.

samozrejme, ze sa to da, musia byt ale nastavene ako globalne...


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
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 | 52
Napísal autor témyOffline : 26.06.2012 0:20 | Výpočet

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: 12516
Témy: 41 | 41
Bydlisko: Martin
NapísalOffline : 30.06.2012 15:45 | Výpočet

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
 [ Príspevkov: 19 ] 


Výpočet



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

118

03.01.2013 0:59

kace

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

vypocet

v Krčma

11

394

02.11.2011 18:56

dixi

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

Výpočet PageRanku

v Internetový marketing, SEO, reklama

9

774

06.07.2010 7:31

vladopt

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

Vypocet spotreby

v Notebooky a netbooky

1

474

20.02.2009 12:10

ac.milan

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

vypocet casu

v Vzdelanie, štúdium, škola

10

2797

04.01.2009 0:58

Spirit

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

Vypocet zabiti

v PHP, ASP

6

286

08.05.2012 20:31

gamelaster

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

vypocet mnohouholnika

v Technológia .NET

2

280

12.12.2012 10:08

walther

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

Vypocet bedne

v Zvuk

1

1411

17.02.2009 9:57

KocuR

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

vypocet ceny

v JavaScript, VBScript, Ajax

5

531

25.11.2008 14:47

walther

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

výpočet odporu

v Ostatné programy

2

509

16.12.2011 20:55

smollko

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

vypocet v bashi

v Operačné systémy Unix a Linux

1

172

01.12.2010 13:17

Ďuri

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

EXCEL zlozity vypocet

v Ostatné programy

0

154

04.09.2016 13:28

mkojtal

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

vypocet ceny za kilometre

v PHP, ASP

1

130

08.04.2014 13:40

BX

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

8135

13.09.2013 23:10

fAk3

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

Jednoducha stranka na vypocet

v Ostatné

11

531

01.06.2011 6:39

borisko27

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

MySQL- spojenie a výpočet

v Databázy

4

135

11.04.2013 9:38

easyhair6



© 2005 - 2017 PCforum, edited by JanoF