Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> __construct i blad brakujacego argumentu
spandor
post 16.02.2009, 00:46:58
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 2.03.2004

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


witam,

mam taki konstruktor jak ponizej, dlaczego wyzuca mi blad:
Missing argument 1 for authentication::__construct(),
Missing argument 2 for authentication::__construct(),

  1. <?php
  2. class authentication {
  3.    var $mysql = 'dsadsad';
  4.    var $session;
  5.  
  6.    function __construct($mysql, $session) {
  7.       $this->mysql     = $mysql;
  8.       $this->session   = $session;
  9.    }
  10.  
  11.    function authentication() {
  12.    global $smarty, $l;
  13.        $session_var['authentication']  = $this->session->_read('authentication');
  14.        if (empty($session_var)) {
  15.            $smarty->display('inc_login.tpl');
  16.          
  17.            if (!empty($_POST) and empty($_POST['user_username'])) {
  18.                $smarty->assign('error', $l['username_field_left_empty']);
  19.            } else if (!empty($_POST) and empty($_POST['user_password'])) {
  20.                $smarty->assign('error', $l['password_field_left_empty']);
  21.            } else if (!empty($_POST)) {
  22.                $result = $this->mysql->query_one_result("SELECT COUNT(*) FROM `user`
  23.                                                          WHERE `login`='".$this->mysql->escape($_POST['AuthenticationLogin'])."'
  24.                                                          AND `password`='".$this->mysql->escape($this->secure($_POST['AuthenticationPassword']))."';");
  25.                if (empty($result)) {
  26.                    $smarty->assign('error', $l['username_or_password_is_incorrect']);
  27.                } else {
  28.                    $result = $this->mysql->query_one_result("SELECT `user_id` FROM `user`
  29.                                                              WHERE `login`='".$this->mysql->escape($_POST['AuthenticationLogin'])."'
  30.                                                              AND `password`='".$this->mysql->escape($this->secure($_POST['AuthenticationPassword']))."';");
  31.                  
  32.                    $this->session->_write('authentication', $result);
  33.                  
  34.                    header('Location: index.php');
  35.                }
  36.            }
  37.            exit;
  38.        } else if (!empty($session_var['authentication']) and isset($_GET['logout'])) {
  39.            $this->logout();          
  40.        }
  41.    }
  42.  
  43.    function check_authentication() {
  44.        $session_var['authentication']  = $this->session->_read('authentication');
  45.        return (!empty($session_var['authentication'])) ? $session_var['authentication'] : FALSE;
  46.    }
  47.  
  48.    function logout() {
  49.        $this->session->_destroy('authentication');
  50.        header('Location: '.BASE_URL);
  51.    }
  52.  
  53.    // Used so that it would be easier later to change encode method.
  54.    function secure($data) {
  55.        return md5($data);
  56.    }
  57. }
  58. ?>


Ten post edytował spandor 16.02.2009, 00:56:01
Go to the top of the page
+Quote Post
Foxx
post 16.02.2009, 00:51:47
Post #2





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


1. Nie wkleiłeś całego kodu.
2. Nie podałeś argumentów konstruktorowi, co jest niejasne?
Go to the top of the page
+Quote Post
spandor
post 16.02.2009, 00:56:53
Post #3





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 2.03.2004

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


Juz wrzucilem caly.
No wlasnie nie wiem o co chodzi, co kolwiek nie podal to ciagle missing.
Go to the top of the page
+Quote Post
likemandrake
post 16.02.2009, 00:58:41
Post #4





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

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


Cytat(Foxx @ 16.02.2009, 00:51:47 ) *
2. Nie podałeś argumentów konstruktorowi, co jest niejasne?


A konkretnie podczas tworzenia obiektu napisałeś 'new Klasa();', a nie 'new Klasa(arg1, arg2);'.

Pozdro


--------------------
serwiswww.pl
Go to the top of the page
+Quote Post
Foxx
post 16.02.2009, 00:58:55
Post #5





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Pokaż jak tworzysz obiekt.
Go to the top of the page
+Quote Post
spandor
post 17.02.2009, 00:21:29
Post #6





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 2.03.2004

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


  1. <?php
  2. $session = session_start();
  3. $mysql = db_connect();
  4. $objekt = new authentication($mysql,$session);
  5. ?>


juz jest OK, nie wyrzuca bledu. (db_connect laczy z baza)
Ale mam prosbe, czy ktos moglby mi wytlumaczyc, jako ze to sa moje poczatki zabawy z OOP i ten skrypt znalazlem na necie.
Czy _read zostal tu dobrze uzyte bo mi wyrzuca blad
  1. <?php
  2. $objekt -> check_authentication();
  3. ?>

Fatal error: Call to a member function _read() on a non-object in /tabaknatie/inc_funkcje.php on line 61
Go to the top of the page
+Quote Post
likemandrake
post 17.02.2009, 00:28:40
Post #7





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

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


Ten błąd oznacza, że próbujesz wykonać metodę na zmiennej, która nie jest obiektem. Innymi słowy, zmienna $objekt nie jest obiektem (może php obraził się za błędną pisownię tongue.gif )

Nie wiem, jak względem pierwszego kawałka kodu, ma się drugi, ale jeśli napiszesz tak:

  1. <?php
  2. $session = session_start();
  3. $mysql = db_connect();
  4. $objekt = new authentication($mysql,$session);
  5. $objekt -> check_authentication();
  6. ?>


powinno śmignąć smile.gif

Ten post edytował likemandrake 17.02.2009, 00:30:35


--------------------
serwiswww.pl
Go to the top of the page
+Quote Post
spandor
post 17.02.2009, 00:39:27
Post #8





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 2.03.2004

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


No właśnie przed chwilą miałem identycznie i ciągle wyrzuca ten błąd.
Go to the top of the page
+Quote Post
likemandrake
post 17.02.2009, 00:44:41
Post #9





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

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


W takim razie na samym początku skryptu trzaśnij taką linijkę:

  1. <?php
  2. error_reporting(E_ALL | E_STRICT);
  3. ?>


Może wywali Ci jakieś dodatkowe komunikaty błędów


--------------------
serwiswww.pl
Go to the top of the page
+Quote Post
spandor
post 17.02.2009, 00:49:29
Post #10





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 2.03.2004

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


Redefining already defined constructor for class authentication in /tabaknatie/inc_funkcje.php on line 28

taki dodatkowy blad dostalem.
Go to the top of the page
+Quote Post
likemandrake
post 17.02.2009, 01:04:04
Post #11





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

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


Dobra już wiem

Widzę, że w Twojej klasie mieszasz dwa style - tego z PHP 4 i PHP 5

W PHP 4 konstruktor klasy nazywa się tak samo jak klasa, a widzę, że masz tam metodę o takiej samej nazwie jak Twoja klasa. Dodatkowo definiujesz konstruktor zgodny z PHP 5, czyli __construct(). Stąd Twoje problemy smile.gif

Zdecyduj się na składnię PHP 5, ale tak czy inaczej musisz zmienić nazwę metody o której pisałem smile.gif


--------------------
serwiswww.pl
Go to the top of the page
+Quote Post
spandor
post 17.02.2009, 01:15:28
Post #12





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 2.03.2004

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


Zmienile nazwe metody. I jest OK.
Jak dodaje teraz
  1. <?php
  2. $objekt -> check_authentication();
  3. ?>

to znow mam ten blad.
Fatal error: Call to a member function _read() on a non-object in /tabaknatie/inc_funkcje.php on line 61
Go to the top of the page
+Quote Post
likemandrake
post 17.02.2009, 01:22:41
Post #13





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

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


No tak, ponieważ właściwość $session w Twojej klasie nie jest obiektem tylko wartością logiczną smile.gif bo taką wartość zwraca właśnie funkcja session_start();

Przyznam się, że nie analizowałem Twojego kodu smile.gif


--------------------
serwiswww.pl
Go to the top of the page
+Quote Post
spandor
post 17.02.2009, 08:21:55
Post #14





Grupa: Zarejestrowani
Postów: 99
Pomógł: 0
Dołączył: 2.03.2004

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


To jak ten problem rozwiazac?
Go to the top of the page
+Quote Post
likemandrake
post 17.02.2009, 10:49:55
Post #15





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

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


Słyszałeś o tablicy $_SESSION? Chyba nie, no więc poczytaj sobie. I te Twoje "pseudo" funkcje(?), obiekty(?) typu $session->_read(), $session->_write(), no nie wiem z którego kosmosu to masz... Funkcja to funkcja, czyli session_read(), session_write(), po za tym nie używaj ich, bo całym rozwiązaniem jest tu stosowanie właśnie tablicy $_SESSION... W klasie musisz mieć tylko pewność, że sesja została wystartowana, a więc sprawdzasz to powiedzmy w konstruktorze, jak wiesz, że sesja nie została uruchomiona, wywalasz wyjątek. Do konstruktora przekazujesz tylko połączenie z bazą, po za tym wywal te Twoje var $session i pochodne.

php.net chyba Twoim wrogiem jest, wystarczy że poszukasz coś o session_start() i już masz z lewej liste wszystkich funkcji do obsługi sesji, po za tym jak zjedziesz troszkę na dół strony, masz też odwołania i m.in. na liście odwołań pojawiło się magiczne słowo $_SESSION.

Jeżeli jest tak jak piszesz, że skrypt masz z netu, to ja naprawdę nie wiem gdzie ja żyję biggrin.gif

Ten post edytował likemandrake 17.02.2009, 10:51:03


--------------------
serwiswww.pl
Go to the top of the page
+Quote Post
kbsucha
post 17.02.2009, 11:20:14
Post #16





Grupa: Zarejestrowani
Postów: 113
Pomógł: 19
Dołączył: 2.08.2007

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


Jak już masz skrypt z internetu, to powinni do niego dolozyc wlasna klase sesji, ktora prawdopodobnie na wlasne potrzeby sobie napisali (np aby przechowywac dane w bazie). Pozostaje ci albo zmodyfikowanie klase authentication tak aby obslugiwala natywne sesje PHP, albo znalesc skrypt autora.

pozdr


--------------------
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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:36