PHP Sonderzeichen '

Hattrix

Cadet 4th Year
Registriert
März 2007
Beiträge
111
Hallo,

und zwar versuche ich via PHP und MySQL Datensätze von Usern einzufügen.

Ein SQL-Statement sieht zum Beispiel bei mir so aus:
PHP:
$strSQL = "INSERT INTO test (text) VALUES ('".$_POST["Text"]."')";

Nun kommt es vor, dass User das zeichen ' eingeben und php somit und logischerweise eine Fehlermeldung ausgibt.

Wie kann ich das Problem lösen?
 
escapen is das zauberwort

$strSQL = "INSERT INTO test (text) VALUES ('".mysql_escape_string($_POST["Text"])."')";
 
Zuletzt bearbeitet:
Dann erhalte ich das als Fehlermeldung:

Call to undefined function mysql_real_escape() ....
 
Wenn man die richtige Funktion nimmt, klappt das auch.
Die heiß mysql_real_escape_string()

Kann man auch ganz leicht googlen, bzw. php.net gibt dir auch die richtige Antwort.
 
ups xD habsch mich echt noch verschrieben xD
sowas passiert ohne syntaxhighlighting bei mir , sry nochma
habs abgeändert

du solltest immer escapen, bei insert wie auch bei where-bedingungen und sonstigen sachen, immer wenn du auf die datenbank zugreifst solltest du das tun.
alles was aus formulardaten kommt, koennte ja schaltcode beinhalten ;) siehe auch wie Mridul sagt, das thema sqlinjection
 
Zuletzt bearbeitet:
Nicht nur was aus Formulardaten kommt, generell alles was vom Browser geschickt wird ist zu escapen.
 
@luky37
Und dor t bekomme ich dann öfters das Problem, dass mir PHP mysql_real_escape_strin() unnötige ' \ ' bei einem ' hinzufügt. Obwohl Text, Webseite und DB als UTF8 kodiert ist. bei Addslahes bekomme ich dann sogar "\\" raus O.o Also wenn ich beides Einsätze. Hat jemand eine Idee?
 
@Eagle-PsyX-: Dann musst nach dem auslesen eventuell noch ein stripslashes aufrufen. Das entfernt die Slashes wieder.
 
Ich meinte man soll immer escapen, aber nicht mehrmals.


Auf gar keinen Fall sollte man erst escapen mit addslashes, und dann nochmal ein mysql_real_escape_string(stripslashes()) anwenden.


Ich habe mich vielleicht etwas falsch ausgedrückt. Man soll nicht alles in einem Rutsch escapen, sondern nur dann wenn es benötigt wird.


Bei einer Ausgabe mit einem echo, sollte man mit htmlspecialchars escapen, in mysql mit mysql_real_escape_string(). Man darf dann aber nicht hergehen und ganz am Anfang mal alle input strings mit addslashes behandeln.
 
@Eagle-PsyX: Kann es sein, dass dein Server magic_quotes_gpc=on hat? Das ist nämlich meist das wahre Übel dafür und nicht die mysql-Escape-Funktion selbst.
 
Hm muss ich genau anschauen. Jeder meiner Kunden hat eine andere Konfiguration und mein Online-Server oder Localhost sicher nochmal eine andere.
Jaein, die Daten werden über einen WYSIWYG-Editor (FCKeditor) geparst. Evtl. sollte ich mal überprüfen, ob der sowas ähnliches schon durchführt.

@lucky
Ich erinnere mich mal bei php.net ein Beispiel mit mysql_real_escapre_string(addslashes($string)); gesehen zu haben :-(
 
Der FCKEditor macht kein addslasches oder ähnliches (jedenfalls nicht die Version die bei mir im Einsatz ist). Würde mich auch sehr wundern wenn er es macht.

@lucky
Ich erinnere mich mal bei php.net ein Beispiel mit mysql_real_escapre_string(addslashes($string)); gesehen zu haben :-(
Wäre ziemlich sinnlos, beide Funktionen aufzurufen, da sie (ziemlich) dass selbe machen.
 
Deswegen benutzt man ja auch kein mysql_real..... bei Browserausgaben sondern htmlspecialchars oder htmlentities. MfG
 
@Destruction
Das hat doch niemand behauptet?
Ich nutzte das in dem Beispiel, bei der Abspeicherung von FCKeditor-eingegebene Texte. Das hat nichts mit der Ausgabe zu tun. Nur wenn ' eben als \' in der Datenbank steht, wird es auch falsch dargestellt.
 
krizzelfix schrieb:
Wäre ziemlich sinnlos, beide Funktionen aufzurufen, da sie (ziemlich) dass selbe machen.


Aber Achtung, wenn mit mysql gearbeitet wird, sollte immer mit mysql_real_escape_string() escaped werden, da addslashes nicht alle notwendigen Zeichen escaped!
 
Zurück
Oben