Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 01.07.2005 16:17:13 von xylux

MYSQL 3.1/PHP4.1

Hallo,
komme trotz googeln /FAQ nicht weiter...
Ich habe ein Formular in das Nutzer beliebige Inhalte aus _ Webseiten _
kopieren.
Danach wandert alles in eine Mysql-Tabelle und wird später zum Editieren
wieder in ein Formular eingelesen.
Funktioniert alles bis auf die Codierung der Sonderzeichen. Die Umlaute
werden bei der Ausgabe nicht korrekt dargestellt und Anführungszeichen
bereiten ebenfalls Probleme.
Bei einigen Kopieraktionen funktioniert es, bei anderen wieder nicht !

Die Daten aus den Formularfeldern zum Absenden nach MYSQL baue ich bisher so
zusammen:
....
$sql.=" '".htmlspecialchars($_POST['autor'],ENT_QUOTES)."', ";
....
in meiner Verzweifelung habe ich auch dies probiert:
$sql.="'".htmlentities(htmlspecialchars($_POST['koautor'],EN T_QUOTES),ENT_QUOTES)."',
";
....

In die Formularfelder lese ich sie so ein:


Ich bin mir im Klaren, dass diese Probleme hier oft besprochen wurden, komme
aber trotzdem nicht weiter.

Frage:
Kann mir hier jemand einfach einmal ein Codeschnipsel für insert und select
posten?
Es geht mir nur ums korrekte en-/decoden.

Danke schon vorab

Gruß
Hans

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 01.07.2005 21:38:01 von Sebastian Hirschmann

H.Armgart schrieb:

> Funktioniert alles bis auf die Codierung der Sonderzeichen. Die Umlaute
> werden bei der Ausgabe nicht korrekt dargestellt und Anführungszeichen
> bereiten ebenfalls Probleme.

Warum machst Du Dir das so kompliziert? Lt. PHP-Manual:

| htmlentities -- Wandelt *alle* Sonderzeichen in entsprechende
| HTML-Codes um

Klartext: Alles, wofür's HTML-Entitäten gibt, wird auch in solche
umgewandelt. Und IMVHO genügt eine einfache Runde mit der Funktion, d.h.
wahlweise beim Ein- oder beim Auslesen.
htmlentities beinhaltet nach meinem Verständnis auch die Funktionalität
von htmlspecialchars.

Grüße


Sebastian

--
Rock, Metal, more: http://bleeding.4metal.net
Ich bin der einzige Typ auf der Welt, der erst aufwachen muss, um
einen Alptraum zu haben. [Al Bundy]

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 01.07.2005 22:14:19 von xylux

Hallo Sebastian,

> | htmlentities -- Wandelt *alle* Sonderzeichen in entsprechende
> | HTML-Codes um
>
> Klartext: Alles, wofür's HTML-Entitäten gibt, wird auch in solche
> umgewandelt. Und IMVHO genügt eine einfache Runde mit der Funktion, d.h.
> wahlweise beim Ein- oder beim Auslesen.
> htmlentities beinhaltet nach meinem Verständnis auch die Funktionalität
> von htmlspecialchars.

....so ähnlich habe ich angefangen.
Dann haben ein paar User fleißig Text aus Webseiten in das Formular kopiert
und abgespeichert - da hatte ich dann die beschriebenen Probleme. Mysql hat
z. T. die Feldinhalte nicht gespeichert. Eine erneute Eingabe funktionierte
ebenfalls nicht mehr.

Du meinst das z.B. beim Zusammenbau des SQL Update-String so ?
$sql.=" ' ".htmlentities($_POST['xytxt'],ENT_QUOTES)." ', ";

und beim Einlesen in das Formular
??

Das funktioniert nicht immer.
Kann das mit dem Zeichencode der Webseite zusammenhängen aus der kopiert
wird?
In Googel habe ich einen Hinweis auf UTF-8. Kann MYSQL aber wohl nicht in
der mir zur Verfügung stehenden Version verarbeiten.
Ich habe mich damit noch nicht intensiv beschäftigt, vorher mit dem
MS-SQL-Server/ASP gearbeitet und bin etwas in Zeitdruck geraten.
Deshalb meine Frage nach einem funktionierenden Codeschnipsel.


Gruß
Hans

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 04.07.2005 09:04:39 von NineBerry Schwarz

Hallo

H.Armgart schrieb:

> Dann haben ein paar User fleißig Text aus Webseiten in das
> Formular kopiert und abgespeichert - da hatte ich dann die
> beschriebenen Probleme. Mysql hat z. T. die Feldinhalte nicht
> gespeichert.

Verwende zum Maskieren beim Zusammenbauen des SQL-Strings die Funktion
"mysql_escape_string". Formular -> mysql_escape_string -> DB

Zur Ausgabe der Daten verwende "htmlentities":
DB -> htmlentities -> Formular

Neun

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelleeintr.

am 04.07.2005 15:02:38 von Niels Braczek

NineBerry Schwarz schrieb:

> Verwende zum Maskieren beim Zusammenbauen des SQL-Strings die Funktion
> "mysql_escape_string". Formular -> mysql_escape_string -> DB

s/mysql_escape_string/mysql_real_escape_string/

mysql_escape_string() ist nicht mehr aktuell. Näheres siehe Manual.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 04.07.2005 19:15:43 von xylux

"Niels Braczek" >
>> Verwende zum Maskieren beim Zusammenbauen des SQL-Strings die Funktion
>> "mysql_escape_string". Formular -> mysql_escape_string -> DB
>
> s/mysql_escape_string/mysql_real_escape_string/
>
> mysql_escape_string() ist nicht mehr aktuell. Näheres siehe Manual.

Beiden Vielen Dank, das war's.

Hans

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 09.07.2005 20:16:03 von xylux

> Verwende zum Maskieren beim Zusammenbauen des SQL-Strings die Funktion
> "mysql_escape_string". Formular -> mysql_escape_string -> DB


> Zur Ausgabe der Daten verwende "htmlentities":
> DB -> htmlentities -> Formular

Das funktioniert nicht. Ich will doch die '\' in der Ausgabe wieder
eleminieren !
Oder habe ich da etwas falsch verstanden?
Ich benötige das Gegenstück zu 'mysql_escape_string'.

Ich bekomme folgente Ausgabe nach der Anwendung der Funktion:
blabla\r\n\r\n\r\nblablajöjölj#ö#\r\n\"hhkh\'\r\n

Ich brauche im Formular (

Ich habe Niels jetzt so verstanden
(Vorbehandlung mit stripslases)
mit mysql_real_escape_string($_POST['inhalt'] in ein Tabellenfeld
schreiben.

Bei deutschen Seiten meistens OK -
Funktioniert z. B. nicht immer bei ausländischen Seiten / XHTM-Seiten.
(Beispiel: einige Seiten von www.nature.com/www.zeit.de)
Umlaute werden teilweise auch nicht richtig geschrieben/umgesetzt bzw. das
Tabellenfeld bleibt leer / ' " werden bei doppeltem Vorkommen im Textstring
nich immer korrekt escaped.

Da müssen meiner Meinung nach Sonderzeichen durchrutschen. Habe alles auch
schon vorher durch htmlentities geschleust.
Hat auch nicht zuverlässig funktioniert.

Meine Frage: Mit welchen Funktionen, in welcher Reihenfolge muss ich
$_POST['inhalt'] noch weiter 'idiotensicher' vorbehandeln?

Verstanden: mysql_real_escape_string($Tabellenfeld) funktioniert in beide
Richtungen.

Mein Ziel: die Daten aus der Tabelle wieder in ein Textarea-Feld zum
Editieren einlesen und wieder neu abspeichern.
Da taucht dann das Problem mit den fehlenden Zeilenumbrüchen auf.

Bitte um Entschuldigung für mein impertinentes Gefrage.

Hans

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 11.07.2005 05:30:59 von Niels Braczek

H.Armgart schrieb:

> Ich habe Niels jetzt so verstanden
> (Vorbehandlung mit stripslases)

Nur wenn magic_quotes eingeschaltet sind.

> mit mysql_real_escape_string($_POST['inhalt'] in ein Tabellenfeld
> schreiben.

Ja.

> Bei deutschen Seiten meistens OK -

Auch bei anderen. Dein Problem entsteht mit an Sicherheit grenzender
Wahrscheinlichkeit nicht in der Datenbank.

> Funktioniert z. B. nicht immer bei ausländischen Seiten / XHTM-Seiten.
> (Beispiel: einige Seiten von www.nature.com/www.zeit.de)
> Umlaute werden teilweise auch nicht richtig geschrieben/umgesetzt bzw. das
> Tabellenfeld bleibt leer / ' " werden bei doppeltem Vorkommen im Textstring
> nich immer korrekt escaped.

Du musst die Daten umcodieren. Du bekommst von der Website ein
(willkürliches) Encoding, dass auf jenes umgestellt werden muss, auf das
MySQL eingestellt ist.

> Da müssen meiner Meinung nach Sonderzeichen durchrutschen. Habe alles auch
> schon vorher durch htmlentities geschleust.
> Hat auch nicht zuverlässig funktioniert.

Tut es dann aber. Ich habe keine Probleme mit Daten in Urdu, Russisch,
Englisch, Ungarisch usw. in derselben Datenbank.

> Meine Frage: Mit welchen Funktionen, in welcher Reihenfolge muss ich
> $_POST['inhalt'] noch weiter 'idiotensicher' vorbehandeln?

Du brauchst außer der Umcodierung nur mysql_real_escape_string().

> Verstanden: mysql_real_escape_string($Tabellenfeld) funktioniert in beide
> Richtungen.

Jein. Man braucht es nur in eine Richtung. Die Decodierung geschieht
transparent.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 11.07.2005 08:34:01 von xylux

"Niels Braczek" schrieb
Hallo Niels,

> Du musst die Daten umcodieren. Du bekommst von der Website ein
> (willkürliches) Encoding, dass auf jenes umgestellt werden muss, auf das
> MySQL eingestellt ist.


Da scheint ja mein Problem zu liegen.
Wie mache ich das?

So(?) habe ich es probiert:
$sql_teilstring.="'htmlentities(mysql_real_escape_string($_P OST['inhalt']))',
";

Wie stelle ich das Encoding auf jenes von Mysql um?

MfG
Hans

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 11.07.2005 14:58:26 von Niels Braczek

H.Armgart schrieb:
> "Niels Braczek" schrieb

>> Du musst die Daten umcodieren. Du bekommst von der Website ein
>> (willkürliches) Encoding, dass auf jenes umgestellt werden muss, auf das
>> MySQL eingestellt ist.
>
> Da scheint ja mein Problem zu liegen.
> Wie mache ich das?

http://de.php.net/manual/en/ref.iconv.php

> So(?) habe ich es probiert:
> $sql_teilstring.="'htmlentities(mysql_real_escape_string($_P OST['inhalt']))',
> ";

htmlentities() und Verwandte brauchst du ausschließlich zur Ausgabe an
den Browser. In Richtung Datenbank haben die nichts verloren.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.

am 12.07.2005 21:41:45 von xylux

>> "Niels Braczek" schrieb

> htmlentities() und Verwandte brauchst du ausschließlich zur Ausgabe an
> den Browser. In Richtung Datenbank haben die nichts verloren.

Hmm ! - und ich dachte gerade, ich hätte ein Teilproblem gelöst.

Beispiel:
Mit htmlentities maskiere ich alle möglichen Sonderzeichen und speichere das
dann in das Tabellenfeld.
Somit vermeide ich - meiner Meinung nach - Zeichensalat in den DB-Feldern.
Ich vermute, da hängt es.
Beim Auslesen in ein