![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
chciałbym napisać swoistą stronę dla klasy, gdzie każdy po lekcjach mógłbym na tę stronę wejść, pogadać z innymi i tak dalej... Postanowiłem zacząć od napisania klas dla odpowiednich użytkowników. Mógłbym napisać każdą bez zbędnego wysiłku, gdybym najpierw napisał abstrakcyjną klasę User, a potem dziedziczące od niego klasy Student, Newsmen i Administrator. Tabela bazy danych z użytkownikami zawierałaby jedynie ID, login, hasło i typ uprawnień. Problem mam z powiązaniem szczegółów każdego osobnika klasy User z jego imieniem nazwiskiem, emailem, gg i skypem. 1. Czy moglibyście mi doradzić w jaki sposób napisać klasę User, aby była powiązana z w/w danymi? 2. Jak z bazą danych? Zrobić jedną wielką tabelę w DB z danymi, czy może osobne tabele na e-mail, gg itd. ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
1. nie bardzo czuje problem, ciezko odpowiedziec na to pytanie nie znając Twojego podejścia i idei jaką się kierujesz budując tę klasę.
2. wszystko w jednej tabeli wypełniając puste pola null'ami. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
No to jeszcze raz: Na stronie mają być trzy grupy użytkowników:
- Administrator, który będzie zarządzał stroną - Newsmen, który będzie się zajmował powiadamianiem na stronie głównej o klasówkach, zmianachw planie itd.. - Student - normalny ktoś z mojej klasy, który ma jedynie prawa do oglądania strony i pisania na forum. Każda klasa będzie mieć dużo powtarzających się elementów, takich jak ID, funkcja zmiany hasła itd.. Aby nie pisać tego w jednej klasie postanowiłem przenieść wszystkie elementy do abstrakcyjnej klasy User, a Administrator, Newsmen i Student będą od niego dziedziczyć. Moje pierwsze pytanie dotyczyło umieszczenia danych w bazie - strona ma być tylko dla mojej klasy, i nie chcę, aby ktoś z zewnątrz mógł się w niej rejestrować - dlatego muszą być choć w okrojonym stopniu dane osobowe (tylko imię i nazwisko - bez adresów telefonów itd., tylko gg i skype). Po prostu nie wiedziałem, czy nie lepiej by było trzymać dane o loginie potrzebne do zalogowania w jednej tabeli, a dane osobowe i kontaktowe w drugiej. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 23 Dołączył: 2.10.2007 Skąd: Słupsk Ostrzeżenie: (0%) ![]() ![]() |
ja bym dał wszystko w jednej klasie, ale niektore funkcje udostępniał od jakiegoś poziomu dostępu, np:
pisanie komentarzy: student, newsman, administrator moderacja komentarzy: newsman, administrator pisanie komentarzy: newsman usuwanie, dodawanie uczniów: administrator itp |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 441 Pomógł: 71 Dołączył: 3.09.2007 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
W zależności od tego jak dużo ma być tych danych kontaktowych rozważyłbym podział danych na dwie tabele w bazie danych. Jeśli to ma być tylko imię i nazwisko to nie ma sensu tego dzielić.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Ja bym zrobił tak:
Utworzył tabelę przechowującą tylko dane potrzebne do zalogowania tj. Tabela users: id - int unsigned not null auto_increment primary key name/nick - varchar (długość sam sobie dobierz [na moje oko nick to nie jest coś długiego 15-20 znaków max]) not null password - varchar (polecam hashowanie haseł md5/sha1, długość zależy od wybranej metody hashowania) not null group_id - int unsigned not null Groups: id - int unsigned not null auto_increment primary key grop_name/name - varchar (długośc sobie dobierz według "rang" na stronie) not null group_access/access - int unsigned not null Other: user_id - int unsigned not null first name - varchar (dobierz długość) not null last name - j/w mail - j/w gg - int unsigned not null skype - varchar (dobierz długość) not null Tak chyba będzie najprościej "połapać" się w tym, i będzie to łatwiejsze do modyfikacji. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Hm.. całkiem fajny pomysł! Tylko nie wiem za bardzo co z tym access. Czy po prostu sprawdzać wartość, czy każda kolejna cyfra oznaczać będzie dostęp do innych rzeczy? A może bym zrobił oddzielne pole co klasa może np. ID|group_name|view|write| itd.. ?
P.S. Jeśli ta druga opcja byłaby dobra, to jak po kolei sprawdzać każdą cyfrę liczby? Załóżmy np. że 1 to czytanie, 2 to pisanie/poprawianie a 3 to kasowanie. I jak na przykład zrobić odczyt praw dla admina, jeśli jego access wynosi 333333 ? Ten post edytował Asmox 27.03.2009, 19:32:22 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Wiesz nie określiłeś się. Jako access możesz dać np. varchar
i określać na zasadzie 0 - brak uprawnień 1 - ma uprawnienia i np. nowy post, edycja postu, usuwanie postu administrator 1,1,1 moderator 1,1,0 uzytkownik 0,0,0 Tak przykładowo oczywiście;d |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
OK, ale w jaki sposób sprawdzać kolejne cyfry po przecinkach albo bez przecinków?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Jak wyciągniesz z bazy to skorzystaj z explode" title="Zobacz w manualu PHP" target="_manual i list" title="Zobacz w manualu PHP" target="_manual
np. Tu mam wynik w postaci: Kod $access = '1,0,1'; list($np, $ep, $up) = explode(',', $access); Chyba się nie walnąłem. ;d |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Yeah, właśnie o to mi chodziło! A dałoby się może bez tych przecinków, tylko ciągnąć od razu cyferki?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 76 Pomógł: 13 Dołączył: 24.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Musisz miec jakis unikatowy znak, ktory bedzie informacja dla explode gdzie ma wyciac. Zamiast przecinkow mozesz dac '|' czy kazda inna sekwencje, ale cos musi byc.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Dałoby się ale jest to właściwie bez sensu, tak jest wygodniej...
Mógłbyś wyciągać po cyferce np. Kod $test = '101001'; echo $test[0]; // wyświetli 1 // echo $test[3]; // wyświetli 0 Ale jest to niewygodne. ;p |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 16:25 |