Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Konstruktor inicjujący połączenie z bazą
pjamorski
post 15.04.2010, 19:41:40
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


Witam,

Próbuje pisać swoją klasę na której chcę popracować z bazą danych. Oto ona:
  1. class MySQL_class
  2. {
  3. // fields
  4. var $server;
  5. var $username;
  6. var $password;
  7.  
  8. /* Database fields */
  9. var $db_name;
  10. var $db_connection;
  11. var $db;
  12. var $row;
  13.  
  14. /* Table user fields */
  15. var $nick;
  16. var $passwd;
  17.  
  18. // constructor
  19. function _construct()
  20. {
  21. $this->server="localhost";
  22. $this->username="root";
  23. $this->password="krasnal";
  24. $this->db_connection = mysql_connect($this->server,$this->username,$this->password) or die("Connection failed");
  25. $this->db = mysql_select_db("baza") or die("Database selection failed");
  26. }
  27. // properties SET / GET
  28. function Set_nick($nickname)
  29. {
  30. $this->nick = $nickname;
  31. }
  32. function Set_password($password)
  33. {
  34. $this->passwd = $password;
  35. }
  36. function Get_nick()
  37. {
  38. return $this->nick;
  39. }
  40. function Get_password()
  41. {
  42. return $this->passwd;
  43. }
  44.  
  45. // functions
  46. function Login()
  47. {
  48.  
  49.  
  50. $nick = $this->nick;
  51. $haslo = $this->passwd;
  52. $tmp1;
  53. $tmp2;
  54. $querry = "SELECT *FROM users WHERE nick='$nick' AND passwd='$haslo'";
  55. $equal = mysql_query($querry) or die("Error DB querry");
  56. while($this->row = mysql_fetch_array($equal))
  57. {
  58. $tmp1[] = $this->row['nick'];
  59. $tmp2[] = $this->row['passwd'];
  60. $licznik++;
  61. }
  62. if($nick && $haslo)
  63. {
  64. for($i=0;$i<$licznik;$i++)
  65. {
  66. echo '<br>'.$tmp1[$i].' '.$tmp2[$i];
  67. echo '<br> JESTES ZALOGOWANY';
  68. echo '<a href="table.html"> start </a>';
  69. }
  70. echo '<br><b>Wszystkie operacje identyfikacji zostały zakończone: </b>'.$licznik;
  71. }
  72. else
  73. {
  74. echo 'NIE MOZESZ SIE ZALOGOWAC';
  75. }
  76. }
  77. }


Funkcję Loguj() i jakieś watości, obiekt uruchamiam tak, w osobnym pliku "loguj.php":

  1. <?php
  2. require_once('sql_class.php');
  3. $object = new MySQL_class();
  4. $object->Set_nick("user");
  5. $object->Set_password('dddd');
  6. $object->Login();
  7. ?>


Zadada wydaje mi się jest ok, ale konstruktor nie inicjuje mi tych rzęczy które ma inicjować, przez to mam problem z pracą na bazie, wiadomo jak nie ma z nią połączenia to nic się nie zrobi. Jak zrobię kopiuj w klej zawartość konstruktora do funcji Loguj() to działa normalnie. Jak w PHP powinno w moim przypadku wyglądać ciało konstruktora?

dzięki z góry

Ten post edytował pjamorski 15.04.2010, 19:43:19


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
mortus
post 15.04.2010, 19:49:59
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Nie _construct, ale __construct (dwa znaki podkreślenia). Wydaje mi się, że do logowania powinna służyć jednak inna klasa, której możemy przekazać instancję obiektu obsługującego bazę danych.

Poza tym takie dane jak host, nazwa użytkownika, hasło i może jeszcze nazwę bazy danych powinniśmy raczej przekazać jako parametry w konstruktorze. Dlaczego? Ano dlatego, że każdy może mieć inny host, inną nazwę użytkownika i inne hasło, a dane może przechowywać w innej tabeli.

Ten post edytował mortus 15.04.2010, 19:45:46
Go to the top of the page
+Quote Post
pjamorski
post 15.04.2010, 19:59:20
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


Też nie wykonuje swojej funkcji właściwie. W dalszym ciągu ten sam problem. Wywala mi komunikat
  1. $equal = mysql_query($querry) or die("Error DB querry");
. Jak zawartośc konstruktora jest w funkcji dziaął poprawnie.


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
mortus
post 15.04.2010, 20:04:01
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


To zastąp tę linię
  1. $equal = mysql_query($querry) or die("Error DB querry");
w funkcji Login() na:
  1. $equal = mysql_query($querry) or die(mysql_error());
bo wygląda na to, że zapytanie się nie wykonuje, a tak dowiemy się, jaka jest przyczyna.

Ten post edytował mortus 15.04.2010, 20:05:02
Go to the top of the page
+Quote Post
pjamorski
post 15.04.2010, 20:06:15
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


Nie ma żadnego error'a. Właśnie nie wiem co jest grane.


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
luck
post 15.04.2010, 20:06:26
Post #6





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


  1. SELECT * [brak spacji] FROM


--------------------
Go to the top of the page
+Quote Post
pjamorski
post 15.04.2010, 20:16:31
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


Tutaj mam dobrze.

Konstruktor z parametrami też zrobiłem:
/
  1. / constructor
  2. function __construct($server, $username, $password)
  3. {
  4. $server="localhost";
  5. $username="root";
  6. $password="krasnal";
  7. $this->db_connection = mysql_connect($server,$username,$password) or die("Connection failed") or die(mysql_error());
  8. $this->db = mysql_select_db("baza") or die("Database selection failed") or die(mysql_error());
  9. }


Tak go uruchamiam i tą funkcję i w dalszym ciągu to samo:

  1. require_once('sql_class.php');
  2. $object = new MySQL_class("localhost","root","krasnal");
  3. $object->Login();


Jak zrobię tak to jest dobrze:

  1. function Login()
  2. {
  3. $server="localhost";
  4. $username="root";
  5. $password="krasnal";
  6. $this->db_connection = mysql_connect($server,$username,$password) or die("Connection failed") or die(mysql_error());
  7. $this->db = mysql_select_db("baza") or die("Database selection failed") or die(mysql_error());
  8. $nick = $this->nick;
  9. $haslo = $this->passwd;
  10. $tmp1;
  11. $tmp2;
  12. $querry = "SELECT * FROM users WHERE nick='$nick' AND passwd='$haslo'";
  13. $equal = mysql_query($querry) or die("Error DB querry") or die(mysql_error());
  14. while($this->row = mysql_fetch_array($equal))
  15. {
  16. $tmp1[] = $this->row['nick'];
  17. $tmp2[] = $this->row['passwd'];
  18. $licznik++;
  19. }
  20. if($nick && $haslo)
  21. {
  22. for($i=0;$i<$licznik;$i++)
  23. {
  24. echo '<br>'.$tmp1[$i].' '.$tmp2[$i];
  25. echo '<br> JESTES ZALOGOWANY';
  26. echo '<a href="table.html"> start </a>';
  27. }
  28. echo '<br><b>Wszystkie operacje identyfikacji zostały zakończone: </b>'.$licznik;
  29. }
  30. else
  31. {
  32. echo 'NIE MOZESZ SIE ZALOGOWAC';
  33. }
  34. }

Normalnie zgupłem sciana.gif


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
MateuszS
post 15.04.2010, 20:19:38
Post #8





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Ale zobacz, po co przekazujesz parametry konstruktorowi skoro potem w konstruktorze na nowo przypisujesz dane do bazy? Poza tym jeszcze

  1. $this->db = mysql_select_db("baza", $this->db_connection) or die("Database selection failed") or die(mysql_error());


może się przydać

No i przed wywołaniem metody logującej, ustaw parametry.

Ten post edytował MateuszScirka 15.04.2010, 20:20:31


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
pjamorski
post 15.04.2010, 20:23:57
Post #9





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


  1. // constructor
  2. function __construct($server, $username, $password)
  3. {
  4. $this->db_connection = mysql_connect($server,$username,$password) or die("Connection failed") or die(mysql_error());
  5. $this->db = mysql_select_db("itworld_cba_pl",$this->db_connection) or die("Database selection failed") or die(mysql_error());
  6. }
  7. //


Niestety dalej to samo, czyli nic.
Jak powinien wyglądać konstruktor inicjujący połączenie z baząquestionmark.gif?


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
luck
post 15.04.2010, 20:25:58
Post #10





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


A tak:
  1. mysql_query($querry, $this->db_connection)
albo i
  1. mysql_query($querry, $this->db)

Choć to drugie to tak na słowo honoru - nie pamiętam czy działało

Ten post edytował luck 15.04.2010, 20:28:51


--------------------
Go to the top of the page
+Quote Post
pjamorski
post 15.04.2010, 20:30:35
Post #11





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in c:\usr\krasnal\www\games\sql_class.php on line 52
Error DB querry


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
MateuszS
post 15.04.2010, 20:30:55
Post #12





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Najlepiej napisz do obsługi db osobną klasę lub skorzystaj z Mysqli (gotowa klasa). Ewentualnie, masz tu taki prosty przykład
  1. <?
  2.  
  3. class mysql
  4. {
  5. protected $dbHost;
  6. protected $dbUsername;
  7. protected $dbPassword;
  8. protected $dbBasename;
  9.  
  10. public function __construct($dbHost, $dbUsername, $dbPassword, $dbBasename)
  11. {
  12. $connect = mysql_connect($dbHost, $dbUsername, $dbPassword) or die(mysql_error());
  13. $db = mysql_select_db($dbBasename, $connect) or die(mysql_error());
  14. }
  15. }
  16.  
  17. $obMysql = new mysql("localhost", "root", "pass", "baza");
  18.  
  19. ?>
  20.  
  21.  




--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
mortus
post 15.04.2010, 20:33:26
Post #13





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Spróbuj jeszcze tak:
  1. class MySQL_class {
  2. // fields
  3. var $server;
  4. var $username;
  5. var $password;
  6.  
  7. /* Database fields */
  8. var $db_name;
  9. var $db_connection;
  10. var $db;
  11. var $row;
  12.  
  13. /* Table user fields */
  14. var $nick;
  15. var $passwd;
  16.  
  17. // constructor
  18. function __construct($host, $username, $password) {
  19. $this->server = $host;
  20. $this->username = $username;
  21. $this->password = $password;
  22. $this->db_connection = mysql_connect($this->server, $this->username, $this->password) or die("Connection failed. Error: " . mysql_error());
  23. $this->db = mysql_select_db("baza") or die("Database selection failed. Error " . mysql_error());
  24. }
  25. // properties SET / GET
  26. function Set_nick($nickname) {
  27. $this->nick = $nickname;
  28. }
  29. function Set_password($password) {
  30. $this->passwd = $password;
  31. }
  32. function Get_nick() {
  33. return $this->nick;
  34. }
  35. function Get_password() {
  36. return $this->passwd;
  37. }
  38.  
  39. // functions
  40. function Login() {
  41.  
  42.  
  43. $nick = $this->nick;
  44. $haslo = $this->passwd;
  45. $tmp1;
  46. $tmp2;
  47. $querry = "SELECT * FROM users WHERE nick='$nick' AND passwd='$haslo'";
  48. $equal = mysql_query($querry) or die("Error DB querry. Error: " . mysql_error());
  49. while ($this->row = mysql_fetch_array($equal)) {
  50. $tmp1[] = $this->row['nick'];
  51. $tmp2[] = $this->row['passwd'];
  52. $licznik++;
  53. }
  54. if ($nick && $haslo) {
  55. for ($i = 0; $i < $licznik; $i++) {
  56. echo '<br>'.$tmp1[$i].' '.$tmp2[$i];
  57. echo '<br> JESTES ZALOGOWANY';
  58. echo '<a href="table.html"> start </a>';
  59. }
  60. echo '<br><b>Wszystkie operacje identyfikacji zosta�y zako�czone: </b>'.$licznik;
  61. } else {
  62. echo 'NIE MOZESZ SIE ZALOGOWAC';
  63. }
  64. }
  65. }
Go to the top of the page
+Quote Post
luck
post 15.04.2010, 20:36:52
Post #14





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Ja bym do klasy Mateusza dołożył jeszcze coś takiego i powinno zagadać:
  1. class Login {
  2. private $db;
  3.  
  4. public function __construct($objMysql) {
  5. $this->db = $objMysql;
  6. }
  7.  
  8. /* reszta metod logowania */
  9. }


--------------------
Go to the top of the page
+Quote Post
pjamorski
post 15.04.2010, 20:43:29
Post #15





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


Teraz wywala

  1. Error DB querry. Error: Nie wybrano żadnej bazy danych


Funcja . mysql_error()); przynajmniej zadziałała. Nazwa bazy jest poprawna. W dalszym ciągu nie działa.


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
luck
post 15.04.2010, 20:46:22
Post #16





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Wiesz, może wklej jak to teraz u Ciebie wygląda, bo się powoli pogubimy...


--------------------
Go to the top of the page
+Quote Post
pjamorski
post 15.04.2010, 20:48:47
Post #17





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


Klasa:

  1. <?php
  2. class MySQL_class {
  3.  
  4. // fields
  5. var $server;
  6. var $username;
  7. var $password;
  8.  
  9. /* Database fields */
  10. var $db_name;
  11. var $db_connection;
  12. var $db;
  13. var $row;
  14.  
  15. /* Table user fields */
  16. var $nick;
  17. var $passwd;
  18.  
  19. // constructor
  20. function __construct($host, $username, $password) {
  21. $this->server = $host;
  22. $this->username = $username;
  23. $this->password = $password;
  24. $this->db_connection = mysql_connect($this->server, $this->username, $this->password) or die("Connection failed. Error: " . mysql_error());
  25. $this->db = mysql_select_db("baza") or die("Database selection failed. Error " . mysql_error());
  26. }
  27. // properties SET / GET
  28. function Set_nick($nickname) {
  29. $this->nick = $nickname;
  30. }
  31. function Set_password($password) {
  32. $this->passwd = $password;
  33. }
  34. function Get_nick() {
  35. return $this->nick;
  36. }
  37. function Get_password() {
  38. return $this->passwd;
  39. }
  40.  
  41. // functions
  42. function Login() {
  43. $nick = $this->nick;
  44. $haslo = $this->passwd;
  45. $tmp1;
  46. $tmp2;
  47. $querry = "SELECT * FROM users WHERE nick='$nick' AND passwd='$haslo'";
  48. $equal = mysql_query($querry) or die("Error DB querry. Error: " . mysql_error());
  49. while ($this->row = mysql_fetch_array($equal)) {
  50. $tmp1[] = $this->row['nick'];
  51. $tmp2[] = $this->row['passwd'];
  52. $licznik++;
  53. }
  54. if ($nick && $haslo) {
  55. for ($i = 0; $i < $licznik; $i++) {
  56. echo '<br>'.$tmp1[$i].' '.$tmp2[$i];
  57. echo '<br> JESTES ZALOGOWANY';
  58. echo '<a href="table.html"> start </a>';
  59. }
  60. echo '<br><b>Wszystkie operacje identyfikacji zosta?y zako?czone: </b>'.$licznik;
  61. } else {
  62. echo 'NIE MOZESZ SIE ZALOGOWAC';
  63. }
  64. }
  65. }
  66. ?>



plik loguj.php

  1. <?php
  2. require_once('sql_class.php');
  3. $object = new MySQL_class("localhost","root","krasnal");
  4. $object->Login();
  5. ?>


Ten post edytował pjamorski 15.04.2010, 20:50:45


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
mortus
post 15.04.2010, 20:52:49
Post #18





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Proponuje w funkcji login na samym początku dopisać:
  1. echo '<pre>'; print_r($this); echo '</pre>';
Go to the top of the page
+Quote Post
pjamorski
post 15.04.2010, 20:55:29
Post #19





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 16.01.2008

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


To dostalem w odpowiedzi:
  1. mysql_class Object
  2. (
  3. [server] =>
  4. [username] =>
  5. [password] =>
  6. [db_name] =>
  7. [db_connection] =>
  8. [db] =>
  9. [row] =>
  10. [nick] =>
  11. [passwd] =>
  12. )
  13. Error DB querry. Error: Nie wybrano żadnej bazy danych


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


Chęci to nie wszystko, trzeba działać.
B. Lee

Go to the top of the page
+Quote Post
mortus
post 15.04.2010, 21:12:16
Post #20





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


A testujesz to na hostingu, czy na localhoscie? Jeśli na localhoście, to czy na pewno na PHP 5, bo Krasnal Serv może się przełączać pomiędzy PHP4... i PHP5.0.2.

Z wydruku z powyższego postu wnioskuję, że obiekt nie jest w ogóle tworzony, po prostu go nie ma. Dlatego stawiam na to, że masz włączone PHP4.3.9.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 31.07.2025 - 10:27