Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> system logowania - problem
areli
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.10.2008

Ostrzeżenie: (10%)
X----


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.

Ten post edytował areli 30.01.2009, 11:42:16
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
areli
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.10.2008

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kildyt
post
Post #7





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

Ostrzeżenie: (0%)
-----


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

Ten post edytował Kildyt 15.02.2009, 20:47:53


--------------------
Go to the top of the page
+Quote Post
megawebmaster
post
Post #8





Grupa: Zarejestrowani
Postów: 143
Pomógł: 17
Dołączył: 8.11.2008
Skąd: Libiąż

Ostrzeżenie: (0%)
-----


Ja sobie pozwolę odpowiedzieć tylko na brak przekierowania: Header()
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 13:18