Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]eval()pomoc w uzyciu
Forum PHP.pl > Forum > Przedszkole
Toskan
Witam
Nie wiem czy jestem jakims szczegolnym przypadkiem ale jak zwykle nie moge czegos zrobic:/
w bazie chce zapisac dzialania na zmiennych np
  1. $zmienna['a']-$zmienna['b']

wiec zapisuje je jako varchar(60) utf8_general_ci
w skrypcie wpisuje np
  1. $zmienna1 = $zmienna['pole w bazie'];
  2. eval('echo $zmienna1');

wyswietla to jednak tekst
probowalem tez
  1. $zmienna1=$zmienna['pole w bazie']; //jednak tu pole w bazie to <?php $zmienna['a']-$zmienna['b'] ?>
  2. eval('?> echo $zmienna1 <?php');

jednak po tym strona sie rozwala a nie ma zadnego efektu a nawet tekstu
szukalem czytalem ale ja musze miec chyba czarno na bialym co ma byc gdzie i jak ma byc zapisane:/
Prosze o pomoc:)


@edit
Jest mi to potrzebne do gry z pokemonami,ktore maja swoje posuniecia a posuniecia maja bardzo ale to bardzo rozne uzycie wiec zadna tablica sie do tego nie nada
moze i jest cos zle ale zaczynam zabawe dopiero:)
zabawe z tym zaczalem juz dosc dawno ale mialem dluga przerwe wlasnie przez te posuniecia:(
jaslanin
lepiej napisz w nowym wątku z czym masz problem bo takie rozwiązanie jest bardzo złe i sugeruje błędne zaprojektowanie aplikacji.

ale jak już chcesz to trzeba to robić tak:

  1. <?php
  2.  
  3. $zmienna = array();
  4.  
  5. $zmienna['a'] = 5;
  6. $zmienna['b'] = 2;
  7.  
  8. $eval = <<<'END'
  9.   $zmienna['a'] + $zmienna['b']
  10. END;
  11. eval('echo '.$eval.'; ');


stringu przechowywanego w bazie jako:

Kod
<?php $zmienna['a']-$zmienna['b'] ?>


prosto do eval nie wstawisz bo musisz usunąć znaki początku i końca kodu by zostało tylko:

Kod
$zmienna['a']-$zmienna['b']
Toskan
Cytat(jaslanin @ 25.10.2012, 18:40:26 ) *
lepiej napisz w nowym wątku z czym masz problem bo takie rozwiązanie jest bardzo złe i sugeruje błędne zaprojektowanie aplikacji.

ale jak już chcesz to trzeba to robić tak:

  1. <?php
  2.  
  3. $zmienna = array();
  4.  
  5. $zmienna['a'] = 5;
  6. $zmienna['b'] = 2;
  7.  
  8. $eval = <<<'END'
  9.   $zmienna['a'] + $zmienna['b']
  10. END;
  11. eval('echo '.$eval.'; ');


stringu przechowywanego w bazie jako:

Kod
<?php $zmienna['a']-$zmienna['b'] ?>


prosto do eval nie wstawisz bo musisz usunąć znaki początku i końca kodu by zostało tylko:

Kod
$zmienna['a']-$zmienna['b']

gdzies juz zakladalem temat do czego mi to ale dodam edycje
hmm nie o to mi chodzi co napisales:)
funkcja eval() ma podobno generowac php z tekstu a to wlasnie jest mi potrzebne bo innego wyjscia nie widze
jaslanin
eval nie generuje PHP z tekstu, tylko przetwarza tekst tak jakby to był kod PHP. Służy więc do tego by tak jakby dodać do pliku .php jakiś tekst który ma być przetworzony jak PHP.

Kod:

  1. $zmienna1 = $zmienna['pole w bazie'];
  2. eval('echo $zmienna1');


nie różni się niczym pod względem rezultatu od:

  1. $zmienna1 = $zmienna['pole w bazie'];
  2. echo $zmienna1;


poza fantazyjnym zapisem i wolniejszym wykonaniem kodu z eval

Dlatego Twój kod wyświetla tylko tekst. A mój nie wyświetla tylko tekstu.

odsyłam do manuala: http://www.php.net/eval
Toskan
jakos nie umiem wykorzystac twojego kodu do moich potrzeb
Czytalem ten manual dowiedzialem sie tylko skladni polecenia, a jak zrobic to co chce nie
to to sie wkoncu nadaje czy nie?;/ ehh juz nie wiem...
jaslanin
nie napisałeś co chcesz zrobić, więc ciężko zgadnąć
Toskan
dodalem w edicie i ze chce dzialania na zmiennych
Hmm opisze to ladniej
Chce zrobic skrypt walki pokemonow do tego jednak sa mi potrzebne posuniecia, ktore sa bardzo skomplikowanym polaczeniem wszystkich statystyk, sily i celnosci posuniecia. Jedynym sposobem aby to zrobic sa wlasnie dzialania na zmiennych w bazie osobno do kazdego posuniecia. Bowiem sa podobne ale kazde ma inne dzialanie(jedne podnosza statystyki inne obnizaja inne jeszcze otepiaja jest tego duzo).
jaslanin masz teraz pomysl jak to zrobic?smile.gif
jaslanin
tak tylko takich rzeczy nie przechowuje się w bazie. nie tędy droga.

rozumiem że pokemony mają tabelę, i wszystkie mają wspólne cechy/umiejętności jako skalary od 0 do iluśtam

każdy pokemon musi mieć funkcję która jako parametr przyjmuje tablicę umiejętności i wykonuje na nich operacje i zwraca posunięcia - nie wiem co to są posunięcie ale pewnie jakaś tablica

jeszcze lepiej można by to zrobić jeżeli nauczysz się programowania obiektowego. tworzysz sobie wtedy klasy dla każdego pokemona które implementują interfejs pokemona i zwracają obiekt klasy posunięcie, a wynikowe posunięcie jest standardem zwracanym przez wszystkie pokemony

wtedy sobie możesz to tak zaprojektować, że niektóre pokemony dziedziczą... akcje posunięcia, zachowania czy co tam jeszcze innych pokemonów itp itd.

przechowywanie tego w bazie to MASAKRA, ludzka stonoga itp. jak tak zrobisz.

piszesz że jest to skomplikowane, pomyśl co będzie w przypadku jakiejś zmiany... będziesz miał niewyobrażalne problemy, bo raz że ciężko to będzie programować do bazy danych bez edytora, a eval jeszcze tego Ci nie ułatwi. Dlatego właśnie mówi się że eval is evil. I lepiej tego nie używać zwłaszcza jeżeli nie ma się doświadczenia.
Toskan
Posuniecia to umiejetnosci sa w tabelce(takie sprostowanie)
Poszukam dzisiaj jakiegos czegos z programowaniem obiektowym
wracajac do eval to wyobrazalem to sobie tak ze jak dojdzie cos nowego to nie bede musial klepac czegos tylko dodac poprostu jakies przeliczenia w moim mozgu wygladalo to latwo:) jak znam siebie to bedzie temat zwiazany z programowaniem obiektowym:D
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.