Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dane o użytkownikach, dane osobowe....
Asmox
post
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. ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
ActivePlayer
post
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.
Go to the top of the page
+Quote Post
Asmox
post
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.
Go to the top of the page
+Quote Post
jareeny
post
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
Go to the top of the page
+Quote Post
zzeus
post
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ć.
Go to the top of the page
+Quote Post
Fifi209
post
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.
Go to the top of the page
+Quote Post
Asmox
post
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
Go to the top of the page
+Quote Post
Fifi209
post
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
Go to the top of the page
+Quote Post
Asmox
post
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?
Go to the top of the page
+Quote Post
Fifi209
post
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
Go to the top of the page
+Quote Post
Asmox
post
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?
Go to the top of the page
+Quote Post
Ellington
post
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.
Go to the top of the page
+Quote Post
Fifi209
post
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 16:25