ugrás a tartalomhoz

PHP Mysql Hírkezelő backslash hiba

aky22 · 2011. Május. 5. (Cs), 18.33
Hali! Lenne egy olyan kérdésem hogy hogy lehet azt megcsinálni hogy kiíratásnál ne rakja bele a \ jelet a kódba mer a hír létrehozásakor az adatbázisba sajna bele kell rakni. Előre is kössz.
 
1

stripslashes

solkprog · 2011. Május. 5. (Cs), 18.42
stripslashes el tudod un escapelni a szöveget, de azért htmlspecialshars engedj rá kiíratás előtt.
2

Köszi

aky22 · 2011. Május. 5. (Cs), 18.54
Ha hazaértem kipróbálom. Köszi!
3

Miért kellene belerakni?

TeeCee · 2011. Május. 9. (H), 09.28
Mármint az adatbázisba a perjeleket? Az adatbázisba berakáskor kell levédeni (escape) a különleges karaktereket, de kiolvasáskor az nem lesz a string része. (Mint pl php-val kiíratás esetén az alábbi string kiírásakor sem lesz benne perjel:
$string = "idézet X.-től: \"szép idézet\"";
Tehát szerintem vagy rosszul csinálsz valamit az adatbázisba mentéskor, vagy nagyon rég használtam közvetlenül adatbázisba írást...
(Saját függvénytáram van erre, így tényleg rég használtam :D )

Beíráskor: mysql_real_escape_string()
Kiolvasáskor nem kell semmi.
Kiíratáskor: htmlspecialshars() ahogy solkprog helyesen javasolta.
4

Beíráskor:

kuka · 2011. Május. 9. (H), 09.46
Beíráskor: mysql_real_escape_string()
De ha php.ini-ben a magic_quotes_gpc állítás on, akkor a $_GET, $_POST és $_COOKIE tömbök értékei automatikusan kapnak egy adag fordított törtvonalas árnyékolást a különleges jelentésű karaktereikre. Ezeket pedig a mysql_real_escape_string() megduplázza, tehát bekerülnek az adatbázisba:

$_GET['ize'] => '3.5" lemez'     // alapból
$_GET['ize'] => '3.5\" lemez';   // magic_quotes_gpc on hatására
$_GET['ize'] => '3.5\\\" lemez'; // mysql_real_escape_string() után
Ezért kell használni a solkprog által említett stripslashes() függvényt. Bár a hordozhatóság kedvéért lehetőleg feltételesen, csak ha a get_magic_quotes_gpc() függvény visszatérési értéke true.

De szerencsére a magic_quotes_gpc állítás már ellenjavallt, remélhetőleg hamarosan el is tűnik.
5

Megfordítanám....

TeeCee · 2011. Május. 9. (H), 14.56
... a dolgot, illetve nálam azért nem okozott problémát, mert én eleve úgy csináltam.

A magic_quotes-től függően már induláskor meg kell szabadítani a változókat a fölösleges dolgoktól, mert mindenhova bekerülnek! (Illetve mindenhol el lehet játszani, hogy vagy van magic_quotes, vagy nincs, de csak normálisabb egyszer jól megcsinálni...)

Emlékeim szerint ez működik: http://www.php.net/manual/en/function.get-magic-quotes-gpc.php#97783
6

Megoldódott

aky22 · 2011. Május. 12. (Cs), 16.06
Hali! Köszi de megoldódott mysql_real_escape_string(stripslashees()) asszem valahogy így és jóó.
7

addig jó amig

solkprog · 2011. Május. 12. (Cs), 17.54
ez a megoldás addig jó amíg a magic quotes be van kapcsolva a szerveren. (mint ahogy a többiek helyesen megjegyezték ezt a hozzászolásom után)

jobban jársz ha ezt beilleszted olyan helyre ami mindig lefut és még az adatbázis műveletek előtt van:

<?php
if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
?>
ez un escaple-el minden felhasználótól érkező adatot, így nem kell gyalogos módon egyesével a stripslashees -el.