Autor | Zpráva | ||
---|---|---|---|
nowis Profil |
#1 · Zasláno: 23. 1. 2014, 22:11:05
Zdravím,
potřebuji do formuláře zapsat vzorec, se kterým se pak pracuje v php kódu (v cyklu). Je to možné? příklad vzorce: 10001+($x*10000) Dík |
||
juriad Profil |
#2 · Zasláno: 23. 1. 2014, 22:17:01
Většinou je to špatný nápad.
Jak složité jsou ty vzorce, dají se rozparsovat a simulovat jejich výpočet? Na co se odkazuje ta proměnná $x ve formuláři? Existuje sice funkce eval, ale buď varován; sebemenší chybička v zabezpečení vstupu do této funkce a můžeš při útoku přijít o celý web i všechna data. Umožnuje spustit jakýkoli kód, nejen jednoduchý aritmetický výpočet. |
||
nowis Profil |
#3 · Zasláno: 23. 1. 2014, 22:27:14
juriad:
jedná se o jednoúčelovou aplikaci určenou pro mně a mé kolegy, žádné škody nehrozí. Složitost vzorců není větší, než v příkladu. Rozparsovat vzorce - tím myslíš rozsekat je na jednotlivé části - každá bude mít svůj input? Proměnná $x se odkazuje na proměnnou stejného názvu v kódu (omlouvám se asi nechápu otázku). Nicméně raději bych to samozřejmě udělal nějak čistě… Díky |
||
juriad Profil |
#4 · Zasláno: 23. 1. 2014, 22:40:47
nowis:
Buď inputy pro obě čísla zvlášť, nebo celý vzorec splitnout na vhodných místech: $vstup = '10001+($x*10000)'; $vstup = preg_replace('/\s/', '', $vstup); # zahoď mezery $pole = preg_split('/[()+*]+/', $vstup); # rozděl podle vyjmenovaných znaků echo $pole[0], ', ', $pole[2]; Ono mi šlo o to, co se stane, pokud tam někdo omylem / ze zlomyslnosti napíše místo $x proměnnou $y. Navíc jsem nevěděl, zda $x není odkaz na nějakou jinou proměnnou definovanou ve formuláři. |
||
nowis Profil |
#5 · Zasláno: 23. 1. 2014, 22:56:35
juriad:
jasně, ikdyž navrhované řešení úplně nechápu :-) . Proměnná by vždy měla být jen jedna a je to vždy jen násobič inkrementován v cyklu o 1. Takže by to možná šlo udělat i takto? $vstup = '10001+(INCREMENT*10000)'; $vzorec= preg_replace('/INCREMENT/', '\$x', $vstup); Je to blbost? Pokud ne, jak s tím vzorcem pak pracovat? Protože takto to asi nepůjde: for ($x=0;$vzorec<=$max; $x++) {blabla} Za vzorec mi to asi nedosadí výsledek, ale jen ten vzorec jako řetězec... |
||
Alphard Profil |
#6 · Zasláno: 23. 1. 2014, 23:02:42
nowis:
„Proměnná by vždy měla být jen jedna a je to vždy jen násobič inkrementován v cyklu o 1.“ Musí to být vzorec? Nebylo by jednodušší zadat jen jednotlivé koeficienty a neblbnout s eval? Pro obecný výpočet je správné řešení použít matematický parser. Nikdy nevíte, kam se script časem dostane. |
||
nowis Profil |
#7 · Zasláno: 24. 1. 2014, 09:33:41
Díky za informace, zkusím se s tím poprat
|
||
Časová prodleva: 12 let
|
0