OOP Testaufgabe

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

  • OOP Testaufgabe

    Hallo!

    Ich hatte am Freitag eine Testaufgabe und bin mir nicht sicher ob meine Lösung gut ist oder ob es nicht besser zu proggen ist.

    Die Aufgabenstellung: Erstelle ein Loginfenster und pürfe ob ein bestimmter Username vorhanden ist. Wenn ja, tausche den Login-Button mit einem Logout-Button aus. Außerdem speichere alle Aktionen in eine weitere Tabelle ab. Z.B. User hat sich erfolgreich angemeldet, User nicht vorhanden usw.

    PHP-Code:
    <?php
    include_once("db_inc.php");

    if(
    $_POST['login']){
    include_once(
    "pruefen.php");
    }
    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

    <html>
    <head><title>Login</title

    <link rel="stylesheet" type="text/css" href="basic.css">
    </head>

    <body>
        <div id="formular">
        <fieldset>
        <legend>Login</legend>
            <form method=POST action="<?php print htmlspecialchars($_SERVER['PHP_SELF']); ?>">
                <input type="input" name="user" maxlenght="40" value="Username">
                <input type="password" name="pass" maxlenght="20" value="Paswort"><br>
                <?if ($para != 2) {?>
                <input type="submit" value="login" name="login">
                <?} else {?>
                <input type="submit" value="logout" name="logout">
                <?}?>
            </form>
        </fieldset>
        </div>
        <?if ($para != 2) {
           echo "da ist was schief gegenagen!";
        } else {
           echo "Hallo";
        }?>
        
    </body>
    </html>

    PHP-Code:
    <?php

    class login {
         public function 
    pruefen($user$pass) {
            
    $res1 mysql_query("SELECT user_id, username, password FROM user WHERE username = '$user'");
            
    $erg1 mysql_fetch_row($res1);
        
                if(
    $erg1){
                    
    $res2 mysql_query("SELECT user_id, username, password FROM user WHERE username = '$user' AND password = '$pass'");
                    
    $erg2 mysql_fetch_row($res2);
                } else {
                    
    $this->schreiben_db($user"Username nicht vorhanden""0");
                }
                if(
    $erg2){
                    
    $this->schreiben_db($user"Login erfolgreich" "2");
              
                } else {
                    
    $this->schreiben_db($user"Passwort falsch""1");
                  
                }
         }

         public function 
    schreiben_db($user$text$status) {

                
    $write_db mysql_query("INSERT INTO user_log(username, status) VALUES('$user', '$text')");
                
    $this->ausgabe($status);
            }


         function 
    ausgabe($status) {
               global 
    $para;
               
    $para $status;

         }
    }

    $check_login = new login();
    $check_login->pruefen($_POST['user'], $_POST['pass']);

    ?>

  • #2
    schreiben_db() und ausgabe() scheinen private Methoden zu sein. Also würde ich das auch entsprechend deklarieren.

    Oder wenn das für PHP4 sein soll, dann sollten die public Deklarationen der Methoden auch rausgenommen werden.
    Zuletzt geändert von E.T.; 06.04.2008, 21:58.
    Download ET-Chat v3.x.x

    Kommentar


    • #3
      ... und ...

      - Eine Klasse muss unabhängig von allem sein, alles was braucht muss als Parameter übergeben werden. Deine Klasse setzt aber voraus, dass eine Verbindung zur DB besteht.

      - Du sollst auch Anfangszustand mit isset prüfen.

      Kommentar


      • #4
        Danke!

        @ E.T Wann sollte ich private Methoden benutzen? Vielleicht dann, wenn es sich um "private" Infos handelt, wie z.B. Passwort.

        @asp2php sollte ich vielleicht die DB-Verbindung auch in eine Klasse unterbringen? Oder was genau meinst du mit "unabhängig von allem".

        Kommentar


        • #5
          Es gibt in PHP5, wie auch in Java und in diversen anderen OOP Sprachen public, privat, protected, static Methoden und Attribute. Die Festlegung der Methodenart gehört zu einem der grundlegenden Prinzipien der Object Orientierten Programmierung. Du findest die genaue Erklärung dazu auf unzähligen Internetseiten und in fast allen Büchern zur OOP.

          Viel Erfolg.
          Download ET-Chat v3.x.x

          Kommentar


          • #6
            @der_meier_hans
            noch was grundlegenes
            Du solltest die klasse selbst einfach nur in einer Datei vorhalten, die Du in deinem Script zB per require_once einbindest.
            Der klassenaufruf erfolgt in Deinem Script und nicht in der Klassendatei selbst.

            ganz schrecklich in Deinem Script:
            <?if ($para != 2) {
            $para ist in Deiner Klasse global definiert. aber Du solltest alle Klassenattribute immer über Deine Klasseninstanz beziehen (GET und SET Methodik benutzen).
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar

            Lädt...
            X