Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dane o użytkownikach, dane osobowe....
Forum PHP.pl > Forum > PHP
Asmox
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
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
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
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
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
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
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
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
OK, ale w jaki sposób sprawdzać kolejne cyfry po przecinkach albo bez przecinków?
Fifi209
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
Asmox
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
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.