Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:

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 Marek Z.
Michal Žůrek (misaz):

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  +2 25.2.2014 16:33
Nesnáším {}, proto se jim vyhýbám.
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Marek Z.:

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
Redaktor
Avatar
Odpovídá na Marek Z.
mkub:

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
Marek Z.
Redaktor
Avatar
Marek Z.:

Č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 Marek Z.
Jakub Šárník:

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
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Marek Z.
Jiří Gracík:

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
Creating websites is awesome till you see the result in another browser ...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jakub Šárník
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:

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.