Matematické Fórum

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

#1 19. 08. 2010 12:48

Olin
Místo: Brno / Praha
Příspěvky: 2823
Reputace:   81 
 

Zpracování I/O PHP+MySQL

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!


Matematika = královna věd. Analýza = královna matematiky. (Teorie množin = bohatství matematiky.)
MKS Náboj iKS

Offline

  • (téma jako vyřešené označil(a) Olin)

#2 19. 08. 2010 13:36

Lukee
Administrátor
Místo: Opava
Příspěvky: 1863
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: Zpracování I/O PHP+MySQL

↑ 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

Code:

 // %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í“.)


2+2=4

Offline

 

#3 19. 08. 2010 14:46

Olin
Místo: Brno / Praha
Příspěvky: 2823
Reputace:   81 
 

Re: Zpracování I/O PHP+MySQL

Díky, už to šlape jako hodinky.


Matematika = královna věd. Analýza = královna matematiky. (Teorie množin = bohatství matematiky.)
MKS Náboj iKS

Offline

 

#4 23. 08. 2010 19:24

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Zpracování I/O PHP+MySQL

Zdravím, jenom dodám, že takových funkcí pro ošetření jsou mraky: addslashes, či třeba htmlspecialchars.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#5 24. 08. 2010 11:02

Lukee
Administrátor
Místo: Opava
Příspěvky: 1863
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: Zpracování I/O PHP+MySQL

↑ 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.”


2+2=4

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson