Forumtext in Datenbank speichern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
ausgeben
auslese
benutzen
code
dank
darstellen
datenbank
editor
eingabe
http
index
manual
problem
speichern
string
text
url
webseite
weglassen
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Guten Tag,
ich kann dir hir empfehlen mal die Funktion die PHP dir bietet in der PHP-Manual nachzuschlagen, meines Wissens bieten sowohl SQLite als auch MYSQL Funktionen wie http://php.net/manual/de/function.sqlite-escape-string.php sqlite_escape_string();
Grüße webaffe -
Für MySQL wäre das mysql_real_escape_string()
php-oop schrieb:
Würde ich nicht vor dem Eintragen in die DB machen. Ich würde so etwas erst bei der Ausgabe machen, und dort solltest du noch zusätzlich htmlentities() oder htmlspecialchars() nutzen um auch XSS zu verhindern.
Bisher habe ich das so:$text = nl2br($_POST ['text']);
-
hackyourlife schrieb:
Für MySQL wäre das mysql_real_escape_string()
php-oop schrieb:
Würde ich nicht vor dem Eintragen in die DB machen. Ich würde so etwas erst bei der Ausgabe machen, und dort solltest du noch zusätzlich htmlentities() oder htmlspecialchars() nutzen um auch XSS zu verhindern.
Bisher habe ich das so:$text = nl2br($_POST ['text']);
Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?
Also so:$text = $_POST ['text'];
-
php-oop schrieb:
Ich meinte es so:
Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?
Also so:$text = $_POST ['text'];
Beim Speichern in die DB nutzt du so etwas:$text = mysql_real_escape_string($_POST['text']); mysql_query("INSERT INTO `nirgendwo` (`text`) VALUES ('$text')") or die(mysql_error());
Beim Auslesen aus der DB und Darstellen auf der Webseite nutzt du dan z.B. sowas:echo(nl2br(htmlentities($text_aus_der_db)));
-
hackyourlife schrieb:
php-oop schrieb:
Ich meinte es so:
Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?
Also so:$text = $_POST ['text'];
Beim Speichern in die DB nutzt du so etwas:$text = mysql_real_escape_string($_POST['text']); mysql_query("INSERT INTO `nirgendwo` (`text`) VALUES ('$text')") or die(mysql_error());
Beim Auslesen aus der DB und Darstellen auf der Webseite nutzt du dan z.B. sowas:echo(nl2br(htmlentities($text_aus_der_db)));
Achso, okay.
So hab ich das jetzt gemacht.
Danke!
EDIT: Ich merke gerade, ich hab noch ein Problem:
Für $_POST ['text']; benutze ich den Editor TinyMCE, der ist also in der Textarea.
Wenn ich jetzt den Beitrag speichere, wird der HTML Code auf der Beitragsseite angezeigt. Aber der soll dann ja ausgeführt werden.
Wie mache ich das jetzt noch?
Beitrag zuletzt geändert: 4.1.2013 12:34:15 von php-oop -
php-oop schrieb:
hackyourlife schrieb:
php-oop schrieb:
Ich meinte es so:
Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?
Also so:$text = $_POST ['text'];
Beim Speichern in die DB nutzt du so etwas:$text = mysql_real_escape_string($_POST['text']); mysql_query("INSERT INTO `nirgendwo` (`text`) VALUES ('$text')") or die(mysql_error());
Beim Auslesen aus der DB und Darstellen auf der Webseite nutzt du dan z.B. sowas:echo(nl2br(htmlentities($text_aus_der_db)));
Achso, okay.
So hab ich das jetzt gemacht.
Danke!
EDIT: Ich merke gerade, ich hab noch ein Problem:
Für $_POST ['text']; benutze ich den Editor TinyMCE, der ist also in der Textarea.
Wenn ich jetzt den Beitrag speichere, wird der HTML Code auf der Beitragsseite angezeigt. Aber der soll dann ja ausgeführt werden.
Wie mache ich das jetzt noch?
Guten Tag,
du musst das htmlentinities() weglassen, allerdings hast du dann wieder das Problem mit XSS, vielleicht solltest du dir mal BB-Code anschauen...
Grüße webaffe -
Ich würde lieber mal einen Blick auf PDO oder Mysqli werfen.
Und dort den Part mit den prepared Statements. Damit sicherst du eigentlich alles ab und musst deine Texte nicht irgendwie umformatieren. -
webaffe schrieb:
php-oop schrieb:
hackyourlife schrieb:
php-oop schrieb:
Ich meinte es so:
Kann ich einfach das nl2br() weglassen, und die Eingabe einfach so speichern, wie es eingegeben wurde?
Also so:$text = $_POST ['text'];
Beim Speichern in die DB nutzt du so etwas:$text = mysql_real_escape_string($_POST['text']); mysql_query("INSERT INTO `nirgendwo` (`text`) VALUES ('$text')") or die(mysql_error());
Beim Auslesen aus der DB und Darstellen auf der Webseite nutzt du dan z.B. sowas:echo(nl2br(htmlentities($text_aus_der_db)));
Achso, okay.
So hab ich das jetzt gemacht.
Danke!
EDIT: Ich merke gerade, ich hab noch ein Problem:
Für $_POST ['text']; benutze ich den Editor TinyMCE, der ist also in der Textarea.
Wenn ich jetzt den Beitrag speichere, wird der HTML Code auf der Beitragsseite angezeigt. Aber der soll dann ja ausgeführt werden.
Wie mache ich das jetzt noch?
Guten Tag,
du musst das htmlentinities() weglassen, allerdings hast du dann wieder das Problem mit XSS, vielleicht solltest du dir mal BB-Code anschauen...
Grüße webaffe
Ja, die Idee mit BB Codes hatte ich auch schon.
Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden? Und muss das umgewandelt werden, wenn in die Datenbank gespeichert wird oder beim ausgeben? -
php-oop schrieb:
Selber programmieren ist nur für einfache BBCodes sinnvoll, ansonsten solltest du dir eine fertige Bibliothek suchen.
Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden?
php-oop schrieb:
Tipp: wandle immer erst bei der Ausgabe um, denn so kannst du den Text unkompliziert in verschiedenen Formaten ausgeben.
Und muss das umgewandelt werden, wenn in die Datenbank gespeichert wird oder beim ausgeben? -
hackyourlife schrieb:
php-oop schrieb:
Selber programmieren ist nur für einfache BBCodes sinnvoll, ansonsten solltest du dir eine fertige Bibliothek suchen.
Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden?
php-oop schrieb:
Tipp: wandle immer erst bei der Ausgabe um, denn so kannst du den Text unkompliziert in verschiedenen Formaten ausgeben.
Und muss das umgewandelt werden, wenn in die Datenbank gespeichert wird oder beim ausgeben?
Also so ungefähr die BB Codes hier von Lima würden mir reichen.
Kann ich es dann immernoch so:
echo(nl2br(htmlentities($text_aus_der_db)));
ausgaben lassen? Oder funktioniert das dann nicht?
Beitrag zuletzt geändert: 4.1.2013 13:58:30 von php-oop -
php-oop schrieb:
Egal was du machst wird es so immer funktionieren, nur wird das auch alle Steuerbefehle sichtbar machen.
Kann ich es dann immernoch so:
echo(nl2br(htmlentities($text_aus_der_db)));
ausgaben lassen? Oder funktioniert das dann nicht?
Bei BB-Codes würdest du es eher so machen, aber das ist nur Pseudocode:
Wie gesagt, für einfache BB-Codes kannst du dir durchaus selbst etwas basteln, z.B. mit regulären Ausdrücken, aber bei komplexeren Codes (wie z.B. hier im Forum) solltest du dir eine Bibliothek (*hust*) dafür suchen.echo(bbcode_zu_html($text_aus_der_db));
-
hackyourlife schrieb:
php-oop schrieb:
Egal was du machst wird es so immer funktionieren, nur wird das auch alle Steuerbefehle sichtbar machen.
Kann ich es dann immernoch so:
echo(nl2br(htmlentities($text_aus_der_db)));
ausgaben lassen? Oder funktioniert das dann nicht?
Bei BB-Codes würdest du es eher so machen, aber das ist nur Pseudocode:
Wie gesagt, für einfache BB-Codes kannst du dir durchaus selbst etwas basteln, z.B. mit regulären Ausdrücken, aber bei komplexeren Codes (wie z.B. hier im Forum) solltest du dir eine Bibliothek (*hust*) dafür suchen.echo(bbcode_zu_html($text_aus_der_db));
Danke für den Link :)
htmlentities() muss ich dann aber trotzdem benutzen, zum Schutz vor SQL Injection, oder? -
php-oop schrieb:
htmlentities() muss ich dann aber trotzdem benutzen, zum Schutz vor SQL Injection, oder?
schützt nur vor XSS, das hat aber nichts mit SQL-Injections zu tun. Gegen SQL-Injections schützt du dich mithtmlentities()
, was aber schon genannt wurde.mysql_real_escape_string()
-
hackyourlife schrieb:
php-oop schrieb:
htmlentities() muss ich dann aber trotzdem benutzen, zum Schutz vor SQL Injection, oder?
schützt nur vor XSS, das hat aber nichts mit SQL-Injections zu tun. Gegen SQL-Injections schützt du dich mithtmlentities()
, was aber schon genannt wurde.mysql_real_escape_string()
Achso, mysql_real_escape_string() nutze ich ja beim Speichern in die Datenbank.
Wie benutze ich die Klasse vom Link von dir? -
php-oop schrieb:
Die Klasse erfüllt diese Forderung:
Wie benutze ich die Klasse vom Link von dir?
php-oop schrieb:
Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden?
Dabei liest du aus der DB den Text aus, wandelst ihn mit der Klasse um (Doku dazu lesen!) und als Ergebnis bekommst du HTML-Code, den du auf deiner Webseite ausgeben kannst. Damit die Klasse weiß welche BB-Codes existieren und wie sie in HTML-Code umgerechnet werden sollen musst du noch entsprechende Regeln definieren, was du aber ebenfalls der Doku entnehmen kannst. -
hackyourlife schrieb:
php-oop schrieb:
Die Klasse erfüllt diese Forderung:
Wie benutze ich die Klasse vom Link von dir?
php-oop schrieb:
Wie programmiere ich das denn am besten, das dann die BB Codes umgewandelt werden?
Dabei liest du aus der DB den Text aus, wandelst ihn mit der Klasse um (Doku dazu lesen!) und als Ergebnis bekommst du HTML-Code, den du auf deiner Webseite ausgeben kannst. Damit die Klasse weiß welche BB-Codes existieren und wie sie in HTML-Code umgerechnet werden sollen musst du noch entsprechende Regeln definieren, was du aber ebenfalls der Doku entnehmen kannst.
Danke! Dann probiere ich das heute mal.
Danke dir für deine Hilfe! -
php-oop schrieb:
htmlentities() muss ich dann aber trotzdem benutzen
htmlentities muss man eigentlich nie benutzen. Wenn man keinen Mist in der Kodierung hat, reicht htmlspecialchars mit dem ENT_QUOTES-Flag und der Angabe der Kodierung vollkommen. Die Zeiten mit kaputt Umlauten sind lange vorbei. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage