Eine mit Sonderzeichen bestückte Zeichenkette ohne konvertierung in SQL_Datenbank ein

Herror

Mitglied
Hallo:

HAbe folgendes Problem:

Will eine Zeichenkenne wie diese hier in meine Datenbank über ein Formular eintragen lassen:

PHP:
<embed src="http://www.veoh.com/veohplayer.swf?permalinkId=v15540954fkDQYkNw&id=17066153&player=videodetailsembedded&videoAutoPlay=0" allowFullScreen="true" width="410" height="341" bgcolor="#FFFFFF" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed><br/><font size="1">Watch <a href="http://www.veoh.com/videos/v15540954fkDQYkNw">Manga love</a> in <a href="http://www.veoh.com/browse/videos.html?category=category_animation">Animation</a>  |  View More <a href="http://www.veoh.com/">Free Videos Online at Veoh.com</a></font>

Leider funktionier das nicht ganz, denn wenn ich die Zeichenkette eintrage, dann passiert garnichts...

will jetzt nicht den ganzen Code hier posten. Hier das wichtigste:
PHP:
$Video = $_POST[Video];

$SQL = 'INSERT INTO tabelle (Video) VALUES ("'.$Video.'")';

mysql_query($SQL, $DatabasePointer);

habe da bereits schon ein bisschen mit verschiedenen Zeichen rumexperementiert.... kein Erfolg bis jetzt
 
Wende vorher die mysql_real_escape_string()-Funktion darauf an:
PHP:
$SQL = 'INSERT INTO tabelle (Video) VALUES ("'.mysql_real_escape_string($_POST['Video']).'")';
 
Das versteh ich jetzt nicht.
Also wenn ich meine Einträge in die DB mache und sie mit mysql_real_escape_string() maskiere, dann werden backslashes ja mit eingetragen.
Aus "hier geht's" wird ja "hier geht\'s" und wenn ich die wieder ausgebe dann bleibt der Backslash.
 
Dann ist wohl auf deinem Server noch Magic Quotes http://de.php.net/magic_quotes aktiviert.

Per stripslashes() Vor dem mysql_real_escape() ist alles dann wieder richtig. Du kannst dich auch an die Beispiele aus dem Manual halten um es gleich dynamisch aufzunehmen falls bei dir nen PHP Update eingespielt wird und die Funktion dann rausgeflogen ist. Da sie in den neueren PHP Versionen deffinitiv nicht mehr vorkommen wird.
 
Nur wenn die Zeichen selbst schon vorher maskiert waren, werden sie durch mysql_real_escape_string() nochmals maskiert. Denn MySQL braucht nur die Maskierung, damit es zwischen der Begrenzung und dem Wert der Zeichenkette unterscheiden kann. Genau so wie PHP:
PHP:
echo 'hier geht's';    // Fehler, da ' nicht maskiert ist
An der Syntaxhervorhebung kannst du erkennen, was als Zeichenkettenauszeichnung interpretiert wird (hier rot). Dahingegen:
PHP:
echo 'hier geht\'s';    // Ausgabe ist "hier geht's" und nicht "hier geht\'s"
 
Doch, eben mit mysql_real_escape_string(), falls sie in MySQL in einer Zeichenkette auftauchen. Nur erneut demaskieren musst du sie nicht mehr.
 
Zurück