MYSQL Like-Ausgabe mit Umlauten
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
auftreten
ausgabe
befehl
benutzen
bildschirm
code
dank
datenbank
ersetzen
fehler
funktion
genre
http
problem
programm
stelle
tabelle
umlaut
url
vermeiden
-
Hallo Forum,
ich habe jetzt wieder recht lange damit verbracht eine Lösung für das Problem zu finden, allerdings ohne Erfolg. Warscheinlich wieder ganz simple Grundregeln bei MySQL die ich nicht kenne.
Problem: Ich möchte alle Filme ausgeben die aus dem Genre "Komödie" stammen. Das LEFT JOIN ist nur dafür da, die Filme des jeweiligen Users auszugeben. Die Abfrage funktioniert auch soweit, nur nicht bei Genres mit Umlauten. Ich dachte erst es hat was mit der Kollation oder so zu tun, aber derweilige Probleme können es nicht sein da die Ausgabe mit LIKE in der mySQL-Datenbank selber funktioniert, nur nicht mit PHP auf der Seite.
$count = "SELECT COUNT(uMovie.movie_id) FROM sc_user_movies AS uMovie LEFT JOIN sc_movies AS Movie ON Movie.movie_id = uMovie.movie_id WHERE uMovie.rate != '' AND uMovie.user_id = '$open_user' AND Movie.genre LIKE '%Komödie%'"; $result = mysql_query($count);
Ja wie gesagt, tut mir leid wenn ich jemanden die Zeit raube und das wieder nur 5 Minuten sind. Hier wurde mir schon öfters gut geholfen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du brauchst wahrscheinlich diese Funktion: mysql_set_charset: http://php.net/manual/de/function.mysql-set-charset.php.
Du solltest aber langsam auf PDO oder MYSQLi umsteigen, da mysql bald der Vergangenheit angehört. Dort gibt es dieselbe Funktion: mysqli_set_charset: http://de2.php.net/manual/de/mysqli.set-charset.php
Dein Code mit mysql müsste dann so aussehen:
mysql_set_charset('utf8'); $count = "SELECT COUNT(uMovie.movie_id) FROM sc_user_movies AS uMovie LEFT JOIN sc_movies AS Movie ON Movie.movie_id = uMovie.movie_id WHERE uMovie.rate != '' AND uMovie.user_id = '$open_user' AND Movie.genre LIKE '%Komödie%'"; echo $count; $result = mysql_query($count); echo "Result: ".$result; die();
Für diesen Code statt deinem aus und schau was rauskommt: Falls im Browser das ö komisch aussehen sollte dann stimmt auch der Zeichensatz der Datei nicht.
thwbm schrieb:
Hallo,
an deiner Stelle würde ich einfach äöü und ß durch ae, oe, ue und ss ersetzen. Umlaute solltest du in deinem Code weglassen, da so öffters fehler auftreten können. Die Ausgabe kannst du dann ja mit
undä ö ü Ä Ö Ü
machen.ß
MFG THWBM
Das wird nur in HTML funktionieren, aber nicht in einem SQL-Befehl welcher in PHP auf die Datenbank angewendet wird.
Gruß S. Brosch
Beitrag zuletzt geändert: 16.1.2013 15:35:54 von software-brosch -
software-brosch schrieb:
thwbm schrieb:
Hallo,
an deiner Stelle würde ich einfach äöü und ß durch ae, oe, ue und ss ersetzen. Umlaute solltest du in deinem Code weglassen, da so öffters fehler auftreten können. Die Ausgabe kannst du dann ja mit
undä ö ü Ä Ö Ü
machen.ß
MFG THWBM
Das wird nur in HTML funktionieren, aber nicht in einem SQL-Befehl welcher in PHP auf die Datenbank angewendet wird.
Doch, das wird es. In PHP/MySQL sollte man ae, oe, ue bzw. ss benutzen. Für die Ausgabe, die am Bildschirm erscheint, ist dann ä ö ü Ä Ö Ü [/code] und
zuständig.ß
MFG THWBM -
thwbm schrieb:
Doch, das wird es. In PHP/MySQL sollte man ae, oe, ue bzw. ss benutzen. Für die Ausgabe, die am Bildschirm erscheint, ist dann ä ö ü Ä Ö Ü [/code] und
zuständig.ß
Wie willst Du deine ae, oe, ue und ss aus der DB zuverlässig in HTML-Entities wandeln? Das gibt lustige Ergebnisse.
Beitrag zuletzt geändert: 16.1.2013 16:12:06 von fatfreddy -
Danke für die schnelle Antwort. "mysql_set_charset" hat geholfen, nach sowas hatte ich auch gesucht.
Mit Entitie oder OE in der Abfrage hat es auch mit mysql_set_charset nicht geklappt. Du meinstest sicher die ganzen Umlaute in der Datenbank zu ersetzen, was ich aber gerade versucht habe zu vermeiden.
Danke euch beiden und danke für den Hinweis mit PDO und MYSQLi, wieder was dazugelernt. -
thwbm schrieb:
Doch, das wird es. In PHP/MySQL sollte man ae, oe, ue bzw. ss benutzen. Für die Ausgabe, die am Bildschirm erscheint, ist dann ä ö ü Ä Ö Ü [/code] und
zuständig.ß
MFG THWBM
Genau das habe ich geschrieben. Umlaute sollten (müssen nicht wenn man auf die Zeichensätze aufpasst) in HTML als entities angegeben werden. Wenn ich aber das in einen SQL-Befehl reinhaue der Daten abruft (nicht ändert) dann kann das zu Problemen führen (es sei denn man sucht nach exakt diesem Ausdruck), aber umgwandelt werden die entities von PHP nicht. Das Umwandeln der entities übernimmt der Browser, bzw. HTML. In der Datenbank sollten solche entities nicht gespeichert werden, sondern mit einer Funktion umgewandelt werden, da niemand Lust hat vorher in die Datenbank zu schauen ob solche Umschreibungen verwendet wurden.
Gruß S. Brosch -
OK ich stecke wohl noch in der Steinzeit fest. Ich mach meine Abfragen noch nach dem Muster vom Schattenbaum Tutorial nicht Objektorientiert oder so.
Das wird wohl ein wenig Arbeit da rauszukommen ... Danke nochmal, wollte das eben noch loswerden. -
fatfreddy schrieb:
thwbm schrieb:
Doch, das wird es. In PHP/MySQL sollte man ae, oe, ue bzw. ss benutzen. Für die Ausgabe, die am Bildschirm erscheint, ist dann ä ö ü Ä Ö Ü [/code] und
zuständig.ß
Wie willst Du deine ae, oe, ue und ss aus der DB zuverlässig in HTML-Entities wandeln? Das gibt lustige Ergebnisse.
Du meinst, dass es seltsam aussieht, wenn ae immer in ä umgewandelt wird, auch wenn es eigentlich ae heißen müsste. Ich meinte aber, dass man im Programmcode (Variabeln, Funktionen usw.) ae, oe, ue bzw. ss schreibt ansetelle von ä, ö, ü, ß. Wenn man aber einen Zelleninhalt in einer Tabelle hat, kann man den ja beispielsweise so:
abspeichern. Das geht natürlich nur, wenn man alle Einträge selber ausführt und es nicht von einem Benutzer machen lässt.Möchtest du etwas essen?
h4nni schrieb:
Du meinstest sicher die ganzen Umlaute in der Datenbank zu ersetzen, was ich aber gerade versucht habe zu vermeiden.
Genau das habe ich gemeint, wenn du es aber vermeiden wolltest, dann waren meine Antworten nutzlos.
MFG THWBM -
@thwbm Es gibt überhaupt keine Probleme mit Umlauten.
@Alle: Umlaute sollten NICHT als Entitäten ausgegeben werden!!! Die Zeiten kaputter/falscher Kodierungen sollten inzwischen überall vorbei sein, sonst ist das Programm schrott. Am einfachsten ist es dabei, alles mit UTF-8 zu machen. Auch die Datenbank hat keinerlei Probleme bei der Suche, sofern man die Kodierung richtig einstellt (wie mit mysql_set_charset() ja inzwischen passiert ist).
Wer sehen will, wie gut das mit Umlauten und ohne Entitäten funktioniert, der kann sich Wikipedia anschauen. -
h4nni schrieb:
OK ich stecke wohl noch in der Steinzeit fest. Ich mach meine Abfragen noch nach dem Muster vom Schattenbaum Tutorial nicht Objektorientiert oder so.
Das wird wohl ein wenig Arbeit da rauszukommen ... Danke nochmal, wollte das eben noch loswerden.
Objektorientiertes Programmieren ist eigentlich heutzutage Standard, wie du festgestellt hast. Ich habe für meine Projekte eine Datenbank-Klasse mit zwei "Treibern" (mysql und mysqli) entwickelt. Mit dieser habe ich keine Zeichensatzprobleme mehr. Außerdem habe ich dort Funktionen implementiert welche mysql oder mysqli nicht mitbringen.
Vorteil: muss nur einmal programmiert werden, jedoch in jedem Projekt verwendet werden.
Es gibt viele Tutorials im Internet über OOP, wenn du was in der Hand halten willst empfehle ich dir folgendes Buch: PHP 5.4 und MySQL 5.5: Grundlagen, Anwendung, Praxiswissen, Objektorientierung, MVC, Sichere Webanwendungen, PHP-Frameworks, Performancesteigerungen, CakePHP (Galileo Computing)
Gruß S. Brosch -
software-brosch schrieb:
so so ... objektorientiert zu programmieren ist natürlich nicht schlecht, aber die aussage ist etwas überzogen und verfehlt das problem.
... Objektorientiertes Programmieren ist eigentlich heutzutage Standard, wie du festgestellt hast...
bei umsteigen von ISO_blaaa auf utf-8 ist folgendes zu beachten:
1. alle dateien, die mit dem programm irgendwie in berührung kommen, müssen als utf-8 abgespeichert werden (ohne BOM).
2. alle verwendeten datenbanken und tabellen drinnen sollen utf-8 sein.
3. in eine utf-8 datenbank / tabelle unter keinen umständen ISO_blaaaa daten speichern. wenn das schon der fall ist, dann sollst folgendes machen:
a) du sichesrt die alten dbs mitsamt tabellen
b) machst von allen dbs und tabellen CREATEs, die du so umänderst, dass sie bei verwendung die richtigen dbs und tabellen, also mut utf-8 erzeugen.
c) schreibst ein programm, das die gesicherten daten ausliest, die wandelst wie oben schon beschrieben in utf-8 um und erst dann schreibst sie in die neue dbs und tables. also unter keinen umständen export - inport! dann hast den selben käse!
am ende solltest dir noch das angewöhnen:<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>blaaa</title> ... </head> ...
also in schrift: head, meta mit utf-8, title ... &c. und das am besen in dieser reihenfolge! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage