Autor | Zpráva | ||
---|---|---|---|
Mufna Profil |
#1 · Zasláno: 23. 9. 2009, 18:15:03
Zdravím Vás. Jak mám dosáhnout toho, aby data z $_POST byla ošetřena o přidávání backslashe před znaky: uvozovky, apostrof a lomítko ? Mám s tím problémy. Konkrétně mi jde např. o toto: mám formulářové pole pro vyplňování jména, kam lze zadat např. O'Connor. Pak mám funkci na ošetření formulářového vstupu pomocí regulárního výrazu, který mimo jiné umožňuje, aby zadané jméno obsahovalo apostrof, ale zároveň neumožňuje, aby obsahovalo \ (což bych rád takto ponechal). Když pak zadám O'Connor a odešlu, tak by to mělo projít, ale místo toho to vyhodí chybu (nevyhovuje regulárnímu výrazu). To je pravda, neb během zpracování (nevím, jak přesně to funguje, ale zřejmě jakmile se vytvoří $_POST['jmeno'], čili před vlastní kontrolou na shodu s regulárem) se tam dostane zpětné lomítko a z řetězce O'Connor je řetězec O\'Connor, a to se i vypíše v neodeslaném strnulém formuláři. Při každém dalším neúspěchu o odeslání kompletního formuláře se přidávají další zpětná lomítka.
Jak to mám ošetřit ? |
||
Vagrant Profil |
#2 · Zasláno: 23. 9. 2009, 18:55:41
Ahoj, můžeš sem vložit tu funkci? Pokud je toho hodně písni na mail...
|
||
Jan Tvrdík Profil |
#3 · Zasláno: 23. 9. 2009, 18:57:50
Mufna:
Lomítko automaticky přidává php direktiva magic_quotes_gpc. Lomítka lze ručně odstranit pomocí funkce stripslashes a případně i ručně přidat pomocí funkce addslashes. |
||
Mufna Profil |
#4 · Zasláno: 23. 9. 2009, 21:02:39 · Upravil/a: Mufna
function check_name($val) { $val = htmlspecialchars(trim($val)); $regexp = '/^[a-zA-ZáčďéěíňóřšťůúýžÁČĎÉĚÍŇÓŘŠŤŮÚÝŽ \.\\\'\-]+$/'; if (preg_match($regexp,$val) == 1) { return $val; } else { return false; } } Jan Tvrdík magic_quotes_gpc mám Off (nastaveno přes můj admin účet na hostingu, tak to snad funguje). Stejně ale v POSTU přibude lomítko (proč, to nevím) |
||
Vagrant Profil |
#5 · Zasláno: 23. 9. 2009, 21:29:09 · Upravil/a: Vagrant
Funkce sama osobě funguje...
a do funkce předáváš už přímo $_POST['...'] ? Nic dalšího se předtím neděje? |
||
Mufna Profil |
#6 · Zasláno: 23. 9. 2009, 21:33:40 · Upravil/a: Mufna
Vagrant
jaj sry... to tam píšeš... :-o nerozumím do funkce předáváš už přímo $_POST['...'] ? Nic dalšího se předtím neděje? O ničem co by se dělo předtím nevím. Teda nevím o ničem co by souviselo s $_POST. Prostě se odešle formulář, do $_POST se uloží input a pak na to nasadím tu funkci. Celý PHP je ručně psaný mnou, není to nějaká open-source aplikace, kde nevím co se kde děje. Je to jeden PHP soubor, na začátku je zpracování formuláře, na konci vlastní formulář. |
||
Vagrant Profil |
#7 · Zasláno: 23. 9. 2009, 21:37:28 · Upravil/a: Vagrant
„Vagrant
jaj sry... to tam píšeš... :-o nerozumím“ no, píšeš, že je to ještě před kontrolou... takže funkce to nedělá :) EDIT: Pošli mi ten soubor na mail pls... |
||
Mufna Profil |
#8 · Zasláno: 23. 9. 2009, 21:50:51
"Ještě před kontrolou" jsem myslel tak, že nevím, kde se tam to lomítko bere, a usoudil jsem (zřejmě správně), že ho už musí obsahovat proměnná POST, která se vytvoří odesláním formuláře. S $_POST['jmeno'] se postupně zachází takto:
$jmeno = ""; if (isset($_POST['process'])) { if ($_POST['process'] == 1) { require_once("libs/form_data_validation.php"); // obsahuje tu kontrolní funkci $jmeno = check_name($_POST['jmeno']); // a zde už $_POST['name'] musí obsahovat to lomítko A jak už jsem psal, magic_quotes_gpc mám (snad) vypnutý |
||
Vagrant Profil |
#9 · Zasláno: 23. 9. 2009, 21:54:31
Pak zkontroluj magic_qoutes_gpc a ještě asi lépe, jak napsal p.Tvrdík, použij stripslashes...
|
||
Mufna Profil |
#10 · Zasláno: 23. 9. 2009, 21:57:45
Vagrant
použij stripslashes Já se tomu chtěl vyhnout, no ale když to nepůjde, tak to budu muset použít. |
||
Časová prodleva: 15 let
|
0