Sonderzeichen im Eingabe-Formular

sheeba1507

Erfahrenes Mitglied
Hi,

in einer Formular-Eingabe möchte ich mit ...
PHP:
<input type="text" name="titel" value="<?php echo $titel; ?>" />
... die Eingabe von Sonderzeichen wie z.B. bei "That's Live" zulassen.

Offline unter XAMPP wird die Eingabe-Verarbeitung mit ...
PHP:
$titel = nl2br(htmlspecialchars($_POST['titel']));
$sqleintrag = "INSERT INTO $tabelle (titel) VALUES ('$titel')";
mysql_query($sqleintrag) or die(mysql_error());
... auch ordnungsgemäß ausgeführt.
Aber nach dem Upload auf den Server bekomme ich nach dem Submit eine
Syntax-Error-Meldung in Line 1 near ... usw. angezeigt.

Gibt es einen Unterschied bei der Verarbeitung unter XAMPP und einem
Online-Server bezüglich Sonderzeichen ?
Wenn ja, wie kann ich das umgehen ?

Bin für jeden Tipp dankbar.

Gruß, Mike
 
Ein Syntaxfehler hat eigentlich nichts mit Sonderzeichen an sich zu tun. Kannst du uns mal die ganze Fehlermeldung + Zeile 1 zeigen?

Desweiteren würde ich den SQL query wie folgt ändern:
PHP:
$titel = nl2br(htmlspecialchars($_POST['titel']));
$sqleintrag = "INSERT INTO $tabelle (titel) VALUES ('".$titel."')";
mysql_query($sqleintrag) or die(mysql_error());
 
Hi,

die komplette Fehler-Meldung lautet :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's live'' at line 1
Anwendungs-Beispiel

Merkwürdigerweise wird sie mir lediglich auf dem Server angezeigt.
Rufe ich das Script offline unter XAMPP auf, wird es ordnungsgemäß ausgeführt.

Desweiteren würde ich den SQL query wie folgt ändern:
Werde ich gleich mal ausprobieren. Thx.

Gruß, Mike


Nachtrag :
Änderung war ergebnislos.
 
Zuletzt bearbeitet:
Hallo, na klar, du hast gerade unbewusst eine riesen Schwachstelle in deinem Script bemerkt.

Dein SQL Query baut sich ja folgendermaßen zusammen
Code:
INSERT INTO tabellen_name (titel) VALUES ('That's Live')
Dein SQL-Server denkt, dass er das Wort That einfügen soll, was du aber danach mit dem s Live' noch meinst, weiß er nicht.

Du musst daher unbedingt nicht nur die HTML Special Characters umwandeln, sondern auch die SQL-Sonderzeichen (wie das Hochkomma) escapen:
PHP:
$titel = nl2br(htmlspecialchars(mysql_real_escape_string($_POST['titel'])));
So wird aus deinem Query:
Code:
INSERT INTO tabellen_name (titel) VALUES ('That\'s Live')
Das versteht dein SQL-Server und führt es aus.

Edit/PS: Das nl2br und htmlspecialchars würde ich gar nicht beim Einfügen in die Datenbank machen, sondern nur beim Ausgeben an anderer Stelle. So hast du die Daten immer so in der Datenbank, wie sie auch vom User eingegeben worden sind. Wenn du sie zum Beispiel nachher woanders als in HTML eingebettet (z.B. in einer Textbox) anzeigen lassen willst, müsstest du wieder mühsam die <br> in ein \n umwandeln etc.
 
Zuletzt bearbeitet:
Hi DeeJTwoK,

deine Anmerkung ...
Dein SQL Query baut sich ja folgendermaßen zusammen
Code:
INSERT INTO tabellen_name (titel) VALUES ('That's Live')
... habe ich auch schon vermutet bzw. befürchtet.
Aber die von dir vorgeschlagene Änderung auf ...
PHP:
$titel = mysql_real_escape_string($_POST['titel']);
... erzeugt nun die Fehler-Meldungen ...
Access denied for user 'ODBC'@'localhost' ...
... und ...
A link to the server could not be established in ...
... und hat mich von meinem Ziel noch weiter entfernt.
Außerdem wird das Eingabe-Feld als nicht ausgefüllt vermerkt.

Gruß, Mike
 
Zeige uns mal den PHP-Code. Normalerweise sollte es reichen eine MysqlVerbindung vor dem aufrufen von mysql_real_escape_string() aufzubauen.
 
Hi,

da zwischen der POST-Übergabe und der DB-Eintragung noch eine weitere DB-Verarbeitung
stattfindet, die aber auf eine andere Datenbank zugreift, kann ich die Verbindung zur eigentlichen
Datenbank erst kurz vor der Eintragung aufbauen.

Um diese Problematik zu umgehen, müßte ich das Script dahingehend umbauen, daß die
POST-Übergabe ohne Prüfung gemacht wird und erst kurz vor der DB-Eintragung die Prüfung
eingebaut wird.

Allerdings frage ich mich, wodurch mysql_real_escape_string() Zugriff auf die DB-Connection
erhalten sollte ?

Gruß, Mike
 
Zurück