Login Script Problem

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

  • Login Script Problem

    Hi !

    Da ich noch keine grossartige Erfahrung mit PHP und MySQL gesammelt habe, wäre ich über Hilfe bei einem Problem dankbar.

    Es geht um ein Login Script das auf die Benutzer des Burning Boards 1.1.1 von Woltlab Zugreifen und so den dort Registrierten Mitgliedern es ermöglichen soll auf zusätzliche Features der Website selbst zuzugreifen.

    Dieses Script verwende ich : http://www.texturen2000.de/php/freeportal/portal.html

    Da wie ich schon erwähnt habe, ich kaum erfahrungen mit PHP habe und somit direkt am anfang stehe, weiss ich leider nicht wie ich das Script soweit umbauen soll damit sich die Forumsmitglieder dort einloggen können, registrieren sollen sie sich nur im Forum was ich noch soweit hingestrickt bekommen würde.

    In der Datenbank werden die User Informationen in folgender Reihenfolge gespeichert :

    userid
    username
    userpassword
    useremail
    regemail
    userposts
    groupid
    statu************tra
    regdate
    lastvisit
    lastactivity
    session_link
    signatur
    usericq
    aim yim
    userhp
    age_m
    age_d
    age_y
    avatarid
    interests
    location
    work
    gender
    usertext
    show_email_global
    mods_may_email
    users_may_email
    invisible
    hide_signature
    hide_userpic
    prunedays
    umaxposts
    bbcode
    style_set
    activation
    blocked

    Zum Password denke ich das es mit MD5 verschlüsselt ist ?!

    Ist nicht alzueilig aber wäre Toll wenn jemand da ein wenig beschreiben könnte was zu machen ist, damit ein gewisser Lerneffekt eintritt.

    Ich habe soweit geschaut welche der PHP Dateien für den Login relevant ist, wie sollte es anders sein ist es die login.php. Der Code sieht folgendermaßen aus :

    <?php

    require("dbcon.php");

    $query = "SELECT password FROM $userdata_table WHERE loginname = '$Username'";
    $query_result_handle = mysql_query ($query)
    or die (mysql_errno() . " - " . mysql_error() . "<br>\n");

    while ($result = mysql_fetch_row ($query_result_handle)){
    $encrypted_password = crypt($Password,$result[0]);
    if ($encrypted_password == $result[0]) {
    $IP = getenv(REMOTE_ADDR);
    $update = "UPDATE $userdata_table SET ip = '$IP', lastlogin = NOW() WHERE loginname = '$Username'";
    $update_result_handle = mysql_query ($update)
    or die ($update . "<br>" . mysql_errno() . " - " . mysql_error() . "<br>\n");
    session_register("Username");
    }
    }

    ?>

    Wie mache ich es nun das die Daten mit denen aus der vorhandenen Forums Datenbank genommen werden, wichtig ist das das Password soweit ich das beurteilen kann mit md5 verschlüsselt ist.

    Ich denke das ich hier statt :

    $query = "SELECT password FROM $userdata_table WHERE loginname = '$Username'";

    einfach :

    $query = "SELECT userpassword FROM $userdata_table WHERE username = '$Username'";

    eingeben müsste damit das Script auf die Daten zugreift, liege ich da soweit richtig ?

    nun ist noch die Sache mit md5 die zu erledigen wäre, wo ich überhaupt nichts zu sagen kann, da ich wie schon erwähnt absoluter anfänger bin.

  • #2
    Abend!

    Also du hast vollkommen recht! Das Userpasswort ist mit md5 verschlüsselt in der DB gespeichert.
    Wenn sich der User schon im Board angemeldet hat, kannst du doch einfach die Session-ID weitergeben, und auf jeder Seite überprüfen ob die Session gültig ist...
    Und falls dies nicht der Fall sein sollte, rufst du einfach die login.php auf und wenn sich richtig angemeldet wurde, leitest du einfach auf die gewünschte Seite weiter und testest wieder die Session-ID...

    Kommentar


    • #3
      Ich hab das mal im Zusammenhang mit phpbb2.x gemacht, es ist recht simpel.

      Um zu überprüfen, ob sich ein Einloggender Mitglied des Boards ist, machst du einfach ein Formular, wo username und pass eingegeben/abgefragt wird.
      a) Formular mit Eingabe username, pass. Dieses absenden
      b) Auf der nächsten Seite:

      $pass=trim($pass);
      $username=trim($username);
      $pass_md5_eingabe=md5($pass);

      $host = "localhost"; $login = "der_login"; $pass = "der_pass"; $database = "die_datenbank";

      $db = mysql_connect($host, $login, $pass);

      $query = "SELECT userpassword FROM userdata_table WHERE binary username = '$username'";
      // binary berücksichtigt Gross- und Kleinschreibung korrekt

      $resultat = mysql_db_query($database, $query);
      $zeilen = mysql_num_rows($resultat);

      $pass_md5_db = mysql_result($resultat, 0, "userpassword");

      mysql_close($db);

      // hier nun die Überprüfung

      if ($zeilen == 0)
      echo "Dieser username ist nicht registriert. Eingabe wiederholen";

      if ($zeilen > 1)
      echo = "Fehler in Datenbank, username ist mehrfach registriert";

      if ($zeilen == 1 && $pass_md5_eingabe !== $pass_md5_db)
      echo = "username ist registriert, aber userpasswort ist falsch. Eingabe wiederholen";

      if ($zeilen == 1 && $pass_md5_eingabe == $pass_md5_db)
      {
      echo "alles OK, eingeloggt";
      // weitere Anweisungen
      }

      Ansonsten wie oben gesagt, sauge dir das ganze aus den Sessions-Ablagen. Das funktioniert m.E. allerdings nur so lange, wie der User im Board eingeloggt ist.
      Zuletzt geändert von CHnuschti; 27.09.2002, 01:46.

      Kommentar


      • #4
        Erstmal Danke für eure Hilfe!

        Was die Sessions angeht wollte ich das so bewerkstelligen das sich nicht erst jemand im Forum eingeloggt haben muss um dann die zusätzlichen Features zu nutzen.

        Ich habe das Beispiel von CHnuschti ausprobiert und einiges dazugelernt, nur benötige ich die änderungen in dem von mir verwendeten Script, weil ich das schon bei mir laufen habe, nur möchte ich nun auf die Datenbank des Forums zrückgreifen so das sich niemand extra anmelden muss.

        Ich wäre über einige Tips für diese änderungen dankbar, da ich im moment nicht sehr viel Zeit habe um mich wirklich ernsthaft mit PHP und Mysql zu beschäftigen.

        Falls dann noch jemand so nett sein könnte und mir zeigt wie ich es bewerkstellige das sich der User nur einmal einloggen muss und nach einem Monat erst wieder, wäre ich ebenfalls sehr dankbar.

        Ich hoffe ich gehe euch nicht auf die Nerven !

        Kommentar


        • #5
          So, nun habe ich das ganze nochmals durchgegangen und habe nun folgendendes Problem, erstmal hier der Code :

          <?php

          $pass=trim($pass);
          $username=trim($username);
          $pass_md5_eingabe=md5($pass);

          $host = "localhost"; $login = "login"; $pass = "pass"; $database = "bb1_user_table";
          $db = mysql_connect($host, $login, $pass);

          $query = "SELECT userpassword FROM userdata_table WHERE binary username = '$username'";

          $resultat = mysql_db_query($database, $query);
          $zeilen = mysql_numrows($resultat);
          $pass_md5_db = mysql_result($resultat, 0, "userpassword");

          mysql_close($db);


          if ($zeilen == 0) {
          echo ("Dieser username ist nicht registriert. Eingabe wiederholen");}

          if ($zeilen > 1) { echo ("Fehler in Datenbank, username ist mehrfach registriert");}

          if ($zeilen == 1 && $pass_md5_eingabe !== $pass_md5_db)
          { echo ("username ist registriert, aber userpasswort ist falsch. Eingabe wiederholen");}

          if ($zeilen == 1 && $pass_md5_eingabe == $pass_md5_db)
          { SetCookie("couser", $username, time()+2678400, '/');
          print("<a href=\"http://localhost/main.php\">hier gehts weiter</a> ");echo $username;}
          ?>

          Bei dem ausführen kommen folgende meldungen :

          Warning: Supplied argument is not a valid MySQL result resource in C:\apache\htdocs\login\check.php on line 17

          Zeile 17 :
          $zeilen = mysql_numrows($resultat);


          Warning: Supplied argument is not a valid MySQL result resource in C:\apache\htdocs\login\check.php on line 18
          Dieser username ist nicht registriert. Eingabe wiederholen

          Zeile 18 :
          $pass_md5_db = mysql_result($resultat, 0, "userpassword");

          Nunja, immerhin bin ich schon einen Schritt weiter mit meinen Kenntnissen gekommen so das augenscheinlich nur noch diese Probleme zu beheben sind, ich wäre immernoch über jede Hilfe erfreut.

          Was mir noch im Kopf herumschwirrt ist das mit dem Cookie, solange kein Output vorhanden ist müsste das doch so funktionieren oder ?

          Kommentar


          • #6
            Ich habe den Fehler gefunden, ich hatte für die Datenbank den table mit den Userdaten angegeben, als ich es korrigierte funktionierte es.

            Nun hatt sich ein weiteres Problem ergeben bei dem ich absolut nicht weiterkomme, wäre für einen Tip dankbar :

            Warning: Unable to jump to row 0 on MySQL result index 2 in C:\apache\htdocs\login\check.php on line 23

            Hier der Code für Zeile 23 :

            $pass_md5_db = mysql_result($resultat,0,"userpassword");


            Zuletzt geändert von yoshi; 26.10.2002, 23:10.

            Kommentar


            • #7
              Weiss keiner einen Rat ?

              Kommentar


              • #8
                Kann mir jemand einen kleinen Tip geben, ich bin fast am verzweifeln, es funktioniert ja im endeffekt nur das ein Benutzer der nicht Registriert ist diese Fehlermeldung bekommt !

                Kommentar


                • #9
                  ich denke, dass die SQL-anfrage kein ergebnis liefert.
                  du schreibst ja auch, dass es nur bei nicht registrierten users auftritt. also sind diese auch nicht in der DB erfasst.

                  mach doch einfach ein @ vor den befehl.

                  PHP-Code:
                  $pass_md5_db = @mysql_result($resultat,0,"userpassword"); 
                  und schon verschwindet die fehlermeldung. ist aber nicht sehr schön.

                  lies mal auf http://de.php.net/manual/de/function.mysql-result.php ob du bessere alternativen findest.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    warum verwendest du eigentlich mal print() und mal echo. einige dich mal auf eins. das erhöht auf dauer die übersichtlichkeit .....

                    PHP-Code:
                    print("<a href=\"http://localhost/main.php\">hier gehts weiter</a> ");echo $username;} 
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Danke für die Hilfe, so läuft es genauso wie ich es benötige!

                      Das mit dem echo und print werde ich beherzigen.

                      Nochmals Danke an alle für die Hilfe !

                      Kommentar

                      Lädt...
                      X