Autor Zpráva
Darker
Profil
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
- 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
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
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
To mám napsat str_replace postupně se všemi znaky? To asi ne. Nejde to přes reg. výraz?
AM_
Profil
Darker:
Nejde to přes reg. výraz?
jde.
Darker
Profil
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
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
Děkuju ti, už mi to funguje.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0