Passwortabfrage will nicht :(

Hallo zusammen,

ich habe schon wieder ein Problem:

Ich habe mir eine kleine Passwortabfrage geschrieben.

Man muss seinen Benutzernamen und sein Passwort eingeben und dann wird es überprüft (die Daten sind schon in der DB).

Allerdings klappt es nicht (es kommt kein Fehler).

Hier der Code:

[php]if ($fail != true)
{
//Es folgt der Code zur Ueberpruefung des Benutzers und des Passworts:
$sql = „SELECT * FROM spieler WHERE Name=‚$username‘ and Passwort=‚$password_encoded‘“;
$result = @mysql_query($sql)
or die(„Es gab leider Probleme mit der Datenbank.

“;
$num = @mysql_num_rows($result);
if ($num == 0)
{
$login_fail = „Fehlerhafter Benutzername oder falsches Kennwort! Bitte versuchen sie es erneut.

“;
$succes = false;
}

    $succes = true;
 }[/php]

$fail ist nicht true → die if-Abfrage ist positiv.
Der Fehler muss irgendwo vor dem $succes = true liegen, da ansonsten weiter Codeteiele ausgeführt werden würden und dann eine Textausgabe käme.

Verbindungs zur DB und Kontrolle, ob die Eingaben sinnvoll sind werden auch gemacht (habe ich nur nocht gepostet).

Beim die() fehlt die schließende Klammer.

Hättest du kein @ davor geschrieben, dann hättest du es gesehen. Ein @ soltelste nur vor mysql_connect() und evtl. vor mysql_select_db() schreiben.

Was bewirkt denn das @? Habe es immer nur so gesehen und übernommen ohne nachzudenken :oops: .

Und danke für die Fehlersuche :razz: !

Das @ unterdrückt Fehlermeldungen.

MFG
Alti

Das @ bewirkt, dass falls es einen Fehler gibt keine Fehlermeldung ausgegeben wird.

Normalerweise schreibt man direkt zu anfang des scriptes ein error_reporting(E_ALL); damit man immer eine Fehlermeldung mitsamt Zeile bekommt, in der der Fehler steckt. Wenn man ein @ vor etwas setzt dann wird keine Fehlermeldung ausgegeben. Das ganze sollte man nicht benutzen, eine Ausnahme ist mysql_connect(), wenn dort ein Fehler auftritt dann stehen dort evtl. deine Zugangsdaten. Wenn man ein @ davorschreibt, dann sollte danach ein OR die(mysql_error)); folgen.

Beispiel wie es falsch ist:

[php]mysql_connect(„HOST“,„USER“,„PASS“);[/php]

Sollte die Datenbank unerreichbar sein oder ein Fehler dastehen, dann ist plötzlich dein Username und Passwort für alle Leute sichtbar.

Besser wäre:
[php]@mysql_connect(„HOST“,„USER“,„PASS“) OR die(mysql_error());[/php]

Bei weiteren Fragen erstmal da gucken, wenn immernoch Unklarheiten sbestehen dann hier posten.