Asmox
26.03.2009, 20:51:40
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. ?
ActivePlayer
26.03.2009, 21:49:39
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.
Asmox
27.03.2009, 06:29:42
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.
jareeny
27.03.2009, 06:50:52
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
zzeus
27.03.2009, 08:39:17
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ć.
Fifi209
27.03.2009, 12:48:39
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.
Asmox
27.03.2009, 19:30:18
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 ?
Fifi209
27.03.2009, 19:33:50
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
Asmox
28.03.2009, 00:09:15
OK, ale w jaki sposób sprawdzać kolejne cyfry po przecinkach albo bez przecinków?
Fifi209
28.03.2009, 08:50:43
Jak wyciągniesz z bazy to skorzystaj z
explode" title="Zobacz w manualu PHP" target="_manual i
list" title="Zobacz w manualu PHP" target="_manualnp.
Tu mam wynik w postaci:
Kod
$access = '1,0,1';
list($np, $ep, $up) = explode(',', $access);
Chyba się nie walnąłem. ;d
Asmox
28.03.2009, 10:58:05
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?
Ellington
28.03.2009, 12:56:16
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.
Fifi209
28.03.2009, 19:52:48
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.