Utworzylem w bazie tabele ktora ma przechowywac teksty dla roznych czesci mojego powstajacego serwisu. Tabela zawiera id_opisu (INT) oraz pola PL, EN, DE itd. (TEXT) ktore przechowuja opisy. Z poziomu PHP odczytuje kolejne opisy jako stringi do zmiennych sesyjnych i wyswietlam poprzez ECHO $_SESSION['opis'].
Pojawil sie jednak problem gdy chce przechowywac tekst wraz ze zmiennymi ktore pozniej w PHP maja automatem wyswietlac ich zawartosc. Czyli chcialbym wyswietlic tekst typu: "Witaj Zdzichu, wlasnie sprawdzam ze masz XYZ kredytow i masz szanse na wiecej. Mozesz zdobyc w ciagu kazdej godziny ABC kredytow." tylko ze Zdzichu = $_SESSION['NazwaUzytkownika'], XYZ = $_SESSION['Kredyty'], ABC = $_SESSION['Poziom'] * $Ilosc_kredytow_na_godzine (czyli iloczyn poziomu gracza * stala kwota kredytow jakie mozna zdobyc w godzine).
Nie chcialbym szatkowac tego tekstu na kawalki:
1."Witaj "
2.", wlasnie sprawdzam ze masz "
3." kredytow i masz szanse na wiecej. Mozesz zdobyc w ciagu kazdej godziny"
4." kredytow."
i zapisywac jako osobne pola tabeli bo to bez sensu.
Probowalem wstawic do bazy cos takiego:
'Witaj '.$_SESSION['NazwaUzytkownika'].', wlasnie sprawdzam ze masz '.$_SESSION['Kredyty'].' kredytow i masz szanse na wiecej. Mozesz zdobyc w ciagu kazdej godziny '.$_SESSION['Poziom'] * $Ilosc_kredytow_na_godzine.' kredytow.
Ale z marnym skutkiem (mysql to zapisal do bazy ale po pierwsze po wyswietleniu w PHP wszystko jest traktowane jako teks i wyswietla sie bez przypisywania zmiennych, po drugie nie moge edytowac juz takiego pola w tabeli bazy, musze usunac rekord i wprowadzac go calkiem na nowo - nie dziala UPDATE (ale to moze wina kodowania pl znakow albo wlasnie tych apostrofow))
Jak prawidlowo zapisac taki string aby po zaladowaniu go do zmiennej PHP $_SESSION['opis'] i wydaniu komendy ECHO $_SESSION['opis'] wszystko ladnie sie zczytalo ze zmiennych i prawidlowo wyswietlalo?
Pozdrawiam
EDIT:
Odpowiem sam sobie bo moze sie komus przydac. Znalazlem w manualu PHP:
<? //This example lets you parse an unparsed strings variables. Warning: This could cause security leaks if you allow users to pass $variables through this engine. I recommend only using this for your Content Management System. $mydog="My Dog Ate My PHP!"; # Your Parsing String: $s1 = 'Hyphen Variable Preserving: $mytime, and $mydog'; # Remember, wherever you define this, it will not be defined GLOBAL into the function # which is why we define it here. Defining it global could lead to security issues. $vardata=get_defined_vars(); # Parse the string $s1 = StrParse($s1,$vardata); function StrParse($str,$vardata) { # Takes a string, or piece of data, that contains PHP Variables # For example, unparsed variables like: Test using time: $mytime # This example shows $mytime, and not the actual variable value. # The end result shows the actual variable value of $mytime. # This is useful for building a content management system, # and directing your variables into your content data, # where content is stored in a file or database, unparsed. # Of course this could slow down page loads, but it's a good way # to parse data from current variables into your loaded new data # making it compatible. # Then the variables are replaced with the actual variable.. $ret=$str; $myvar=$getvarkeys[$x]; #echo "Variable: " . $myvar . " [" . $vardata[$myvar] . "]<br>"; } return $ret; } ?>
Wystarczy ze w bazie zapisze stringi jako zwykly tekst:
"Witaj $imie, wlasnie sprawdzam ze masz $kasa kredytow i masz szanse na wiecej. Mozesz zdobyc w ciagu kazdej godziny $zysk kredytow."
W kodzie pod zmienne $imie, $kasa, $zysk wrzucam odpowiednie dane i uzywam funkcji StrParse na moim opisie (oczywiscie wywolujac wczesniej $vardata=get_defined_vars(); )
Dziala.