Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][MySQL] Wykonanie kodu php
Forum PHP.pl > Forum > Przedszkole
mokry
Wykonuje zapytanie "SELECT * FROM..."
Wyswietlam wyniki z otrzymanej tablicy i tu problem:

Chciałbym aby kod php, który jest w bazie danych w jednym z pol wykonał się przy wywołaniu pola na stronie...
Dokładniej...
Zawartość pola "tekst" z bazy danych:
Kod
Wyświetl poniższy tekst:<br>
<?
echo "wyswietl ten tekst";
?>


Wynik ma być:
Kod
Wyświetl poniższy tekst:<br>
wyswietl ten tekst


a jest:
Kod
Wyświetl poniższy tekst:


Jak moge takie cos otrzymac?
Prosze o wszelka pomoc/ukierunkowanie.
wijet
Powinieneś użyć funkcji eval()
tu masz do poczytania eval()

  1. <?php
  2. $kod_do_wykonania = "echo 'teks wyswietlany';";
  3. eval($kod_do_wykonania);
  4. ?>
mokry
W takim razie czy takie wyrazenie bedzie poprawne?

  1. <?
  2. $str = preg_replace("#[wykonaj](.*?)[/wykonaj]#si", eval("1"), $str);
  3. ?>


Kod napisalem teraz na szybko na podstawie generatora bbcode, bo z tego co widze to niebardzo...
wyrzuca komunikat:

Cytat
Warning: Unexpected character in input: '' (ASCII=1) state=1 in /home/allforweb/domains/domena/public_html/engine/funkcje/index.php(26) : eval()'d code on line 1
wijet
Sprobój to wyrażenie pomiedzy [wykonaj] a [/wykonaj]
zamienic na
  1. <?php eval('wyrażenie_do_wykonania;') ?>

nie zapomnij o sredniku na koncu wyrazenia do wykonania
mokry
Dalej cos nie dziala :/

Chodzi tutaj o to, aby kod wykonywal sie tylko w znacznikach bbcode [wykonaj] [/wykonaj]

Dodatkowym utrudnieniem, choc niekoniecznie, jest kolorowanie skladni php, ktore akurat dziala prawidlowo. Czyli oprocz tego ze jest tam kod html, znaczniki bbcode to jeszcze musialaby byc mozliwosc wykonania kodu php...
myth
  1. <?php
  2. $str = "Bla bla bla.. 1 [wykonaj]echo 'hello world! :-)';[/wykonaj] bla bla bla.. 2";
  3.  
  4. #-- usuwamy lewa strone 'Bla bla bla.. 1'
  5. $str1 = preg_replace('#(.*?)[wykonaj]#si', '', $str); 
  6.  
  7. #-- usuwamy prawa strone 'bla bla bla.. 2'
  8. $str2 = preg_replace('#[/wykonaj].+#si', '', $str1);
  9.  
  10. echo eval($str2);
  11. ?>


Pewnie da sie jeszcze prosciej. dry.gif

Edit: No tak, forum usuwa slashe. W zmiennych $str1 oraz $str2 przed "[" oraz "]" musisz dodac "\" , bo [] traktowane jest jako klasa.

Pozdrawiam.
mokry
po wstawieniu na strone:
  1. <?
  2. #-- usuwamy lewa strone 'Bla bla bla.. 1'
  3. $str1 = preg_replace('#(.*?)[wykonaj]#si', '', $row['tresc']); 
  4. #-- usuwamy prawa strone 'bla bla bla.. 2'
  5. $str2 = preg_replace('#[/wykonaj].+#si', '', $str1);
  6. $row['tresc'] = eval($str2);
  7. ?>

oczywiscie ze slashami, dalej wyskakuja mi bledy :/
Probowalem kod w takich postaciach:
Kod
[wykonaj]echo 'tekst';[/wykonaj]


Kod
[wykonaj]
echo 'tekst';
[/wykonaj]


Kod
[wykonaj]
<?
echo 'tekst';
?>
[/wykonaj]


Kod
[wykonaj]<? echo 'tekst'; ?>[/wykonaj]


Za kazdym razem bez pozytywnego skutku...
Bledy:
Cytat
Parse error: syntax error, unexpected $end in /home/allforweb/domains/domena/public_html/engine/funkcje/index.php(34) : eval()'d code on line 1

I tak przy kazdej pozycji z petli: "while($row = mysql_fetch_array($wynik)) {
(...)
}"
myth
http://tiny.pl/7sn9

Sprawdź teraz. blink.gif
mokry
Teoretycznie dziala, ale w tym momencie mam tylko akceptowane [wykonaj], cala reszta jest usuwana :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.