Ich habe ein kleines Forum programmiert, dass mit PHP läuft und Einträge aus einer lokalen MySQL-Datenbank ausließt. Die neuen Beiträge, die ein User verfässt, werden über $_POST 'ausgelesen' und dann in die Datenbank geschrieben via "INSERT INTO posts [...]". Leider speichert 'er' aber die Zeichenfolge "<3" nicht. Alles was dahinter steht wird ebenfalls einfach so nicht gespeichert. Woran kann das liegen?
Anzeigefehler: "<3" verschwunden
-
-
Klingt fast so, als würdest du deine Queries nicht ordentlich escapen. Zeig dochmal den Codeschnipsel der für das einfügen in die Datenbank verantwortlich ist. Gibt es eine Fehlermeldung?~ mfg SeBa
Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.
[Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png] -
Ich glaube eher du gibst es nur falsch aus. Wenn du ein < ausgibst, dann öffnest du damit ein XML/HTML Tag.
Schau dir mal den geparsten HTML Quelltext an. -
Quellcode
- <?php
- if($_POST['sent'] == 1)
- {
- $tid = strip_tags($_POST['threadid']);
- $titel = strip_tags($_POST['titel']);
- $text = strip_tags($_POST['text']);
- // In Datenbank schreiben
- $sql = "INSERT INTO posts (threadid,userid,titel,text,datum) VALUES ('".$tid."','".$_SESSION['userid']."','".$titel."','".$text."','".time()."')";
- $result = mysql_query($sql);
- }
- ?>
Das ist der entsprechende Code. Ich habe schon vermutet, dass es an strip_tags liegt, aber das ist die einzige Möglichkeit HTML in den Beiträgen zu deaktivieren, oder habe ich da etwas falsch verstanden?
Vielen Dank für eure Hilfe -
du kannst auch alles in HTML Entities umwandeln: [phpdoc]htmlentities[/phpdoc]
-
d.h. ich soll die Beiträge so in die Datenbank speichern?:
Quellcode
- <?php
- if($_POST['sent'] == 1)
- {
- $tid = htmlentities($_POST['threadid']);
- $titel = htmlentities($_POST['titel']);
- $text = htmlentities($_POST['text']);
- // In Datenbank schreiben
- $sql = "INSERT INTO posts (threadid,userid,titel,text,datum) VALUES ('".$tid."','".$_SESSION['userid']."','".$titel."','".$text."','".time()."')";
- $result = mysql_query($sql);
- }
- ?>
-
ja.
Die Konvertierung beim Speichern kostet dich nur 1x Performace. Würdest du es beim Aufruf machen, würde es jedesmal Performance kosten. -
Du musst deine SQL-Statements noch gegen Injections absichern.~ mfg SeBa
Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.
[Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png] -
Funktioniert wunderbar! Vielen Dank!
-
t_R schrieb:
Funktioniert wunderbar! Vielen Dank!
Lies dich ein: [coderwiki]Informationen/PHP-MySQL-Injection[/coderwiki]. In deinem Fall musst du zu htmlentities noch [phpdoc]mysql_real_escape_string[/phpdoc] anwenden.
-
Teilen
- Facebook 0
- Twitter 0
- Google Plus 0
- Reddit 0