1. #1
    Avatar von ThunderStorm
    Registriert seit
    12.02.2013
    Beiträge
    479
    Thanked 1.086 Times in 84 Posts

    Standard MVC in Php richtig so?

    Hey,

    weiss nicht ob ich hier richtig bin probiere es einfach mal. Ich habe von MVC gehört um Ordnung in Php-Seiten bringen zu können. Um das an einem kleinen Beispiel zu üben habe ich versucht Model und Controller für eine einfache Anmeldung zu machen. Man soll sich anmelden und seine Daten ändern können. Ich suche einen guten Programmierer der mir sagen kann, ob ich das richtig verstanden habe oder ob etwas falsch ist!

    Controller:
    PHP-Code:
    class registration_controller{
        function 
    index(){//Registrationsform
            
    $index = new template('index.html');
            echo 
    $index->html();
        }
        function 
    update(){
            
    $update = new template('update.html');
            echo 
    $update->html();
        }
        function 
    register_user(){
            
    $user = new user_model($_GET["username"], $_GET["password"], $_GET["mail"]);
            if(
    $user->pre_save()){
                
    $user->save();
                
    show_status("Konto wurde angelegt!");
            }else{
                
    show_status("Fehler beim anlegen des Kontos:" $user->get_error());
            }
        }
        function 
    update_user(){
            
    $user = new user_model($_GET["username"], $_GET["password"], $_GET["mail"]);
            if(
    $user->pre_save()){
                
    $user->save();
                
    show_status("Konto wurde aktualisiert!");
            }else{
                
    show_status("Fehler beim aktualisieren:" $user->get_error());
            }
        }
        function 
    show_status($text){
            
    $status = new template('status.html');
            
    $status->set('text'$text);
            die(
    $status->html());
        }

    Modell:
    PHP-Code:
    class user_model{
        private 
    $db = new mysqli_db('localhost''test''user''testuser''123456');
        private 
    $username;
        private 
    $password;
        private 
    $mail;

        public function 
    __construct($_username ""$_password ""$_mail ""){
            
    $this->username $_username;
            
    $this->password $_password;
            
    $this->mail $_mail;
        }
        public function 
    get_username(){
            return 
    $this->db->esc($this->username);
        }
        public function 
    get_password(){
            return 
    $this->db->esc($this->password);
        }
        public function 
    get_mail(){
            return 
    $this->db->esc($this->mail);
        }
        public function 
    set_username($new_username){
            
    $this->username $new_username;
        }
        public function 
    set_password($new_password){
            
    $this->password $new_password;
        }
        public function 
    set_mail($new_mail){
            
    $this->mail $new_mail;
        }
        public function 
    pre_save(){
            
    $error $this->get_error();
            if(
    $error != true){
                return 
    false;
            }else{
                return 
    true;
            }
        }
        public function 
    get_error(){
            if(
    $this->username ""){
                return 
    "Kein Benutzername eingegeben!";
            }else if(
    $this->password ""){
                return 
    "Kein Passwort eingegeben!";
            }else if(
    strlen($this->password) < 6){
                return 
    "Passwort muss mind die Länge 6 haben!";
            }else if(
    $this->mail ""){
                return 
    "Keine E-Mail eingegeben!";
            }else {
                return 
    true;
            }
        }
        public function 
    save(){
            
    $sql "INSERT INTO user(username, password, mail) VALUES('" $this->get_username() . "', '" $this->get_password() . "', '" $this->get_mail() . "')";
            
    $sql " ON DUPLICATE KEY UPDATE password='" $this->get_password() . "', mail='" $this->get_mail() . "'";
            return 
    $this->db->do_query($sql);
        }


    Alles andere lasse ich weg da nichts interessantes drin ist was zur Sache tut. Wenn man in der Registrationsform auf Registrieren klickt wird register_user() im Controller aufgerufen. Ändert man seine Daten wird update_user() aufgerufen.
    Geändert von ThunderStorm (05.03.2015 um 01:59 Uhr)


    Zitat Zitat von helpster.de
    Festplatten von 2 Gigabyte RAM sind mittlerweile günstig zu haben.

  2. #2

    Registriert seit
    28.10.2011
    Beiträge
    625
    Thanked 279 Times in 168 Posts

    Standard AW: MVC in Php richtig so?

    $this->db->esc(); würde ich nicht in den Getter-Methoden verwenden. Nutze bei save(); lieber PreparedStatements, dann ersparst du dir ein "escapen".

    Theoretisch ist das ganze schon soweit in Ordnung bis auf das Model:
    Ein Model ist nur der Datenhalter - Dort werden normalerweise keine DB-Operationen getätigt. Auch ist hier das initialisieren von der DB fehl am platze.
    Warum erstellst du nicht direkt ein Model-Binding was die Datenbank nutzt (Siehe http://php.net/manual/de/mysqli-resu...h-object.php)?

  3. The Following User Says Thank You to Bubble Gum For This Useful Post:

    Sky.NET (05.03.2015)

Ähnliche Themen

  1. Wie schreibe ich das richtig?
    Von ElkosMED im Forum RealLife
    Antworten: 3
    Letzter Beitrag: 06.07.2013, 15:19
  2. Win8 Mein Pc ist Richtig langsam
    Von Kosi im Forum Windows
    Antworten: 7
    Letzter Beitrag: 15.06.2013, 16:47
  3. (S) richtig geile Goa Lieder
    Von Rabbit im Forum Musik ♫
    Antworten: 9
    Letzter Beitrag: 26.05.2012, 13:18
  4. Pc startet nicht richtig
    Von flieyiger im Forum Hardware
    Antworten: 8
    Letzter Beitrag: 31.03.2012, 17:04
  5. Wie man richtig Einkauft ;)
    Von marvijjn im Forum Filme, Serien und TV
    Antworten: 9
    Letzter Beitrag: 20.12.2011, 16:17
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.