Mysql_real_escape_string nötig?

Muss ich um Texte in die Datenbank einzutragen die Funktion mysql_real_escape_string benutzen, oder macht die das von alleine? Weil wenn ich es so mache und den Text beim ausgeben dann durch htmlspecialchars() schütze, werden die Zeichen falsch angezeigt. Soll ich dann mysql_…() oder html…() weglassen oder gibt es eine andere Möglichkeit?

Ja.

Das wird an den hier ungünstigerweise immer noch aktivierten magic_quotes_gpc liegen.

Das korrekte Vorgehen:
Prüfen, ob magic_quotes_gpc aktiviert ist, und wenn ja, diese Verfälschung der Daten rückgängig machen, bevor sie weiter verarbeitet werden.

Anschließend mysql_real_escape_string vor dem Eintragen der Daten in die Datenbank;
htmlspecialchars vor der Ausgabe im HTML-Kontext.

Danke für deine schnelle Antwort :slight_smile:
Inwiefern verfälscht magic quotes denn die Daten?

php.net/manual/en/info.confi … quotes-gpc

Danke für den Link. Hab da nicht ganz durchgeblickt, aber habe die Funktion stripslashes() gefunden. Damit würde es gehn. Macht es Sinn erst stripslashes() auszuführen und dann mysql_real_escape_string()? Oder lieber anders?

ich würd dir eher sowas raten: // Turn Magic Quotes Off when needed if(function_exists('get_magic_quotes_runtime')) @set_magic_quotes_runtime(0); // endzum einen gibts magic_quotes seit PHP 5.3 nicht mehr richtig size=85[/size] und ab PHP 6 gar nicht mehr.
Das es hier leider per Default an ist [size=85](PHP Default ist natürlich aus)[/size] liegt vermutlich daran, dass man so Meldungen ahnungsloser User vermeiden wollte o.ä.
Jeder der ernsthaft mit PHP zu tun hat, wird früher oder später mal von magic_quotes gehört haben und demnach dies in allen seinen Scripten deaktivieren falls vorhanden.
Und für die, die keine Ahnung haben ists vielleicht besser das magic_quotes an ist^^

Man sollte aber wohl eher den Code von Example #2 nehmen :smiley:
php.net/manual/en/security.m … abling.php
Und direkt auch noch via .user.ini/.php.ini das ganze ausstellen da das Deaktivieren in PHP selbst nicht so effizient ist^^

Schau dir am besten das hier an: php.net/manual/en/security.magicquotes.php

Ja, per php.ini/.user.ini/.php.ini abstellen ist das beste. Falls das aber nicht geht, muss so etwas her:

function disable_magic_quotes() { if(function_exists('get_magic_quotes_runtime')) @set_magic_quotes_runtime(0); if (@ini_get("magic_quotes_gpc") != 1) return; $recursewalk = create_function('&$item, $key','$item = stripslashes($item); '); @array_walk_recursive($_GET, $recursewalk); @array_walk_recursive($_POST, $recursewalk); @array_walk_recursive($_REQUEST, $recursewalk); @array_walk_recursive($_COOKIE, $recursewalk); if (substr(phpversion(), 0, 2) == "4.") @array_walk_recursive($_ENV, $recursewalk); } disable_magic_quotes();

@white Tiger: Habs ausprobiert, löst das Problem leider nicht mit deinem Code. Mit dem Code aus Beispiel 2 klappt es aber, danke :slight_smile:

@progandy: Dein Code löst bei mir ne Fehlermeldung aus :smiley: Aber habs jetzt ja auch mit whiteTigers Code hinbekommen.

Wegen dem php.ini, ich hab irgendwie das Gefühl, als hätte ich das schonmal gemacht. Hab aber vergessen wies geht. Einfach eine Datei mit .htaccess erstellen und hochladen?

[quote=“Spunk”]@progandy: Dein Code löst bei mir ne Fehlermeldung aus :smiley: Aber habs jetzt ja auch mit whiteTigers Code hinbekommen.
[/quote] Ähm, da fehlt ein Semikolon in create_function…

Nein, eine .user.ini hochladen mit Inhalte magic_quotes_gpc=0 oder so ähnlich.

Okay danke :slight_smile: Reicht es auch ohne? Ist ja jetzt per php ausgeschaltet.

[quote=„Spunk“]Okay danke :slight_smile: Reicht es auch ohne? Ist ja jetzt per php ausgeschaltet.[/quote]Zusätzlich ja… [size=85](damit dein Script eben Server unabhängiger ist)[/size] es aber „direkt“ abschalten ist besser… weil schneller :wink:

Ist doch auch net schwer ne .user.ini zu erstellen und dortmagic_quotes_gpc = Offrein zusetzen :ps:

es ist schwerer als du denkst :wink:
Kommt kein Semikolon dahinter?

Und wo genau soll es reinkopiert werden? Muss ich den Ordner php.ini erstellen und dadrin den order .user.ini und darein die datei php.ini laden (so hab ichs bei prograndy verstanden)?
Ausserdem kann ich keine Dateien auf dem Computer erstellen mit einem . am Anfang, weil die dem System vorbehalten sind. Reicht es, sie aufm Server umzubenennen? Wahrscheinlich. Aber sag bitte nochmal genau, wo :smiley:

Hi,

php.ini/user.ini haben nichts mit Ordnern am Hut - darum brauchst du diese Ordner auch nicht erstellen. Die Datei muss .user.ini oder .php.ini heißen - das Umbenennen auf dem FTP sollte reichen, wenngleich ich nicht verstehe wieso dein Betriebssystem das nicht macht - welches nutzt du denn?

Windoof erlaubt es net im Nachhinein [size=85](außer via CMD ren/move)[/size] mit der Begründung: „You must type a file name.“
Jedoch nur bei Dateien wie .htaccess. .user.ini hat ja .ini als Endung daher erlaubt :wink:
Selbes gilt unnötigerweise auch für Ordner… [size=85](ich würd den Schrott echt gern abstellen, nur wie ich M$ kenn ists hardcoded^^)[/size]

Wenn man ne Datei direkt mitm Editor etc. erstellt, hat man solche Probleme aber net.

Ich benutze Mac und da sind Dateien die mit einem . beginnen dem System vorbehalten und unsichtbar. Also selbst wenn ich sie damit abspeichere kann ichs nicht finden :smiley:
Aber ich habs jetzt ohne Punkt gespeichert und dann hochgeladen und dort umbenannt, scheint geklappt zu haben. Danke für eure Hilfe :slight_smile:

Auch aufn Mac gehts auch wenns bissl doof is …

Wenn du ne Datei (mit nem Editor) nen Namen mit . am Anfang gibst dann siehst du sie zwar nicht mehr im Finder aber du kannst dann in Filezilla rein gehn und da wird dir die Datei wieder angezeigt …

Des doofe is halt wenn du vergisst wo du die Datei gespeichert hast :wink:

lg flo

[quote=“Ryon_”]Auch aufn Mac gehts auch wenns bissl doof is …

Wenn du ne Datei (mit nem Editor) nen Namen mit . am Anfang gibst dann siehst du sie zwar nicht mehr im Finder aber du kannst dann in Filezilla rein gehn und da wird dir die Datei wieder angezeigt …

Des doofe is halt wenn du vergisst wo du die Datei gespeichert hast :wink:

lg flo[/quote]

War mir klar, so hab ichs ja oben auch geschrieben :wink:
// Also ausser das mit Filezilla

hehe wollte halt auch meinem senf dazu geben !haue