3 Stimmen

Speichergröße überschritten?

Ich habe ein Formular, das Daten an eine Datenbank sendet, ich habe eine Funktion, die wie folgt aussieht:

//connect 
foreach ($_POST as $key => $value) {
    $_POST[$key] = mysql_real_escape_string($value);
}

Wenn ich jetzt etwas poste, erhalte ich manchmal eine Fehlermeldung, die Folgendes besagt:

Erlaubte Speichergröße von 268435456 Bytes ausgeschöpft

Ich habe herausgefunden, dass, wenn ich einen Zeilenumbruch zu tun, oder drücken Sie die Eingabetaste in das Nachrichtenfeld, dann ist das, wenn es den Fehler verursacht, sonst funktioniert es normal. irgendwelche Ideen?

1voto

VolkerK Punkte 93746

Versuchen Sie bitte, den Fehler zu reproduzieren mit

$mysql = mysql_connect(...

printf("<pre>Debug: count(_POST)==%d</pre>", count($_POST));
foreach ($_POST as $key => &$value) {
  printf("<pre>Debug: strlen(_POST[%s])==%d</pre>", htmlspecialchars($key), strlen($value)); flush();
  $value = mysql_real_escape_string($value, $mysql);
}
printf("<pre>Debug: Done.</pre>");

Wird dabei etwas "Ungewöhnliches" vor der Meldung "Erlaubte Speichergröße von 268435456 Bytes erschöpft" ausgegeben?

edit und btw: Ich "mag" die Art und Weise nicht, wie Sie versuchen, die real_escape_string Sache aus zwei Gründen zu behandeln:

  • Lassen Sie _POST möglichst unverändert, ändern Sie seine Werte nicht. ( Ich würde allerdings eine Ausnahme für das Rückgängigmachen von magic_quotes machen ;-) )
  • Bearbeiten Sie nur die Felder, von denen Sie wissen, dass Sie sie benötigen. Schreiben Sie keine "Kodiere und speichere in der Datenbank alles, was in _POST steht"-Funktion, auch wenn das nach einer guten Idee und super-wiederverwendbarem Code klingen mag. Wenn Sie es einigermaßen wiederverwendbar halten wollen, übergeben Sie der Funktion ein Array mit Beschreibungen. In diesem Array können Sie z.B. Informationen wie [Name des Formularfeldes, zulässiger Datentyp/Validierungsregeln, Datenbankfeldname] speichern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X