Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Consiglio su applicazione per condivisione file

    Ragazzi ho un bel quesito da porvi, allora io vorrei realizzare un sistema di condivisioni di file, con l'opportunità da dare all'utente di condividere con uno o più persone, come posso organizzarlo nei migliori dei modi? io avevo pensato nel db una struttura del genere:

    tab_utenti
    id
    nome
    cognome
    e-mail
    user
    pass

    tab_file
    id_file
    id_utente_a (chi invia il file all'utente B)
    id_utente_b (chi riceve il file dall'utente A)

    cosa ne pensate della struttura del db?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Per funzionare dovrebbe funzionare, quindi se va bene o male dipende dalle tue esigenze.
    Se col db fatto così riesci a coprire tutte le funzioni che prevedi di sviluppare allora è ok.

    Io per la gestione degli utenti registrati uso una tabella con più campi, ma se non devi fare una cosa troppo rigida e non orientata alla sicurezza perché prevedi un uso blando dell'applicazione non c'è problema.

  3. #3
    No no io vorrei fare un qualcosa di serio per questo ho postato il messaggio, quindi con tutta la sicurezza dovuta, tu cosa mi consigli?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Questo è un esempio di tabella per la gestione utenti che uso nelle mie applicazioni
    codice:
    CREATE TABLE utenti (
    	id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    	email VARCHAR(60) UNIQUE NOT NULL,
    	username VARCHAR(30) UNIQUE NOT NULL,
    	password VARCHAR(32) NOT NULL,
    	nome VARCHAR(100) NOT NULL,
    	cognome VARCHAR(100) NOT NULL,
    	indirizzo VARCHAR(150) NOT NULL,
    	//e così via tutti i dati che vuoi che l'utente dichiari
    
    	conferma SET('0','1') NOT NULL,
    	regdate VARCHAR(11) NOT NULL,
    	uid VARCHAR(32) NOT NULL,
    	permesso INT DEFAULT 2 NOT NULL,
    	PRIMARY KEY(id)
    );
    "id" è banalmente un numero incrementale da usare come chiave primaria

    "conferma" mi dice se un utente ha confermato tramite email la registrazione, 0 no, 1 si

    "regdate" è la data di registrazione, oltre all'informazione che si può volere per sapere quando un utente si è registrato, io la uso anche per controllare se un utente si è registrato, ma dopo tot tempo non ha confermato la registrazione, se è passato questo tot tempo lo elimino (vuol dire che ha deciso di non completare la registrazione, oppure era un bot che cercava di registrarsi automaticamente)

    "uid" è un user id di 32 caratteri che genero a random per ogni utente che si registra, questo codice lo mando all'utente in un'email appeso ad un link come parametro in modo che cliccando sul link arrivi sullo script di conferma il quale legge l'uid come parametro GET, fa una query sul db e vede se tale uid è presente, in caso affermativo modifica il campo "conferma" da 0 a 1 e l'utente è confermato.

    "permesso" questo lo uso per distinguere i vari livelli di utenti, superadmin, admin, mod, utente normale... a seconda delle esigenze dell'applicazione.

    Le password le salvo nel db codificate con md5 o sha1.

  5. #5
    ok ok, avevo intenzioni di crearla in questo modo la tabella utenti, ma per creare quel sistema di condivisione invece, come mi consigli?

  6. #6
    up

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    La tabella per i file mi pare possa andare.

  8. #8
    ok, adesso ho un ultimo muro suppongo, faccio un esempio subito pratico:
    se A vuole condividere con B il file testo.pdf avviene questo:
    faccio un esempio con id_utente_a che ha id = 3, id_utente_b che ha id = 4

    tab_file
    id_file = 1, id_utente_a = 3, id_utente_b = 4,


    e questo va bene, ma se invece l'utente A volesse condividere lo stesso file con 4 utenti, come faccio? eseguo una query per ogni file, ho in un campo inserisco tutti gli degli utenti?
    ES 1:
    id_file = 1, id_utente_a = 3, id_utente_b = 4,
    id_file = 1, id_utente_a = 3, id_utente_b = 5,
    id_file = 1, id_utente_a = 3, id_utente_b = 6,
    id_file = 1, id_utente_a = 3, id_utente_b = 7,

    ES 2:
    id_file = 1, id_utente_a = 3, id_utente_b = 4,5,6,7,

    Qual'è il modo più corretto per svolgere questa operazione? e io mi domando ma come può essere che per ogni file da condividere devo creare una query? Ad es ci sono milioni di file che un utente medio condivide su facebook, facebook cosa fa? utilizza il primo del mio esempio o il secondo?

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    I database sono fatti per contenere tantissimi record, quindi non c'è problema ad avere una entry per ogni file.
    Io opterei per la prima soluzione.
    E' più facile fare
    SELECT * FROM tab_file WHERE id_file=1 AND id_utente_a=3 AND id_utente_b=4;
    per vedere se l'utente B ha accesso al file 1 dell'utente A, piuttosto che controllare se nel campo id_utente_b tra i tanti id c'è quello dell'utente che ti interessa.

    Per quanto riguarda Facebook, quando tu condividi un contenuto non lo condividi con una persona, semplicemente viene messo sulla tua bacheca e chiunque ha accesso ad essa può vedere il contenuto, non è che nel db viene inserita una entry per ogni tuo amico.

  10. #10
    Si ma su Facebook allora scusa pure loro fanno cosi?cioè per ogni file che io metto e condivido lui prende solo l'id del file e lo mette in bacheca ma una query per ogni utente la fa xò o no?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.