Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Upload,download plikow z uwzglednieniem przynaleznosci do grup
Forum PHP.pl > Forum > PHP
kedi1989
Witam serdecznie !

Chciałbym zasięgnąć pomocy odnośnie stworzenia upload'u , download'u plików z uwzględnieniem przynależności użytkowników do danej grupy, kursów.

Jestem dość początkującym koderem php, robię pracę inżynierską , system na zasadzie zarządzania studentami i wymiany prac, ocen, komentarzy pomiędzy studentami a wykładowcą.

Mam już zrobiony system logowania, rejestracji, sprawdzania obecności automatycznej po zalogowaniu się studenta itd.. Zrobiłem już również możliwość tworzenia grup i kursów przez wykładowcę do których mogą podłączać się studenci.
Po dołączeniu przez studenta do danej grupy i kursu chciałbym aby pliki które upload'uje wykładowca były widoczne dla danej grupy i kursu od strony studenta.

Szukałem już podobnych tematów ale większość kończy się na tematyce czy lepiej przechowywać pliki w bazie danych co jest złe czy lepiej na serwerze w plikach.

Otóż chciałbym aby wykładowca przy uploadzie mógł z listy rozwijanej , wybrać również daną grupę i kurs dla której udostępniony będzie plik oraz date w której ten kurs będzie wyświetlany. Potem na zasadzie sprawdzenia w bazie danych, przynależności danego studenta do grupy i kursu, plik wyświetlał się do pobrania dla odpowiednich osób i w odpowiednim czasie.

Chciałbym aby pliki były przechowywane na serwerze a nie w bazie danych. Jak to mniej więcej zrobić ? Rozumiem , że dużo operacji powinno odbywać się na zasadzie sprawdzania wartosci w bazie danych oraz dopisywaniu ich do odpowiedniej tabeli.

Czy mógłby ktoś polecić mi jakiś konkretny przykład? Artykuł ? Odnośnie uplodu i downloadu plików z uwzględnieniem jakiś praw?

Mam jeszcze jedno pytanie.

System po zalogowaniu przekierowuje na podstawie "roli" w tabeli users odpowiednio jeżeli jest to student to na podstronę panelu studenta oraz jeżeli jest to administrator to na podstronę panelu administratora. Rozwiązałem to za pomocą sesji, która na każdej podstronie należącej do studenta bądź admina sprawdza rolę i wyświetla zawartość danej podstrony. Uniemożliwia to przejście na inną podstronę nawet po wpisaniu ze strony studenta np. adresu podstrony administratora do przeglądarki gdyż na każdej podstronie sprawdzany jest warunek na podstawie przypisanej do sesji roli.

Czy to dobre rozwiązanie ?

  1.  
  2. if($_SESSION['rola'] === '1')
  3. {
  4. echo " TO JEST PODSTRONA STUDENTA ORAZ LINKI ";
  5.  
  6. echo '<a href="student_dolacz.php">Dolacz do grupy i kursu</a><br/>';
  7. echo '<a href="logout.php">Wyloguj</a><br/>';
  8.  
  9. }
Michael2318
Podsumowując, oczekujesz od nas pomysłu, jak stworzyć download rozdzielony dla poszczególnych grup?
No więc tak, na początek będziesz potrzebował stworzyć formularz z uploadem (chyba dla wykładowcy, jeśli dobrze zrozumiałem):
  1. <input type="file" name="file">


Skoro masz rozpoznawanie pomiędzy student/wykładowca to na pewno poradzisz sobie z odpowiednim zwarunkowaniem ww. inputa, tak aby wyświetlał się dla wykładowcy.

Następnie przy uploadzie, przyda się tabelka:
Kod
| ID_DOWNLOAD | REAL_NAME | FAKE_NAME | GROUP_ID |


Przy uploadzie zmieniasz standardową nazwę pliku na coś trudnego, jakiś hash z md5 może być i teraz tak:
tworzysz dwie nazwy:
a) nazwa prawdziwa, którą przypisujesz do uploadowanego pliku,
cool.gif nazwa fikcyjna, przyda się przy autoryzacji czy ten ktoś na bank jest w danej grupie.

Potem uploadujesz plik na serwer, już ze zmienioną nazwą, a do bazy wklepujesz takie zapytanie:
  1. INSERT INTO `tabela` (`real_name`, `fake_name`, `group_id`) VALEUS ('hash_prawdziwy', 'hash_zastepczy', 'id_grupy_dla_ktorej_download_jest_aktywny');


Teraz przy downloadzie, np. link: http://mojastrona.pl/download.php?id=FAKE_NAME

w pliku:
Pobierasz z GETa FAKE_name:
  1. $sql = "SELECT * FROM `tabela` WHERE fake_name = '".$_GET['id']."'";
  2. // bla bla
  3. if ( $row['group_id'] !== $user['group_d'] )
  4. {
  5. die('sorry, ale nie nalezysz do tej grupy, nie ma dla Ciebie downloadu');
  6. }
  7. else
  8. {
  9. }


Coś mniej więcej takiego, tyle że dla katalogu /downloady/ jeszcze wrzuć jakiś sensowny htaccess żeby Ci nie listował katalogu.
kedi1989
AA to rozumiem że fake name jest po to aby , nie autoryzowana osoba nie wpisała sobie real name do przeglądarki i nie pobrała sobie pliku ?

No dobra a jeżeli chodzi o moje drugie pytanie ? Czy to dobry sposób na rozdzielenie admina i studentów ? Poprzez sprawdzanie roli na każdej podstronie ?
Michael2318
Nie ma możliwości zmiany sesji z poziomu przeglądarki, więc czemu nie? smile.gif Jest OK. Takie coś można zrobić albo na podstawie bazy albo na podstawie innych method (w tym wypadku Twojej - sesje).
Wszystko skupia się do tego samego punktu:

  1. $sql = "SELECT * FROM `users` WHERE user_id = ".$zmienna_z_id_obecnie_zalogowanego;
  2. // dalsze instrukcje
  3. $rola = row['rola'];
  4.  
  5. if ( $rola == 1 )
  6. {
  7. echo 'costam';
  8. }


Jak widać - w linii 4 zaczyna się ten kod, który masz u Ciebie:

  1. $rola = $_SESSION['rola'];
  2.  
  3. if ( $rola == 1 )
  4. {
  5. echo 'costam';
  6. }


Podsumowując - na jedno wychodzi bo jeśli użyłbyś rozwiązania z bazą to ID i tak identyfikujesz po sesjach. Jest ok smile.gif

EDIT:

Cytat
AA to rozumiem że fake name jest po to aby , nie autoryzowana osoba nie wpisała sobie real name do przeglądarki i nie pobrała sobie pliku ?


Dobrze rozumiesz.
kedi1989
To super dziekuję smile.gif Przynajmniej jedna wątpliwość z głowy.
Jestem początkującym koderem, na początku starałem się uczyć wszystkiego ale doszedłem do wniosku że po prostu postawie sobie cele i zacznę pisać cegiełka po cegiełce, szukając rozwiązań na forach i kursach smile.gif
I jakoś tak powoli mi idzie.

Proszę o nie zamykanie tematu, będe miał pewnie jeszcze jakieś pytania wraz z rozwojem skryptu smile.gif
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.