![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam taki fragment index.php
wszystko chodzi wchodzę na stronę gdzie rejestruje usera połączenie z bazą jest wywołuje funkcje sprawdzającą
połączenie z bazą w tym pliku jest ale nie ma już jego w klasie user.class.php jak juz wcześniej wymieniłem plik code.class.php (tam wszystko działa) user.class.php
db.class.php
dlaczego nie mam połączenie w klasie user? reszta klas działa normalnie -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Gdzie masz pole $sql w klasie User ?
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
jak pole $sql?
w core.class mam
i jest ok -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie zauważyłem że public static function getByUsername($username) Ok w takim razie - wiesz, że w metodach statycznych nie korzysta się z $this, a z self:: ? Poza tym źle wywołujesz tę metodę, powinno być: $u::getByUsername($_POST['username']);
Ten post edytował darko 4.01.2010, 20:54:28 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 4 340 Pomógł: 542 Dołączył: 15.01.2006 Skąd: Olsztyn/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
usuń static. -------------------- I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy. QueryBuilder, Mootools.net, bbcradio1::MistaJam http://www.phpbench.com/ |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Jak usuniesz static, to dodaj jeszcze w klasie User pole
protected $sql; -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
usunąłem ale nadal nie chce wykonać zapytania var_dump($db); zwraca NULL
-------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
a dodałeś to pole protected $sql; ?
Ten post edytował darko 4.01.2010, 21:01:53 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
jakie protected?
mam normalną prywatność dla tego jak w innych klasach ok już wiem o co chodzi ![]() dodałem i poprawnie wykonuję te funkcje ale teraz zatrzymuje się na wywołaniu $user->userId
klasa (część)
-------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Metoda getByUsername nie operuje na polu userId
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
ale mam to w __get
no to jest mam to poprawić? -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Wypełnij pola klasy User analogicznie, jak w metodzie getById tylko nie statycznie, a kontekstowo z użyciem wskaźnika $this. W metodzie getByUsername wyciągasz dane z bazy, ale nigdzie ich nie przypisujesz do pól klasy User, chodzi o to, że powinieneś nadpisać wartości pól zapisane po wywołaniu konstruktora.
Ten post edytował darko 5.01.2010, 15:57:28 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
nie za bardzo cię rozumiem, poprawiłem klase, rejestruje ale nie sprawdza czy nazwa użytkownika się powtarza ;/
-------------------- |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
To może najpierw kilka uwag:
#2: Klasa 'User' dziedziczy po 'functions' (może jakaś konsekwencja w nazewnictwie?) co wydaje mi się nieco dziwne. W jaki sposób użytkownik jest rozszerzeniem funkjci? #4,5: Dlaczego te pola są publiczne? Przecież z tego co widzę stworzyłeś dla nich magiczne gettery/settery. #6: SQL to skrót odnoszący się do języka zapytań, a z tego co widzę to używasz tego jako referencji do czegoś co pełni rolę API do komunikacji z bazą... niepotrzebne nieporozumienia się rodzą w takiej sytuacji #11,12: Dlaczego nie ustawisz sobie wartości domyślnych odrazu w momencie deklarowania składowych klasy? #35: Jak do tej pory ta klasa wygląda na taką, która ma reprezentować użytkownika... a tu nagle wyskakuje jakaś metoda do walidacji nazwy użytkownika. Powinieneś wydzielić te (i podobne) metody do innego obiektu będącego walidatorem dla użytkownika używanym podczas rejestracji. Poza tym kod tej metody jest bez sensu... najpierw sprawdzasz czy długość nazwy jest mniejsza od 3-ech. Jeśli tak to wyświetlasz komunikat (co już jest błędem, bo obiekt niepotrzebnie bierze na swoje barki dodatkową kwestię jaką jest prezentowanie treści użytkownikowi). Jeżeli nazwa jest dłuższa lub równa podanym 3-em znakom to metoda kończy działanie zwracając TRUE. To po jakie licho jest jeszcze później ten drugi warunek? Przecież jeżeli nazwa jest krótsza od tych 3-ech znaków to już nie będzie dłuższa niż 20, a sytuacja gdy nazwa jest dłuższa niż 2 znaki po czym następuje sprawdzenie czy aby przypadkiem nie jest dłuższa niż 20 znaków nie może nigdy zajść... #58: Tutaj znów obiekt reprezentujący użytkownika pełni rolę kolekcji użytkowników... pobieranie użytkowników wydziel do osobnego obiektu odpowiedzialnego za to konkretne zadanie (tj. reprezentację kolekcji i operacji na niej) #60: W jakim celu każdorazowo robisz: $db = $this->sql? Po co ta dodatkowa referencja? #76: Zauważyłeś, że ta metoda robi dokładnie to co wcześniejsza tylko różni się drobnym fragmentem wykorzystywanego zapytania? Google: DRY. Innymi słowy: wydziel sobie jakąś prywatną metodę pobierającą użytkowników i z poziomu getById, getByUsername zwracaj jej wynik (jako argument przekazując coś w stylu: "id = 3" lub "username = 'abc'" #103: Nie widzę żadnej filtracji danych przed wprowadzeniem ich do treści zapytania. Co więcej te zapytania nie mają prawa działać - w ich treści masz: ...username = abc my username... Przeczytaj w dokumentacji jak w MySQL (bo chyba z tego korzystasz) reprezentuje się tekst - podobnie jak w kodzie PHP podpowiem. #124: Poczytaj o różnicy pomiędzy: "blah blah $variable blah blah", a 'blah blah $variable blah blah' Cytat rejestruje ale nie sprawdza czy nazwa użytkownika się powtarza 1) Nie pokazujesz jak używasz obiektu tej klasy 2) Nie widzę też w tym kodzie niczego co by mogło sprawdzać unkalność nazwy użytkownika... |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
dziedziczę jeszcze jeszcze functions bo jest tam funkcja którą potrzebuję do wylosowania tekstu
#4,5 ok zmienię #6 mógłbyś wyjaśnić? #11,12 to też ![]() #35 i #58 to jak bym miał to poprawić? #60 no właśnie o tym już kiedyś pisałem potrzebuje tego aby było połączenie, przyjrzyj się klasie łączącej #124 jakieś namiary? nie wiem za bardzo o co chodzi dzięki za wskazówki Ten post edytował Lejto 5.01.2010, 22:25:56 -------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat dziedziczę jeszcze jeszcze functions bo jest tam funkcja którą potrzebuję do wylosowania tekstu Nie o to chodzi w dziedziczeniu. Jest sporo materiałów dotyczących obiektówki - traktujących o teorii - poczytaj jeszcze zanim zabierzesz się za pisanie.Cytat #6 mógłbyś wyjaśnić? Po prostu zwróciłem uwagę na to, że źle sobie nazywasz zmienne. Pod $sql umieszczasz sobie obiekt, który z SQLem nie ma wiele wspólnego. Po prostu: zła praktyka wg mnie.Cytat 11,12 to też (ucze się cały czas oop) nie wiem jeszcze wszystkiego... Zastanawiałem się dlaczego nie zrobisz po prostu:
Cytat #35 i #58 to jak bym miał to poprawić? Utworzyć kilka nowych klas, gdzie każda odpowiedzialna jest za jedną konkretną rzecz i doprowadzić do współpracy różnych obiektów tych klas między sobą, a nie tak jak teraz masz... jeden obiekt robiący wszystko co się tylko da - ma on za duży zakres obowiązków.Cytat #60 no właśnie o tym już kiedyś pisałem potrzebuje tego aby było połączenie, przyjrzyj się klasie łączącej Eee... ale Ty po prostu robisz niepotrzebnie kolejną referencję do tego obiektu... Zaśmiecasz kod tylko niepotrzebnymi zmiennymi, nie zyskując nic na tym, bo zarówno $db->doSth('...'); jak i $this->db->doSth('...') są bardzo czytelne.Cytat #124 jakieś namiary? nie wiem za bardzo o co chodzi Oczywiście manual PHP, rozdział dotyczący typu danych: String (nie pomyl z listą funkcji operujących na tekscie). Ale jeżeli nie masz tak elementarnej wiedzy z zakresu działania PHP (różnica pomiędzy "test", a 'test') to nie wiem czy dobrym pomysłem jest branie się za prog. obiektowe.
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
ok dzięki
![]() ale powiedź jeszcze dlaczego nie chce mi działać wywołanie $user->userId
poradzi ktoś coś? kod już cały potrzebny chyba podałem. Ten post edytował Lejto 6.01.2010, 18:15:52 -------------------- |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Wyświetl sobie błędy zapytań MySQL...
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
nie wpadł bym na to
![]() problem rozwiązany, błąd był w zapytaniu (myślałem że gdzieś funkcje źle zrobione) -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.06.2025 - 04:20 |