NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Jako podmínku potřebuji použít hodnotu z proměnné

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:8.12.2016 12:12

Ahoj,
chtěl jsem vás poprosit o pomoc s řešením mého problému:
Mám v proměnné uloženou podmínku (jako string v databázi) např.

$podminka = ">=20"

A tuto podmínku potřebuji použít ve skutečné podmínce IF. Jak bude vypadat kód? Když přece použiji

if($podminka)

tak se ptám jen na její přítomnost ne na obsah, nebo se pletu? Zkrátka potřebuji použít obsah řetezce jako podmínku. Díky za rady.

 
Odpovědět
8.12.2016 12:12
Avatar
Odpovídá na Ondřej Pech
Erik Šťastný:8.12.2016 12:22

S tím obsahem máš určitě pravdu.

Nicméně si nejsem jistý jestli nějak jde nacpat podmínku ve formě stringu do opravdového if v kódu.

Budeš to asi muset rozIFovat o dost víc pokud tu podmínku opravdu chceš mít jako proměnou string

ve smyslu:

if ( $podminka === ">=20")
{
        if ($a >=20)
}
Editováno 8.12.2016 12:24
 
Nahoru Odpovědět
8.12.2016 12:22
Avatar
maxy obr
Člen
Avatar
Odpovídá na Ondřej Pech
maxy obr:8.12.2016 12:38

Proč to ale řešíš? Tady je přeci špatně už samotný návrh. Cpát něco do stringu a pak s tím chtít dělat matematické operace.
Teoreticky by to šlo asi parsovat pokud to bude mít vždy tvar číslo znaménko číslo. Každopádně to bude zdlouhavé a nesmyslné.

 
Nahoru Odpovědět
8.12.2016 12:38
Avatar
Libi
Člen
Avatar
Libi:8.12.2016 13:12

Rozdel to uz v databazove tabulce na dve pole - operator a value

 
Nahoru Odpovědět
8.12.2016 13:12
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:8.12.2016 14:06

Potřebuji pracovat s podmínkou, kterou dopředu neznám. Např. budu mít formulář Zadej podmínku: ________ a potom při zpracování potřebuji tu podmínku uživatele použít. Takže pokud zadá např. "x>=60" potřebuji to zpracovat jako

if($x>=60){
 ...
}
 
Nahoru Odpovědět
8.12.2016 14:06
Avatar
Odpovídá na Ondřej Pech
Erik Šťastný:8.12.2016 14:16

Pravděpodobně budeš muset definovat všechny podmínky co můžou nastat. a pak se rozhodovat kterou vybereš podle porovnání toho co uživatel zadal :-O

Java na to má i nějakou knihovnu co tak čtu, ale je to šílený nápad.

Editováno 8.12.2016 14:16
 
Nahoru Odpovědět
8.12.2016 14:16
Avatar
Michal
Člen
Avatar
Odpovídá na Ondřej Pech
Michal:8.12.2016 14:18

Zde by mohl pomoci eval(), který vyhodnotí string jako PHP kód:

$input = 15;
$condition = '>= 20';

if(eval("return $input $condition;")) {
   echo 'Platí';
} else {
   echo 'Neplatí';
}

Problémem zůstává bezpečnost serveru, jelikož uživatel ti může do evalu napsat cokoliv, tzn. může ovlivňovat zdrojový kód, takže by to chtělo minimálně regulárním výrazem ověřit, jestli je zadán nějaký neškodný vstup.

 
Nahoru Odpovědět
8.12.2016 14:18
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:8.12.2016 14:20

Asi to teda vyřeším tak že jim dám selectbox s operacemi (>;<;=) a pak input s hodnotou. Jen mě zajímalo, jestli někoho nenapadne jiné, jednoduší řešení.

 
Nahoru Odpovědět
8.12.2016 14:20
Avatar
Ondřej Pech
Člen
Avatar
Odpovídá na Michal
Ondřej Pech:8.12.2016 14:20

Nebo z toho řetězce nějak oddělat typické PHP znaky - zní to dobře, díky za radu, vyzkouším.

 
Nahoru Odpovědět
8.12.2016 14:20
Avatar

Člen
Avatar
Odpovídá na Ondřej Pech
:10.12.2016 10:51

Nezapomeň na to, že i když budeš mít pevně dané hodnoty v selectboxu, kdokoli ti může přes ten formulář podstrčit jiné hodnoty.

 
Nahoru Odpovědět
10.12.2016 10:51
Avatar
Richard
Inzerent nabídek práce
Avatar
Odpovídá na Ondřej Pech
Richard:11.12.2016 19:56

Ahoj, přesně takhle jsem to teď řešil v rámci své aplikace. Uživatel si definuje trigger podmínky, které se ukládají do databáze a ty pak musím vyhodnocovat při zpracování vstupních dat. Přemýšlel jsem jak na t,o ale nakonec jsme prostě skončil u roz-ifování. Takže mám pak v kódu metody model manageru něco takového:

switch ($podminka['cond'])
{
        case '>':
                        $vysledek = $value > $podminka['value'];
                break;
        case '<':
                        $vysledek = $value < $podminka['value'];

                break;
        case '==':
                        $vysledek = $podminka['value'] == $value;
                break;
        case '=<':
                $vysledek = $value <= $podminka['value'];
                break;
        case '>=':
                $vysledek = $value >= $podminka['value'];
                break;
        case '<>':
                $vysledek = $podminka['value'] <> $value;
                break;


}

Kdyby tě napadlo, jak to řešit lépe, dej vědět., Pro mou speciální aplikaci to taky řeším.
Richard

Nahoru Odpovědět
11.12.2016 19:56
Udělej to teď - možná nebudeš mít už čas to udělat později
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.