| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

15-12-2011, 12:50
|
|
anna28
Registrierter Benutzer
|
|
Registriert seit: Sep 2011
Beiträge: 33
|
|
UTF-8 MySQL Umlaute
Ich habe mein Projekt auf UTF-8 umgestellt und alle Maßnahmen ergriffen, die das Internet vorschlägt. Alles klappt ganz gut, dass heißt Worte mit ü,ö,ä,ß werden aus der Datenbank gelesen und richtig angezeigt. Allerdings ändert sich das nach einem UPDATE der Daten aus einem Formular heraus. Dass heißt, Straße wird als Straße aus der Datenbank geladen und angezeigt und nach einem
PHP-Code:
mysql_query("UPDATE tblXYZ SET `Strasse` = '$data[Strasse]' WHERE id='$_SESSION[user_id]'") or die(mysql_error());
steht inder Datenbank Tabelle Straà und angezeigt wird im Webbrowser danach StraÃ
Könnte es damit zusammenhängen das mein Loginscript die Variablen vor dem Update über eine page_protect(); Funktion durch einen Filter jagt? Dort gibt es u.a. eine Funktion
PHP-Code:
function filter($data) { $data = trim(htmlentities(strip_tags($data))); if (get_magic_quotes_gpc()) $data = stripslashes($data); $data = mysql_real_escape_string($data); return $data; }
Hab irgendwo als stupid Anfänger mal aufgeschnappt, dass htmlentities und UTF-8 nicht geht ????? Oder woran kann mein Problem liegen?
|

15-12-2011, 12:54
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Was hat da das htmlentities() verloren? Das gehört nicht in die Datenbank.
|

15-12-2011, 13:07
|
|
anna28
Registrierter Benutzer
|
|
Registriert seit: Sep 2011
Beiträge: 33
|
|
Als Anfänger benutzt man manchmal Scripte, die man nicht komplett versteht. Blöd, ich weiß. In meinem Formular werden alle POST Variablen so verpackt
PHP-Code:
foreach($_POST as $key => $value) { $data[$key] = filter($value);
und davor wird eine dbc.php include't' und die Funktion page_protect(); auf dieser Seite aufgerufen. Die arbeitet u.a. die bereits erwähnte
PHP-Code:
function filter($data)
ab. Hab folgendes entdeckt, aber weiß nicht, wie ich meine Filterfunktion damit verändern muss.
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $charset [, bool $double_encode = true ]]] )
|

15-12-2011, 14:48
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Nochmal: Werte die in eine Datenbank gespeichert werden, dürfen nicht mit htmlentities() oder htmlspecialchars() behandelt werden. Du musst bei deiner Filter-Funktion htmlentities() komplett entfernen. Außerdem ist deine Funktion falsch benannt. Sie sollte eher getPostValueAndRemoveMagicQuotesAndSqlEscape() heißen. Jetzt wirst du sicher sagen, dass der Name viel zu lang ist. Darauf werde ich dir sagen, dass die Funktion zu viele Aufgaben erledigt. Eine Funktion sollte für _eine_ Aufgabe zuständig sein und der Name der Funktion sollte verständlich ausdrücken, was diese macht.
Geändert von h3ll (15-12-2011 um 14:50 Uhr)
|

15-12-2011, 14:48
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
|
, aber weiß nicht, wie ich meine Filterfunktion damit verändern muss.
|
Ich würde die html*() da weg lassen und die Rohdaten speichern.
Und die Sonderzeichenumwandlung erst vor der Ausgabe machen. Denn erst dann weiß ich, ob das ein HTML, PDF oder gar ein Bild wird.
|

15-12-2011, 14:57
|
|
anna28
Registrierter Benutzer
|
|
Registriert seit: Sep 2011
Beiträge: 33
|
|
So klappt es jetzt. Danke an alle und alle Tips.
Code:
trim(htmlentities(strip_tags($data), ENT_QUOTES, 'UTF-8'))
|

15-12-2011, 15:10
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Das ist falsch.
|

16-12-2011, 09:20
|
|
anna28
Registrierter Benutzer
|
|
Registriert seit: Sep 2011
Beiträge: 33
|
|
 Was kann so passieren ???
|

16-12-2011, 09:39
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Dass du Datenmüll in die Datenbank schreibst.
|

16-12-2011, 10:02
|
|
anna28
Registrierter Benutzer
|
|
Registriert seit: Sep 2011
Beiträge: 33
|
|
Nöö - passiert eigentlich momentan nicht. Ich werde es mal eine weile testen. Danke Dir
|

16-12-2011, 10:21
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von anna28
Nöö - passiert eigentlich momentan nicht. Ich werde es mal eine weile testen. Danke Dir 
|
Warum wehrst du dich so den Fehler zu korrigieren? Ein erfahrener Programmierer erkennt ganz eindeutig den Fehler und du sagst quasi drauf "ich wart mal ab, bis was passiert, erst dann mach ich was". Wenn du immer so "ordentlich" programmierst, will ich nicht wissen, wie der Rest von deiner Applikation aussieht. Vermutlich gespickt mit haufenweise Sicherheitslücken und sonstige Grauslichkeiten. Aber solange nix passiert, ist ja alles gut %-)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|