Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odwołanie się do funkcji klasy w innej funkcji
InosU31
post 3.02.2016, 23:32:40
Post #1





Grupa: Zarejestrowani
Postów: 221
Pomógł: 14
Dołączył: 11.03.2009
Skąd: Lubaczów

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


Witam

Mam taką klasę:

  1. class db_interface
  2. {
  3. var $resource;
  4. var $result;
  5.  
  6. function db_interface($_db_base, $_host, $_user, $_pswd)
  7. {
  8. $this->resource = mysql_connect($_host, $_user, $_pswd) or die ("brak polaczenia z baza");
  9. mysql_select_db($_db_base) or die ("nie znaleziono bazy danych");
  10. }
  11.  
  12.  
  13. function get_query ($_query)
  14. {
  15. $this->result = mysql_query ($_query) or die ("blad zapytania");
  16.  
  17. $i = 0;
  18. while ($record = mysql_fetch_array ($this->result, MYSQL_ASSOC))
  19. {
  20. foreach ($record as $field_name => $field_value)
  21. {
  22. $table [$i][$field_name] = $field_value;
  23. }
  24. $i++;
  25. }
  26.  
  27. mysql_free_result ($this->result);
  28.  
  29. if ($i == 0)
  30. return 0;
  31. else
  32. return $table;
  33.  
  34. }
  35.  
  36.  
  37. }


chciałem sobie stworzyć funkcję, która będzie mi zapisywała pewne dane do bazy - ponieważ użyję ją w kilku miejscach. Problem w tym że nie wiem jak mam sie odwołać do funkcji w klasie db_interface w tej funkcji:

  1.  
  2. function statyProm ($statyTabela, $nazwaTabeli, $idTabela, $getUser, $getId)
  3. {
  4. $result_staty_promo = $dbase->get_query(" // tu jest linia 5
  5. SELECT * FROM $statyTabela
  6. WHERE id_user = '".$getUser."' AND id_promo = '".$getId."'
  7. ");
  8.  
  9. if ($result_staty_promo)
  10. {
  11. foreach ($result_staty_promo as $record_staty_promo)
  12. {
  13. if ($record_staty_promo['ip'] == $_SERVER['REMOTE_ADDR'] AND $record_staty_promo['browser'] == $_SERVER['HTTP_USER_AGENT'])
  14. {
  15. return 0;
  16. }
  17. else
  18. {
  19. $dbase->query("
  20. INSERT INTO $statyTabela
  21. (ip, browser,id_user, id_promo)
  22. VALUES
  23. (
  24. '".$_SERVER['REMOTE_ADDR']."',
  25. '".$_SERVER['HTTP_USER_AGENT']."',
  26. '".$getUser."',
  27. '".$getId."'
  28. )
  29. ");
  30.  
  31. $dbase->query("
  32. UPDATE $nazwaTabeli
  33. SET ilosc_klik = ilosc_klik + 1
  34. WHERE $idTabela = '".getId."'
  35. ");
  36.  
  37. echo "funkcja dziala :-)";
  38. }
  39. }
  40. }
  41. }


includuję wcześniej dostęp do bazy:
$dbase = new db_interface("nazwa_bazy", "localhost", "user", "hasło");

dodam że jak normalnie się odwołuję do tych instrukcji z funkcji statyProm to wszystko jest ok ale jak wywołuje ta funkcję to wywala mi bład.

  1. statyProm ("tabela1", "tabela2", "id_tabela2", $_GET['us'], $_GET['prid']);


a bład wygląda tak:

Fatal error: Call to a member function get_query() on a non-object in E:\sciezka\funkcje.php on line 5

z góry dzieki za pomoc

Pozdrawiam

Go to the top of the page
+Quote Post
Pyton_000
post 3.02.2016, 23:41:38
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


A słyszał o zasięgu zmiennych ?
i nie "db_interface(...)" a __construct...)
Go to the top of the page
+Quote Post
InosU31
post 4.02.2016, 22:42:13
Post #3





Grupa: Zarejestrowani
Postów: 221
Pomógł: 14
Dołączył: 11.03.2009
Skąd: Lubaczów

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


Cytat(Pyton_000 @ 3.02.2016, 23:41:38 ) *
A słyszał o zasięgu zmiennych ?
i nie "db_interface(...)" a __construct...)



słyszał ale że uczyłem się tego dwa lub 3 lata temu i tego do tej pory nie używałem w ostatnim czasie to już pozapominałem... chyba będę musiał sobie przerobić lekcje z klasami jeszcze raz bo rozwiązania znalezione nawet na tym forum nie działają dlatego napisałem swojego posta.

dzięki za info z __construct ;-)

tą klase tworzyłem dawno jak nie było jeszcze php5 ;-)

pozdrawiam
Go to the top of the page
+Quote Post
Rysh
post 3.03.2016, 08:07:22
Post #4





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Warto poczytać też w takiej sytuacji o singletonie, aby nie tworzyć za każdym razem nowego połączenia z bazą danych a korzystać już z nawiązanego.

przepraszam za odkopanie tematu z przed miesiąca


--------------------
Go to the top of the page
+Quote Post
hind
post 18.03.2016, 20:18:39
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 24
Dołączył: 30.03.2009
Skąd: Rokitno Szlacheckie

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


@Rysh nie warto czytać o singletonie, lepiej od razu o DI/IoC
Go to the top of the page
+Quote Post
Dejmien_85
post 27.04.2016, 06:29:53
Post #6





Grupa: Zarejestrowani
Postów: 251
Pomógł: 23
Dołączył: 23.04.2013

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


Ej, chłopaki, łapmy gościa, weźmiemy go do muzeum - oto programista PHP 4!

Dowody:
- używa "var" dla składowych klasy,
- w konstruktorze używa nazwy klasy,
- używa dawnych zasad dotyczących nazewnictwa (wszystko z małych liter + snake_case),
- o mysql_query nie muszę wspominać? : D

Łapać go! Dostaniemy za niego dużo siana! ; )

A tak na poważnie - kolego, nie wiem z jakiej książki się uczysz, albo z jakiego tutoriala, ale koniecznie potrzebujesz aktualnej literatury, bo co tutaj napisałeś to PHP, którego używało się wieki temu, naprawdę.
Go to the top of the page
+Quote Post
LowiczakPL
post 9.05.2016, 06:18:37
Post #7





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


Temat stary ale odpowiadam dla przyszłych pokoleń jak to się robiło.

Jeśli chcesz użyć klasy db_interface w funkcji statyProm() to musisz przekazać w parametrze jej obiekt, ale wcześniej musisz stworzyć instancję klasy tworząc jej obiekt

$dbase = new db_interface();

function statyProm ($statyTabela, $nazwaTabeli, $idTabela, $getUser, $getId, $dbase){
...
}

Ten post edytował LowiczakPL 9.05.2016, 06:20:36


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
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: 27.04.2024 - 14:55