Login-Problem bei meinem script

Maniac_81
Hi, ich hoffe ich kann hier denkanstöße oder lösungsvorschläge bekommen. folgendes problem:

ich habe in der datenbank die userdaten gespeichert. umlaute sind in der DB so gespeichert (zb: ä , ö , &sizlig...)

jetzt hab ich das problem wenn sein user einloggen möchte mit einem Umlaut im namen, der login nicht mehr funktioniert.

ich habe mir dazu auch eine function geschrieben, welche mir die umlaute in die codes umwandelt und diese dann so in der DB abfrägt. nur leider gehts nicht. Liegt wohl am "charset-UTF-8" ??
hab aber auch schon sämtliche andere versucht und nichts hat geholfen.

hier mal mein formular welches die daten an eine andere datei sendet:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
if (!logged_in())
    {

    echo "<div class=\"login\">
    <form method=\"post\" action=\"login.php\"> 
      <table>
          <tr>
            <td>Team: </td><td><input id=\"input\" name=\"username\" type=\"text\" /></td>
        </tr>
        <tr>
            <td>Passwort: </td><td><input id=\"input\" name=\"userpass\" type=\"password\" id=\"userpass\" /></td>
        </tr>
        <tr>
            <td colspan=\"2\" align=\"right\"><input class=\"submit\" name=\"login\" type=\"submit\" id=\"login\" value=\"\" /></td>
        </tr> 
      </table>
    </form>
    </div>";
}


hier die login.php:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
//function zum umwandeln der umlaute
function ers($text)
    {
        $umlaute = array("ä""Ä""ö""Ö""ü""Ü""ß");
        $ersetzen = array("&auml;""&Auml;""&ouml;""&Ouml;""&uuml;""&Uuml;""&szlig;");
        $text str_replace($umlaute$ersetzen$text);
        
        return $text;
        
        
    }

if (isset($_POST['login'])) 
{ 
    $name mysql_real_escape_string($_POST['username']);
//auskommentiert zum testen
    $name utf8_decode($name);
$name ers($name);
    $pass $_POST['userpass'];
    
    $userid check_user($name$pass); 
    if ($userid != false)
    {    
        login($userid);
        header("Location: index.php?section=news");
        
    }
    else
    { 
        header("Location: index.php?section=home&login=1");
        
    }


die function check_user() prüft nur ob dieser user vorhanden, also ist eigentlich relevant.

Ich hoffe mir kann schnell jemand helfen, das belastet mich jetzt schon einige wochen und ich hab nichts gefunden was mir weiterhelfen könnte. Irgendwo ist einfach wieder ein anfängerfehler von mir *g*
Agi
Probiers mal so:

$umlaute mit dem hier ersetzen:

php:
1:
$umlaute = array("ä""Ä""ö""Ö""ü""Ü""ß");



Eventuell liegt es an den / die da drinnen sind, weil ich hab sowas ähnliches auch mal gemacht und ich habe diese Schrägstriche nicht verwendet.
Maniac_81
dann bekomm ich ne fehlermeldung:

Zitat:

Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs\dart\functions.php on line 51


hab auch schon ereg_replace und strg_replace versucht, bekomm zwar keine fehlermeldung, aber funktioniert nicht.

ich glaube das es wirklich was mit dem charset zu tun hat, weil der browser das formular ja weiterschickt und dort die umlaute ja schon umgewandelt werden.

die ausgabe per:

echo $name = ers($name);

ergibt im browser:

Bären

sollte aber doch B&auml;ren sein.
dèjavue
Evtl musst du auch im Formular deklarieren mit welchen zeichensatz es operieren soll (ohne diesen führt es bei einigen Browsern zu missverständnissen Augenzwinkern )

http://de.selfhtml.org/html/formulare/de...m#zeichensaetze
Maniac_81
hab ich auch schon versucht, erfolglos.

warum wird mir im quelltext bei der ausgabe es mit umlaut angezeigt? also Bären....
[kamui]
Benutz mal lieber anstatt preg_replace str_replace. preg_replace benutzt man normalerweise, wenn man RegExp hat.

Wenn du str_replace benutzt brauchst du auch keine /.
Maniac_81
ok, hab ich nun geändert. trotzdem erfolglos.

was ich nun versucht habe ist folgendes:
php:
1:
2:
$name utf8_decode($name);
$name ers($name);

jetzt bekomm ich zumindest im quelltext schon mal "B&auml;ren" aangezeigt und im Browser "Bären".
nur geht der Login immernoch nicht.
qivis
Hm, ich bin sicher kein Experte, aber hab gestern noch was dazu gelesen.

Da stand, dass man auf keinen backslashes nehmen soll um die Zeichenketten zu trennen, weil der eben zur Maskierung reserviert ist

also würd ichs mal probieren mit / statt \ bei $umlaute

Sorry, wenns Murcks ist (;
Maniac_81
Zitat:
Original von qivis
Hm, ich bin sicher kein Experte, aber hab gestern noch was dazu gelesen.

Da stand, dass man auf keinen backslashes nehmen soll um die Zeichenketten zu trennen, weil der eben zur Maskierung reserviert ist

also würd ichs mal probieren mit / statt \ bei $umlaute

Sorry, wenns Murcks ist (;


das hatte ich ja schon auf anraten gemacht und die function str_replace benutzt.

doch das problem besteht immernoch. ein code-update hab ich oben gemacht.


problem ist immernoch das jetzt zwar der umlaut richtig übergeben wird, aber dennoch der login nicht funktioniert.
[kamui]
Also wenn ich das Script wie folgt teste:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function ers($text)
    {
        $umlaute = array("ä""Ä""ö""Ö""ü""Ü""ß");
        $ersetzen = array("&auml;""&Auml;""&ouml;""&Ouml;""&uuml;""&Uuml;""&szlig;");
        $text str_replace($umlaute$ersetzen$text);
        
        return $text;
    }
$name "Hölger";
echo $name." - ".htmlspecialchars(ers($name));


Gibt er mir "Hölger - H&ouml;lger" aus, an der Funktion des Umwandelns sollte es also nicht liegen.

Übrigens übernimmst du das Passwort direkt aus dem Post, ohne mysql_real_escape_string - gefährlich gefährlich Augenzwinkern

Deine check_user-Funktion funktioniert bei allen Usern, die keine Umlaute im Namen haben?
Maniac_81
wie ich geschrieben habe, es wird richtig ausgegeben und umgewandelt aber nur wenn ich "utf8_decode" verwende. dennoch funktioniert der login nicht.
bei allen anderen usern ohne umlaute geht es einwandfrei.

wenn ich

php:
1:
htmlspecialchars(ers($name));


versuche wird:

Bären

ausgegeben.
[kamui]
Hm, dann liegt das wohl an Server-Einstellungen (da kann ich dir nicht weiterhelfen) ...

Im PHPForum bekommst du sicherlich kompetente Hilfe, die etwas nützt ^.^
Maniac_81
hmm, hier sind doch auch alles spezialisten *gg*

habe mir die funktion noch erweitert um zuvor in utf8 zu wandeln.

php:
1:
2:
3:
4:
5:
6:
7:
function ers($text)
    {
        
        $umlaute = array("ä""Ä""ö""Ö""ü""Ü""ß");
        $ersetzen = array("&auml;""&Auml;""&ouml;""&Ouml;""&uuml;""&Uuml;""&szlig;");
        $text utf8_decode($text);
        $text str_replace($umlaute$ersetzen$text);


funktioniert auch soweit wie ich möchte, nur eben geht der login nicht.
[kamui]
Ja, wir sind schon alles Spezi's, aber bisher hat es dir wenig geholfen Augenzwinkern

Also in $text sind nun die Umlaute korrekt umgewandelt?
Maniac_81
richtig, habs auch eben getestet und etwas in die DB geschrieben. also wandelt alles korekt um.

was ich allerdings nicht beachtet hatte das die passwörter anderst gespeichert wurden als wenn ich es jetzt im browser eingebe. jetzt funktioniert es zumindest schon mal, muss ich eben alle passwörter neu generieren.