Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Uživatel sítě :25.2.2014 16:05

Ahoj, můj dotaz je jasný. Píši si aplikaci abych si přiblížil OOP a chtěl bych se zeptat zda-li to je správný postup abych věděl zda mám takhle pokračovat či ho změnit.

<?php
/*-------------------------------------------------------+
| Modul: Logování uživatelů
+--------------------------------------------------------*/

    class Login extends ParametersUsers{

        public function L_form_login(){
            echo '<form method="POST" action="/login/">' . "\n";
            echo '<table>' . "\n";
            echo '<tr><td>Nick:</td></tr>' . "\n";
            echo '<tr><td><input type="text" size="20" name="log_nick"></td></tr>' . "\n";
            echo '<tr><td>Heslo:</td></tr>' . "\n";
            echo '<tr><td><input type="password" size="20" name="log_password"></td></tr>' . "\n";
            echo '<tr class="center"><td class="td_p"><input type="submit" value="Přihlásit se" name="log_but"></td></tr>' . "\n";
            echo '</table>' . "\n";
            echo '</form>' . "\n";
        }

        public function L_form_logout(){
            echo '<form method="POST" action="/login/">' . "\n";
            echo '<input type="submit" value="Odhlásit se" name="logout_but">';
            echo '</form>' . "\n";
        }

        public function Use_login(){
            $error = null;
          if(isset($_POST['log_but'])){
            if(isset($_POST['log_nick']) AND length(($_POST['log_nick'])) > 0 AND isset($_POST['log_password']) AND length(($_POST['log_password'])) > 0){
              if($this->T_nick_db($_POST['log_nick']) != 0){
                  $nick = Database::mres($_POST['log_nick']);
                  $password = Database::mres($_POST['log_password']);
                  $result = Database::query("SELECT user_status, user_password_salt, user_password, user_status_url, user_id FROM users WHERE user_nick = '$nick'");
                  $data = $result->fetch_array();
                //zda je účet ověřen
                if($data['user_status'] == 1){
                  //test hesla
                  if($this->hash_pass($password, $data['user_password_salt']) == $data['user_password']){
                      $this->L_user_login($data['user_id']);
                  }else{
                      $error = 'špatné heslo';
                  }
                }else{
                  if($data['user_status'] == 0){
                      $error = 'není ověřen email';
                  }else{
                      $error = 'uživatel je zřejmě blokován';
                  }
                }
              }else{
                  $error = 'uživatel neexistuje';
              }
            }else{
                $error = 'vyplnit oba údaje';
            }

            //hláška
            if($error != null){
                Messages::Error('Přihlášení nebylo úspěšné!', $error);
            }
          }
        }

        public function Use_logout(){
            if(isset($_POST['logout_but'])){
                unset($_SESSION['user_sess']);
                unset($_SESSION['user_signet']);
            }
        }

        private function L_user_login($user_id){
            session_regenerate_id();
            $session = session_id();
            Database::query("UPDATE users SET user_session = '$session' WHERE user_id = '$user_id'");
            $_SESSION['user_sess'] = $session;
            $_SESSION['user_signet'] = true;
        }
    }

Strana /login/

<?php
    echo h2('Přihlášení');

        $login = new Login();
    if(user_signet()){//je-li přihlášen
        //odhlášení
        $login->Use_logout();
        $login->L_form_logout();
    }else{
        //přihlášení
        $login->Use_login();
        $login->L_form_login();
    }
Editováno 25.2.2014 16:08
Odpovědět
25.2.2014 16:05
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Uživatel sítě
Michal Žůrek - misaz:25.2.2014 16:33

Moc bych neřekl na první pohled moc netuším co to všechno vlastně dělá.

Co je

/*-------------------------------------------------------+
 | Modul: Logování uživatelů
 +--------------------------------------------------------*/

za styl dokumentace? Není jednodušší

/**
 * Logování uživatelů
**/

UseLogin(), no abych ti pravdu řekl nějak netuším co to "použil login" může znamenat a kód mi to vůbec nenapověděl.

 
Nahoru Odpovědět
25.2.2014 16:33
Avatar
Odpovídá na Michal Žůrek - misaz
Uživatel sítě :25.2.2014 16:41

Většina jsou z jiných tříd a jiné funkce, které jsem neuvedl. Pouze se ptám na to jestli mám např. správný postup a rozdělení daných funkcí, styl dokumentace je vedlejší. (později to půjde stejně pryč, detail..)

$this->T_nick_db-> : Zda nick vůbec existuje
Database::mres -> : real_escape_string
Messages::Error : Hláška

Nahoru Odpovědět
25.2.2014 16:41
Chybami se člověk učí, běžte se učit jinam!
Avatar
mkub
Tvůrce
Avatar
Odpovídá na Uživatel sítě
mkub:25.2.2014 17:33

pokial chces sa oboznamit s OOP v PHP, tak si pozri tunajsie tutorialy, celkom dobre je to vysvetlene, co je to OOP aako sa pracuje s objektami v PHP

 
Nahoru Odpovědět
25.2.2014 17:33
Avatar
Uživatel sítě :25.2.2014 18:00

Četl jsem si většinu tutoriálů zde, takže je postup zhruba správný? Toho co jsem poslal. Volání, atd..?

Nahoru Odpovědět
25.2.2014 18:00
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Uživatel sítě
Neaktivní uživatel:25.2.2014 18:07

Zdá se mi to velmi nepřehledné. Použil bych MVC. Taky si myslím, že by funkce neměla echovat ale vracet.

Nahoru Odpovědět
25.2.2014 18:07
Neaktivní uživatelský účet
Avatar
Odpovídá na Uživatel sítě
Neaktivní uživatel:25.2.2014 18:13

Chtělo by to použít nějaký šablonovací systém, ty echa jsou dost neohrabané. Zmíněné MVC by bylo celkem vhodné ;)

Nahoru Odpovědět
25.2.2014 18:13
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:25.2.2014 18:14

OOP jsi pochopil správně. Ten kód je sice hodně slabý, pro tebe to je ale asi úspěch. Oprav si názvy metod na camelCase. Pro začátek je to asi OK.

Z profesionálnějšího hlediska: Místo těch příšerných ifů na proměnnou error bys měl vyhodit na začátku metody výjimku. MVC je sice ideálka, ale klidně ten HTML kód zatím echuj, ale měj ho v jednom echu a ne v deseti. \n jsou k ničemu, HTML kód nikdo číst nebude. Nelíbí se mi jak pracuješ s databází, stáhni si tu zdejší knihovnu, bez prepared statements se už nedělá.

Editováno 25.2.2014 18:15
Nahoru Odpovědět
25.2.2014 18:14
New kid back on the block with a R.I.P
Avatar
Uživatel sítě :25.2.2014 18:31

Díky všem za rady, to je vše co jsem chtěl vědět.
Můžete LOCK..

Nahoru Odpovědět
25.2.2014 18:31
Chybami se člověk učí, běžte se učit jinam!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.