Autor | Zpráva | ||
---|---|---|---|
Daviart Profil |
#1 · Zasláno: 16. 4. 2011, 17:29:23
Při odesílání formuláře, když text obsahuje uvozovky - přidává před ně lomítko.
Po úspěšném odeslání vše funguje tak jak má, do databáze se uloží uvozovky bez zpětného lomítka. Opětovné načtení a uložení je také bez problému. Pokud je formulář špatně vyplněn a znovu načtu obsah z $_POST přidají se lomítka. Pokud to má za následek přidání escape, nevím jak zabránit opětovným přidáváním s každou kontrolou. nalezl jsem několik řešení, nejprve jsem zkoušel: echo htmlspecialchars($_POST["text"]); i před převedené znaky se vkládá lomítko dále jsem našel ošetření pomocí ternárního operátoru: http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=117686 nenalezl jsem alternativní řešení pro ošetření $_POST (nebo $_GET) můj kód: <?php function formobsahpole ($formObsahPolePOST , $formObsahPoleSQL) { if (!empty($formObsahPolePOST)) { $formObsahPolePOSTuprav = ($formObsahPolePOST); // tady bude možná ještě funkce return($formObsahPolePOSTuprav); // formulář je opravován, načte $_POST } else { return($formObsahPoleSQL); // formulář načte obsah z databáze, $_POST neobsahuje data } } ?> <!-- předchozí kód --> <label>Anotace* <span class='popis'>(max. 255 snaků)</span><br> <textarea class='textarea' name='anotace' id='anotace' cols='50' rows='5'><?php echo (formobsahpole($_POST['anotace'] , $ZaznamANOTACE)); ?></textarea> </label> <!-- kód pokračuje --> předem díky |
||
panther Profil |
#2 · Zasláno: 16. 4. 2011, 17:32:14
|
||
Daviart Profil |
#3 · Zasláno: 16. 4. 2011, 17:47:57
Tak se omlouvám za zbytečné vlákno. Kdybych používal lépe hlavu, přišel bych na to dříve, použil jsem na to funkci
stripslashes function formobsahpole ($formObsahPolePOST , $formObsahPoleSQL) { if (!empty($formObsahPolePOST)) { $formObsahPolePOSTuprav = stripslashes($formObsahPolePOST); // zbavíme se dalších lomítek return($formObsahPolePOSTuprav); // formulář je opravován, načte $_POST } else { return($formObsahPoleSQL); // formulář načte obsah z databáze, $_POST neobsahuje data } } |
||
panther Profil |
#4 · Zasláno: 16. 4. 2011, 17:50:24
Daviart:
stripslashes sice udělají, co chceš, ale je to jen zaplácnutí problému, ne jeho vyřešení. Řešením by bylo lomítka nevytvářet, když je nepotřebuješ.
|
||
ShiraNai7 Profil |
#5 · Zasláno: 16. 4. 2011, 18:07:25
panther, Daviart:
Já to řeším tak, že již v inicializačním skriptu systému magic_quotes detekuji a případně pak vyruším jejich efekt a vypnu je pro další funkce (např. později načítané soubory).. potom nemusím řešit, zda jsou zapnuty či nikoliv a aplikace se bude chovat stejně na různém nastavení magic_quotes. (Podobně řeším zapnuté register_globals). // revert and disable magic quotes if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() === 1) { // revert $in = array(&$_GET, &$_POST, &$_COOKIE); while(list($key, $val) = each($in)) { foreach($val as $key2 => $val2) { if(!is_array($val2)) { $in[$key][$key2] = stripslashes($val2); continue; } $in[] = &$in[$key][$key2]; } } // disable if(function_exists('set_magic_quotes_runtime')) set_magic_quotes_runtime(0); } |
||
Daviart Profil |
#6 · Zasláno: 16. 4. 2011, 18:22:32
Ale kdybych vypnul
magic_quotes_gpc tím to stripslashes($formObsahPolePOST) Ještě se pokusím o tom něco načíst, ale prozatím nic lepšího asi nevymyslím. |
||
Daviart Profil |
#7 · Zasláno: 16. 4. 2011, 18:27:24 · Upravil/a: Daviart
|
||
panther Profil |
#8 · Zasláno: 16. 4. 2011, 18:37:42
Daviart:
„budu mít zase práci je vytvářet při ukládání do databáze“ do DB je lépe ukládat stringy oetřené funkcí mysql_real_escape_string. |
||
ShiraNai7 Profil |
#9 · Zasláno: 16. 4. 2011, 19:26:19
Daviart:
„A při ukládání do databáze jsou lomítka před znaky opět jinou funkcí vytvářeny?“ Viz příspěvek od panthera :) Databázový wrapper používá mysql_real_escape_string() pro řetězce. |
||
Daviart Profil |
#10 · Zasláno: 16. 4. 2011, 20:19:24
díky moc!
|
||
Časová prodleva: 13 let
|
0