Matematika: bekért adatok és eredmény megjelenítése

Be kellene kérnem kontakt form-szerűen pár (5-bigeyes.gif numerikus értékeket, és ez alapján kiírni (alapvető műveletekkel */± ) kiszámolt értékeket.





Mint egy mini Excel vagy Calc. Ha csak egész számokat kezelne a rendszer nem nagy gond.











Ha van plugin formázásokkal, input ellenőrzésekkel, az lenne a legjobb. A php tudásom ehhez sajnos nem elég.





Az adatokat tárolni nem kell, mail-en küldeni sem fontos. (De ha tudná annak örülnék.)











Előre is köszönet, ha tudtok valami ilyesmit.

Érdekes probléma, de végülis ha tényleg csak alapműveletek és azok meghatározott sorrendben követik egymást, akkor elég egyszerű maga a php része:









Code:

<?php

$a=1;

$b=2;

$c=3;

$d=4;

$e=($a+$B)*$c-$d;

echo $e;



?>








Szóval nem egy nagy etwas. Ami trükkösnek tűnik, hogy a $x értékeket inputtal kell bevinni a képletbe. Tegyük fel, hogy $_POST-tal űrlapon keresztül bekéred ezeket és csak akkor van ugye eredmény, ha minden mező ki van töltve:





Code:

<?php

if ( ! empty( $_POST['elso'] ) && ! empty( $_POST['masodik'] ) && ! empty( $_POST['harmadik'] ) && ! empty( $_POST['negyedik'] ) ) { // ez a sor megnézi, hogy minden mező oké-e

$a=$_POST['elso'];

$b=$_POST['masodik'];

$c=$_POST['harmadik'];

$d=$_POST['negyedik'];

$e=($a+$B)*$c-$d;

echo "Az eredmény=" .$e;

} else {

echo "Nem töltöttél ki minden mezőt, e!" // ez szól, ha nincs kitöltve minden mező

}

?>








Na, most már csak be kell kérnünk a cuccot egy egyszerű html-formmal:





Code:











Egyszerű kiszámolós





<form method="post" action="">

( + ) * - =













Ilyenkor ugye az történik, hogy amíg nincsenek kitöltve a mezők, addig a php művelet nem fut le. Mihelyt beírod az értékeket és kattintasz, az if-else megnézni, ki van-e töltve minden mező. Ha igen, akkor kiköpi az eredményt.





Tehát a vége:





Code:

<?php

if ( ! empty( $_POST['elso'] ) && ! empty( $_POST['masodik'] ) && ! empty( $_POST['harmadik'] ) && ! empty( $_POST['negyedik'] ) ) { // ez a sor megnézi, hogy minden mező oké-e

$a=$_POST['elso'];

$b=$_POST['masodik'];

$c=$_POST['harmadik'];

$d=$_POST['negyedik'];

$e=($a+$B)*$c-$d;

echo "Az eredmény=" .$e;

} else {

echo "Nem töltöttél ki minden mezőt, e!" // ez szól, ha nincs kitöltve minden mező

}

?>











Egyszerű kiszámolós





<form method="post" action="">

( + ) * - =













Persze ebben nincs védelem, hogy "csak (egész) számokat írhatsz be", se formázás, de most 10 perc alatt ennyire futotta, ebből már lehet építkezni... ;)

Azért 10 perc alatt nem semmi.





Köszi, építkezéskezdéshez és tanuláshoz viszont valóban jó lesz!

Nincs mit.





Persze a









Code:

$e=($a+$B)*$c-$d;





sorban következetesen nagy B-t használtam (beragadt a shift?), de valójában kis b.





Szerk: nem, nem én vagyok hülye. A fórum automatikusan nagy B-vé javítja... :blink:


Adminok, ötlet?

Na, most hogy van 10 újabb perc szünet, lássuk, mit tudunk tenni annak érdekében, hogy a cucc letépje a delikvens arcát, ha nem egész számmal (integer) próbálkozik…











Első látásra valami ilyesmi kellene, hogy:









Code:

$a = filter_input(INPUT_POST, 'elso', FILTER_VALIDATE_INT);

$b = filter_input(INPUT_POST, 'masodik', FILTER_VALIDATE_INT);

$c = filter_input(INPUT_POST, 'harmadik', FILTER_VALIDATE_INT);

$d = filter_input(INPUT_POST, 'negyedik', FILTER_VALIDATE_INT); // ez a 4 sor megnézi, mindegyik input egész szám-e



if ( ($a === FALSE) || ($b === FALSE) || ($c === FALSE) || ($d === FALSE) ) { // ha valamelyik nem, akkor

echo "Kérlek, hogy csak egész számokat használj, mer' le lesz tépve az arcod!

"; // letépi az arcát

ésatöbbi.... // ha meg mind jó, akkor lefut a dolog








Ezt kellene belapakolni a fentiekbe mondjuk egy nested if-fel, pl. úgy, hogy:





Code:

<?php



if ( ! empty( $_POST['elso'] ) && ! empty( $_POST['masodik'] ) && ! empty( $_POST['harmadik'] ) && ! empty( $_POST['negyedik'] ) ) {



$a = filter_input(INPUT_POST, 'elso', FILTER_VALIDATE_INT);

$b = filter_input(INPUT_POST, 'masodik', FILTER_VALIDATE_INT);

$c = filter_input(INPUT_POST, 'harmadik', FILTER_VALIDATE_INT);

$d = filter_input(INPUT_POST, 'negyedik', FILTER_VALIDATE_INT);



if ( ($a === FALSE) || ($b === FALSE) || ($c === FALSE) || ($d === FALSE) ) {

echo "Kérlek, hogy csak egész számokat használj, mer' le lesz tépve az arcod!

";

} else {

$a=$_POST['elso'];

$b=$_POST['masodik'];

$c=$_POST['harmadik'];

$d=$_POST['negyedik'];

$e=( $a+$b )*$c-$d;

echo "Az eredmény=" .$e. ". Új kiszámolóst?

";

}



} else {

echo "Az összes mező kitöltése kötelező ám!

";

}



?>








A kód többi része (vagyis a HTML form) változatlan. A fenti integer-ellenőrzés akkor is letépi a delikvens arcát, ha betűket ír stb., azaz bármit beleszemetel a beviteli mezőbe, ami nem integer (egész szám).





Mi is kell még? :)

na mondom nekem mi kéne… :slight_smile:











zárt blog, X mennyiségű ember használja, mind szerkesztési joggal, de kordában tartva a lehetőségeket, pl törölni nem tudnak, és fontos, hogy a másik által írt bejegyzést sem látják.





ennek a megoldása mind admin felületen, mind a látható részen nem gond.





ámde.











bejegyzés írásakor nem szöveget írnak be, hanem Y mennyiségű saját mezőben Y mennyiségű számot.





tehát van X embertől Y számom, melyekre úgy alkalmazok matematikai képletet “nyilvánosan”, hogy a végeredményt mindenki látja, viszont senki nem látja a másik számait.











na erre varrjál gombot! :wink:

De ha az echo/print csak a végeredményt adja vissza frontenden, akkor miért látnák egymás számait?

sejtettem, hogy nyakatekertebben írtam le a problémámat, mint amilyen! :slight_smile:

Közben ismételt 10 perc erejéig visszatérve a topiknyitó problémához: tegyük fel, hogy emailben akarjuk továbbítani az eredményt a) saját magunknak bé) a delikvensnek c) mindkettőnknek.











a)









Code:

$cimzett = "sajatemail@cimed.hu";

$felado = "felado@example.com";

$targy = "Kiszamolos eredmenye";

$uzenet = "A kiszámolós eredménye ".$e. " lett. A kiszámolóst megtalálod az example.com oldalon. Üdvözlettel: Az example.com csapata";

mail( $cimzett, $targy, $uzenet, "From: $felado");





bé)





Code:

$cimzett = $_POST['email'];

$felado = "felado@example.com";

$targy = "Kiszamolos eredmenye";

$uzenet = "A kiszámolós eredménye ".$e. " lett. A kiszámolóst megtalálod az example.com oldalon. Üdvözlettel: Az example.com csapata";

mail( $cimzett, $targy, $uzenet, "From: $felado") or print "Bazinga! A levelet nem tudtuk elküldeni!";





(Vegyük itt most észre, hogy az a) példában nincs "or print" dolog, hiszen delikvens nem tudja, hogy elküldjük magunknak az ő eredményét -- szar ügy lenne, ha ezt pont egy hibaüzeneten keresztül tudná meg... A bé) megoldáshoz természetesen be kell kérnünk delikvens emailcímét, egy ugyanolyan formmal, mint ahogyan a számokat bekérjük. Ezért ehhez a megoldáshoz a HTML részbe, a formhoz bevezetünk egy "email" nevű mezőt is:





Code:

Erre az email-címre elküldjük az eredményt, ha szeretnéd:






c) megoldás





Code:

$cimzett = $_POST['email'];

$felado = "felado@example.com";

$targy = "Kiszamolos eredmenye";

$headers = "Bcc: sajatemail@cimed.hu" . "rn";

$uzenet = "A kiszámolós eredménye ".$e. " lett. A kiszámolóst megtalálod az example.com oldalon. Üdvözlettel: Az example.com csapata";

mail( "$cimzett", $targy, $uzenet, "From: $felado", $headers) or print "Bazinga! A levelet nem tudtuk elküldeni!";





Itt ugye a $headers-ben titkos másolatként megadtuk a saját emailcímedet, mehet az esetleges hibaüzi is az "or print"-ben, valamint a címzett felvételéhez továbbra is bekérjük a delikvens emailcímét az "email" nevű inputtal.





Ezt belepászítjuk ahhoz a részhez, amit akkor csinál, amikor minden rendben (azaz: minden mező ki van töltve és minden mezőben egész szám szerepel, majd betoljuk az egész cumót a HTML-be. Tehát a cucc vége (a c megoldást alapul véve):





Code:











Egyszerű kiszámolós







<?php



if ( ! empty( $_POST['elso'] ) && ! empty( $_POST['masodik'] ) && ! empty( $_POST['harmadik'] ) && ! empty( $_POST['negyedik'] ) ) {



$a = filter_input(INPUT_POST, 'elso', FILTER_VALIDATE_INT);

$b = filter_input(INPUT_POST, 'masodik', FILTER_VALIDATE_INT);

$c = filter_input(INPUT_POST, 'harmadik', FILTER_VALIDATE_INT);

$d = filter_input(INPUT_POST, 'negyedik', FILTER_VALIDATE_INT);



if ( ($a === FALSE) || ($b === FALSE) || ($c === FALSE) || ($d === FALSE) ) {

echo "Kérlek, hogy csak egész számokat használj, mer' le lesz tépve az arcod!

";

} else {

$a=$_POST['elso'];

$b=$_POST['masodik'];

$c=$_POST['harmadik'];

$d=$_POST['negyedik'];

$e=( $a+$b )*$c-$d;

$cimzett = $_POST['email'];

$felado = "felado@example.com";

$targy = "Kiszamolos eredmenye";

$headers = "Bcc: sajatemail@cimed.hu" . "rn";

$uzenet = "A kiszámolós eredménye ".$e. " lett. A kiszámolóst megtalálod az example.com oldalon. Üdvözlettel: Az example.com csapata";

mail( "$cimzett", $targy, $uzenet, "From: $felado", $headers) or print "Bazinga! A levelet nem tudtuk elküldeni!";

echo "Az eredmény=" .$e. ". Új kiszámolóst?

";

}



} else {

echo "Az összes mező kitöltése kötelező ám!

";

}



?>



<form method="post" action="">

Erre az email-címre elküldjük az eredményt, ha szeretnéd:



( + ) * - =






Köszönöm, kaptam elég olvasni és tanulnivalót. (Ha nagy leszek meghálálom.)