Hi Engin,
Ok, das habe ich begriffen, ich hab die ganze Zeit überlegt, wie ich das später auszugebende bereits bei der Eingabe
Sauber (für die HTML Ausgabe) in die Datenbank kriege.
Das war wohl der falsche Ansatz.
Ich verstehe deine Denkweise ;-) Du willst die Datenbank sauber halten, bedenke aber bitte, dass die Datenbank kein Datenträger bei dir zu Hause in einem Safe ist, wo niemand drankommt. Du musst grundsätzlich davon ausgehen, dass theoretisch jemand deine Datenbank cracken könnte und dir "böse" Daten in die Datenbank schreiben könnte.
Aus diesem Grund sollte dein Ausgabe-Programm mit _jeglichem_ Inhalt aus der Datenbank rechnen und ihn z.B. für die HTML-Ausgabe stets korrekt kodieren, die Funktionen htmlentities() und htmlspecialcahrs() kennst du nun ja.
if(get_magic_quotes_gpc()) {
$interpret = stripslashes($_POST['interpret']);
$album = stripslashes($_POST['album']);
$songtext = stripslashes($_POST['songtext']);
} else {
$interpret = $_POST['interpret'];
$album = $_POST['album'];
$songtext = $_POST['songtext'];
}
Gut, du hast selber schon festgestellt, dass PHP ein sehr nervendes Feature names magic_quotes besitzt - zum Glück wird dieses ab PHP 6 nicht mehr existieren, deshalb ist es gut, wenn du es hier direkt richtig machst: Falls magic_quotes aktiviert war, mache es mit stripslashes() rückgängig.
$eintrag = sprintf ("INSERT INTO songtexte (interpret, album, datum, songtext) VALUES ('$interpret', '$album', '$datum', '$songtext')",
mysql_real_escape_string($interpret),
mysql_real_escape_string($album),
mysql_real_escape_string($songtext),
$_POST['user_id']);
Mache dir bitte bewusst, was hier passiert, du hast folgenden String notiert:
"INSERT INTO songtexte (interpret, album, datum, songtext) VALUES ('$interpret', '$album', '$datum', '$songtext')"
Das ist ein double-quoted String, also zwischen " eingeschlossen. In einem solchen String werden Variablen ersetzt, PHP macht daraus also:
"INSERT INTO songtexte (interpret, album, datum, songtext) VALUES ('Max Mustermann', 'Musteralbum', '2008-01-01', 'Trala la la la')"
Und erst _dieser String_ wird an die Funktion sprintf() übergeben! Was soll denn sprintf() deiner Meinung da noch machen? Da steht doch schon alles drin ;-)
Sicherlich ist sprintf() nicht gerade die einfachste Funktion zum Nutzen, vielleicht solltest du erst mal die Anfänger-Methode bevorzugen:
~~~php
$sql = "INSERT INTO songtexte (
interpret,
album,
datum,
songtext
)
VALUES (
'" . mysql_real_escape_string($interpret) . "',
'" . mysql_real_escape_string($album) . "',
'" . mysql_real_escape_string($datum) . "',
'" . mysql_real_escape_string($songtext) . "'
)";
$result = mysql_query($sql) OR die(mysql_error());
Ich habe hier auch noch eine Auswertung der Rückgabe von mysql\_query() eingebaut, im Fehlerfall gibt das Script die Fehlermeldung von mysql\_error() aus und bricht ab. Im Produktiveinsatz ist das nicht empfehlenswert, zum Debuggen und Entwickeln aber sehr hilfreich.
Gut, das war jetzt die simple Methode, nun wie es mit sprintf() funktioniert:
~~~php
$sql = "INSERT INTO songtexte (
interpret,
album,
datum,
songtext
)
VALUES (
'%s',
'%s',
'%s',
'%s'
)";
$sql = sprintf(
$sql,
$interpret,
$album,
$datum,
$songtext
);
$result = mysql_query($sql) OR die(mysql_error());
Das ist jetzt sehr lang und ausführlich geschrieben, natürlich geht es auch kürzer:
~~~php
$sql = sprintf(
"INSERT INTO songtexte (interpret, album, datum, songtext) VALUES ('%s', '%s', '%s', '%s')",
$interpret,
$album,
$datum,
$songtext
);
$result = mysql_query($sql) OR die(mysql_error());
Wie man das nun genau notiert, ist letztendlich egal und eine Frage des Programmierstils. Ich persöhnlich bevorzuge es, den SQL-Query über mehrere Zeilen zu notieren, da dies einerseits übersichtlicher ist meiner Meinung nach und andererseits man Fehler im Query leichter findet, da MySQL normalerweise die Zeilennummer sagt, in der der Fehler liegt - notiert man den gesamten Query in einer Zeile, so hilft es einem nicht weiter, wenn man weiß, dass der Fehler in Zeile 1 liegt ;-)
Viele Grüße,
~ Dennis.
--
Mein [SelfCode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)