| Autor | Zpráva | ||
|---|---|---|---|
| Darker Profil |
#1 · Zasláno: 22. 11. 2010, 19:24:01 · Upravil/a: Darker
Mám program na generování funkcí, kterému přes $_GET předávám funkci. V praxi to vypadá takhle:
eval('$y='.$funkce);
Samozřejmě v cyklu for. Ale jsou tu dva ošklivé problémy. 1. Eval mi klidně vyevaluje i PHP příkaz. 2. Nefunguje sčítání. Ukázky: (-1*(x*x))/50
x+5 syntax error, unexpected T_LNUMBER in ... : eval()'d code on line 1 x-50
(1/(x))*5000
|
||
| AM_ Profil |
#2 · Zasláno: 22. 11. 2010, 20:34:07
- docela se divím, jak to může fungovat, když tam máš x místo $x, což pokud nedefinuješ tak PHP hodí warning a dosadí za x string "x", ale budiž (možná s tím je nějak spojen ten problém se sčítáním).
- bezpečnost: pokud odstraníš všechny nežádoucí znaky (necháš tam třeba jen 0-9.+-*/ a závorky už trochu se skřípěním zubů protože ty zavání voláním nějaké funkce, mohlo by to snad být vcelku bezpečné. Pokud se chceš pocvičit v programování, napiš si i vlastní vyhodnocovátko výrazů, není to zase tak složité. |
||
| Darker Profil |
#3 · Zasláno: 22. 11. 2010, 20:49:11
AM:
„x místo $x“ Používám str_replace. Zapoměl jsem to zmínit. „odstraníš všechny nežádoucí znaky“ Pověz mi prosím jak, to je to co petřebuju :) „vyhodnocovátko výrazů“ Nemám ani ponětí jak na to. Ani teoreticky. |
||
| AM_ Profil |
#4 · Zasláno: 22. 11. 2010, 20:58:25
Darker:
> „odstraníš všechny nežádoucí znaky“ > Pověz mi prosím jak, to je to co petřebuju :) str_replace nebo preg_replace |
||
| Darker Profil |
#5 · Zasláno: 22. 11. 2010, 21:11:33
To mám napsat str_replace postupně se všemi znaky? To asi ne. Nejde to přes reg. výraz?
|
||
| AM_ Profil |
#6 · Zasláno: 22. 11. 2010, 21:15:22 · Upravil/a: AM_
Darker:
„Nejde to přes reg. výraz?“ jde. |
||
| Darker Profil |
#7 · Zasláno: 22. 11. 2010, 21:27:35
Nerad ti to říkám, ale mám z tebe pocit, že se věděl, kam směřuju svojí otázku už v [#3]. Neumím používat reg. výrazy, ač jsem na to přečetl už nejmíň 5 různých článků. Hledat samosebou zkusím.
|
||
| AM_ Profil |
#8 · Zasláno: 22. 11. 2010, 22:24:18
Darker:
„Nerad ti to říkám, ale mám z tebe pocit, že se věděl, kam směřuju svojí otázku už v [#3].“ zklamu tě, ale nevěděl. Neumím věštit, zda: - neumíš reguláry - nevíš, které znaky máš odstranit - nevíš, jakou funkcí se dají odstranit (to je nejméně pravděpodobné, ale ten dotaz tak nejvíce zněl). Výčet znaků se v regulárech zapisuje jako [mnozina-znaku], "všechno kromě" se zapisuje [^mnozina-znaku], např. [^0-9+*/-] by mělo znamenat "libovolný znak jiný než číslice nebo +-*/". Vytvořit takový regulár by mělo být celkem triviální. |
||
| Darker Profil |
#9 · Zasláno: 23. 11. 2010, 08:34:24
Děkuju ti, už mi to funguje.
|
||
|
Časová prodleva: 16 let
|
|||
0