Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Zdravím kolegy,
mám problém poněkud řemeslné povahy. Řekněme, že píši třeba velmi jednoduché fórum, které bude uživatelům umožňovat příspěvky číst, psát a editovat. Problém je, že nevím přesně, jak mám zpracovávat na různých úrovních vstup od uživatelů tak, aby se uložil bezpečně, a poté jak ho bezpečně vypsat. Jde o speciální znaky - HTML si potrpí na < > & " ' , které by bylo záhodno přepisovat při výstupu na entity, PHP (a asi i MySQL) zase bojuje s " ' \ . Trochu jsem s tím experimentoval a zjistil jsem, že PHP samo před " ' \ přidává zpětné lomítko (alespoň když tyto znaky zpracovávám z POSTu). To se asi hodí, kdybych chtěl všechno rovnou narvat do MySQL, ale ne když to chci hned zase vypsat zase zpátky (třeba když uživatel zapomene vyplnit některé pole atd.). Máte s tímto někdo zkušenosti? Tuším, že PHP na to má speciálních funkce, jen přesně nevím, kdy které použít. Díky!
Offline

↑ Olin:
Asi se bude hodit: http://phpfashion.com/escapovani-definitivni-prirucka
Lomítka před apostrofy a uvozovky má na svědomí zapnutá direktiva magic_quotes_gpc, buď si ji vypni nebo použij třeba tuhle funkci: http://php.vrana.cz/vypnuti-magic_quotes_gpc.php
A jinak se vyplatí používat nějakou knihovnu, která se o to stará napůl sama. Třeba na databáze dibi, pak můžeš psát dotazy ve tvaru
// %i zajistí, že id bude číslo; %s by například zajistilo, že to bude escapovaný string
dibi::query('SELECT * FROM [table] WHERE [id] = %i', $id);
$arr = array(
'pole' => 'hodnota',
'bit' => TRUE,
);
dibi::query('INSERT INTO [table]', $arr);Na escapování HTML se hodí nějaký šablonovací systém, šablony v Nette umí escapovat podle zvoleného kontextu, jinak to escapuje proměnnou uvnitř <script> a jinak v běžném HTML. (V tom článku hledej „kontextově-sensitivní escapování“.)
Offline
Zdravím, jenom dodám, že takových funkcí pro ošetření jsou mraky: addslashes, či třeba htmlspecialchars.
Offline

↑ RePRO:
addslashes je fuj, používá se mysql_real_escape_string. Píše se to v tom mém prvním odkazu a ostatně i v dokumentaci:
„It's highly recommended to use DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_string() for PostgreSQL), but if the DBMS you're using does't have an escape function and the DBMS uses \ to escape special chars, you can use this function.”
Offline
Stránky: 1