Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] System rejestracji, a userzy i pliki
Forum PHP.pl > Forum > Przedszkole
dworek
Witam wszystkich serdecznie jako, że nowy tu jestem.

Mam problem z wymyśleniem koncepcji na poniższy problem.

Napisałem sobie system rejestracji/logowania użytkowników oparty na bazie MySQL (rekordy: login, hasło, mail, data rejestracji, data logowania). Po rejestracji - użytkownik generuje sobie folder i kilka plików.
Mój problem polega na tym, iż chciałbym napisać coś co będzie czyściło serwer z tych plików jeśli np. minie 6 miesięcy od ostatniego logowania. Datę ostatniego logowania każdego mam w bazie. I dodatkowo usunie użytkownika z bazy.

Co do czyszczenia bazy mam na to koncepcję i potrafię sobie to napisać, tak do plików za nic nie mogę wymyślić... Jeśli nie da się tego zrobić automatycznie przez PHP to może jakiś skrypt odpalany ręcznie? Powiedzmy, że będzie plik tekstowy z nazwami tych folderów, a skrypt je z tego pliku odczyta i usunie? worriedsmiley.gif Już sam nie wiem...

W PHP jestem raczej początkujący i sporo szukałem na ten temat w sieci... bez rezultatu większego. Proszę o naprowadzenie na trop i ewentualne przedstawienie jakiegoś przykładu.

Z góry dziękuję za pomoc.
Pozdrawiam.
bobo168
Po prostu zrób tabelka w bazie w której będziesz miał wszystkie te pliki zapisane (scieżka do katalogu) + id użytkownika do którego nalezy dany katalog. Zapytanie sprawdzające czy mineło pół roku od ostatniego logowania, pobierasz id takich userów nastepnie szukasz w tabelce z katalogami katalogów tych że userów i podstawisz scieżke do takiej funkcji:

  1. <?
  2.  
  3. //USUWA WSZYSTKIE PLIKI Z KATALOGU
  4.  
  5. $katalog = "$delete";
  6.  
  7. if(glob("$katalog/*")) //sprawdza czy katalog jest pełny. jezeli tak wyswietla ponizsza linię
  8. {foreach (glob("$katalog/*") as $filename){if($file != '$katalog' && $file != '..'){}unlink("$filename");}}
  9.  
  10. //USUWA KATALOG
  11.  
  12. rmdir("$delete");
  13.  
  14. echo "<br/>Katalog został pomyślnie usunięty!";
  15. ?>


A co do uruchomiania tego to albo zainteresuj się cronem, albo po prostu odpalaj co jakiś czas ręcznie.
dworek
Myślałem nad tym przez weekend, ale nie chce mi to wyjść...

Można troszeczkę naprowadzić?

Mam tabelkę w bazie... (id, login, password, mail, datar, datal) Przy czym datar to data rejestracji, a datal to logowania (zmienia się co logowanie usera)

Mam teraz zrobić nową tabele z informacjami o plikach. Jak ona ma mniej więcej wyglądać? i Jak napisać skrypt w php do kasacji tego wszystkiego. Ewentualnie jak powiązać to z tym kodem wyżej.

Pozdrawiam.
jmail
a w jaki sposób generujesz klatalog dla użytkownika?
dworek
Katalogi mkdir, a pliki pobieram do kopiowania i fopen'em wkładam do folderów (kopiuje).
jmail
eh. chodziło mi o generowanie nazwy katalogu :/
dworek
Nazwa katalogu jest pobierana z pola input podczas rejestracji.

W wielkim skrócie poniżej...

  1. <input class=login type=text name=login></input>
  2. $login = $_POST['login'];
  3. mkdir ($login, 0777);
jmail
no to zrób tak.

pobierz dane usera z bazy

jak bobo CI radził usuń katalog o nazwie loginu usera

usuń użytkownika z bazy

ustaw sobie w jakimś configu ostatnie czyszczenie i w skrypcie włącz czyszczenie nie wiem. raz na miesiąc

dworek
Napisałem coś takiego ale zwraca dziwny błąd... według was powinno to działać?

  1. $db = mysql_connect( $db_server, $db_user, $db_pass );
  2. mysql_select_db( $db_name );
  3.  
  4. //USUWA WSZYSTKIE PLIKI Z KATALOGU
  5.  
  6. $katalog = mysql_query('SELECT `login` FROM `users` WHERE datal > 2009-10-10');
  7.  
  8. if(glob("$katalog/*")) //sprawdza czy katalog jest pełny. jezeli tak wyswietla ponizsza linię
  9. {foreach (glob("$katalog/*") as $filename){if($file != '$katalog' && $file != '..'){}unlink("$filename");}}
  10.  
  11. //USUWA KATALOG
  12.  
  13. rmdir("$katalog");
  14.  
  15. echo "<br/>Katalog został pomyślnie usunięty!";



a błąd wyświetla taki:

Cytat
Warning: rmdir(Resource id #9) [function.rmdir]: No such file or directory in /var/www/sites/delete.php on line 17


Nie mam koncepcji sciana.gif
jmail
spróbuj tak

  1.  
  2. $db = mysql_connect( $db_server, $db_user, $db_pass );
  3. mysql_select_db( $db_name );
  4.  
  5. //USUWA WSZYSTKIE PLIKI Z KATALOGU
  6.  
  7. $katalog_ = mysql_fetch_array(mysql_query('SELECT `login` FROM `users` WHERE datal > 2009-10-10'));
  8. $katalog = $katalog_['login'];
  9.  
  10. if(glob("$katalog/*"))
  11. {
  12. foreach (glob("$katalog/*") as $filename){
  13. if($file != '$katalog' && $file != '..'){
  14. }
  15. unlink("$filename");
  16. }
  17. }
  18. rmdir("$katalog");
  19. echo "<br/>Katalog został pomyślnie usunięty!";
  20.  
dworek
Bardzo ładnie zadziałało smile.gif
Mam jeszcze jedno pytanie co do tego wyżej...

W jaki sposób zrobić pętle by usunęło się wszystko, a nie tylko 1 rekord i czy da się zrobić SELECT i DELETE w jednym zapytaniu?

Mówiąc wszystko mam na myśli np. 50 użytkowników.
jmail
  1.  
  2. $db = mysql_connect( $db_server, $db_user, $db_pass );
  3. mysql_select_db( $db_name );
  4.  
  5. //USUWA WSZYSTKIE PLIKI Z KATALOGU
  6.  
  7. $katalogQuery = mysql_query('SELECT `login` FROM `users` WHERE datal > 2009-10-10');
  8. while($katalog_ = mysql_fetch_array($katalogQuery)){
  9. $katalog = $katalog_['login'];
  10.  
  11. if(glob("$katalog/*"))
  12. {
  13. foreach (glob("$katalog/*") as $filename){
  14. if($file != '$katalog' && $file != '..'){
  15. }
  16. unlink("$filename");
  17. }
  18. }
  19. rmdir("$katalog");
  20. }
  21. echo "<br/>Katalogi zostały pomyślnie usunięte!";
  22.  
  23.  
dworek
Ok, wszystko działa jak trzeba smile.gif
Dopisałem sobie do tego jeszcze wyrzucanie delikwentów z bazy danych i ładnie działa. Dziękuję jmail za szybką pomoc i bobo168 za naprowadzenie na temat. Bez was pewnie bym się jeszcze z tym męczył tongue.gif . Oczywiście odpowiednia nagroda dla was winksmiley.jpg

Pozdrawiam i dziękuję.
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.