Ergebnis 1 bis 6 von 6

Thema: [PHP] LogIn system - Probleme bei der Ausgabe von Fehlermeldungen

  1. #1

    [PHP] LogIn system - Probleme bei der Ausgabe von Fehlermeldungen

    [FONT=Century Gothic]Moin.
    Wie der Titel schon sagt, bin ich gerade dabei ein kleines LogIn System zusammenzubasteln, das wie folgt arbeitet:
    In einem simplen html-Formular werden Nutzername und Passwort eingegeben, die dann mit <form method=post> an das nächste Dokument geschickt werden, wo die Daten dann überprüft werden und entsprechende Ausgaben erfolgen (sprich: Bei falschen LogIn Daten eine Fehlermeldung, ansonsten die eigentliche Seite.)
    Dabei habe ich insgesamt 2 verschiedene Fehlermeldungen entworfen (eine die angezeigt wird wenn der Nutzername falsch ist und eine wenn der Nutzername stimmt, aber das Passwort falsch ist.)
    Das Ding an sich funktioniert auch wie es soll: Wenn Name+Passwort korrekt sind, bekommt man das eigentliche Dokument angezeigt, ansonsten gibts ne Fehlermeldung.
    Nur machen die Fehlermeldungen an sich wie folgt Probleme:
    Wenn der eingegebene Nutzername und das Passwort korrekt sind, bekommt der User zwar die Seite angezeigt zu der er gelangen soll, allerdings auch die Fehlermeldung "Nutzername falsch".
    Wenn Passwort und/oder Nutzername nicht stimmen, werden einfach stumpf beide Fehlermeldungen ausgegeben.

    Der zugehörige php Code sieht wie folgt aus (ich hoffe dass die Kommentare deutlich genug beschreiben, was welche Funktion haben soll, ansonsten einfach fragen):
    PHP-Code:
    <?php 
      $user       
    $_POST["user"]; 
      
    $passwort   $_POST["passwort"]; 

      if (isset(
    $_POST["user"],$_POST["passwort"])) 
      { 
         
    $ok false
               
         
    $data file("pw.txt"); //***Datei mit den Usernamen & Passwörtern***

         
    foreach ($data as $line
         {
    $ok false;
            
    $ar explode(","$line); //***Trennzeichen zwischen Name und Passwort (hier: ,)***
            
    $u trim($ar[0]); 
            
    $p trim($ar[1]); 

    //***Prüfen der LogIn Daten & Fehlermeldungen***

            
    if ($u == $user)   //***Wenn Nutzername stimmt***
            

               if (
    $p == $passwort//***Wenn auch passwort stimmt***
                  
    {$ok true;}     //***login-Variable auf "true" setzen -> Einloggen ermöglichen***

               
    else 
                  {echo 
    "Falsches Passwort!<br><br>
                 Bitte Zurück-Funktion des Browsers benutzen."
    ;} //***Wenn Passwort nicht stimmt, Fehlermeldung***
            

        else
        {echo 
    "Benutzername nicht gefunden!<br><br>
            Bitte Zurück-Funktion des Browsers benutzen."
    ;} //***Wenn Nutzername nicht stimmt, Fehlermeldung***
              
          
    }
        
    //***Wenn Angaben alle korrekt***

         
    if ($ok == true)
         { 
    blablabla}
    ?>
    Wie gesagt, das LogIn System an sich läuft wie es soll, nur die Ausgabe der Fehlermeldungen stimmt nicht so ganz und ich bin grad zu dumm den Fehler zu finden ;)

    Danke schonmal im vorraus für jede Hilfe.
    [/FONT]

    Geändert von Time Streamer (18.11.2006 um 22:25 Uhr) Grund: Code Update

  2. #2
    PHP-Code:
    $user $_POST["user"];
    $passwort $_POST["passwort"]; 
    Wozu dieses sinnlose Variablenschaukeln? Effektivität im negativen Bereich.

    PHP-Code:
    isset($_POST["user"]) && isset($_POST["passwort"]) 
    Es geht auch einfacher:
    PHP-Code:
    isset($_POST["user"],$_POST["passwort"]) 
    Warum der von dir beschriebene Fehler auftritt ist mir leider unklar, zumal du alles richtig Verschachtelt hast (an der Einrückung kannst du aber noch arbeiten).

    Ich nehme an, dass die foreach-Schleife mehrmals ausschlägt. Da innerhalb dieser kein $ok = false; am Anfang steht wird das $ok = true; vom ersten Durchlauf weiterhin verwendet, während die erneute Prüfung (hochwahrscheinlich eine Leerzeile o.ä. in der Textdatei) statt $ok = true; eben den Fehler ausgibt.

  3. #3
    [FONT=Century Gothic]
    Zitat Zitat von mitaki Beitrag anzeigen
    Warum der von dir beschriebene Fehler auftritt ist mir leider unklar, zumal du alles richtig Verschachtelt hast (an der Einrückung kannst du aber noch arbeiten).

    Ich nehme an, dass die foreach-Schleife mehrmals ausschlägt. Da innerhalb dieser kein $ok = false; am Anfang steht wird das $ok = true; vom ersten Durchlauf weiterhin verwendet, während die erneute Prüfung (hochwahrscheinlich eine Leerzeile o.ä. in der Textdatei) statt $ok = true; eben den Fehler ausgibt.
    [/FONT][FONT=Century Gothic]
    Es liegt tatsächlich daran, dass die Schleife mehrmals ausschlägt.
    Ich habe in der Datei in der Namen und Kennwörter gespeichert sind insgesamt 2 User/Kennwörter gespeichert.
    Wenn ich einen davon rausnehme, also nur noch 1 Nutzername/Kennwort vorhanden ist, dann funktioniert alles genauso wie es soll.
    Da ich es aber schon ganz gerne hätte, dass es auch mit mehreren Nutzernamen/Kennwörtern klappt (wenn schon, dann richtig ;) ) will ich das als Lösung aber nicht unbedingt hinnehmen...
    Allerdings fällt mir jetzt auch nichts ein was ich machen könnte um das zu verhindern dass die Schleife mehrmals durchläuft. Gibts da vielleicht einen Befehl bei php mit dem man einer Schleife sagen kann, dass sie nur so lange durchlaufen soll, bis der erste Treffer gelandet ist? Also praktisch "vergleiche so lange den Inhalt der Textdatei mit den eingegebenen LogIn Daten bis sie das erste mal übereinstimmen und dann breche ab"?
    Ich beschäftige mich wohlbemerkt noch nicht allzu lange mit php, also sorry wenn diese Frage vielleicht ein wenig ... dumm klingt ;)

    [/FONT][FONT=Century Gothic]Die Lösung mit "[/FONT][FONT=Century Gothic]$ok = false;" am Anfang des Anweisungsblocks hat leider nichts [/FONT][FONT=Century Gothic]gebracht.
    Wenn ich das da reinsetze, dann gibts für User 1 bei korrektem LogIn nur noch die Fehlermeldung "Nutzername falsch", man bekommt aber nicht mehr das angezeigt was man bei richtigem LogIn sehen soll.
    Also im Grunde keine Veränderung, außer dass für User 1 kein korrekter LogIn mehr möglich ist.

    [/FONT]
    Zitat Zitat
    Wozu dieses sinnlose Variablenschaukeln? Effektivität im negativen Bereich.
    [FONT=Century Gothic]Stimmt eigentlich ...

    Hey, ich bin noch Anfänger, ich darf das ;)
    [/FONT]

  4. #4
    Wenn du auf eine allgemeine Fehlermeldung setzt könntest du das Problem verhindern.

    Sprich: Schleife wird mit allen Prüfungen ausgeführt. Nach der Schleifen wird dann $ok überprüft, wenn true: Inhalte anzeigen, wenn false: eine allgemeine Fehlermeldung ausgeben. Etwa: Ungültiger Benutzername oder Passwort angegeben.

  5. #5
    Zitat Zitat von Time Streamer Beitrag anzeigen
    Allerdings fällt mir jetzt auch nichts ein was ich machen könnte um das zu verhindern dass die Schleife mehrmals durchläuft. Gibts da vielleicht einen Befehl bei php mit dem man einer Schleife sagen kann, dass sie nur so lange durchlaufen soll, bis der erste Treffer gelandet ist? Also praktisch "vergleiche so lange den Inhalt der Textdatei mit den eingegebenen LogIn Daten bis sie das erste mal übereinstimmen und dann breche ab"?
    Der entsprechende PHP-Befehl nennt sich break
    Guck dir am besten einfach mal alle Kontrollstrukturen auf der linken Seite an.

  6. #6
    [FONT=Century Gothic]Erstmal danke für den tollen Link. ;)

    mhh ... break ... klingt gut. Werds die Tage mal reinbasteln.

    @mitaki: Hast wohl recht, wär fürs erste einfacher es mit einer allgemeinen Fehlermeldung zu versuchen. Werd das beim nächsten Versuch mal berücksichtigen ;)
    [/FONT]

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •