Umlaute in Mysql Datenbank

Wunderschönen guten Morgen, wünsche ich.
Ich habe vor kurzem mein kleines Nachrichtensystem geschrieben, nun habe ich Darstellungsprobleme bei Umlauten.
Folgendes habe ich direkt nach der Datenbank Verbindung:
[PHP]mysql_query(„SET NAMES ‚utf8‘“);
mysql_query(„SET CHARACTER SET ‚utf8‘“);
[/PHP]
In der Datenbank habe ich als Koallition „utf 8 general ci“ angegeben.
Mein Code für die „Darstellung“ an sich, sieht folgendermaßen aus:
[PHP]<?php
echo „<div id="profibox">“;
if ( isset($_GET[„id“]) ) {

    $messageID = htmlspecialchars($_GET["id"]);

}

$messageSQL = "SELECT * FROM pmsystem WHERE messageID = \"" . $messageID . "\" ";
$messageQuery = mysql_query($messageSQL) or die("MySQL-Error: " . mysql_error());

$message = mysql_fetch_assoc($messageQuery);


echo "Absender:<font size=\"2\"> " . $message["fromuser"];
    echo "</br>";

echo "Empfänger: " . $message["touser"];
    echo "</br>";

echo "Betreff: " . $message["messagetitle"];
echo "</br></br>";
   
echo "</font>Nachricht:";
    echo "</br>";
   
echo htmlspecialchars($message["mainmessage"]);

echo „

<a href="messages.php">Zurück“;
?>[/PHP]
Dennoch werden Umlaute unformatiert dargestellt, woran könnte das liegen, was mache ich im Bezug darauf falsch? …
MfG

Welcher Zeichensatz steht denn im Content-type im HTTP-Response vom Server und/oder im meta-Tag der Seite?

Und noch ein paar Anregungen:
[ol]
[li]Was passiert, wenn $_GET[‚id‘] nicht vorhanden ist bzw. was steht dann in $messageID?[/li][li]Der Parameter wird nicht durch mysql_real_escape gejagt[/li][li]„Select *“ ist grausam[/li][li]Tabellen- und Spaltennamen gehören zwischen Backticks[/li][li]Was passiert, wenn es keine Treffer in der Datenbank gibt?[/li][li]Was soll die echo-Orgie[/li][li]Der Font-Tag ist veraltet, nutze CSS[/li]
[li]Die MySQL-Extension ist veraltet, nutze MySQLi[/li][/ol]

Diesbezüglich habe ich zweierlei Meta Tags ausprobiert:
[HTML]
[/HTML]

@bdt600

  1. Wenn $_GET[‚id‘] nicht vorhanden ist, wird die ID zum Öffnen einer Privatnachricht nichtmehr übergeben, und somit nichts beim Klick geöffnet…
  2. Derzeit bin ich dabei jegliche Seiten und Unterseiten meines Projekts zu „korrigieren“ bzw. mit mysql_real_escape zu versehen…
  3. Warum eigentlich? Wenn ich doch alle Spalten benötige… ?
  4. Das werde ich noch korrigieren, danke.
  5. Was heißt, keine Treffer in der Datenbank, bzw. was meinst du damit? Mit dem Klick auf eine Nachricht wird man ja auf einen „Treffer“ verwiesen…
  6. Eine blöde Angewohnheit …
  7. Dass einfache Html Tags wie das Font Tag veraltet sind wusste ich nicht…
  8. Darauf wurde ich natürlich schon tausendfach hingewiesen, und das nicht ohne Grund, allerdings werde ich erst bei Fertigstellung meines Projekts alles was MySQL ist zu MySQLi abändern, ganz einfach weil ich schon Monate dahinter sitze, und nicht mitten im Projekt jegliche Queries überarbeiten werde…

MfG

Warum soll ich nicht SELECT * schreiben?
http://www.php-faq.de/q-sql-select.html

Man kann die Url manipulieren und dann?

Jo, genau. Erst falsch machen und dann überarbeiten, das macht Sinn

Mit

meint er, dass ein Angreifer auch einfach IDs raten und somit nachrichten von anderen auslesen kann.

Edit: Jedenfalls glaube ich das. ^^
Ps: Ich wusste nicht ob er es so meinte… :wink: :smiley: :smiley: Ich weiß nicht, was ich tue. :smiley:

Nicht ausprobieren - wissen. Du musst wissen was Du machst. Du musst den Zeichensatz angeben den die Texte in deinem Dokument verwenden und in dem die Dateien, die diese Texte enthalten und ausgeben gespeichert sind. Nicht irgendeinen anderen.

Zudem hast Du offenbar nicht den HTTP-Header kontrolliert, der eine Angabe von meta-Tags überschreibt.