Login mit MrHappiness Tutorial

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Login mit MrHappiness Tutorial

    Hallo zusammen,

    habe gestern das Tutorial von MrHappiness gefunden und bin auch schwer
    begeistert davon. Gut und leicht verständlich geschrieben, mit vielen für
    Anfänger nicht unwichtigen Randbemerkungen. Danke für deine Mühe und
    dein Engagement.

    Leider funktioniert es bei mir nicht so prima, wie bei den vielen Anderen
    hier im Forum, die von dieser klasse Arbeit schon profitiert haben. Sieht
    (nach längerer Recherche) auch so aus, als habe niemand die Probleme, die
    ich damit habe. Was aber nichts heißen muss, da ich kein großer Coder bin.

    Habe alle Skripte per Copy&Paste 1:1 aus dem Tutorial
    [COLOR=blue]http://php-resource.de/tutorials/read/38/4/[/COLOR]
    übernommen und alle Dateien wie beschrieben benannt. Die DB-Tabelle
    ebenfalls 1:1 angelegt.

    Meine Probleme:

    Nach erfolgreichem Login zeigt mir die login.php wie gewünscht zwei Links
    an "Ausloggen" und "Check". Die Session-ID wird in die DB geschrieben.

    1. Bei Klick auf "Check" sagt mir die logged_in.php an, dass ich nicht
    eingelogged bin und bietet mir den Link "Start" an, um mich erneut
    einzuloggen.

    2. Bei Klick auf "Ausloggen" komme ich auf die logout.php, auf der dann
    zweimal "Sie sind nicht eingeloggt." steht. ? Darüber hinaus wird in der DB
    das Feld "UserSession" nicht auf NULL gesetzt, was die
    Überprüfungsfunktion "logged_in()" in der sessionhelpers.inc.php natürlich
    unmöglich macht.

    Frage:

    Kennt oder findet jemand die Probleme und mögliche Abhilfe?

    Code login.php:

    PHP-Code:
    session_start();
    include 
    'sessionhelpers.inc.php'
    if (isset(
    $_POST['login'])) 

        
    $userid=check_user($_POST['username'], $_POST['userpass']); 
        if (
    $userid!=false
            
    login($userid); 
        else 
            echo 
    'Ihre Anmeldedaten waren nicht korrekt!'

    if (!
    logged_in()) 
        echo 
    '<form method="post" action="login.php"> 
            <label>Benutzername:</label>
    <input name="username" type="text"><br> 
            <label>Passwort: </label>
    <input name="userpass" type="password" id="userpass"><br> 
            <input name="login" type="submit" 
    id="login" value="Einloggen"> 
        </form>'
    ;
    else 
        echo 
    '<a href="logout.php">Ausloggen</a>'
    echo 
    '<p /><a href="logged_in.php">Check</a>'
    Code logged_in.php:

    PHP-Code:
    session_start();
    include 
    'sessionhelpers.inc.php'
    echo 
    'Sie sind '
    if (!
    logged_in()) 
        echo 
    'nicht '
    echo 
    'eingeloggt.<p />'
    echo 
    '<a href="login.php">Start</a>'
    Code logout.php:

    PHP-Code:
    session_start(); 
    include 
    'sessionhelpers.inc.php'
    echo 
    'Sie sind '
    if (!
    logged_in()) 
        echo 
    'nicht '
    echo 
    'eingeloggt.<p />'
    logout(); 
    echo 
    'Sie sind '
    if (!
    logged_in()) 
        echo 
    'nicht '
    echo 
    'eingeloggt.< p/>'
    echo 
    '<a href="login.php">Einloggen</a>'
    Code sessionhelpers.inc.php:

    PHP-Code:
    function connect()

        
    $conmysql_connect('servername','benutzer','passwort'
    or die (
    mysql_error()); 
         
    mysql_select_db('datenbankname',$con
    or die(
    mysql_error()); 


    function 
    check_user($name$pass

        
    $sql="SELECT UserId 
        FROM users 
        WHERE UserName='"
    .$name."' AND UserPass=MD5('".$pass."') 
        LIMIT 1"

        
    $resultmysql_query($sql) or die(mysql_error()); 
        if ( 
    mysql_num_rows($result)==1
        { 
            
    $user=mysql_fetch_assoc($result); 
            return 
    $user['UserId']; 
        } 
        else 
            return 
    false


    function 
    login($userid

        
    $sql="UPDATE users 
        SET UserSession='"
    .session_id()."' 
        WHERE UserId="
    .$userid
         
    mysql_query($sql); 


    function 
    logged_in()

        
    $sql="SELECT UserId 
        FROM users 
        WHERE UserSession='"
    .session_id()."' 
        LIMIT 1"

        
    $resultmysql_query($sql); 
          return ( 
    mysql_num_rows($result)==1); 


    function 
    logout() 

        
    $sql="UPDATE users 
        SET UserSession=NULL 
        WHERE UserSession='"
    .session_id()."'"
         
    mysql_query($sql); 


    connect(); 
    Zuletzt geändert von Smartsoul; 23.11.2005, 14:28.
    [FONT=arial][COLOR=orangered]
    Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
    [/COLOR]

    ... und nicht vergessen: der Ton macht die Musik ;-)

    ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
    [/FONT]

  • #2
    weiß ja net wie es bei anderen aussieht, aber könntest du deinen post
    mit zeilenumbrüchen formatieren, der zieht sich in die länge und keiner hier hat lust horizontal nach rechts zu scrollen

    Kommentar


    • #3
      @ st@tic

      Klar kann ich das. Sorry, aber ich wusste nicht, dass das ein Problem ist.
      Denke aber das liegt an der Programmierung des Forums, oder?

      Heisst das ich soll immer einen Zeilenumbruch machen, wenn ich im
      Eingabefenster ans Ende der Zeile stoße? Oder an welcher Stelle sonst?

      ... und soll ich das beim Code auch machen?

      Nichts für ungut. Bin neu hier!
      Zuletzt geändert von Smartsoul; 22.11.2005, 17:06.
      [FONT=arial][COLOR=orangered]
      Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
      [/COLOR]

      ... und nicht vergessen: der Ton macht die Musik ;-)

      ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
      [/FONT]

      Kommentar


      • #4
        Normaler Text wird sowieso umgebrochen.
        Deshalb NUR im Code zu lange Zeilen umbrechen.
        Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

        Kommentar


        • #5
          Danke für die Hinweise bzgl. Formatierung.

          Gibt es auch Tipps zu meinem Problem?

          Die function logout() wird z.B. vollkommen ignoriert.
          Zuletzt geändert von Smartsoul; 22.11.2005, 18:44.
          [FONT=arial][COLOR=orangered]
          Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
          [/COLOR]

          ... und nicht vergessen: der Ton macht die Musik ;-)

          ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
          [/FONT]

          Kommentar


          • #6
            Original geschrieben von Smartsoul
            Danke für die Hinweise bzgl. Formatierung.
            Gibt es auch Tipps zu meinem Problem?
            Anscheinend nicht, solange Du Deinen Code nicht umbrichst.

            Ausserdem, was hast Du denn unternommen, um den Fehler zu finden?
            Das Problem scheint doch in der function logged_in() zu liegen, die ein falsches Ergebnis zurückliefert. Lass Dir doch mal die Query ausgeben.
            So, und bis Du Deinen Code nicht umgebrochen hast, gibts keine weiteren Tips.
            Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

            Kommentar


            • #7
              Sorry, aber ich dachte, das hätte ich bereits in ausreichendem Maß getan.

              Bei mir sieht auch alles okay aus. Ich kann den ganzen Code sehen und rechts ist bei mir auch noch Platz.

              Werde aber nochmal oben reingehen und versuchen den Umbruch besser zu machen.
              [FONT=arial][COLOR=orangered]
              Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
              [/COLOR]

              ... und nicht vergessen: der Ton macht die Musik ;-)

              ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
              [/FONT]

              Kommentar


              • #8
                O.K.

                Hab jetzt nochmal umgebrochen und hoffe, dass es jetzt passt. Bitte um Nachsicht ob meiner Unerfahrenheit.

                THX und werde mich nun um die Query von der logged_in() kümmern.
                [FONT=arial][COLOR=orangered]
                Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                [/COLOR]

                ... und nicht vergessen: der Ton macht die Musik ;-)

                ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                [/FONT]

                Kommentar


                • #9
                  Hab ich mich schon rehabilitiert (genug Umbrüche usw.)? Nochmals sorry, Leute. Habt bitte Nachsicht mit mir.

                  Die Ausgabe der logged_in() ist:

                  Resource id #4

                  Allerdings ist der einzige Datensatz, der in der DB-Tabelle drin steht
                  und in den ja auch die session_id rein geschrieben wird, der Datensatz mit der UserId #1. Logischerweise muss das Ergebnis der Funktion "nicht eingeloggt" sein, aber ...

                  Wie kommt das zustande?
                  [FONT=arial][COLOR=orangered]
                  Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                  [/COLOR]

                  ... und nicht vergessen: der Ton macht die Musik ;-)

                  ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                  [/FONT]

                  Kommentar


                  • #10
                    Bau das
                    PHP-Code:
                    or die(mysql_error()); 
                    mal hinter jeder Abfrage ein.

                    Wenn das keine weiteren Meldungen ausspuckt, lass dir die SQL-Anweisungen mal mit echo ausgeben und poste die
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Original geschrieben von Smartsoul
                      Die Ausgabe der logged_in() ist: Resource id #4
                      Allerdings ist der einzige Datensatz, der in der DB-Tabelle drin steht (...) der Datensatz mit der UserId #1.
                      Mir scheint, du mißinterpretierst die Ausgabe. Es handelt sich nicht um Daten aus der DB sondern um die DB-Verbindungs-Kennung.

                      Kommentar


                      • #12
                        @ mrhappiness

                        PHP-Code:
                        or die(mysql_error()) 
                        hat keine weiteren Meldungen gebracht

                        Ausgabe der SQL Abfrage in login() vor dem Login:
                        SELECT UserId FROM users
                        WHERE UserSession='90dda062181220090a95bd86f427bbfd'
                        LIMIT 1

                        Ausgabe der SQL Abfrage in login() nach dem Login:
                        UPDATE users
                        SET UserSession='d6be669f392771b2c4ffc499892b2078'
                        WHERE UserId=1
                        SELECT UserId
                        FROM users
                        WHERE UserSession='d6be669f392771b2c4ffc499892b2078'
                        LIMIT 1

                        Ausgabe der SQL Abfrage in logged_in() nach dem Login:
                        SELECT UserId
                        FROM users
                        WHERE UserSession='a30a8e5bf0dbb12a58851c66b7a4ce38'
                        LIMIT 1
                        Zuletzt geändert von Smartsoul; 23.11.2005, 12:45.
                        [FONT=arial][COLOR=orangered]
                        Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                        [/COLOR]

                        ... und nicht vergessen: der Ton macht die Musik ;-)

                        ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                        [/FONT]

                        Kommentar


                        • #13
                          Das Komische ist, dass bei jedem Aufruf der Datei (Dateien) die session_id verändert wird und die soll doch eigentlich gleich bleiben, oder?
                          [FONT=arial][COLOR=orangered]
                          Mein Buchtipp: Gegenseitige Hilfe (Michail Kropotkin)
                          [/COLOR]

                          ... und nicht vergessen: der Ton macht die Musik ;-)

                          ... aber, manchmal ruft man in den (Forum-)Wald hinein und es schallt ganz anders heraus
                          [/FONT]

                          Kommentar


                          • #14
                            Original geschrieben von Smartsoul
                            Das Komische ist, dass bei jedem Aufruf der Datei (Dateien) die session_id verändert wird und die soll doch eigentlich gleich bleiben, oder?
                            Das, besser wär' das.

                            Kontrolliere also die Session-Einstellungen (phpinfo()).
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              PHP-Code:
                              phpinfo(); 
                              Bitte den Bereich "Session" posten.

                              Wahrscheinlich blockierst du das Session-Cookie, das die Session-ID beim Client speichern soll oder hast PHP so konfiguriert, dass ohne Cookie gearbeitet werden soll.

                              Darüberhinaus ist das Anhängen der Session-ID an relative Links deaktiviert.
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X