echo $begrüßung;
Erst einmal ist es sehr löblich, dass du dir die Mühe gemacht hast, den Artikel zu verfassen. Jedoch ist er, was die Datenbankgeschichte angeht verbesserungswürdig.
Wird nun ein solches Formular via HTTP verschickt, so erreicht es den Webserver und damit PHP in der x-www-form-urlencoded Form. Um nun die mitgeschickten Werte in der mySql-DB zu speicher müssen diese decodiert werden:
Das ist weder generell nötig, noch ist es prinzipiell sinnvoll. Sinn des Verwendens von UTF-8 ist ja hauptsächlich, dass du mehr Zeichen verarbeiten kannst, als mit ISO-8859-x dargestellet werden können. Wenn du jetzt also wieder von 1.048.576 möglichen Zeichen auf 256 "decodierst" ("umwandeln"/"umkodieren" wären bessere Wörter, da sowohl Ausgangsdaten als auch Ergebnis kodierte Daten sind), schränkst du die Zahl der verwendbaren Zeichen massiv ein.
Die 'Collation' der felder in der mytable auf der mySQL-DB sollte auf 'utf8_unicode_ci' gesetzt sein. Siehe phpMyAdmin.
"Collation" steht eigentlich nur für einen Wert, der für die Sortierung zuständig ist. phpMyadmin ist hier etwas ungenau, da es den Charset-Anteil (hier: 'utf8') unterschlägt. Der Collation-Anteil ist auch für das Kodierungsproblem weniger relevant. Das nur am Rande.
Wichtiger ist, dass es noch mehr Einstellmöglichkeiten für Zeichensätze gibt. Neben der Default-Einstellung des Servers (character-set-server) sind vor allem die Werte der Verbindung maßgebend (character_set_client, character_set_connection und character_set_results). Vermutlich stehen diese bei dir auf latin1, weil vielleicht der Server-Default-Wert ebenso eingestellt ist. Das machen die Provider gern wegen der "Rückwärtskompatibilität". In dem Fall, oder besser in jedem Fall, sollte man den Zeichensatz der Verbindung explizit einstellen, damit es keine Unklarheiten und Differenzen zwischen Server und Client gibt. Die Folge wäre Umbrauchbarkeit wegen Datenmüll. Hat man erst einmal Müll, lässt sich daraus der Ausgangswert nicht wieder oder zumindst nicht einfach wieder herstellen. Der gewünschte Zeichensatz lässt sich mit einem SET NAMES ... direkt nach dem Connect einstellen.
Man muss auch noch erwähnen, dass erst seit MySQL 4.1 die Sache mit den Zeichensätzen gilt. Vorher waren die Möglichkeiten MySQLs eingeschränkt. UTF-8 wurde nicht unterstützt (bei Stringoperationen wie Sortieren, Vergleichen etc. ist eine Unterstüzung des Zeichensatzes notwendig), man konnte aber UTF-8-kodierte Daten ablegen und abfragen - mehr aber auch nicht (jedenfalls nicht sinnvoll).
und schon hat man eine funktionierende utf-8 Umgebung.
Nun, in deinem Fall hat man dann eine nicht immer funktionierende ISO-8859-1-Umgebung im UTF-8-Gewand. Nicht immer, weil es bei deiner Methode zu Datenverlust kommt, wenn die Client-Kommunikationswerte des Servers per default auf UTF-8 eingestellt sind und du ihm "dekodierte" ISO-8859-1-Daten sendest.
echo "$verabschiedung $name";