Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: system logowania - problem
Forum PHP.pl > Forum > PHP > Object-oriented programming
areli
mam kilka pytań... aktualnie średnio sobie radzę w programowaniu obiektowym, więc potrzebuje waszej pomocy...

zrobiłem system logowania z mini panelem i problem jest taki:

1) jak się zaloguje lub wyloguje, to muszę odświeżyć stronę żeby dopiero zobaczyć efekt... co jest nie tak?

2) chciałbym żeby kod był przejrzysty i elegancko napisany, a mam podejrzenia że dużo w tym bałaganu... czy można by napisać to ciekawiej... może krócej i efektowniej?


  1. <?php
  2.  
  3. class Logowanie
  4. {
  5.    var $login;
  6.    var $pass;
  7.    var $id;
  8.    var $db;
  9.    var $wynik;
  10.    var $ile;
  11.    
  12.    function __construct()
  13.    {
  14.        if (isset($_SESSION['zalogowany']))
  15.        {
  16.            echo "<p>Jesteś zalogowany. Twój login to: ".$this -> login."</p>
  17.            <br />";
  18.            echo " | "."<a href='panel/index.php?menu=4'>Panel</a>"." | "."
  19.            <a href='".$_SERVER['PHP_SELF']."?logout=yes'>Wyloguj</a>"." | ";
  20.        }
  21.        else
  22.        {
  23.            echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>
  24.                <p>Nie jesteś zalogowany.</p>
  25.                <p>
  26.                    <label>Login: </label><input type='text' size='10' name='konto' />
  27.                    <label>&nbsp;&nbsp;Hasło: </label><input type='password' size='10' name='password' />
  28.                    <input type='submit' value='>>' name='p_log' />
  29.                </p>
  30.            </form>";
  31.            
  32.            $this -> Uwierzyt();
  33.        }
  34.        
  35.        if (isset($_GET['logout']) && ($_GET['logout'] == 'yes'))
  36.        {
  37.            $this -> wyloguj();
  38.        }
  39.    }
  40.    
  41.    public function Uwierzyt()
  42.    {
  43.        if (isset($_POST['konto']) && isset($_POST['password']) )
  44.        {
  45.            $this -> login = trim($_POST['konto']);
  46.            $this -> pass = trim($_POST['password']);
  47.            //    $pass = sha1(md5($pass));
  48.  
  49.            if (empty($this -> login) || empty($this -> pass))
  50.                echo"Błąd: Wypełnij wszystkie pola!";
  51.            else
  52.                $this -> sql_connect();
  53.        }
  54.    }
  55.    
  56.    public function sql_connect()
  57.    {
  58.        @$this -> db = mysqli_connect (DB_HOST, DB_USER, DB_PASS, DB_NAME);
  59.        if (!$this -> db)
  60.            echo "Połączenie z serwerem bazy danych nie powiodło się!";
  61.        else
  62.        {
  63.            $zapytanie = "SELECT id_log FROM user WHERE login='$this->login' and passbaz='$this->pass'";
  64.            $this -> sql_query ($zapytanie);
  65.        }
  66.    }
  67.    
  68.    public function sql_query ($zapytanie)
  69.    {
  70.        if (!$this -> wynik = mysqli_query($this -> db, $zapytanie))
  71.            echo "Połączenie z serwerem bazy danych nie powiodło się!";
  72.        else
  73.            $this -> sql_ile();
  74.    }
  75.    
  76.    public function sql_ile()
  77.    {
  78.        if (!$this -> ile = mysqli_num_rows ($this -> wynik))
  79.            echo "Błędny login lub hasło. Spróbuj jeszcze raz!";
  80.        else
  81.            $this -> sql_fetch_array();
  82.    }
  83.    
  84.    public function sql_fetch_array()
  85.    {
  86.        $tab = mysqli_fetch_assoc ($this -> wynik);
  87.        
  88.            $this -> id = $tab['id_log'];
  89.            $_SESSION['id'] = $this -> id;
  90.            $_SESSION['zalogowany']= $this -> login;
  91.    }
  92.    
  93.    public function wyloguj()
  94.    {http://forum.php.pl/system_logowania_problem_t112090.html#
  95.        $usuw_uzytk = $_SESSION['zalogowany'];
  96.        unset($_SESSION['zalogowany']);
  97.        unset($_SESSION['id']);
  98.        session_destroy();
  99.    }
  100.    
  101. }
  102. ?>


z góry dzięki za pomoc,
pzdr.
Crozin
1) Kod wstaw w BBCode [ php ]
2) Nie stosuj elementów PHP4
3) Nie zrobiłeś klasy do logowania. Zrobiłeś klasę boga, która robi ileś tam rzeczy zamiast jeden
4) Stosuj wyłącznie język angielski w nazwach zmiennych, metod itd.
5) Co to za dziwny pomysł, żeby klasa odpowiedzialna za logowanie/wylogowanie wyświetlała jakiś kod HTML strony? Ona w ogóle ani grama HTML, ani jeden istrukcji echo nie powinna mieć
areli
no ok. wszystko jasne, ale nadal nie wiem co z tym odświeżaniem strony i jak w praktyce miałbym zastosować się do pt.2 i 3... może jakieś konkretne rozwiązanie? blinksmiley.gif
nospor
Cytat
no ok. wszystko jasne
Skoro wszystko jasne, to czemu nie zastosowales sie do:
Cytat
Kod wstaw w BBCode [ php ]

?

Popraw bbcode na [php] w przeciwnym wypadku temat zostanie zamkiety
Crozin
Cytat
może jestem w błędzie, ale jakoś średnio jestem przekonany do bbcode...
Nie stosując BBCode dla kodu PHP zniechęcasz do jego analizowania, a nawet to uniemożliwiasz - zstanów się jeszcze raz.
Cytat
ponadto taki tekst moderatora wydaje mi się nie na miejscu
Cytat
Popraw bbcode na [php] w przeciwnym wypadku temat zostanie zamkiety
Niestosowne? Jasne, proste polecenie + uprzejma informacja o skutkach niedostosowania się
Cytat
odpowiedź Crozin’a to sugestie i własne przemyślenia... niewykluczone że ma rację, ale ja nie jestem zobowiązany stosować się do wszystkiego w 100%
Własne przemyślenia (mocno nietrafiony zwrot) to co najwyżej punkt 4-ty. Pierwszy to sprawy "techniczne", dwa następne to poprostu błędy, 4-ty - tutaj wspomniane własne "przemyślenia", a na końcu znowu błąd.
Cytat
najlepiej kogoś kto w sposób praktyczny potrafiłby pokazać jak powinien wyglądać mój system logowania...
Czyli mamy Ci niby taki przykładowy system napisać?
Cytat
s. czy do oddzielenia kodu użyć jakiegoś framework’a?
Na podstawie tego wątku mogę stwierdzić, że na zabawę z FW jest dla Ciebie stanowczo za wcześnie.
nospor
Cytat
ale ja nie jestem zobowiązany stosować się do wszystkiego w 100%
Rejestrując sie na forum zatwierdziłeś jego regulamin. Skoro nie chcesz sie do niego stosować to nie. temat zamykam

Cytat
ponadto taki tekst moderatora wydaje mi się nie na miejscu

hihi...
Jak ci policjant wlepi mandat za szybką jazdę, to też pewnie uznasz to nie na miejscu....

edit: otwieram
Kildyt
Pozwolę się odnieść do problemu autora. W programowaniu obiektowym nie jestem najlepszy, ale spróbuję. smile.gif

To co już napisał Crozin.
W programowaniu obiektowym właśnie chodzi o to, żeby działać na obiektach. Obiektem nie jest (jako sam) komputer, a podzespoły (klawiatura, mysz itd.).
Stwórz kilka klas. Pierwszą odpowiedzialną za wyświetlanie tekstu i wyglądu, drugą odpowiedzialną za połączenie z bazą i operacje na niej, trzecią właśnie z systemem logowania. Czy tak nie łatwiej? Masz wszystko podane jak "na tacy" i uporządkowane.

Jeżeli chodzi o to, że stronę musisz odświeżyć to powód jest prostu: za to, czy ktoś jest zalogowany jest odpowiedzialna wartość w zmiennej _SESSION.

Co do nie stosowania kodu PHP 4 to wytłumaczenie jest bardzo proste. Popatrz: mamy już wersję PHP 5, a za niedługo wyjdzie PHP 6. Jak wyobrażasz sobie używanie przestarzałych funkcji? Może i kod teraz zadziała, ale co z nim za rok? Czytaj dokumentację. Tam pisze, która funkcja straci wsparcie w nowszych wersjach PHP.

Nie wszystkie zmienne w klasie to $this ->. Jeżeli masz zmienną, którą używasz tylko w obrębie funkcji nie bajeruj.


Mam nadzieję, że chociaż troszkę pomogłem. smile.gif
megawebmaster
Ja sobie pozwolę odpowiedzieć tylko na brak przekierowania: Header()
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.