Mein erstes OOP Projekt: Login Klasse!

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

  • Mein erstes OOP Projekt: Login Klasse!

    Hallo,

    naja, ich habe mir vorgenommen, OOP zu lernen. Kurzerhand habe ich eine Login Funktion geschrieben! Das Zip-Archiv ist im Anhang! Kritik, Bugreports, Verbesserungsvorschläge etc, bitte hier!

    Hier der Readme-Ausschnitt aus login_class.php:

    PHP-Code:
    <?php
    /********************************************************
     *
     * 
     * Login_class.php Version 1.4
     * (28.10.2005)
     * 
     * Known Bugs:
     *    -  Keine
     *   
     * ToDO:
     *    -  Nichts. Aber nicht zögern, mir zu schreiben
     *       falls Ihr Wünsche etc habt!
     *
     ********************************************************
     * 
     * Dieses Script darf frei kopiert und modifiziert
     * werden! Der Hinweiß auf den Autor darf nicht
     * entfernt werden! 
     *
     ********************************************************
     * 
     * Features:
     *    -  einfache Installation
     *    -  Supervisor, welcher direkt in dieser Datei
     *       angepasst werden kann! Hat immer Zugriff 
     *         als Admin!
     *    -  Benutzung von Sesseions und/oder Cookies
     *       zur Authentifizierung!
     *    -  Debugging ein- bzw ausstellbar!
     *    -  Cookiedauer festlegbar!
     *      -  Cookiename einstellbar!
     *    -  Maximale Anzahl an fehlgeschlagenen
     *         Logins in einer bestimmten Zeitspanne 
     *       einstellbar!
     *      -  Einfach Verwendung (Siehe Anwendungsbeispiele!)
     *    -  Bei jedem Aufruf einer Secret Area wird 
     *       überprüft, ob der User das Recht hat, die Page
     *       zu sehen!
     *    -  Bestimmte Bereiche festlegbar, welche nur 
     *       Admins sehen dürfen!
     *    -  Falls ein User ohne Authentifizierung eine
     *       geschützte Seite aufruft, wird das Login
     *       Formular auf dieser Seite angezeigt und
     *       er ist danach auch direkt auf dieser Seite!
     *    -  Anti-Hacker Schutz mit Simulierung einer
     *       variablen Antwortzeit des Servers, um Massen-
     *       requests zu blocken!
     *    -  Failed-Login Logs werden nach einem Tag gelöscht
     *
     ********************************************************
     *
     * Installation:
     *    -  Die Variablen unter diesem Kommentar anpassen!
     *    -  Es werden nur 2 MySQL tabellen benötigt. Die 
     *       install.php ausführen (es werden nun die Tabellen 
     *       angelegt), und danach unbedingt LÖSCHEN!
     *    -  Als Supervisor einloggen (Daten können in dieser
     *       Datei geändert werden ($cfg['user'],$cfg['pass']))
     *       und neue User/Admins erstellen!
     *
     ********************************************************
     *
     * Verwendung:
     *    -  Bitte die Datei login_class.php am Anfang der 
     *       Seite einbinden! z.b. require_once('login_class.php');
     *    -  In eine Seite mit geschütztem Inhalt folgendes einfügen,
     *       um den User zu überprüfen! Falls die Überprüfung
     *       fehlschlägt, wird das Formular angezeigt:
     *
     *             ********** CODE: ***********
     *             if( !($auth->may_person_view()) ) {
     *                $auth->show_redirect_form();
     *                exit();
     *            }
     * 
     *     -  Bitte die Datei admin.php in das Verzeichnis
     *        der zu schützenden Seite kopieren!
     *     -  Falls man Admin Rechte hat, bekommt man ein Link
     *        zu admin.php angezeigt, wo ma User erstellen
     *        und löschen kann! 
     *       -  Admin Bereiche lassen sich wie folgt schützen:
     *
     *           ********** CODE: ***********
     *            if( $auth->secureAdmin() ) {
     *                // ...Admin Bereich
     *            }    
     *
     *      -  Der Logout wird wie folgt aufgerufen:
     *             $auth->doLogout(); 
     *
     *      -  Also nochmal ein ganzes Beispiel:
     *
     *          <?php
     *            include('login_class.php');            
     *                    
     *            if( !($auth->may_person_view()) ) {
     *                $auth->show_redirect_form();
     *                exit();
     *            }    
     *
     *          // Ab hier fängt der Bereich an,
     *          // den eingeloggte User/ Admins sehen:
     *
     *            if($_GET["kill"] == "yes")
     *                $auth->doLogout();
     *                
     *            echo "Hallo User!";        
     *
     *            if( $auth->secureAdmin() ) {
     *                // Diesen Bereich zwischen den
     *              // geschweiften Klammern sehen nur
     *              // Admins!
     *            
     *            }
     *            
     *            // Das hier sehen nun auch wieder die
     *          // Normalen User:
     *
     *          // Link zum Logout!
     *          echo "<br><a href='?kill=yes'>logout!</a>";
     *            ?>
     *
     ********************************************************
     *
     * Bei Fragen, Kritik, Lob, Verbesserungsvorschlägen,
     * Bugreports etc, bitte entweder eine Email an mich
     * oder im ICQ melden, oder auf nsane.de vorbeischauen!
     *
     * Und nun viel Spaß bei der Benutzung!
     *
     ********************************************************/

    EDIT: NEUE VERSION 1.2:
    PHP-Code:
    <?php
     
    /********************************************************
     * CHANGELOG:
     *    v1.1 to v1.2:
     *    -  Man kann festlegen, ob man Notices angezeigt 
     *       haben möchte, oder nicht!
     *    -  Überprüfung auf install.php, sodass das Script
     *       nicht läuft, wenn man diese nicht gelöscht hat!
     *    -  Die install-Funktion wurde aus der Klasse entfernt
     *       und ist nur noch in der install.php enthalten
     *    -  Bugfix im SQL der Fkt db_install() wurde behoben!
     *    -  Alle Notices entfernt!
     *
     *********************************************************/
    ?>
    EDITENDE

    Edit²
    Neue version 1.3, Changelog:
    PHP-Code:
     /********************************************************
     * CHANGELOG:
     *    v1.2 to v1.3:
     *    -  Bei Cookiebasiertem Login werden die Daten nun 
     *       in nur einem Cookie gespeichert! Dazu werden sie
     *       zu einem String zusammengefügt, getrennt durch einen
     *       Seperator!
     *    -  Cookie-String-Seperator lässt sich einstellen.
     *    -  Pfad, in dem Cookie gilt, lässt sich nun auch
     *       bei den $cfg - Variablen anpassen!
     *    -  kleinen Bugfix. PHPSESSID-Cookie wird nun nur
     *       gelöscht, falls Sessions aktiviert sind!
     *    -  Weitere Notices behoben!
     *
     *********************************************************/
    ?> 
    Editende!


    Edit³
    Neue version 1.4, Changelog:
    PHP-Code:
    /********************************************************
     * CHANGELOG:
     *    v1.3 to v1.4:
     *    -  großer Bugfix. Und zwar werden die Variablen nun
     *       nicht per global definiert und dann in die Klasse
     *       geladen, sondern in richtigem OOP stil an den
     *       Konstruktor übergeben!
     *
     *********************************************************/
    ?> 
    Editende!

    Ich hoffe, es gefällt euch!
    Und für mein erstes Projekt find ich das ganz ordentlich!


    mfg
    björn

    p.s.: ich habe von keinem einzigen anderen Login Script abgeschaut

    [COLOR=red]Edit: Warum kann ich keinen Anhang mehr ändern?[/COLOR] Naja dann eben auf meinem privaten Hosting!
    login class 1.4
    Zuletzt geändert von firstlord18; 07.08.2007, 11:55.

  • #2
    wieso verwendest du global in verbindung mit einer class? böse!
    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


    • #3
      Original geschrieben von Abraxax
      wieso verwendest du global in verbindung mit einer class? böse!
      hm, wo mache ich das? meinst du, dass ich $cfg in den mthoden als global definiere?
      Naja, sry, aber wie gesagt, ist mein aller aller erstes OOP Projekt, ohne jegliches Tutorial und ohne bei anderen abzuschauen! Also klärt mich ruhig auf Danke

      achso, btw, neue version!

      Kommentar


      • #4
        solche dinge werden an die class übergeben. aber niemals mit global.

        und wo wir grad dabei sind ... ich halte es für besser, deinen thread aus den code-schnipsel - wo eigentlich fertige scripte liegen - in die projekthilfe zu schieben. ok?
        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


        • #5
          hm, ne, finde ich eigentlich nicht ok, da ich finde, dass das Script eigentlich ziemlich gut ist. Sonst sind doch kaum/keine Fehler drin!

          Edit: http://www.php-resource.de/forum/sho...threadid=58154 wurde trotz sowas wie global $_COOKIE; nicht verschoben ...

          Ich kanns ja auch noch ändern, will das ja richtig machen!

          Wie wärs, wenn ich einfach den Konstrukto so mache function login($par), dann ein neues Objekt so erstelle: $auth = new login($cfg); und dann kann ich ja im konstruktor allen klasseninternen variablen die werte aus $par zuweißen! wäre doch dann gut oder?
          Zuletzt geändert von firstlord18; 28.10.2005, 21:37.

          Kommentar


          • #6
            wenn der thread hier eine diskussion wird, wie du was machen sollst, ist es kein code-schnipsel mehr, sonder automatisch eine projekthilfe!

            trotz sowas wie global $_COOKIE; nicht verschoben ...
            darum geht es nicht1
            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


            • #7
              ja ok, stimmt! naja ich habe das script ja getestet! und es funzt einwandfrei! wenn nun aber jmd den ein oder anderen ratschlag etc hat (so wie das doch auch in anderen threads zu sehen ist, dass leute sich dazu äußern), kann ich das doch noch ändern/hinzufügen!

              naja, was sagst du dazu, was ich da oben geschrieben habe, dass ich einfach $cfg an das objekt übergebe, anstatt das mit gloabl zu machen, und dann die variablen zuzuweißen? ist das dann richtig?

              Edit: naja habe das nun so in OOP stil gemacht, dsas die Daten per Parameter an den konstruktor übergeben werden!

              1st post updated!
              Zuletzt geändert von firstlord18; 28.10.2005, 22:10.

              Kommentar


              • #8
                wo du schon dabei bist:
                - nimm die datenbank-geschichten daraus und pack diese in eine eigene class. sonst machst du den _db_connect-kram jedesmals aufs neue oder doppelt, wenn du mehrere klassen nutzt.
                -- entweder mit extends arbeiten oder eine referenz auf das datenbankobjekt weiterreichen.

                - echo und html-code hat imho überhaupt nichts in einer klasse zu suchen. eigentlich sollten nur werte retourniert werden. die ausgabe-formatierung übernimmt i.d.R. deine template-class.

                damit hättest du dann schon 3 klassen

                *ich verschieb dann mal, dann bin ich das a*****och *
                Kissolino.com

                Kommentar


                • #9
                  hm, also schreibe ich eine mysql klasse, in die ich alles reinpacke, wie z.b.:

                  PHP-Code:
                  <?php
                  class mysql_conn {
                     
                  //...
                  }
                  ?>
                  und wie kann ich nun darauf in meiner login klasse zurückgreifen?

                  Wie kann ichs machen, dass user auswählen, ob sie meine klasse verwenden, oder eine eigene klasse?
                  edit:
                  wie wärs so:

                  PHP-Code:
                  <?php
                  // self eintragen, wenn eigene connection bzw eigene klasse 
                  // verwendet wird, ansonsten this eintragen!
                  $cfg['how2conn'] = 'self'

                  // das hier nur ändern, wenn self eingetragen:
                  // entweder $link, oder handle zur klasse, wie z.b. 
                  // new myconnection(); eintragen
                  $cfg['yourconn'] = $conn



                  // und dann letztendlich das handle auswählen:
                  if($cfg['how2conn'] == "this")
                          
                  $cfg['conn'] = new mysql_conn($conn_settings);
                  elseif(
                  $cfg['how2conn'] == "self")
                          
                  $cfg['conn'] = $cfg['yourconn'];

                  ?>
                  wäre das so gut, oder wie mache ich das anders, dass der user seine eigene klasse, bzw sein eigenes connection handle, aber auch meine klasse verwenden kann?
                  /editende


                  /edit²
                  hm, wenn ich aber jmd anderen frei lasse, ob er seine eigene mysql klasse verwendet, dann würde ja meine login klasse nicht mehr funzen, da diese nun so kosntruiert ist, dass sie auf bestimmte methoden meiner mysql klasse zugreift. benutzt jmd nun seine eigene mysql klasse, dann heißen demjenign seiten methoden eventuell auch anders :/
                  och mann, ich weiß echt net, was ich machen soll ...
                  /editende²

                  un ne tpl classe bräcuhte ich doch eigentlich nich, oder? ich könnte einfach echo durch return ersetzten, und dann statt $auth->show_form() einfach echo $auth->show_form() schreiben!
                  Zuletzt geändert von firstlord18; 29.10.2005, 16:03.

                  Kommentar


                  • #10
                    Das nenn ich mal Projekthilfe ... :\

                    Kommentar


                    • #11
                      Original geschrieben von firstlord18
                      Wie kann ichs machen, dass user auswählen, ob sie meine klasse verwenden, oder eine eigene klasse?
                      gegenfrage ... was interessiert dich das?

                      oop bedeutet, dass DU DEINEN code wiederverwenden kannst ... wenn du nur was für die codeschnipsel oder fürs scriptarchiv schreiben willst, denk dir was aus, das unabhängig von anderen klassen/code-fragmenten läuft.

                      anders herum: wenn es die universelle klassenstruktur gäbe, die db-abfragen, usermanagement, template-handling etc. pp. abdeckt, warum solltest du das noch selber coden?

                      zu deinem "problem":
                      1. die idee, objekte in einem array abzulegen ist sicher nicht verkehrt
                      2. such mal nach referenzen ... auch interessant
                      3. wenn deine login-class eine sql-class benötigt, stell sie mit zur verfügung
                      Kissolino.com

                      Kommentar


                      • #12
                        Zu Punkt3:

                        du sagtest doch, dass es dumm sei, wenn ich ne mysql class mit einbaue, denn wenn leutz schon ne eigene haben, dann müssen sie 2 connections aufbauen ...
                        und genau deswegen frage ich. wenn ich nun das so schreibe, dass andere klassen für die connection verwendet werden sollen, dann geht das ja net, da ich net weiß, wie die methoden der anderen heißen...

                        >oop bedeutet, dass DU DEINEN code wiederverwenden kannst
                        na dann geht das so ja, weil ich kann das so eigentlich gut wiederverwenden ....


                        so, und warum kann man des so eigentlich net bei codeschnipsel lassen? user können des doch wunderbar verwenden. ich denke nicht, dass da irgendwas nicht funzt. eigentlich is die klasse fertig ...

                        Kommentar


                        • #13
                          Hallo Community,

                          Die Login Klasse auf der Website ist leider down...

                          Könnte Sie jemand von Euch, der sie noch hat, bitte zuschicken?

                          Wäre echt super.

                          Vielen Dank schonmal..

                          so long,

                          romolus88

                          Kommentar

                          Lädt...
                          X