Probleme mit den Umlauten in meiner MySQL-Datenbank

CreativPur

Erfahrenes Mitglied
#1
Hallo,

ich habe folgendes Problem,

Auf meiner Seite werden alle Umlaute richtig angezeigt.
Dies wird logischerweise durch folgenden meta erzeugt.
HTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Jetzt habe ich auf dieser Seite ein Newsletter-Formular, wo die Daten in eine Datenbank (MySQL) übertragen werden.
Dort werden die Umlaute weder richtig umgewandelt noch ausgegeben..
Nehme ich den Meta-Code raus, funktioniert meine Datenbank, aber die gesamte Seite wird ohne Umlaute dargestellt.

Mein Code für die Datenbank..
PHP:
<?php


if(isset($_POST['senden']))
    $datenbank_host = 'xxxxx';
    $datenbank_user = 'xxxxx';
    $datenbank_passwort = 'xxxxx';
    $datenbank_name = 'xxxxx';
   

   
if (!isset($_POST['senden'])) $_POST['senden'] = '';
    if (!isset($_POST['vorname'])) $_POST['vorname'] = '';
    if (!isset($_POST['name'])) $_POST['name'] = '';
    if (!isset($_POST['email'])) $_POST['email'] = '';
if ($_POST['senden'] != '' AND $_POST['vorname']!= '' AND $_POST['name'] != '' AND $_POST['email'] != '') {

        $link = @mysql_connect($datenbank_host,
            $datenbank_user, $datenbank_passwort);

        if (!$link) {
            die('keine Verbindung möglich: ' .
                mysql_error());
        }

        $db_selected =
            @mysql_select_db($datenbank_name, $link);

        if (!$db_selected) {
            die ('Kann '.$datenbank_name.' nicht benutzen : ' . mysql_error());
        }
    $sql_insert = "INSERT INTO `user`
            (`vorname`,`name`,`email`)
            VALUES('".mysql_escape_string($_POST['vorname'])."','".mysql_escape_string($_POST['name'])."','".mysql_escape_string($_POST['email'])."')";

        if (@mysql_query($sql_insert, $link) != false) {
            echo '<span style="color:blue;">Ihr Newsletter wurde bestellt!</span>';
            $_POST['vorname'] = '';
            $_POST['name'] = '';
            $_POST['email'] = '';
           
        } else {

            echo 'Der Eintrag wurde nicht
                gespeichert!';
        }
        @mysql_close($link);
    }   
    echo '<br />';
    echo '<form action="'.htmlspecialchars($_SERVER['PHP_SELF']).'" method="post"">';
    echo '<input type="text" name="vorname" class=" text-center" placeholder="Ihr Vorname" value="'.htmlspecialchars($_POST['vorname']).'"/> ';
    echo '<input type="text" name="name" class="text-center" placeholder="Ihr Nachname" value="'.htmlspecialchars($_POST['name']).'"/> ';
    echo '<input type="text" name="email" class="full text-center" placeholder="Ihre Email-Adresse" value="'.htmlspecialchars($_POST['email']).'"/> <br/>';
    echo '<button class="btn bg-gray" type="submit" name="senden" value="absenden"> Newsletter bestellen <i class="fa fa-long-arrow-right"> </i> </button>';
    echo '</form>';
   ?>
Worin liegt der Fehler ?

Wie kann ich überprüfen lassen, ob die Mail-Adresse schon besteht, und wenn ja, wie verhindere ich einen doppelten Eintrag ?

Vielen Dank für eure Hilfe
 

CreativPur

Erfahrenes Mitglied
#3
Vielen Dank für die rasche Antwort..

Ich denke mal, dass ich die Datenbank richtig Codiert habe..


Ich bin absolut nicht der Datenbank-Guro, aber ich denke mal, das die Codierung stimmt, oder ?
 

EuroCent

KlappStuhl 2.0
#7
Hallo @CreativPur
hast du einmal überprüft was dir jeweiligen Elemente zurück liefern?
Eventuell ist da schon der fehler :)

PS: Wie sieht den der Eintrag oder die Einträge der Datenbank aus, in denen die Umlaute nicht richtig dargestellt werden.
Denn normal sollte dort als HTML-Code für beispielsweise ß (&szlig;) oder für ÄÖÜ (&Auml; &Ouml; &Uuml;) hinterlegt sein.
Wenn es dass nicht ist, ist bereits der Fehler schon in der übermittlung ;)
 
#8
Denn normal sollte dort als HTML-Code für beispielsweise ß (&szlig;) oder für ÄÖÜ (&Auml; &Ouml; &Uuml;) hinterlegt sein.
Diese &-Codes sollten mit UTF8 Vergangenheit sein (bis auf die für < > und so von HTML) Und auch ohne Unicode gibt es keinen Grund, die schon in der DB zu haben; escapen beim Ausgeben reicht (dadurch leichtere Verarbeitung für andere Sachen serverseitig).
 

EuroCent

KlappStuhl 2.0
#9
Naja dennoch muss ja gewährleistet sein, dass es in der Datenbank auch schon richtig ankommt, sonst hat man mit unter ungewollte und unschöne Sonderzeichen, die keinerlei bedeutung haben :)

Zumindestens war es immer bei mir :D