Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z przekazaniem instancji klasy, proszę o pomoc
bartolomeo
post 11.04.2010, 19:04:57
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


Mam taki problem. Najlepiej chyba jak pokażę kod i błąd.


Klasa kontrolera (wrzucam konkretny fragment kodu)
  1. $link = new MySQLConnect('localhost', 'root', '');
  2. $this->_connection = $link->getConnection();
  3. $this->_dbConnection = new MySQLQuery('mvc', $this->_connection);
  4.  
  5. require_once('model/UserModel.class.php');
  6. $this->_userModel = new UserModel('pinokio', $this->_dbConnection);
  7.  
  8. $this->_userModel->registerUser('pinokio', 'pinokio@pinokio.com');


a błąd wygląda tak:
Cytat
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'www-data'@'localhost' (using password: NO) in
...

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in ...

(powtarza się to kilka razy)

Warning: mysql_query(): 13 is not a valid MySQL-Link resource in...


W każdym razie nie wiem w czym leży problem bo kiedy korzystajac z tych samych klas MySQLConnect oraz MySQLQuery tylko poprzez plik testowy ktorego zawartosc wyglada tak:
  1. $link = new MySQLConnect('localhost', 'root', '');
  2. $login = 'admin';
  3. $password = 'pinokio';
  4. $email = 'admin@localhost';
  5. $datas = array('login' => $login,
  6. 'password' => sha1(md5($password)),
  7. 'email' => $email');
  8. $link2 = $link->getConnection();
  9. $connection = new MySQLQuery('mvc', $link2);
  10. $result = $connection->dbInsert('users', $datas);


nie występuje żaden problem :|

Prosze o pomoc, z góry dziekuje ! winksmiley.jpg
Go to the top of the page
+Quote Post
pedro84
post 11.04.2010, 19:15:08
Post #2





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


A angielski w szkole miałeś?

Cytat
Access denied for user 'www-data'@'localhost' (using password: NO) in


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
bartolomeo
post 11.04.2010, 19:16:56
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


No fantastycznie, a powiedz mi jakim cudem wystepuje taki problem jak loguje sie na roota i skad w ogole sie bierze taki uzytkownik, sprawdzalem na windowsie mam zainstalowanego xamppa i jest ten sam problem tylko jakos inaczej sie nazywa ten uzytkownik ktory wyskakuje w warningu
Go to the top of the page
+Quote Post
pedro84
post 11.04.2010, 19:22:39
Post #4





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Wklej cały błąd Access Denied, mam na myśli w której linii występuje błąd (sprawdź tę linię).

Ten post edytował pedro84 11.04.2010, 19:23:16


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
bartolomeo
post 11.04.2010, 19:27:54
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


Jest to fragment klasy obslugi zapytań SQL, ale jak już pisałem problem nie występuje gdy wywołuje to samo zapytanie itd przez użycie jednego pliku w który jest wszystko, tego testowego ktory wyżej zamiesciłem.


a tutaj ta linia (jest to ta return...):
  1. public function string($string){
  2. }
Go to the top of the page
+Quote Post
zend
post 12.04.2010, 11:28:56
Post #6





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Zaimplementuj system obslugi bledow do mysqli, na google jest mnostwo przykladow i zmien uzytkownika albo haslo albo to i to, bo uzytkownik root nie ma uprawnien w tym konkretnym przypadku (moze wystarczy dodac samo haslo), uprawnienia do bazy trzymaj w jednym miejscu, a nie uzytaj hasla i loginu przy kazdym polaczeniu do bazy, po w przypadku gdy bedziesz musial zmienic te dane, bedziesz musial przeszukac wszystkie pliki w celu zmiany, najlepiej do tego nadaja sie stale link, muszi stworzyc plik konfiguracyjny w ktorym zdefiniujesz stale i includowac go do kazdego skryptu. Mam nadzjeje ze jestes w stanie zrozumiec to co napisalem smile.gif

Pozdrowionka Zend
Go to the top of the page
+Quote Post
bartolomeo
post 12.04.2010, 21:52:14
Post #7





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


Mam system obsługi błędów i na końcu błedu wywala jeszcze:
Cytat
Komunikat błędu: Błąd przy zapytaniu


który to dokładnie jest przy:
  1. if(!$this->_result = mysql_query($this->query, $this->_connection)){
  2. throw new MyException('Błąd przy zapytaniu');
  3. }

No w każdym razie, wnioskuje z tego, że coś nie tak z przekazanym obiektem połączenia z bazą. A co do danych do bazy to mam zrobiony plik konfiguracyjny i są ladowane tylko raz, wiec nie bedzie żadnych problemów przy zmianie passów do bazy. Dodatkowo do root'a jest ustawione hasło, tylko tutaj akurat je wyciąłem, ale normalnie z niego korzystam i w dalszym ciągu problem występuje nawet jeśli utworzyłem innego użytkownika i z niego korzystam sad.gif
Go to the top of the page
+Quote Post
pedro84
post 12.04.2010, 22:10:12
Post #8





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Dziwne, bardzo. Możesz wrzucić całą klasę jako załącznik?


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post
bartolomeo
post 12.04.2010, 22:30:56
Post #9





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


Nie ma problemu. Wrzucam wszystko, gdzie tylko mogłaby zawierać się przyczyna

http://www.sendspace.pl/file/f29915b8b4739bea0e3870f

hasło do archiwum: php.pl

(albo jestem niewidomy, albo po prostu nie mam opcji dodania załącznika do posta)
Go to the top of the page
+Quote Post
zend
post 13.04.2010, 14:53:12
Post #10





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


na pierwszy rzut oka to warto by sie bylo zastanowic nad tymi linijkami (tzn czy przekazujesz prawidlowe dane smile.gif ,a poza tym w tych twoich klasach az sie prosi o typowanie, uniknal bys dzieki temu masy bledów)
  1. $this->_connection = $link->getConnection();
  2. $this->_dbConnection = new MySQLQuery('mvc', $this->_connection);
  3.  
  4. require_once('model/UserModel.class.php');
  5. $this->_userModel = new UserModel('pinokio', $this->_dbConnection);
Go to the top of the page
+Quote Post
bartolomeo
post 13.04.2010, 15:21:06
Post #11





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


Zastanawiałem się wielokrotnie nad tymi linijkami i z pewnością przekazuje dobre dane, robię to w identyczny sposób jak w pliku testowym, który na początku tematu zamieściłem, a w którym błąd nie występuje. Co do typowania to może później, na razie chciałbym się jakoś uporać z tym błędem bo jest on kluczowy w działaniu aplikacji, którą piszę.

Jeśli nie potrafisz mi pomóc to proszę Cię żebyś napisał (może być totalnie abstrakcyjny przykład klas) w jaki sposób Ty przekazujesz obiekt połączenia z bazą do innej klasy. Może własnie sposób w jaki to robię jest błędny, nie wiem
Go to the top of the page
+Quote Post
zend
post 13.04.2010, 15:30:32
Post #12





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Przekazujesz instancje do zlego obiektu, do modelu powinienes przekazac _connection i powinno zadzialac
Go to the top of the page
+Quote Post
bartolomeo
post 13.04.2010, 15:35:43
Post #13





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


Mógłbyś mi pokazać wyedytowany plik, bo nie wiem co masz konkretnie na myśli? (przepraszam, że zabieram Ci tyle czasu, nie wynika to z mojego lenistwa, tylko zmienna $_connection wystepuje prawie w każdym z tych plików, a poza tym jest już przekazywana do modelu, jeśli możesz to po prostu pokaż na konkretnym pliku)
Go to the top of the page
+Quote Post
zend
post 13.04.2010, 15:37:48
Post #14





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  1. $link = new MySQLConnect('localhost', 'root', '');
  2. $this->_connection = $link->getConnection();
  3. $this->_dbConnection = new MySQLQuery('mvc', $this->_connection);
  4.  
  5. require_once('model/UserModel.class.php');
  6. $this->_userModel = new UserModel('pinokio', $this->_connection);
  7.  
  8. $this->_userModel->registerUser('pinokio', 'pinokio@pinokio.com');
Spróbuj odpalić to
Go to the top of the page
+Quote Post
bartolomeo
post 13.04.2010, 15:41:48
Post #15





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


Proszę, oto efekt:

Cytat
Fatal error: Call to a member function dbInsert() on a non-object in /home/bart/public_html/model/UserModel.class.php on line 21


Ale to jest bez sensu, bo spójrz na klasę UserModel, a następnie na to co ona wywołuje, ona potrzebuje obiektu klasy MySQLQuery (połączenia już z konkretną bazą danych a nie z serwerem mysql).


EDIT: Dodam, że właśnie to co mnie dziwi to fakt, że tutaj problem nie występuje:
  1. $link = new MySQLConnect('localhost', 'root', '');
  2. $login = 'admin';
  3. $password = 'pinokio';
  4. $email = 'admin@localhost';
  5. $datas = array('login' => $login,
  6. 'password' => sha1(md5($password)),
  7. 'email' => $email');
  8. $link2 = $link->getConnection();
  9. $connection = new MySQLQuery('mvc', $link2);
  10. $result = $connection->dbInsert('users', $datas);


Chociaż sposób działania jest praktycznie identyczny (korzysta z tych samych klas połączenia z bazą)

Ten post edytował bartolomeo 13.04.2010, 15:55:26
Go to the top of the page
+Quote Post
zend
post 13.04.2010, 16:26:01
Post #16





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Jedyną różnicą jest tu brak modelu. Jedyne co mi przychodzi na mysl, to przerzuc dane z tego dzialajacego pliku do kontrolera i zamieniaj linijka po linijce na to co nie działa, wkońcu powinien się znaleźć ten błąd
Go to the top of the page
+Quote Post
bartolomeo
post 13.04.2010, 19:26:45
Post #17





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 21.09.2008

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


DZIAŁA ! Wystarczyło zamienić:
  1. [b]$link[/b] = new MySQLConnect('localhost', 'root', '');
  2. $this->_connection = [b]$link[/b]->getConnection();
  3. $this->_dbConnection = new MySQLQuery('mvc', $this->_connection);
  4.  
  5. require_once('model/UserModel.class.php');
  6. $this->_userModel = new UserModel('pinokio', $this->_dbConnection);
  7.  
  8. $this->_userModel->registerUser('pinokio', 'pinokio@pinokio.com');


na

  1. [b]$this->_link[/b] = new MySQLConnect('localhost', 'root', '');
  2. $this->_connection = [b]$this->_link[/b]->getConnection();
  3. $this->_dbConnection = new MySQLQuery('mvc', $this->_connection);
  4.  
  5. require_once('model/UserModel.class.php');
  6. $this->_userModel = new UserModel('pinokio', $this->_dbConnection);
  7.  
  8. $this->_userModel->registerUser('pinokio', 'pinokio@pinokio.com');


Dzięki wszystkim zaangażowanym za poświęcony czas, pozdrawiam smile.gif
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 - 08:38