Ich möchte (authorisierten) Usern erlauben HTML Code in ein Eingabeformular zu tippen, will dies in MySql speichern und später wieder zurück holen um den Code zu bearbeiten und auf einer Seite anzuzeigen.
Sicherheit ist kein Problem, weil nur vertrauenswürdige User Zugriff auf die Funktion bekommen, das Problem liegt im Escapen, oder anders gesagt, ich verliere völlig die Übersicht.
Ich beginne mit einem HTML Formular
Der User soll jetzt beliebigen Text eingeben dürfen, also auch CSS, JavaScript, usw., mit sämtlichen Sonderzeichen, Anführungszeichen und sonstwas.
Dann wird das Formular gesendet, ich bekomme den Text und will ihn in MySql speichern:
Das geht natürlich nicht so einfach, weil da alle möglichen Sonderzeichen, insbesondere Anführungszeichen, drin stehen können, die Probleme machen.
Frage 1: Wie muss ich den Code ändern oder ergänzen, damit immer ganz exakt das was der User eingetippt hat in MySql landet?
Reicht mysql_real_escape_string() oder brauche ich noch addslashes() stripslashes() oder was sonst?
Jetzt das Ganze rückwärts, und da wirds kompliziert, weil ich 2 verschiedene Versionen brauche.
1.) Anzeige in einem Formularfeld zum bearbeiten des Codes.
Hier fehlt mir die Konvertierung, die den Text so anzeigt wie er ist, inkl. aller Sonderzeichen, und so, dass ich den Text nach dem Senden im update.php auch wieder 1:1 in MySql eintragen kann.
Mache ich gar nichts, setzt er in der textarea Sonderzeichen um, statt " macht er ein Anführungszeichen.
Mache ich htmlspecialchars($data->content), zeigt er zwar in der Textarea alles richtig an, aber beim Senden bekomme ich statt Anführungszeichen halt "
Frage 2: Wie bekomme ich den Text aus MySql so in die textarea, als ob der User es gerade eingetippt hätte.
2) Anzeige auf einer Seite
Frage 3: Wie bekomme ich den Text aus MySql so in die Seite wie er in MySql steht, völlig egal aus was für einer wilden Mischung aus JavaScript, CSS und sonstwas der Text besteht?
Dass es geht weiss ich, weil PHPMyAdmin damit keinerlei Probleme hat, aber wie macht der das?
Sicherheit ist kein Problem, weil nur vertrauenswürdige User Zugriff auf die Funktion bekommen, das Problem liegt im Escapen, oder anders gesagt, ich verliere völlig die Übersicht.
Ich beginne mit einem HTML Formular
Code:
<form action="save.php" method="post">
<textarea name="meintext">
...
Der User soll jetzt beliebigen Text eingeben dürfen, also auch CSS, JavaScript, usw., mit sämtlichen Sonderzeichen, Anführungszeichen und sonstwas.
Dann wird das Formular gesendet, ich bekomme den Text und will ihn in MySql speichern:
Code:
$content = mysql_real_escape_string($_POST['meintext']);
mysql_query("INSERT INTO `texte` (`content`) VALUES ('".$content."')");
Das geht natürlich nicht so einfach, weil da alle möglichen Sonderzeichen, insbesondere Anführungszeichen, drin stehen können, die Probleme machen.
Frage 1: Wie muss ich den Code ändern oder ergänzen, damit immer ganz exakt das was der User eingetippt hat in MySql landet?
Reicht mysql_real_escape_string() oder brauche ich noch addslashes() stripslashes() oder was sonst?
Jetzt das Ganze rückwärts, und da wirds kompliziert, weil ich 2 verschiedene Versionen brauche.
1.) Anzeige in einem Formularfeld zum bearbeiten des Codes.
Code:
$data = mysql_fetch_object(mysql_query("SELECT `content`FROM `texte` WHERE `id` = 1"));
print <<<END
<form action="update.php" method="post">
<textarea name="meintext">
$data->content
</textarea>
...
END;
Hier fehlt mir die Konvertierung, die den Text so anzeigt wie er ist, inkl. aller Sonderzeichen, und so, dass ich den Text nach dem Senden im update.php auch wieder 1:1 in MySql eintragen kann.
Mache ich gar nichts, setzt er in der textarea Sonderzeichen um, statt " macht er ein Anführungszeichen.
Mache ich htmlspecialchars($data->content), zeigt er zwar in der Textarea alles richtig an, aber beim Senden bekomme ich statt Anführungszeichen halt "
Frage 2: Wie bekomme ich den Text aus MySql so in die textarea, als ob der User es gerade eingetippt hätte.
2) Anzeige auf einer Seite
Code:
$data = mysql_fetch_object(mysql_query("SELECT `content` FROM `texte` WHERE `id` = 1"));
print $data->content;
Frage 3: Wie bekomme ich den Text aus MySql so in die Seite wie er in MySql steht, völlig egal aus was für einer wilden Mischung aus JavaScript, CSS und sonstwas der Text besteht?
Dass es geht weiss ich, weil PHPMyAdmin damit keinerlei Probleme hat, aber wie macht der das?