Autor | Zpráva | ||
---|---|---|---|
notwist Profil |
#1 · Zasláno: 4. 11. 2015, 09:06:33
Zdravím,
můžete mi někdo poradit, co dělám špatně? Tento příklad funguje. Vezme si hodnotu z databáze a vypíše: "Toto je jméno Josef" $test = "Toto je jméno $radek[jmeno]"; echo "<td>$test</td>"; Tento příklad ale nefunguje. V poli pole3 v databázi mám tento text: "Toto je jméno $radek[jmeno]" (bez uvozovek). Když proměnnou $text_zpravy vypíšu, napíše mi přesně to, co je zadané v databázi. Já bych ale potřeboval, aby se za $radek[jmeno] dynamicky doplnila hodnota jako v prvním příkladu a ne to jen vypsat jako text. $text_zpravy = mysql_result(mysql_query("SELECT pole3 FROM x_aktiv WHERE tabulka = '$table' AND projekt='$projekt' AND typ='sms'"), 0); echo "<td>$text_zpravy</td>"; Poradíte někdo, prosím? |
||
Dan Charousek Profil |
Podobný případ se řešil zde.
Jednoduše: nedělej to. Jestli chceš v nějakém textu, který je uložený v DB vypisovat nějakou hodnotu ze sloupce, také v DB, můžeš si dodefinovat nějakou vlastní funkci, která bude nahrazovat nějaké zástupné znaky (podobně jako v odkázaném vlákně). <?php function replaceFromArray(array $data, $input) { return preg_replace_callback("~\{(.*?)\}~", function($m) use ($data) { return isset($data[$m[1]]) ? $data[$m[1]] : $m[0]; }, $input); } $arr = ["neco" => "Hello world!"]; $string = "Zde bude {neco} a zde {nic}"; echo replaceFromArray($arr, $string); // Vypíše: Zde bude Hello World! a zde {nic} ?> V tvém případě s databází by to mohlo vypadat nějak takto: $dotaz = mysql_query("SELECT pole3 FROM x_aktiv WHERE tabulka = '$table' AND projekt='$projekt' AND typ='sms'"); while($row = mysql_fetch_assoc($dotaz)) { echo replaceFromArray($row, $row['pole3']); } |
||
notwist Profil |
#3 · Zasláno: 4. 11. 2015, 09:21:22
Paráda! :-) Vyzkouším a děkuji za rychlou odpověď.
|
||
juriad Profil |
#4 · Zasláno: 4. 11. 2015, 09:21:37
notwist:
To nejde. Nahrazování je možné jen v řetězcovém literálu, nikoli v existujícím řetězci. To by byla obrovská bezpečnostní díra, vem si, že že by uživatel do svého komentáře zadal název proměnné a ona by se doplnila na výstup. Pak by to byla jen otázka času a zkoušení, než by zjistil, v které proměnné je uloženo heslo k databázi. Toto se řeší tak, že do databáze uložíš nějaký svůj řetězec, například: "Jméno uživatele je %JMENO% a je mu %VEK% let." %něco% jak budeš potřebovat, nikoli za jakoukoli existující proměnnou.
|
||
Dan Charousek Profil |
#5 · Zasláno: 4. 11. 2015, 09:23:12
Taky bys neměl používat mysql.
|
||
notwist Profil |
#6 · Zasláno: 4. 11. 2015, 09:26:02
Proč ne?
|
||
Dan Charousek Profil |
#7 · Zasláno: 4. 11. 2015, 09:26:23
notwist:
Viz. článek, na který odkaz odkazuje. |
||
Časová prodleva: 9 let
|
0