Verständnisfrage: mysql_real_escape_string

Falls du Magic Quotes GPC nicht von deinem Hoster deaktivieren lassen kannst, könnte dir folgender Code behilflich sein, um das gewünschte Ergebnis zu erhalten:
PHP:
function stripslashes_array(& $pArray)
{
    foreach($pArray as $key => $val)
    {
        if(is_string($val))
        {
            $pArray[$key] = stripslashes($val);
        }
        elseif(is_array($val))
        {
            $pArray[$key] = stripslashes_array($val);
        }
    }

    return $pArray;
}

if(get_magic_quotes_gpc())
{
    if(is_array($_GET))
    {
        $_GET = stripslashes_array($_GET);
    }

    if(is_array($_POST))
    {
        $_POST = stripslashes_array($_POST);
    }

    if(is_array($_COOKIE))
    {
        $_COOKIE = stripslashes_array($_COOKIE);
    }
}
 
Ok, hab mir jetzt auch sone Funktion gebastelt:

PHP:
// >>> STRIPSLASHES WENN magic_quotes_gpc==1
function no_magic($string) {
if (get_magic_quotes_gpc()) {
$string = stripslashes($string);
}
return $string;
}

// >>> ESCAPEN FUER DB
function escapen($string) {
mysql_real_escape_string(no_magic($string));
return $string;
}

Ich lad also Daten nur noch mit der Funktion 'escapen' ein:

PHP:
"INSERT INTO `tab` ( `id` , `var`  ) VALUES ('', '".escapen($variable)."')";

Trotzdem landen die Zeichen ' " \ nicht mit einem Backslash versehen in der DB, sondern so pur.
Steh ich da auf dem Schlauch, oder wes los?
 
Hallo,

Ich nutze die Funktionen wie folgt: die Magic Quotes werden deaktiviert, sodass ich die Daten in ihrer Rohform verarbeiten kann. Bei Zeichenketten wende ich dann die mysql_real_escape_string()-Funktion an, bei Ganzzahlen (rationale Zahlen, ?) die intval()-Funktion, bei Integerzahlen (natürliche Zahlen, ?) zusätzlich die abs()-Funktion. […]
Das mag jetzt an Haarspalterei grenzen, aber kann es sein, dass du hier ein paar Mengen und Begriffe durcheinandergewürfelt hast? „Ganzzahl“ und „Integerzahl“ bedeuten vom Begriff her zunächst mal dasselbe. Die Menge der Ganzzahlen { …, -2, -1, 0, 1, 2, … } wird mit ? bezeichnet. Die Menge der natürlichen Zahlen ? ist eine echte Teilmenge von ? und enthält genau alle positiven Ganzzahlen. Zur Menge der rationalen Zahlen ? gehören genau alle als Quotient zweier Ganzzahlen darstellbaren Zahlen (also die Bruchzahlen).

Insofern sollte man also [phpf]intval[/phpf] verwenden, wenn man ein Element von ? (eine Ganzzahl) erwartet und zusätzlich noch [phpf]abs[/phpf], wenn man ein Element von ? (eine positive Ganzzahl) erwartet. Will man mathematisch korrekt bleiben, müsste man dann aber auch noch die 0 ausschließen, da diese nicht in ? enthalten ist. Alternativ kann man auch als „Zielmenge“ ?? ansetzen, die Menge der nicht-negativen Ganzzahlen.

Nichts für ungut, Gumbo. Aber wenn man mathematische Symbole und Begriffe verwendet, dann sollte man schon wissen, was sie bedeuten. Es könnte ja jemand mitlesen, der es ganz genau nimmt :D

Grüße,
Matthias

PS: Damit ich auch noch was konstruktives zum Thema beitrage... ;)

[...] Ich lad also Daten nur noch mit der Funktion 'escapen' ein:

PHP:
"INSERT INTO `tab` ( `id` , `var`  ) VALUES ('', '".escapen($variable)."')";

Trotzdem landen die Zeichen ' " \ nicht mit einem Backslash versehen in der DB, sondern so pur.
Steh ich da auf dem Schlauch, oder wes los?
Diese Zeichen sollen ja auch nicht mit einem vorangestellten Backslash in der Datenbank stehen. [phpf]mysql_real_escape_string[/phpf] dient nur dazu, diese Zeichen für die Datenbankabfrage so zu maskieren, damit diese ihre Sonderbedeutung verlieren.
 
Zuletzt bearbeitet:
Ok, hab mir jetzt auch sone Funktion gebastelt:

PHP:
// >>> STRIPSLASHES WENN magic_quotes_gpc==1
function no_magic($string) {
if (get_magic_quotes_gpc()) {
$string = stripslashes($string);
}
return $string;
}

// >>> ESCAPEN FUER DB
function escapen($string) {
mysql_real_escape_string(no_magic($string));
return $string;
}

Ich lad also Daten nur noch mit der Funktion 'escapen' ein:

PHP:
"INSERT INTO `tab` ( `id` , `var`  ) VALUES ('', '".escapen($variable)."')";

Trotzdem landen die Zeichen ' " \ nicht mit einem Backslash versehen in der DB, sondern so pur.
Steh ich da auf dem Schlauch, oder wes los?

Ich verstehe dein Code nicht, du musst zwei Funktionen auf dein Wert anwenden, schau doch mal was php.net so bietet. http://www.php.net/manual/de/function.mysql-real-escape-string.php#AEN97140
 
Ui, da habe ich aber einige Begriffe durcheinander gebracht. Wie kam ich nur auf den Gedanken Ganzzahlen von Integerzahlen zu unterscheiden? Gut dass es hier noch aufmerksame Leser gibt.
 
Sauber. Immerhin versteh ich jetzt die function von mysql_escape_string.
Danke Mathias.

Bei Wiki gibt noch eine nettere Funktion um Variablen bezüglich magic_quotes und numeric zu escapen.
Hoffe, die Freunde der numerischen und integer-Zahlen sind damit auch einverstanden:

aus wikipedia.org:
PHP:
function quotesqlvar($value)
{
  // Stripslashes if quoted
  if (get_magic_quotes_gpc()) {
      $value = stripslashes($value);
  }
  // Quote if not integer
  if (!is_numeric($value)) {
      $value = mysql_real_escape_string($value);
  }
  return $value;
}
 
Alle Daten in Formularen, seis ob sie jetzt aus der DB, oder im Affenformular per POST eingeladen werden, werden mit stripslashes "ent-Backslasht", wenn magic_quotes_gpc ON sind.
Dadurch ist es jetzt aber nicht mehr möglich, dass im Formular ein Backslash verwendet werden kann. Der wird gekillt.
Hat das seine Richtigkeit?
 
Zurück