Claudia: Denkfehler bei Login-Script? (unter Verwendung von Sessions)

Ich hab ein Login und habe das Problem, dass ich IMMER in die else-Schleife reinkomme, d.h. dass ich mich nicht einloggen kann. Kann jemand mal schauen, wo der Fehler liegt? Vielleicht ist ja n Denkfehler drin... ich find nix :-(

Also, dieser Datei werden die Variablen $benutzername und $pass zugewiesen und die Datei prüft dann, ob die Eingaben mit der Datenbank übereinstimmen.

<?php
session_start();
session_register("benutzername");
?>
<?php
include ("connect.php"); //verbindung zur db
$abfrage = "SELECT * FROM login WHERE benutzername='$benutzername' AND pass='$pass'";
$ergebnis = mysql_query($abfrage);
if (mysql_num_rows($ergebnis)==1)
{ $wert = mysql_fetch_array($ergebnis);
 $id = $wert[0];
 $level=$wert[3];
 session_register("id","level");
 header ("Location: site_profil.php"); //diese seite soll aufgerufen werden, wenn das Login erfolgreich war
 } else {
echo "Login fehlgeschlagen!";}
?>

  1. Hallo Claudia

    Ich hab ein Login und habe das Problem, dass ich IMMER in die else-Schleife reinkomme, d.h. dass ich mich nicht einloggen kann. Kann jemand mal schauen, wo der Fehler liegt? Vielleicht ist ja n Denkfehler drin... ich find nix :-(

    Also, dieser Datei werden die Variablen $benutzername und $pass zugewiesen und die Datei prüft dann, ob die Eingaben mit der Datenbank übereinstimmen.

    <?php
    session_start();
    session_register("benutzername");
    ?>
    <?php
    include ("connect.php"); //verbindung zur db
    $abfrage = "SELECT * FROM login WHERE benutzername='$benutzername' AND pass='$pass'";

    in deinem SQL-Befehl ist ein Fehler drin: Strings muss man mit dem Operator LIKE vergleichen! Siehe dazu diverse Dokumentation an...

    $ergebnis = mysql_query($abfrage);
    if (mysql_num_rows($ergebnis)==1)
    { $wert = mysql_fetch_array($ergebnis);
    $id = $wert[0];
    $level=$wert[3];
    session_register("id","level");
    header ("Location: site_profil.php"); //diese seite soll aufgerufen werden, wenn das Login erfolgreich war
    } else {
    echo "Login fehlgeschlagen!";}
    ?>

    Benne

  2. Servus!

    $abfrage = "SELECT * FROM login WHERE benutzername='$benutzername' AND pass='$pass'";

    Der String hier ist einfach falsch.

    Nimm mal
    $abfrage = "SELECT * FROM login WHERE benutzername=".$benutzername." AND pass=".$pass;

    sollte funktionieren!

    eiliger Gruß,
    Peter

    1. Servus!

      Hallo Klaus

      $abfrage = "SELECT * FROM login WHERE benutzername='$benutzername' AND pass='$pass'";

      Der String hier ist einfach falsch.

      nein, PHP parst bekannlicherweise auch vars in einem ausdruck :-)

      Nimm mal
      $abfrage = "SELECT * FROM login WHERE benutzername=".$benutzername." AND pass=".$pass;

      sollte funktionieren!

      eiliger Gruß,
      Peter

      Benne

  3. Moin!

    Ich hab ein Login und habe das Problem, dass ich IMMER in die else-Schleife reinkomme, d.h. dass ich mich nicht einloggen kann. Kann jemand mal schauen, wo der Fehler liegt? Vielleicht ist ja n Denkfehler drin... ich find nix :-(

    <?php
    session_start();
    session_register("benutzername");
    ?>
    <?php
    include ("connect.php"); //verbindung zur db
    $abfrage = "SELECT * FROM login WHERE benutzername='$benutzername' AND pass='$pass'";
    $ergebnis = mysql_query($abfrage);
    if (mysql_num_rows($ergebnis)==1)

    Du landest im ELSE-Teil, wenn diese Bedingung nicht erfüllt wird.

    Wie kann sowas passieren?

    1. Es werden mehr als 1 passender Eintrag in der Datenbank gefunden. Wäre nicht gut, müßte gesondert behandelt werden (Nachricht an Admin wäre ganz gut), und darf auf keinen Fall zu einem Login führen. Also OK.

    2. Es wird kein passender Eintrag gefunden. Klar, daß man dann nicht einloggen darf.

    3. Die MySQL-Abfrage vorher läuft irgendwie schief (aber nicht so schief, daß es Fehlermeldungen gibt). Dann klappts hier auch nicht, weil nichts gefunden wird.

    { $wert = mysql_fetch_array($ergebnis);
    $id = $wert[0];
    $level=$wert[3];
    session_register("id","level");
    header ("Location: site_profil.php"); //diese seite soll aufgerufen werden, wenn das Login erfolgreich war
    } else {
    echo "Login fehlgeschlagen!";}
    ?>

    Mein Tipp: Lass dir testweise mal das Ergebnis der SQL-Abfrage ausgeben, dann siehst du, was die Datenbank so sagt, und erkennst sicherlich auch den Fehler. Alternativ läßt du dir den SQL-String mal mit echo ausgeben, dann siehst du, was du _wirklich_ von der Datenbank wissen willst. Wenn das nicht das ist, was du denkst, hast
    du schon eine Fehlerquelle gefunden.

    - Sven Rautenberg

  4. Darf ich auch mal? :)

    <?php
    session_start();
    session_register("benutzername");

    Wird hier registriert, aber wo bekommt $benutzername seinen Wert in _diesem_ Skript her? Eventuelle musst Du auf die Sessionvariablen mit $_SESSION["benutzername"] zurückgreifen.

    $abfrage = "SELECT * FROM login WHERE benutzername='$benutzername' AND pass='$pass'";

    Ähnliches hier: Woher hat $pass denn ihren Wert? Kommt der Wert von einem Formular, dass dieses Skript aufruft? Dann versuche es mal mit $_POST/$_GET("pass") (evtl. Gleiches mit $benutzername machen).

    Sonst kann ichmich zum Debuggen nur Svens Tipps anschließen: Echos rein und ausgeben lassen, was immer auszugeben ist.

    Gruss, Stefan